From 2798b65b42c529bd089742a2028e94d59d82e493 Mon Sep 17 00:00:00 2001 From: Andrew Lamb Date: Mon, 23 Oct 2023 18:07:00 -0400 Subject: [PATCH] snowflake/generic: `position` can be the name of a column (#1022) Co-authored-by: Lukasz Stefaniak --- src/parser/mod.rs | 4 +++- tests/sqlparser_snowflake.rs | 6 ++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/parser/mod.rs b/src/parser/mod.rs index 3bf5228c..e79f31ba 100644 --- a/src/parser/mod.rs +++ b/src/parser/mod.rs @@ -794,7 +794,9 @@ impl<'a> Parser<'a> { Keyword::EXTRACT => self.parse_extract_expr(), Keyword::CEIL => self.parse_ceil_floor_expr(true), Keyword::FLOOR => self.parse_ceil_floor_expr(false), - Keyword::POSITION => self.parse_position_expr(), + Keyword::POSITION if self.peek_token().token == Token::LParen => { + self.parse_position_expr() + } Keyword::SUBSTRING => self.parse_substring_expr(), Keyword::OVERLAY => self.parse_overlay_expr(), Keyword::TRIM => self.parse_trim_expr(), diff --git a/tests/sqlparser_snowflake.rs b/tests/sqlparser_snowflake.rs index 3319af7b..7e6f1813 100644 --- a/tests/sqlparser_snowflake.rs +++ b/tests/sqlparser_snowflake.rs @@ -1067,6 +1067,12 @@ fn test_snowflake_trim() { ); } +#[test] +fn parse_position_not_function_columns() { + snowflake_and_generic() + .verified_stmt("SELECT position FROM tbl1 WHERE position NOT IN ('first', 'last')"); +} + #[test] fn parse_subquery_function_argument() { // Snowflake allows passing an unparenthesized subquery as the single