Skip to content

Commit 5f2c7b9

Browse files
committed
fix(dialect): guard UNWRAPPED_INTERVAL_VALUES from repeated appends
1 parent 2c67329 commit 5f2c7b9

2 files changed

Lines changed: 12 additions & 5 deletions

File tree

sqlmesh/core/dialect.py

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1174,11 +1174,12 @@ def extend_sqlglot() -> None:
11741174
MacroDef,
11751175
)
11761176

1177-
generator.UNWRAPPED_INTERVAL_VALUES = (
1178-
*generator.UNWRAPPED_INTERVAL_VALUES,
1179-
MacroStrReplace,
1180-
MacroVar,
1181-
)
1177+
if MacroVar not in generator.UNWRAPPED_INTERVAL_VALUES:
1178+
generator.UNWRAPPED_INTERVAL_VALUES = (
1179+
*generator.UNWRAPPED_INTERVAL_VALUES,
1180+
MacroStrReplace,
1181+
MacroVar,
1182+
)
11821183

11831184
_override(Parser, _parse_select)
11841185
_override(Parser, _parse_statement)

tests/core/test_dialect.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1190,6 +1190,12 @@ def test_pipe_syntax():
11901190
def test_extend_sqlglot_is_idempotent():
11911191
# extend_sqlglot() runs at import time; calling it again must not re-wrap the
11921192
# already-installed overrides, otherwise they call themselves (RecursionError).
1193+
from sqlglot.generator import Generator
1194+
1195+
before = Generator.UNWRAPPED_INTERVAL_VALUES
1196+
11931197
d.extend_sqlglot()
11941198

11951199
assert parse_one("SELECT CAST(1 AS INT)").sql() == "SELECT CAST(1 AS INT)"
1200+
# The class-level registries must not grow on repeated calls.
1201+
assert Generator.UNWRAPPED_INTERVAL_VALUES == before

0 commit comments

Comments
 (0)