Skip to content

Commit 6efb8df

Browse files
authored
Fix: use the models' dialects in schema methods (#889)
* Fix: use the models' dialects in schema methods * Fix sqlglot version
1 parent ae9903e commit 6efb8df

File tree

5 files changed

+16
-8
lines changed

5 files changed

+16
-8
lines changed

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@
4444
"requests",
4545
"rich",
4646
"ruamel.yaml",
47-
"sqlglot~=13.3.0",
47+
"sqlglot~=13.3.1",
4848
"fsspec",
4949
],
5050
extras_require={

sqlmesh/core/dialect.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -423,7 +423,7 @@ def parse(sql: str, default_dialect: str | None = None) -> t.List[exp.Expression
423423
for chunk, is_jinja in chunks:
424424
if is_jinja:
425425
start, *_, end = chunk
426-
segment = sql[start.start : end.end + 1]
426+
segment = sql[start.start : end.end + 2]
427427
variables = [
428428
exp.Literal.string(var)
429429
for var in find_undeclared_variables(ENVIRONMENT.parse(segment))

sqlmesh/core/loader.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,9 @@ def update_model_schemas(dag: DAG[str], models: UniqueKeyDict[str, Model]) -> No
5454

5555
for dep in model.depends_on:
5656
external = external or dep not in models
57-
table = schema._normalize_table(schema._ensure_table(dep))
57+
table = schema._normalize_table(
58+
schema._ensure_table(dep, dialect=model.dialect), dialect=model.dialect
59+
)
5860
mapping_schema = schema.find(table)
5961

6062
if mapping_schema:
@@ -64,7 +66,7 @@ def update_model_schemas(dag: DAG[str], models: UniqueKeyDict[str, Model]) -> No
6466
{k: str(v) for k, v in mapping_schema.items()},
6567
)
6668

67-
schema.add_table(name, model.columns_to_types)
69+
schema.add_table(name, model.columns_to_types, dialect=model.dialect)
6870

6971
if external:
7072
if "*" in model.columns_to_types:
@@ -129,8 +131,10 @@ def load(self, context: Context, update_schemas: bool = True) -> LoadedProject:
129131

130132
macros, hooks, jinja_macros = self._load_scripts()
131133
models = self._load_models(macros, hooks, jinja_macros)
134+
132135
for model in models.values():
133136
self._add_model_to_dag(model)
137+
134138
if update_schemas:
135139
update_model_schemas(self._dag, models)
136140

sqlmesh/core/renderer.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -278,10 +278,12 @@ def update_cache(
278278
self._query_cache[_dates(start, end, latest)] = query
279279

280280
def _optimize_query(self, query: exp.Expression) -> exp.Expression:
281-
schema = ensure_schema(self.schema)
281+
schema = ensure_schema(self.schema, dialect=self._dialect)
282+
282283
query = query.copy()
283284
lower_identities(query)
284285
qualify_tables(query)
286+
285287
try:
286288
if not schema.empty:
287289
qualify_columns(query, schema=schema, infer_schema=False)
@@ -290,4 +292,5 @@ def _optimize_query(self, query: exp.Expression) -> exp.Expression:
290292
f"Error qualifying columns, the column may not exist or is ambiguous. {ex}",
291293
self._path,
292294
)
295+
293296
return annotate_types(simplify(query), schema=schema)

tests/core/test_model.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1072,12 +1072,13 @@ def test_model_cache(tmp_path: Path, mocker: MockerFixture):
10721072
def test_model_ctas_query():
10731073
expressions = parse(
10741074
"""
1075-
MODEL (name db.table, kind FULL);
1075+
MODEL (name `a-b-c.table`, kind FULL, dialect bigquery);
10761076
SELECT 1 as a
1077-
"""
1077+
""",
1078+
read="bigquery",
10781079
)
10791080

1080-
assert load_model(expressions).ctas_query({}).sql() == "SELECT 1 AS a"
1081+
assert load_model(expressions, dialect="bigquery").ctas_query({}).sql() == "SELECT 1 AS a"
10811082

10821083
expressions = parse(
10831084
"""

0 commit comments

Comments
 (0)