Skip to content

Commit cc5b877

Browse files
authored
fix(parser): Wrap column constraints in _parse_column_def() (#4078)
1 parent d89757e commit cc5b877

File tree

3 files changed

+21
-8
lines changed

3 files changed

+21
-8
lines changed

sqlglot/parser.py

+9-8
Original file line numberDiff line numberDiff line change
@@ -5359,18 +5359,19 @@ def _parse_column_def(self, this: t.Optional[exp.Expression]) -> t.Optional[exp.
53595359
("ALIAS", "MATERIALIZED")
53605360
):
53615361
persisted = self._prev.text.upper() == "MATERIALIZED"
5362-
constraints.append(
5363-
self.expression(
5364-
exp.ComputedColumnConstraint,
5365-
this=self._parse_assignment(),
5366-
persisted=persisted or self._match_text_seq("PERSISTED"),
5367-
not_null=self._match_pair(TokenType.NOT, TokenType.NULL),
5368-
)
5362+
constraint_kind = exp.ComputedColumnConstraint(
5363+
this=self._parse_assignment(),
5364+
persisted=persisted or self._match_text_seq("PERSISTED"),
5365+
not_null=self._match_pair(TokenType.NOT, TokenType.NULL),
53695366
)
5367+
constraints.append(self.expression(exp.ColumnConstraint, kind=constraint_kind))
53705368
elif kind and self._match_pair(TokenType.ALIAS, TokenType.L_PAREN, advance=False):
53715369
self._match(TokenType.ALIAS)
53725370
constraints.append(
5373-
self.expression(exp.TransformColumnConstraint, this=self._parse_field())
5371+
self.expression(
5372+
exp.ColumnConstraint,
5373+
kind=exp.TransformColumnConstraint(this=self._parse_field()),
5374+
)
53745375
)
53755376

53765377
while True:

tests/dialects/test_clickhouse.py

+6
Original file line numberDiff line numberDiff line change
@@ -1016,6 +1016,12 @@ def test_ddl(self):
10161016
pretty=True,
10171017
)
10181018

1019+
self.assertIsNotNone(
1020+
self.validate_identity("CREATE TABLE t1 (a String MATERIALIZED func())").find(
1021+
exp.ColumnConstraint
1022+
)
1023+
)
1024+
10191025
def test_agg_functions(self):
10201026
def extract_agg_func(query):
10211027
return parse_one(query, read="clickhouse").selects[0].this

tests/dialects/test_snowflake.py

+6
Original file line numberDiff line numberDiff line change
@@ -1423,6 +1423,12 @@ def test_ddl(self):
14231423
},
14241424
)
14251425

1426+
self.assertIsNotNone(
1427+
self.validate_identity("CREATE TABLE foo (bar INT AS (foo))").find(
1428+
exp.TransformColumnConstraint
1429+
)
1430+
)
1431+
14261432
def test_user_defined_functions(self):
14271433
self.validate_all(
14281434
"CREATE FUNCTION a(x DATE, y BIGINT) RETURNS ARRAY LANGUAGE JAVASCRIPT AS $$ SELECT 1 $$",

0 commit comments

Comments
 (0)