Skip to content

Commit 704d713

Browse files
authored
Merge branch 'main' into fix/multi-repo-create-external-models
2 parents b15870b + bf84bce commit 704d713

7 files changed

Lines changed: 56 additions & 9 deletions

File tree

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ dependencies = [
2424
"requests",
2525
"rich[jupyter]",
2626
"ruamel.yaml",
27-
"sqlglot~=30.2.1",
27+
"sqlglot~=30.4.2",
2828
"tenacity",
2929
"time-machine",
3030
"json-stream"

sqlmesh/core/engine_adapter/base.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2920,7 +2920,11 @@ def _replace_by_key(
29202920
target_columns_to_types = self.columns(target_table)
29212921

29222922
temp_table = self._get_temp_table(target_table)
2923-
key_exp = exp.func("CONCAT_WS", "'__SQLMESH_DELIM__'", *key) if len(key) > 1 else key[0]
2923+
key_exp = (
2924+
exp.func("CONCAT_WS", "'__SQLMESH_DELIM__'", *key, dialect=self.dialect)
2925+
if len(key) > 1
2926+
else key[0]
2927+
)
29242928
column_names = list(target_columns_to_types or [])
29252929

29262930
with self.transaction():

sqlmesh/core/engine_adapter/clickhouse.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -423,7 +423,11 @@ def _replace_by_key(
423423
source_columns=source_columns,
424424
)
425425

426-
key_exp = exp.func("CONCAT_WS", "'__SQLMESH_DELIM__'", *key) if len(key) > 1 else key[0]
426+
key_exp = (
427+
exp.func("CONCAT_WS", "'__SQLMESH_DELIM__'", *key, dialect=self.dialect)
428+
if len(key) > 1
429+
else key[0]
430+
)
427431

428432
self._insert_overwrite_by_condition(
429433
target_table,

sqlmesh/core/model/definition.py

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1158,11 +1158,7 @@ def _audit_metadata_hash_values(self) -> t.List[str]:
11581158

11591159
for audit_name, audit_args in sorted(self.audits, key=lambda a: a[0]):
11601160
metadata.append(audit_name)
1161-
if audit_name in BUILT_IN_AUDITS:
1162-
for arg_name, arg_value in audit_args.items():
1163-
metadata.append(arg_name)
1164-
metadata.append(gen(arg_value))
1165-
else:
1161+
if audit_name not in BUILT_IN_AUDITS:
11661162
audit = self.audit_definitions[audit_name]
11671163
metadata.extend(
11681164
[
@@ -1172,6 +1168,9 @@ def _audit_metadata_hash_values(self) -> t.List[str]:
11721168
str(audit.blocking),
11731169
]
11741170
)
1171+
for arg_name, arg_value in audit_args.items():
1172+
metadata.append(arg_name)
1173+
metadata.append(gen(arg_value))
11751174

11761175
return metadata
11771176

sqlmesh/core/model/kind.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -786,7 +786,7 @@ def data_hash_values(self) -> t.List[t.Optional[str]]:
786786
gen(self.valid_to_name),
787787
str(self.invalidate_hard_deletes),
788788
self.time_data_type.sql(self.dialect),
789-
gen(self.batch_size) if self.batch_size is not None else None,
789+
str(self.batch_size) if self.batch_size is not None else None,
790790
]
791791

792792
@property
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
"""Include custom audit args in the model fingerprint."""
2+
3+
4+
def migrate_schemas(engine_adapter, schema, **kwargs): # type: ignore
5+
pass
6+
7+
8+
def migrate_rows(engine_adapter, schema, **kwargs): # type: ignore
9+
pass

tests/core/test_model.py

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1665,6 +1665,37 @@ def test_audits():
16651665
assert model.tags == ["foo"]
16661666

16671667

1668+
def test_custom_audit_arg_changes_affect_fingerprint():
1669+
def make_model(min_val: int) -> t.Any:
1670+
expressions = d.parse(
1671+
f"""
1672+
MODEL (
1673+
name db.model,
1674+
audits (check_count(min := {min_val}))
1675+
);
1676+
SELECT 1 AS id;
1677+
"""
1678+
)
1679+
audit_definitions = {
1680+
"check_count": load_audit(
1681+
d.parse(
1682+
"AUDIT (name check_count); SELECT * FROM @this_model HAVING COUNT(*) < @min"
1683+
),
1684+
dialect="duckdb",
1685+
)
1686+
}
1687+
return load_sql_based_model(
1688+
expressions,
1689+
path=Path("./examples/sushi/models/test_model.sql"),
1690+
audit_definitions=audit_definitions,
1691+
)
1692+
1693+
model_a = make_model(33111)
1694+
model_b = make_model(5142)
1695+
1696+
assert model_a.audit_metadata_hash() != model_b.audit_metadata_hash()
1697+
1698+
16681699
def test_enable_audits_from_model_defaults():
16691700
expressions = d.parse(
16701701
"""

0 commit comments

Comments
 (0)