Skip to content

Commit f1b1d62

Browse files
committed
Fix: propagate correct snapshot dict to renderer for virtual statements
1 parent 8bbcd85 commit f1b1d62

File tree

2 files changed

+41
-1
lines changed

2 files changed

+41
-1
lines changed

sqlmesh/core/snapshot/evaluator.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -978,7 +978,6 @@ def _promote_snapshot(
978978
end=end,
979979
execution_time=execution_time,
980980
engine_adapter=adapter,
981-
snapshots=snapshots,
982981
deployability_index=deployability_index,
983982
table_mapping=table_mapping,
984983
runtime_stage=RuntimeStage.PROMOTING,
@@ -988,8 +987,12 @@ def _promote_snapshot(
988987
view_name=view_name,
989988
model=snapshot.model,
990989
environment=environment_naming_info.name,
990+
snapshots=snapshots,
991991
**render_kwargs,
992992
)
993+
994+
snapshot_by_name = {s.name: s for s in (snapshots or {}).values()}
995+
render_kwargs["snapshots"] = snapshot_by_name
993996
adapter.execute(snapshot.model.render_on_virtual_update(**render_kwargs))
994997

995998
if on_complete is not None:

tests/core/test_model.py

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9948,3 +9948,40 @@ def unimportant_testing_macro(evaluator, *projections):
99489948
{"selector": "bla", "bla_variable": 1, "baz_variable": 2}
99499949
)
99509950
assert m.python_env.get(c.SQLMESH_BLUEPRINT_VARS) == Executable.value({"selector": "baz"})
9951+
9952+
9953+
def test_extract_schema_in_post_statement(tmp_path: Path) -> None:
9954+
init_example_project(tmp_path, dialect="duckdb", template=ProjectTemplate.EMPTY)
9955+
9956+
config = Config(model_defaults=ModelDefaultsConfig(dialect="duckdb"))
9957+
9958+
model1 = tmp_path / "models" / "parent_model.sql"
9959+
model1.parent.mkdir(parents=True, exist_ok=True)
9960+
model1.write_text("MODEL (name x); SELECT 1 AS c")
9961+
9962+
model2 = tmp_path / "models" / "child_model.sql"
9963+
model2.parent.mkdir(parents=True, exist_ok=True)
9964+
model2.write_text(
9965+
"""
9966+
MODEL (name y);
9967+
SELECT c FROM x;
9968+
ON_VIRTUAL_UPDATE_BEGIN;
9969+
@check_schema('y');
9970+
ON_VIRTUAL_UPDATE_END;
9971+
"""
9972+
)
9973+
9974+
check_schema = tmp_path / "macros/check_schema.py"
9975+
check_schema.parent.mkdir(parents=True, exist_ok=True)
9976+
check_schema.write_text("""
9977+
from sqlglot import exp
9978+
from sqlmesh import macro
9979+
9980+
@macro()
9981+
def check_schema(evaluator, model_name: str):
9982+
if evaluator.runtime_stage != 'loading':
9983+
assert evaluator.columns_to_types(model_name) == {"c": exp.DataType.build("INT")}
9984+
""")
9985+
9986+
context = Context(paths=tmp_path, config=config)
9987+
context.plan(no_prompts=True, auto_apply=True)

0 commit comments

Comments
 (0)