Skip to content

Commit 57943b2

Browse files
committed
fix: include pre/post when cloning
1 parent 7cfddd8 commit 57943b2

File tree

2 files changed

+52
-0
lines changed

2 files changed

+52
-0
lines changed

sqlmesh/core/snapshot/evaluator.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -867,6 +867,7 @@ def create_snapshot(
867867
rendered_physical_properties=rendered_physical_properties,
868868
allow_destructive_snapshots=allow_destructive_snapshots,
869869
allow_additive_snapshots=allow_additive_snapshots,
870+
run_pre_post_statements=True,
870871
)
871872
else:
872873
is_table_deployable = deployability_index.is_deployable(snapshot)
@@ -1026,6 +1027,7 @@ def _clone_snapshot_in_dev(
10261027
rendered_physical_properties: t.Dict[str, exp.Expression],
10271028
allow_destructive_snapshots: t.Set[str],
10281029
allow_additive_snapshots: t.Set[str],
1030+
run_pre_post_statements: bool = False,
10291031
) -> None:
10301032
adapter = self.get_adapter(snapshot.model.gateway)
10311033

@@ -1048,6 +1050,7 @@ def _clone_snapshot_in_dev(
10481050
rendered_physical_properties=rendered_physical_properties,
10491051
allow_destructive_snapshots=allow_destructive_snapshots,
10501052
allow_additive_snapshots=allow_additive_snapshots,
1053+
run_pre_post_statements=run_pre_post_statements,
10511054
)
10521055
except Exception:
10531056
adapter.drop_table(target_table_name)

tests/core/test_snapshot_evaluator.py

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -854,6 +854,55 @@ def test_create_prod_table_exists(mocker: MockerFixture, adapter_mock, make_snap
854854
)
855855

856856

857+
def test_pre_hook_forward_only_clone(
858+
mocker: MockerFixture, make_mocked_engine_adapter, make_snapshot
859+
):
860+
"""
861+
Verifies that pre-statements are executed when creating a clone of a forward-only model.
862+
"""
863+
pre_statement = """CREATE TEMPORARY FUNCTION "example_udf"("x" BIGINT) AS ("x" + 1)"""
864+
model = load_sql_based_model(
865+
parse( # type: ignore
866+
f"""
867+
MODEL (
868+
name test_schema.test_model,
869+
kind INCREMENTAL_BY_TIME_RANGE (
870+
time_column ds
871+
)
872+
);
873+
874+
{pre_statement};
875+
876+
SELECT a::int, ds::string FROM tbl;
877+
"""
878+
),
879+
)
880+
881+
snapshot = make_snapshot(model)
882+
snapshot.categorize_as(SnapshotChangeCategory.BREAKING, forward_only=True)
883+
snapshot.previous_versions = snapshot.all_versions
884+
885+
adapter = make_mocked_engine_adapter(EngineAdapter)
886+
adapter.with_settings = lambda **kwargs: adapter
887+
adapter.table_exists = lambda _: True # type: ignore
888+
adapter.SUPPORTS_CLONING = True
889+
mocker.patch.object(
890+
adapter,
891+
"get_data_objects",
892+
return_value=[],
893+
)
894+
mocker.patch.object(
895+
adapter,
896+
"get_alter_operations",
897+
return_value=[],
898+
)
899+
900+
evaluator = SnapshotEvaluator(adapter)
901+
902+
evaluator.create([snapshot], {}, deployability_index=DeployabilityIndex.none_deployable())
903+
adapter.cursor.execute.assert_any_call(pre_statement)
904+
905+
857906
def test_create_only_dev_table_exists(mocker: MockerFixture, adapter_mock, make_snapshot):
858907
model = load_sql_based_model(
859908
parse( # type: ignore

0 commit comments

Comments
 (0)