From 90abae33513f41825b92cfc58788882d052d52bc Mon Sep 17 00:00:00 2001 From: Jagan Nalla Date: Wed, 3 Jun 2026 22:04:50 -0400 Subject: [PATCH] fix: Swap parser override order for macro IF under T-SQL (Issue #5823) --- sqlmesh/core/dialect.py | 2 +- tests/core/test_dialect.py | 9 +++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/sqlmesh/core/dialect.py b/sqlmesh/core/dialect.py index add30d1189..ab1828cf30 100644 --- a/sqlmesh/core/dialect.py +++ b/sqlmesh/core/dialect.py @@ -1123,8 +1123,8 @@ def extend_sqlglot() -> None: _override(Parser, _parse_value) _override(Parser, _parse_lambda) _override(Parser, _parse_types) - _override(TSQL.Parser, Parser._parse_if) _override(Parser, _parse_if) + _override(TSQL.Parser, Parser._parse_if) _override(Parser, _parse_id_var) _override(Parser, _warn_unsupported) _override(Snowflake.Parser, _parse_table_parts) diff --git a/tests/core/test_dialect.py b/tests/core/test_dialect.py index 3b8df28f8b..5b1436315b 100644 --- a/tests/core/test_dialect.py +++ b/tests/core/test_dialect.py @@ -707,6 +707,15 @@ def test_conditional_statement(): q = parse_one("@IF(cond, VACUUM ANALYZE);", read="postgres") assert q.sql(dialect="postgres") == "@IF(cond, VACUUM ANALYZE)" + q = parse_one("@IF(1 = 1, ALTER TABLE x ADD y INT);", read="tsql") + assert q.sql(dialect="tsql") == "@IF(1 = 1, ALTER TABLE x ADD y INTEGER)" + + q = parse_one("@IF(cond, PRINT 'hello');", read="tsql") + assert q.sql(dialect="tsql") == "@IF(cond, PRINT hello)" + + q = parse_one("@IF(@runtime_stage = 'evaluating', SELECT 1);", read="tsql") + assert q.sql(dialect="tsql") == "@IF(@runtime_stage = 'evaluating', SELECT 1)" + def test_model_name_cannot_be_string(): with pytest.raises(ParseError) as parse_error: