From 42a77c2042a492a31d79200721a9421eed04969b Mon Sep 17 00:00:00 2001 From: Ben King <9087625+benfdking@users.noreply.github.com> Date: Tue, 15 Sep 2026 12:30:28 +0200 Subject: [PATCH] feat: support Snowflake UNION BY NAME (6994) Ported from SQLFluff 59bf84573e526900b6d891c0bc05762e7e0ab3be https://github.com/sqlfluff/sqlfluff/pull/6994 --- .sqlfluff-sha | 2 +- crates/lib-dialects/src/snowflake.rs | 6 +++ .../snowflake/sqlfluff/select_union.sql | 11 ++++ .../snowflake/sqlfluff/select_union.yml | 52 +++++++++++++++++++ 4 files changed, 70 insertions(+), 1 deletion(-) diff --git a/.sqlfluff-sha b/.sqlfluff-sha index 3b23c90eda..9c8b8a822e 100644 --- a/.sqlfluff-sha +++ b/.sqlfluff-sha @@ -1 +1 @@ -02cda72fb6c5613079e0a0a0cd1146ba26e47167 +59bf84573e526900b6d891c0bc05762e7e0ab3be diff --git a/crates/lib-dialects/src/snowflake.rs b/crates/lib-dialects/src/snowflake.rs index c29970bd7f..dc8f33c6da 100644 --- a/crates/lib-dialects/src/snowflake.rs +++ b/crates/lib-dialects/src/snowflake.rs @@ -11846,6 +11846,12 @@ pub fn dialect(config: Option<&Value>) -> Dialect { ]) .config(|this| this.optional()) .to_matchable(), + Sequence::new(vec![ + Ref::keyword("BY").to_matchable(), + Ref::keyword("NAME").to_matchable(), + ]) + .config(|this| this.optional()) + .to_matchable(), ]) .to_matchable(), Sequence::new(vec![ diff --git a/crates/lib-dialects/test/fixtures/dialects/snowflake/sqlfluff/select_union.sql b/crates/lib-dialects/test/fixtures/dialects/snowflake/sqlfluff/select_union.sql index 1c0cc010af..6ed09f90ba 100644 --- a/crates/lib-dialects/test/fixtures/dialects/snowflake/sqlfluff/select_union.sql +++ b/crates/lib-dialects/test/fixtures/dialects/snowflake/sqlfluff/select_union.sql @@ -2,3 +2,14 @@ SELECT 1 UNION SELECT 2 ORDER BY 1 +; + +SELECT 1 AS foo +UNION ALL BY NAME +SELECT 2 AS foo +; + +SELECT 1 AS foo +UNION BY NAME +SELECT 2 AS foo +; diff --git a/crates/lib-dialects/test/fixtures/dialects/snowflake/sqlfluff/select_union.yml b/crates/lib-dialects/test/fixtures/dialects/snowflake/sqlfluff/select_union.yml index f11b887951..152ecf016e 100644 --- a/crates/lib-dialects/test/fixtures/dialects/snowflake/sqlfluff/select_union.yml +++ b/crates/lib-dialects/test/fixtures/dialects/snowflake/sqlfluff/select_union.yml @@ -17,3 +17,55 @@ file: - keyword: ORDER - keyword: BY - numeric_literal: '1' +- statement_terminator: ; +- statement: + - set_expression: + - select_statement: + - select_clause: + - keyword: SELECT + - select_clause_element: + - numeric_literal: '1' + - alias_expression: + - alias_operator: + - keyword: AS + - naked_identifier: foo + - set_operator: + - keyword: UNION + - keyword: ALL + - keyword: BY + - keyword: NAME + - select_statement: + - select_clause: + - keyword: SELECT + - select_clause_element: + - numeric_literal: '2' + - alias_expression: + - alias_operator: + - keyword: AS + - naked_identifier: foo +- statement_terminator: ; +- statement: + - set_expression: + - select_statement: + - select_clause: + - keyword: SELECT + - select_clause_element: + - numeric_literal: '1' + - alias_expression: + - alias_operator: + - keyword: AS + - naked_identifier: foo + - set_operator: + - keyword: UNION + - keyword: BY + - keyword: NAME + - select_statement: + - select_clause: + - keyword: SELECT + - select_clause_element: + - numeric_literal: '2' + - alias_expression: + - alias_operator: + - keyword: AS + - naked_identifier: foo +- statement_terminator: ;