File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff 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 )
Original file line number Diff line number Diff line change @@ -707,6 +707,20 @@ 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+ # Verify that the original error case from issue #5823 (Required keyword: 'true' missing) is resolved.
711+ # It must be parsed as a macro function containing an Anonymous expression rather than exp.If.
712+ q = parse_one ("@IF(1 = 1, ALTER TABLE x ADD y INT);" , read = "tsql" )
713+ assert q .sql (dialect = "tsql" ) == "@IF(1 = 1, ALTER TABLE x ADD y INTEGER)"
714+ assert isinstance (q .this , exp .Anonymous )
715+ assert q .this .name == "IF"
716+
717+ # Note: SQLGlot's fallback Command parser strips quotes from string literal tokens when parsing unparsed commands
718+ q = parse_one ("@IF(cond, PRINT 'hello');" , read = "tsql" )
719+ assert q .sql (dialect = "tsql" ) == "@IF(cond, PRINT hello)"
720+
721+ q = parse_one ("@IF(@runtime_stage = 'evaluating', SELECT 1);" , read = "tsql" )
722+ assert q .sql (dialect = "tsql" ) == "@IF(@runtime_stage = 'evaluating', SELECT 1)"
723+
710724
711725def test_model_name_cannot_be_string ():
712726 with pytest .raises (ParseError ) as parse_error :
You can’t perform that action at this time.
0 commit comments