Add support for Snowflake SHOW DATABASES/SCHEMAS/TABLES/VIEWS/COLUMNS statements (#1501)

This commit is contained in:
Yoav Cohen 2024-11-13 13:55:26 +02:00 committed by GitHub
parent 632ba4cf8e
commit 76322baf2f
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
8 changed files with 591 additions and 159 deletions

View file

@ -11395,23 +11395,43 @@ fn test_try_convert() {
#[test]
fn test_show_dbs_schemas_tables_views() {
verified_stmt("SHOW DATABASES");
verified_stmt("SHOW DATABASES LIKE '%abc'");
verified_stmt("SHOW SCHEMAS");
verified_stmt("SHOW SCHEMAS LIKE '%abc'");
verified_stmt("SHOW TABLES");
verified_stmt("SHOW TABLES IN db1");
verified_stmt("SHOW TABLES IN db1 'abc'");
verified_stmt("SHOW VIEWS");
verified_stmt("SHOW VIEWS IN db1");
verified_stmt("SHOW VIEWS IN db1 'abc'");
verified_stmt("SHOW VIEWS FROM db1");
verified_stmt("SHOW VIEWS FROM db1 'abc'");
verified_stmt("SHOW MATERIALIZED VIEWS");
verified_stmt("SHOW MATERIALIZED VIEWS IN db1");
verified_stmt("SHOW MATERIALIZED VIEWS IN db1 'abc'");
verified_stmt("SHOW MATERIALIZED VIEWS FROM db1");
verified_stmt("SHOW MATERIALIZED VIEWS FROM db1 'abc'");
// These statements are parsed the same by all dialects
let stmts = vec![
"SHOW DATABASES",
"SHOW SCHEMAS",
"SHOW TABLES",
"SHOW VIEWS",
"SHOW TABLES IN db1",
"SHOW VIEWS FROM db1",
"SHOW MATERIALIZED VIEWS",
"SHOW MATERIALIZED VIEWS IN db1",
"SHOW MATERIALIZED VIEWS FROM db1",
];
for stmt in stmts {
verified_stmt(stmt);
}
// These statements are parsed the same by all dialects
// except for how the parser interprets the location of
// LIKE option (infix/suffix)
let stmts = vec!["SHOW DATABASES LIKE '%abc'", "SHOW SCHEMAS LIKE '%abc'"];
for stmt in stmts {
all_dialects_where(|d| d.supports_show_like_before_in()).verified_stmt(stmt);
all_dialects_where(|d| !d.supports_show_like_before_in()).verified_stmt(stmt);
}
// These statements are only parsed by dialects that
// support the LIKE option in the suffix
let stmts = vec![
"SHOW TABLES IN db1 'abc'",
"SHOW VIEWS IN db1 'abc'",
"SHOW VIEWS FROM db1 'abc'",
"SHOW MATERIALIZED VIEWS IN db1 'abc'",
"SHOW MATERIALIZED VIEWS FROM db1 'abc'",
];
for stmt in stmts {
all_dialects_where(|d| !d.supports_show_like_before_in()).verified_stmt(stmt);
}
}
#[test]