Skip to content

Commit 9744ee5

Browse files
committed
allow no/single/double quotes in dialect value regex
1 parent 0561928 commit 9744ee5

File tree

2 files changed

+29
-4
lines changed

2 files changed

+29
-4
lines changed

sqlmesh/core/dialect.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -806,7 +806,7 @@ def text_diff(
806806
WS_OR_COMMENT = r"(?:\s|--[^\n]*\n|/\*.*?\*/)"
807807
HEADER = r"\b(?:model|audit)\b(?=\s*\()"
808808
KEY_BOUNDARY = r"(?:\(|,)" # key is preceded by either '(' or ','
809-
DIALECT_VALUE = r"(?:'(?P<d_quoted>[a-z_][a-z0-9_]*)?'|(?P<d_unquoted>[a-z_][a-z0-9_]*))" # value is single-quoted (maybe empty) or unquoted
809+
DIALECT_VALUE = r"['\"]?(?P<dialect>[a-z][a-z0-9]*)['\"]?"
810810
VALUE_BOUNDARY = r"(?=,|\))" # value is followed by comma or closing paren
811811

812812
DIALECT_PATTERN = re.compile(
@@ -902,7 +902,7 @@ def parse(
902902
A list of the parsed expressions: [Model, *Statements, Query, *Statements]
903903
"""
904904
match = match_dialect and DIALECT_PATTERN.search(sql[:MAX_MODEL_DEFINITION_SIZE])
905-
dialect_str = (match.group("d_quoted") or match.group("d_unquoted")) if match else None
905+
dialect_str = match.group("dialect") if match else None
906906
dialect = Dialect.get_or_raise(dialect_str or default_dialect)
907907

908908
tokens = dialect.tokenize(sql)

tests/core/test_model.py

Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2743,8 +2743,12 @@ def make_test_sql(text: str) -> str:
27432743

27442744
def assert_match(test_sql: str, expected_value: t.Optional[str] = "duckdb"):
27452745
match = d.DIALECT_PATTERN.search(test_sql)
2746-
assert match
2747-
dialect_str = match.group("d_quoted") or match.group("d_unquoted")
2746+
2747+
dialect_str: t.Optional[str] = None
2748+
if expected_value is not None:
2749+
assert match
2750+
dialect_str = match.group("dialect")
2751+
27482752
assert dialect_str == expected_value
27492753

27502754
# single-quoted dialect
@@ -2767,6 +2771,16 @@ def assert_match(test_sql: str, expected_value: t.Optional[str] = "duckdb"):
27672771
)
27682772
)
27692773

2774+
# double-quoted dialect (allowed in BQ)
2775+
assert_match(
2776+
make_test_sql(
2777+
"""
2778+
dialect "duckdb",
2779+
description 'there's a dialect foo in here too!'
2780+
"""
2781+
)
2782+
)
2783+
27702784
# no dialect specified, "dialect" in description
27712785
test_sql = make_test_sql(
27722786
"""
@@ -2808,6 +2822,17 @@ def assert_match(test_sql: str, expected_value: t.Optional[str] = "duckdb"):
28082822
None,
28092823
)
28102824

2825+
# double-quoted empty dialect
2826+
assert_match(
2827+
make_test_sql(
2828+
"""
2829+
dialect "",
2830+
tag my_tag
2831+
"""
2832+
),
2833+
None,
2834+
)
2835+
28112836
# trailing comment after dialect value
28122837
assert_match(
28132838
make_test_sql(

0 commit comments

Comments
 (0)