From d86c5ebbcc9507f07f159c0cfe555beb18329866 Mon Sep 17 00:00:00 2001 From: mlorek Date: Thu, 12 Sep 2024 14:47:16 +0100 Subject: [PATCH] support for select stmt in parentheses --- sql/snowflake/SnowflakeParser.g4 | 14 ++++++++++---- sql/snowflake/examples/select.sql | 21 +++++++++++++++++++++ 2 files changed, 31 insertions(+), 4 deletions(-) diff --git a/sql/snowflake/SnowflakeParser.g4 b/sql/snowflake/SnowflakeParser.g4 index b205abb847..cc88bb05f3 100644 --- a/sql/snowflake/SnowflakeParser.g4 +++ b/sql/snowflake/SnowflakeParser.g4 @@ -4052,7 +4052,7 @@ switch_section // select query_statement - : with_expression? select_statement set_operators* + : with_expression? select_statement_in_parentheses set_operators* ; with_expression @@ -4060,7 +4060,7 @@ with_expression ; common_table_expression - : id_ ('(' columns = column_list ')')? AS '(' select_statement set_operators* ')' + : id_ (LR_BRACKET columns = column_list RR_BRACKET)? AS select_statement_in_parentheses ; select_statement @@ -4069,8 +4069,14 @@ select_statement ; set_operators - : (UNION ALL? | EXCEPT | MINUS_ | INTERSECT) select_statement //EXCEPT and MINUS have same SQL meaning - | LR_BRACKET select_statement RR_BRACKET + : (UNION ALL? | EXCEPT | MINUS_ | INTERSECT) select_statement_in_parentheses //EXCEPT and MINUS have same SQL meaning + | select_statement_in_parentheses + ; + +select_statement_in_parentheses + : LR_BRACKET select_statement_in_parentheses RR_BRACKET + | select_statement_in_parentheses set_operators + | select_statement ; select_optional_clauses diff --git a/sql/snowflake/examples/select.sql b/sql/snowflake/examples/select.sql index c3c943426e..d6fa9b2593 100644 --- a/sql/snowflake/examples/select.sql +++ b/sql/snowflake/examples/select.sql @@ -89,3 +89,24 @@ SELECT EXPR, SCALE, ROUNDING_MODE, SEQUENCE FROM t; select 'a', 'b',; with t as (select 'a', 'b',) select * from t; + +with a as(( + (( + select 10 as c + )) + union + (( + select 11 as d + )) +)) + , b as ((( + ((select 2 as e)) +))) +select * +from a +union +((select 1 as c)); + +(((select 10 as c))) +union +((select 11 as d));