Skip to content

Commit 90abae3

Browse files
fix: Swap parser override order for macro IF under T-SQL (Issue #5823)
1 parent d15203b commit 90abae3

2 files changed

Lines changed: 10 additions & 1 deletion

File tree

sqlmesh/core/dialect.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1123,8 +1123,8 @@ def extend_sqlglot() -> None:
11231123
_override(Parser, _parse_value)
11241124
_override(Parser, _parse_lambda)
11251125
_override(Parser, _parse_types)
1126-
_override(TSQL.Parser, Parser._parse_if)
11271126
_override(Parser, _parse_if)
1127+
_override(TSQL.Parser, Parser._parse_if)
11281128
_override(Parser, _parse_id_var)
11291129
_override(Parser, _warn_unsupported)
11301130
_override(Snowflake.Parser, _parse_table_parts)

tests/core/test_dialect.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -707,6 +707,15 @@ def test_conditional_statement():
707707
q = parse_one("@IF(cond, VACUUM ANALYZE);", read="postgres")
708708
assert q.sql(dialect="postgres") == "@IF(cond, VACUUM ANALYZE)"
709709

710+
q = parse_one("@IF(1 = 1, ALTER TABLE x ADD y INT);", read="tsql")
711+
assert q.sql(dialect="tsql") == "@IF(1 = 1, ALTER TABLE x ADD y INTEGER)"
712+
713+
q = parse_one("@IF(cond, PRINT 'hello');", read="tsql")
714+
assert q.sql(dialect="tsql") == "@IF(cond, PRINT hello)"
715+
716+
q = parse_one("@IF(@runtime_stage = 'evaluating', SELECT 1);", read="tsql")
717+
assert q.sql(dialect="tsql") == "@IF(@runtime_stage = 'evaluating', SELECT 1)"
718+
710719

711720
def test_model_name_cannot_be_string():
712721
with pytest.raises(ParseError) as parse_error:

0 commit comments

Comments
 (0)