Skip to content

Commit ed8757f

Browse files
authored
Align Snowflake dialect to new test of reserved keywords (#1924)
1 parent d2466af commit ed8757f

File tree

2 files changed

+31
-4
lines changed

2 files changed

+31
-4
lines changed

src/dialect/snowflake.rs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -301,9 +301,8 @@ impl Dialect for SnowflakeDialect {
301301
true
302302
}
303303

304-
fn is_select_item_alias(&self, explicit: bool, kw: &Keyword, parser: &mut Parser) -> bool {
305-
explicit
306-
|| match kw {
304+
fn is_column_alias(&self, kw: &Keyword, parser: &mut Parser) -> bool {
305+
match kw {
307306
// The following keywords can be considered an alias as long as
308307
// they are not followed by other tokens that may change their meaning
309308
// e.g. `SELECT * EXCEPT (col1) FROM tbl`

tests/sqlparser_snowflake.rs

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3415,10 +3415,38 @@ fn parse_ls_and_rm() {
34153415
.unwrap();
34163416
}
34173417

3418+
#[test]
3419+
fn test_sql_keywords_as_select_item_ident() {
3420+
// Some keywords that should be parsed as an alias
3421+
let unreserved_kws = vec!["CLUSTER", "FETCH", "RETURNING", "LIMIT", "EXCEPT", "SORT"];
3422+
for kw in unreserved_kws {
3423+
snowflake().verified_stmt(&format!("SELECT 1, {kw}"));
3424+
}
3425+
3426+
// Some keywords that should not be parsed as an alias
3427+
let reserved_kws = vec![
3428+
"FROM",
3429+
"GROUP",
3430+
"HAVING",
3431+
"INTERSECT",
3432+
"INTO",
3433+
"ORDER",
3434+
"SELECT",
3435+
"UNION",
3436+
"WHERE",
3437+
"WITH",
3438+
];
3439+
for kw in reserved_kws {
3440+
assert!(snowflake()
3441+
.parse_sql_statements(&format!("SELECT 1, {kw}"))
3442+
.is_err());
3443+
}
3444+
}
3445+
34183446
#[test]
34193447
fn test_sql_keywords_as_select_item_aliases() {
34203448
// Some keywords that should be parsed as an alias
3421-
let unreserved_kws = vec!["CLUSTER", "FETCH", "RETURNING", "LIMIT", "EXCEPT"];
3449+
let unreserved_kws = vec!["CLUSTER", "FETCH", "RETURNING", "LIMIT", "EXCEPT", "SORT"];
34223450
for kw in unreserved_kws {
34233451
snowflake()
34243452
.one_statement_parses_to(&format!("SELECT 1 {kw}"), &format!("SELECT 1 AS {kw}"));

0 commit comments

Comments
 (0)