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

Commit d8ae0f0

Browse files
authored
Implement SHOW CREATE SOURCE <source> (#22)
1 parent 27c4248 commit d8ae0f0

File tree

4 files changed

+35
-0
lines changed

4 files changed

+35
-0
lines changed

src/ast/mod.rs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -635,6 +635,8 @@ pub enum Statement {
635635
},
636636
/// `SHOW CREATE VIEW <view>`
637637
ShowCreateView { view_name: ObjectName },
638+
/// `SHOW CREATE SOURCE <source>`
639+
ShowCreateSource { source_name: ObjectName },
638640
/// `{ BEGIN [ TRANSACTION | WORK ] | START TRANSACTION } ...`
639641
StartTransaction { modes: Vec<TransactionMode> },
640642
/// `SET TRANSACTION ...`
@@ -927,6 +929,10 @@ impl fmt::Display for Statement {
927929
f.write_str("SHOW CREATE VIEW ")?;
928930
write!(f, "{}", view_name)
929931
}
932+
Statement::ShowCreateSource { source_name } => {
933+
f.write_str("SHOW CREATE SOURCE ")?;
934+
write!(f, "{}", source_name)
935+
}
930936
Statement::StartTransaction { modes } => {
931937
write!(f, "START TRANSACTION")?;
932938
if !modes.is_empty() {

src/ast/visit_macro.rs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -526,6 +526,13 @@ macro_rules! make_visitor {
526526
visit_show_create_view(self, view_name)
527527
}
528528

529+
fn visit_show_create_source(
530+
&mut self,
531+
source_name: &'ast $($mut)* ObjectName,
532+
) {
533+
visit_show_create_source(self, source_name)
534+
}
535+
529536
fn visit_show_statement_filter(&mut self, filter: &'ast $($mut)* ShowStatementFilter) {
530537
visit_show_statement_filter(self, filter)
531538
}
@@ -666,6 +673,7 @@ macro_rules! make_visitor {
666673
filter,
667674
} => visitor.visit_show_columns(*extended, *full, table_name, filter.as_auto_ref()),
668675
Statement::ShowCreateView { view_name } => visitor.visit_show_create_view(view_name),
676+
Statement::ShowCreateSource { source_name } => visitor.visit_show_create_source(source_name),
669677
Statement::StartTransaction { modes } => visitor.visit_start_transaction(modes),
670678
Statement::SetTransaction { modes } => visitor.visit_set_transaction(modes),
671679
Statement::Commit { chain } => visitor.visit_commit(*chain),
@@ -1571,6 +1579,13 @@ macro_rules! make_visitor {
15711579
visitor.visit_object_name(view_name);
15721580
}
15731581

1582+
pub fn visit_show_create_source<'ast, V: $name<'ast> + ?Sized>(
1583+
visitor: &mut V,
1584+
source_name: &'ast $($mut)* ObjectName
1585+
) {
1586+
visitor.visit_object_name(source_name);
1587+
}
1588+
15741589
pub fn visit_show_statement_filter<'ast, V: $name<'ast> + ?Sized>(
15751590
visitor: &mut V,
15761591
filter: &'ast $($mut)* ShowStatementFilter,

src/parser.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1946,6 +1946,10 @@ impl Parser {
19461946
Ok(Statement::ShowCreateView {
19471947
view_name: self.parse_object_name()?,
19481948
})
1949+
} else if self.parse_keywords(vec!["CREATE", "SOURCE"]) {
1950+
Ok(Statement::ShowCreateSource {
1951+
source_name: self.parse_object_name()?,
1952+
})
19491953
} else {
19501954
Ok(Statement::ShowVariable {
19511955
variable: self.parse_identifier()?,

tests/sqlparser_common.rs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1945,6 +1945,16 @@ fn parse_show_create_view() {
19451945
)
19461946
}
19471947

1948+
#[test]
1949+
fn parse_show_create_source() {
1950+
assert_eq!(
1951+
verified_stmt("SHOW CREATE SOURCE foo"),
1952+
Statement::ShowCreateSource {
1953+
source_name: ObjectName(vec!["foo".into()])
1954+
}
1955+
)
1956+
}
1957+
19481958
#[test]
19491959
fn parse_simple_case_expr() {
19501960
// ANSI calls a CASE expression with an operand "<simple case>"

0 commit comments

Comments
 (0)