From b4473220f0f50a9ce2463b3a98a77bf2fdd897af Mon Sep 17 00:00:00 2001 From: Jo <46752250+georgesittas@users.noreply.github.com> Date: Wed, 15 Jan 2025 01:53:49 +0200 Subject: [PATCH] Chore: parser accepts ctes without as keyword again, except for clickhouse (#4612) --- sqlglot/dialects/clickhouse.py | 1 + sqlglot/dialects/spark.py | 2 -- sqlglot/parser.py | 2 +- tests/dialects/test_snowflake.py | 4 ++++ 4 files changed, 6 insertions(+), 3 deletions(-) diff --git a/sqlglot/dialects/clickhouse.py b/sqlglot/dialects/clickhouse.py index 2b8b1e882a..86c0b6b708 100644 --- a/sqlglot/dialects/clickhouse.py +++ b/sqlglot/dialects/clickhouse.py @@ -245,6 +245,7 @@ class Parser(parser.Parser): # * select x from t1 union all (select x from t2 limit 1); MODIFIERS_ATTACHED_TO_SET_OP = False INTERVAL_SPANS = False + OPTIONAL_ALIAS_TOKEN_CTE = False FUNCTIONS = { **parser.Parser.FUNCTIONS, diff --git a/sqlglot/dialects/spark.py b/sqlglot/dialects/spark.py index c84632f28f..08d99e4e51 100644 --- a/sqlglot/dialects/spark.py +++ b/sqlglot/dialects/spark.py @@ -102,8 +102,6 @@ class Tokenizer(Spark2.Tokenizer): ] class Parser(Spark2.Parser): - OPTIONAL_ALIAS_TOKEN_CTE = True - FUNCTIONS = { **Spark2.Parser.FUNCTIONS, "ANY_VALUE": _build_with_ignore_nulls(exp.AnyValue), diff --git a/sqlglot/parser.py b/sqlglot/parser.py index 9e0d50069a..7f310b3b58 100644 --- a/sqlglot/parser.py +++ b/sqlglot/parser.py @@ -1413,7 +1413,7 @@ class Parser(metaclass=_Parser): WRAPPED_TRANSFORM_COLUMN_CONSTRAINT = True # Whether the 'AS' keyword is optional in the CTE definition syntax - OPTIONAL_ALIAS_TOKEN_CTE = False + OPTIONAL_ALIAS_TOKEN_CTE = True __slots__ = ( "error_level", diff --git a/tests/dialects/test_snowflake.py b/tests/dialects/test_snowflake.py index 9539071cf0..5c0cc010ea 100644 --- a/tests/dialects/test_snowflake.py +++ b/tests/dialects/test_snowflake.py @@ -105,6 +105,10 @@ def test_snowflake(self): self.validate_identity( "SELECT * FROM DATA AS DATA_L ASOF JOIN DATA AS DATA_R MATCH_CONDITION (DATA_L.VAL > DATA_R.VAL) ON DATA_L.ID = DATA_R.ID" ) + self.validate_identity( + "WITH t (SELECT 1 AS c) SELECT c FROM t", + "WITH t AS (SELECT 1 AS c) SELECT c FROM t", + ) self.validate_identity( "GET_PATH(json_data, '$id')", """GET_PATH(json_data, '["$id"]')""",