Skip to content
This repository was archived by the owner on Dec 25, 2019. It is now read-only.

Commit 935e52c

Browse files
committed
Support SHOW CREATE VIEW
1 parent 73371ca commit 935e52c

4 files changed

Lines changed: 37 additions & 0 deletions

File tree

src/ast/mod.rs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -549,6 +549,10 @@ pub enum Statement {
549549
table_name: ObjectName,
550550
filter: Option<ShowStatementFilter>,
551551
},
552+
/// `SHOW CREATE VIEW <view>`
553+
ShowCreateView {
554+
view_name: ObjectName,
555+
},
552556
/// `{ BEGIN [ TRANSACTION | WORK ] | START TRANSACTION } ...`
553557
StartTransaction { modes: Vec<TransactionMode> },
554558
/// `SET TRANSACTION ...`
@@ -815,6 +819,12 @@ impl fmt::Display for Statement {
815819
}
816820
Ok(())
817821
}
822+
Statement::ShowCreateView {
823+
view_name,
824+
} => {
825+
f.write_str("SHOW CREATE VIEW ")?;
826+
write!(f, "{}", view_name)
827+
}
818828
Statement::StartTransaction { modes } => {
819829
write!(f, "START TRANSACTION")?;
820830
if !modes.is_empty() {

src/ast/visit_macro.rs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -506,6 +506,13 @@ macro_rules! make_visitor {
506506
visit_show_columns(self, extended, full, table_name, filter)
507507
}
508508

509+
fn visit_show_create_view(
510+
&mut self,
511+
view_name: &'ast $($mut)* ObjectName,
512+
) {
513+
visit_show_create_view(self, view_name)
514+
}
515+
509516
fn visit_show_statement_filter(&mut self, filter: &'ast $($mut)* ShowStatementFilter) {
510517
visit_show_statement_filter(self, filter)
511518
}
@@ -632,6 +639,7 @@ macro_rules! make_visitor {
632639
table_name,
633640
filter,
634641
} => visitor.visit_show_columns(*extended, *full, table_name, filter.as_auto_ref()),
642+
Statement::ShowCreateView { view_name } => visitor.visit_show_create_view(view_name),
635643
Statement::StartTransaction { modes } => visitor.visit_start_transaction(modes),
636644
Statement::SetTransaction { modes } => visitor.visit_set_transaction(modes),
637645
Statement::Commit { chain } => visitor.visit_commit(*chain),
@@ -1496,6 +1504,13 @@ macro_rules! make_visitor {
14961504
}
14971505
}
14981506

1507+
pub fn visit_show_create_view<'ast, V: $name<'ast> + ?Sized>(
1508+
visitor: &mut V,
1509+
view_name: &'ast $($mut)* ObjectName,
1510+
) {
1511+
visitor.visit_object_name(view_name);
1512+
}
1513+
14991514
pub fn visit_show_statement_filter<'ast, V: $name<'ast> + ?Sized>(
15001515
visitor: &mut V,
15011516
filter: &'ast $($mut)* ShowStatementFilter,

src/parser.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1910,6 +1910,10 @@ impl Parser {
19101910
),
19111911
},
19121912
})
1913+
} else if self.parse_keywords(vec!["CREATE", "VIEW"]) {
1914+
Ok(Statement::ShowCreateView {
1915+
view_name: self.parse_object_name()?,
1916+
})
19131917
} else {
19141918
Ok(Statement::ShowVariable {
19151919
variable: self.parse_identifier()?,

tests/sqlparser_common.rs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1868,6 +1868,14 @@ fn parse_show_objects() {
18681868
}
18691869
}
18701870

1871+
#[test]
1872+
fn parse_show_create_view() {
1873+
assert_eq!(
1874+
verified_stmt("SHOW CREATE VIEW foo"),
1875+
Statement::ShowCreateView { view_name: ObjectName(vec!["foo".into()]) }
1876+
)
1877+
}
1878+
18711879
#[test]
18721880
fn parse_simple_case_expr() {
18731881
// ANSI calls a CASE expression with an operand "<simple case>"

0 commit comments

Comments
 (0)