From 8ceb10dbc27be0219d99ccb90c2fe00b4d1964ae Mon Sep 17 00:00:00 2001 From: Joey Hain Date: Mon, 6 May 2024 21:16:46 -0700 Subject: [PATCH 1/2] support null treatment inside arg list on snowflake --- src/dialect/snowflake.rs | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/dialect/snowflake.rs b/src/dialect/snowflake.rs index 3ec84f602..4b03ff141 100644 --- a/src/dialect/snowflake.rs +++ b/src/dialect/snowflake.rs @@ -71,6 +71,12 @@ impl Dialect for SnowflakeDialect { true } + // Snowflake doesn't document this but `FIRST_VALUE(arg, { IGNORE | RESPECT } NULLS)` + // works (i.e. inside the argument list instead of after). + fn supports_window_function_null_treatment_arg(&self) -> bool { + true + } + fn parse_statement(&self, parser: &mut Parser) -> Option> { if parser.parse_keyword(Keyword::CREATE) { // possibly CREATE STAGE From 7d07e580685a3e150e863ad6210b1a04f1130ddd Mon Sep 17 00:00:00 2001 From: Joey Hain Date: Tue, 14 May 2024 21:43:10 -0700 Subject: [PATCH 2/2] add test --- tests/sqlparser_snowflake.rs | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/tests/sqlparser_snowflake.rs b/tests/sqlparser_snowflake.rs index 25eaa2f71..30f2cc601 100644 --- a/tests/sqlparser_snowflake.rs +++ b/tests/sqlparser_snowflake.rs @@ -1576,3 +1576,12 @@ fn test_select_wildcard_with_ilike_replace() { "sql parser error: Expected end of statement, found: EXCLUDE" ); } + +#[test] +fn first_value_ignore_nulls() { + snowflake().verified_only_select(concat!( + "SELECT FIRST_VALUE(column2 IGNORE NULLS) ", + "OVER (PARTITION BY column1 ORDER BY column2) ", + "FROM some_table" + )); +}