Skip to content

Commit 6d1c54b

Browse files
authored
Fix: conditional statement parsing edge case (#2967)
1 parent 1dc3b86 commit 6d1c54b

File tree

2 files changed

+10
-1
lines changed

2 files changed

+10
-1
lines changed

sqlmesh/core/dialect.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -454,7 +454,13 @@ def _parse_if(self: Parser) -> t.Optional[exp.Expression]:
454454
else:
455455
self.raise_error("Expecting )")
456456

457-
return exp.Anonymous(this="IF", expressions=[cond, self._parse_statement()])
457+
index = self._index
458+
stmt = self._parse_statement()
459+
if self._curr:
460+
self._retreat(index)
461+
stmt = self._parse_as_command(self._tokens[index])
462+
463+
return exp.Anonymous(this="IF", expressions=[cond, stmt])
458464

459465

460466
def _create_parser(parser_type: t.Type[exp.Expression], table_keys: t.List[str]) -> t.Callable:

tests/core/test_dialect.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -606,3 +606,6 @@ def test_conditional_statement():
606606
q.sql("snowflake")
607607
== "@IF(TRUE, COPY INTO 's3://example/data.csv' FROM EXTRA.EXAMPLE.TABLE STORAGE_INTEGRATION = S3_INTEGRATION FILE_FORMAT = (TYPE=CSV COMPRESSION=NONE NULL_IF=('') FIELD_OPTIONALLY_ENCLOSED_BY='\"') HEADER = TRUE OVERWRITE = TRUE SINGLE = TRUE /* this is a comment */)"
608608
)
609+
610+
q = parse_one("@IF(cond, VACUUM ANALYZE);", read="postgres")
611+
assert q.sql(dialect="postgres") == "@IF(cond, VACUUM ANALYZE)"

0 commit comments

Comments
 (0)