mirror of
https://github.com/apache/datafusion-sqlparser-rs.git
synced 2025-08-22 15:04:04 +00:00
Add support for Snowflake SHOW DATABASES/SCHEMAS/TABLES/VIEWS/COLUMNS statements (#1501)
This commit is contained in:
parent
632ba4cf8e
commit
76322baf2f
8 changed files with 591 additions and 159 deletions
|
@ -223,14 +223,22 @@ fn parse_flush() {
|
|||
|
||||
#[test]
|
||||
fn parse_show_columns() {
|
||||
let table_name = ObjectName(vec![Ident::new("mytable")]);
|
||||
assert_eq!(
|
||||
mysql_and_generic().verified_stmt("SHOW COLUMNS FROM mytable"),
|
||||
Statement::ShowColumns {
|
||||
extended: false,
|
||||
full: false,
|
||||
table_name: table_name.clone(),
|
||||
filter: None,
|
||||
show_options: ShowStatementOptions {
|
||||
show_in: Some(ShowStatementIn {
|
||||
clause: ShowStatementInClause::FROM,
|
||||
parent_type: None,
|
||||
parent_name: Some(ObjectName(vec![Ident::new("mytable")])),
|
||||
}),
|
||||
filter_position: None,
|
||||
limit_from: None,
|
||||
limit: None,
|
||||
starts_with: None,
|
||||
}
|
||||
}
|
||||
);
|
||||
assert_eq!(
|
||||
|
@ -238,8 +246,17 @@ fn parse_show_columns() {
|
|||
Statement::ShowColumns {
|
||||
extended: false,
|
||||
full: false,
|
||||
table_name: ObjectName(vec![Ident::new("mydb"), Ident::new("mytable")]),
|
||||
filter: None,
|
||||
show_options: ShowStatementOptions {
|
||||
show_in: Some(ShowStatementIn {
|
||||
clause: ShowStatementInClause::FROM,
|
||||
parent_type: None,
|
||||
parent_name: Some(ObjectName(vec![Ident::new("mydb"), Ident::new("mytable")])),
|
||||
}),
|
||||
filter_position: None,
|
||||
limit_from: None,
|
||||
limit: None,
|
||||
starts_with: None,
|
||||
}
|
||||
}
|
||||
);
|
||||
assert_eq!(
|
||||
|
@ -247,8 +264,17 @@ fn parse_show_columns() {
|
|||
Statement::ShowColumns {
|
||||
extended: true,
|
||||
full: false,
|
||||
table_name: table_name.clone(),
|
||||
filter: None,
|
||||
show_options: ShowStatementOptions {
|
||||
show_in: Some(ShowStatementIn {
|
||||
clause: ShowStatementInClause::FROM,
|
||||
parent_type: None,
|
||||
parent_name: Some(ObjectName(vec![Ident::new("mytable")])),
|
||||
}),
|
||||
filter_position: None,
|
||||
limit_from: None,
|
||||
limit: None,
|
||||
starts_with: None,
|
||||
}
|
||||
}
|
||||
);
|
||||
assert_eq!(
|
||||
|
@ -256,8 +282,17 @@ fn parse_show_columns() {
|
|||
Statement::ShowColumns {
|
||||
extended: false,
|
||||
full: true,
|
||||
table_name: table_name.clone(),
|
||||
filter: None,
|
||||
show_options: ShowStatementOptions {
|
||||
show_in: Some(ShowStatementIn {
|
||||
clause: ShowStatementInClause::FROM,
|
||||
parent_type: None,
|
||||
parent_name: Some(ObjectName(vec![Ident::new("mytable")])),
|
||||
}),
|
||||
filter_position: None,
|
||||
limit_from: None,
|
||||
limit: None,
|
||||
starts_with: None,
|
||||
}
|
||||
}
|
||||
);
|
||||
assert_eq!(
|
||||
|
@ -265,8 +300,19 @@ fn parse_show_columns() {
|
|||
Statement::ShowColumns {
|
||||
extended: false,
|
||||
full: false,
|
||||
table_name: table_name.clone(),
|
||||
filter: Some(ShowStatementFilter::Like("pattern".into())),
|
||||
show_options: ShowStatementOptions {
|
||||
show_in: Some(ShowStatementIn {
|
||||
clause: ShowStatementInClause::FROM,
|
||||
parent_type: None,
|
||||
parent_name: Some(ObjectName(vec![Ident::new("mytable")])),
|
||||
}),
|
||||
filter_position: Some(ShowStatementFilterPosition::Suffix(
|
||||
ShowStatementFilter::Like("pattern".into())
|
||||
)),
|
||||
limit_from: None,
|
||||
limit: None,
|
||||
starts_with: None,
|
||||
}
|
||||
}
|
||||
);
|
||||
assert_eq!(
|
||||
|
@ -274,18 +320,27 @@ fn parse_show_columns() {
|
|||
Statement::ShowColumns {
|
||||
extended: false,
|
||||
full: false,
|
||||
table_name,
|
||||
filter: Some(ShowStatementFilter::Where(
|
||||
mysql_and_generic().verified_expr("1 = 2")
|
||||
)),
|
||||
show_options: ShowStatementOptions {
|
||||
show_in: Some(ShowStatementIn {
|
||||
clause: ShowStatementInClause::FROM,
|
||||
parent_type: None,
|
||||
parent_name: Some(ObjectName(vec![Ident::new("mytable")])),
|
||||
}),
|
||||
filter_position: Some(ShowStatementFilterPosition::Suffix(
|
||||
ShowStatementFilter::Where(mysql_and_generic().verified_expr("1 = 2"))
|
||||
)),
|
||||
limit_from: None,
|
||||
limit: None,
|
||||
starts_with: None,
|
||||
}
|
||||
}
|
||||
);
|
||||
mysql_and_generic()
|
||||
.one_statement_parses_to("SHOW FIELDS FROM mytable", "SHOW COLUMNS FROM mytable");
|
||||
mysql_and_generic()
|
||||
.one_statement_parses_to("SHOW COLUMNS IN mytable", "SHOW COLUMNS FROM mytable");
|
||||
.one_statement_parses_to("SHOW COLUMNS IN mytable", "SHOW COLUMNS IN mytable");
|
||||
mysql_and_generic()
|
||||
.one_statement_parses_to("SHOW FIELDS IN mytable", "SHOW COLUMNS FROM mytable");
|
||||
.one_statement_parses_to("SHOW FIELDS IN mytable", "SHOW COLUMNS IN mytable");
|
||||
mysql_and_generic().one_statement_parses_to(
|
||||
"SHOW COLUMNS FROM mytable FROM mydb",
|
||||
"SHOW COLUMNS FROM mydb.mytable",
|
||||
|
@ -327,63 +382,111 @@ fn parse_show_tables() {
|
|||
assert_eq!(
|
||||
mysql_and_generic().verified_stmt("SHOW TABLES"),
|
||||
Statement::ShowTables {
|
||||
terse: false,
|
||||
history: false,
|
||||
extended: false,
|
||||
full: false,
|
||||
clause: None,
|
||||
db_name: None,
|
||||
filter: None,
|
||||
external: false,
|
||||
show_options: ShowStatementOptions {
|
||||
starts_with: None,
|
||||
limit: None,
|
||||
limit_from: None,
|
||||
show_in: None,
|
||||
filter_position: None
|
||||
}
|
||||
}
|
||||
);
|
||||
assert_eq!(
|
||||
mysql_and_generic().verified_stmt("SHOW TABLES FROM mydb"),
|
||||
Statement::ShowTables {
|
||||
terse: false,
|
||||
history: false,
|
||||
extended: false,
|
||||
full: false,
|
||||
clause: Some(ShowClause::FROM),
|
||||
db_name: Some(Ident::new("mydb")),
|
||||
filter: None,
|
||||
external: false,
|
||||
show_options: ShowStatementOptions {
|
||||
starts_with: None,
|
||||
limit: None,
|
||||
limit_from: None,
|
||||
show_in: Some(ShowStatementIn {
|
||||
clause: ShowStatementInClause::FROM,
|
||||
parent_type: None,
|
||||
parent_name: Some(ObjectName(vec![Ident::new("mydb")])),
|
||||
}),
|
||||
filter_position: None
|
||||
}
|
||||
}
|
||||
);
|
||||
assert_eq!(
|
||||
mysql_and_generic().verified_stmt("SHOW EXTENDED TABLES"),
|
||||
Statement::ShowTables {
|
||||
terse: false,
|
||||
history: false,
|
||||
extended: true,
|
||||
full: false,
|
||||
clause: None,
|
||||
db_name: None,
|
||||
filter: None,
|
||||
external: false,
|
||||
show_options: ShowStatementOptions {
|
||||
starts_with: None,
|
||||
limit: None,
|
||||
limit_from: None,
|
||||
show_in: None,
|
||||
filter_position: None
|
||||
}
|
||||
}
|
||||
);
|
||||
assert_eq!(
|
||||
mysql_and_generic().verified_stmt("SHOW FULL TABLES"),
|
||||
Statement::ShowTables {
|
||||
terse: false,
|
||||
history: false,
|
||||
extended: false,
|
||||
full: true,
|
||||
clause: None,
|
||||
db_name: None,
|
||||
filter: None,
|
||||
external: false,
|
||||
show_options: ShowStatementOptions {
|
||||
starts_with: None,
|
||||
limit: None,
|
||||
limit_from: None,
|
||||
show_in: None,
|
||||
filter_position: None
|
||||
}
|
||||
}
|
||||
);
|
||||
assert_eq!(
|
||||
mysql_and_generic().verified_stmt("SHOW TABLES LIKE 'pattern'"),
|
||||
Statement::ShowTables {
|
||||
terse: false,
|
||||
history: false,
|
||||
extended: false,
|
||||
full: false,
|
||||
clause: None,
|
||||
db_name: None,
|
||||
filter: Some(ShowStatementFilter::Like("pattern".into())),
|
||||
external: false,
|
||||
show_options: ShowStatementOptions {
|
||||
starts_with: None,
|
||||
limit: None,
|
||||
limit_from: None,
|
||||
show_in: None,
|
||||
filter_position: Some(ShowStatementFilterPosition::Suffix(
|
||||
ShowStatementFilter::Like("pattern".into())
|
||||
))
|
||||
}
|
||||
}
|
||||
);
|
||||
assert_eq!(
|
||||
mysql_and_generic().verified_stmt("SHOW TABLES WHERE 1 = 2"),
|
||||
Statement::ShowTables {
|
||||
terse: false,
|
||||
history: false,
|
||||
extended: false,
|
||||
full: false,
|
||||
clause: None,
|
||||
db_name: None,
|
||||
filter: Some(ShowStatementFilter::Where(
|
||||
mysql_and_generic().verified_expr("1 = 2")
|
||||
)),
|
||||
external: false,
|
||||
show_options: ShowStatementOptions {
|
||||
starts_with: None,
|
||||
limit: None,
|
||||
limit_from: None,
|
||||
show_in: None,
|
||||
filter_position: Some(ShowStatementFilterPosition::Suffix(
|
||||
ShowStatementFilter::Where(mysql_and_generic().verified_expr("1 = 2"))
|
||||
))
|
||||
}
|
||||
}
|
||||
);
|
||||
mysql_and_generic().verified_stmt("SHOW TABLES IN mydb");
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue