Skip to content

Commit cbcd970

Browse files
yoavcloudayman-sigma
authored andcommitted
Align Snowflake dialect to new test of reserved keywords (apache#1924)
1 parent 310553f commit cbcd970

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
@@ -3434,10 +3434,38 @@ fn parse_ls_and_rm() {
34343434
.unwrap();
34353435
}
34363436

3437+
#[test]
3438+
fn test_sql_keywords_as_select_item_ident() {
3439+
// Some keywords that should be parsed as an alias
3440+
let unreserved_kws = vec!["CLUSTER", "FETCH", "RETURNING", "LIMIT", "EXCEPT", "SORT"];
3441+
for kw in unreserved_kws {
3442+
snowflake().verified_stmt(&format!("SELECT 1, {kw}"));
3443+
}
3444+
3445+
// Some keywords that should not be parsed as an alias
3446+
let reserved_kws = vec![
3447+
"FROM",
3448+
"GROUP",
3449+
"HAVING",
3450+
"INTERSECT",
3451+
"INTO",
3452+
"ORDER",
3453+
"SELECT",
3454+
"UNION",
3455+
"WHERE",
3456+
"WITH",
3457+
];
3458+
for kw in reserved_kws {
3459+
assert!(snowflake()
3460+
.parse_sql_statements(&format!("SELECT 1, {kw}"))
3461+
.is_err());
3462+
}
3463+
}
3464+
34373465
#[test]
34383466
fn test_sql_keywords_as_select_item_aliases() {
34393467
// Some keywords that should be parsed as an alias
3440-
let unreserved_kws = vec!["CLUSTER", "FETCH", "RETURNING", "LIMIT", "EXCEPT"];
3468+
let unreserved_kws = vec!["CLUSTER", "FETCH", "RETURNING", "LIMIT", "EXCEPT", "SORT"];
34413469
for kw in unreserved_kws {
34423470
snowflake()
34433471
.one_statement_parses_to(&format!("SELECT 1 {kw}"), &format!("SELECT 1 AS {kw}"));

0 commit comments

Comments
 (0)