Skip to content

Commit 0b77dac

Browse files
committed
Add DEMOTING runtime stage
1 parent a2c8fe0 commit 0b77dac

File tree

4 files changed

+12
-10
lines changed

4 files changed

+12
-10
lines changed

docs/concepts/macros/macro_variables.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,8 @@ SQLMesh provides additional predefined variables used to modify model behavior b
132132
* 'loading' - The project is being loaded into SQLMesh's runtime context.
133133
* 'creating' - The model tables are being created.
134134
* 'evaluating' - The model query logic is being evaluated.
135-
* 'promoting' - The model is being promoted in the target environment (virtual layer update).
135+
* 'promoting' - The model is being promoted in the target environment (view created during virtual layer update).
136+
* 'demoting' - The model is being demoted in the target environment (view dropped during virtual layer update).
136137
* 'auditing' - The audit is being run.
137138
* 'testing' - The model query logic is being evaluated in the context of a unit test.
138139
* @gateway - A string value containing the name of the current [gateway](../../guides/connections.md).

sqlmesh/core/macros.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ class RuntimeStage(Enum):
6767
CREATING = "creating"
6868
EVALUATING = "evaluating"
6969
PROMOTING = "promoting"
70+
DEMOTING = "demoting"
7071
AUDITING = "auditing"
7172
TESTING = "testing"
7273
BEFORE_ALL = "before_all"

sqlmesh/core/snapshot/evaluator.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -278,7 +278,7 @@ def demote(
278278
self,
279279
target_snapshots: t.Iterable[Snapshot],
280280
environment_naming_info: EnvironmentNamingInfo,
281-
snapshots: t.Dict[SnapshotId, Snapshot],
281+
snapshots: t.Optional[t.Dict[SnapshotId, Snapshot]] = None,
282282
deployability_index: t.Optional[DeployabilityIndex] = None,
283283
on_complete: t.Optional[t.Callable[[SnapshotInfoLike], None]] = None,
284284
) -> None:
@@ -1018,7 +1018,7 @@ def _demote_snapshot(
10181018
self,
10191019
snapshot: Snapshot,
10201020
environment_naming_info: EnvironmentNamingInfo,
1021-
snapshots: t.Dict[SnapshotId, Snapshot],
1021+
snapshots: t.Optional[t.Dict[SnapshotId, Snapshot]],
10221022
deployability_index: t.Optional[DeployabilityIndex],
10231023
on_complete: t.Optional[t.Callable[[SnapshotInfoLike], None]],
10241024
) -> None:
@@ -1038,7 +1038,7 @@ def _demote_snapshot(
10381038
engine_adapter=adapter,
10391039
snapshots=snapshots,
10401040
deployability_index=deployability_index,
1041-
runtime_stage=RuntimeStage.PROMOTING,
1041+
runtime_stage=RuntimeStage.DEMOTING,
10421042
)
10431043
),
10441044
):

tests/core/test_snapshot_evaluator.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -320,7 +320,7 @@ def test_demote(mocker: MockerFixture, adapter_mock, make_snapshot):
320320
snapshot = make_snapshot(model)
321321
snapshot.categorize_as(SnapshotChangeCategory.BREAKING)
322322

323-
evaluator.demote([snapshot], EnvironmentNamingInfo(name="test_env"), snapshots={})
323+
evaluator.demote([snapshot], EnvironmentNamingInfo(name="test_env"))
324324

325325
adapter_mock.transaction.assert_called()
326326
adapter_mock.session.assert_called()
@@ -2694,7 +2694,7 @@ def test_standalone_audit(mocker: MockerFixture, adapter_mock, make_snapshot):
26942694
adapter_mock.session.assert_not_called()
26952695

26962696
# Demote
2697-
evaluator.demote([snapshot], EnvironmentNamingInfo(name="test_env"), snapshots={})
2697+
evaluator.demote([snapshot], EnvironmentNamingInfo(name="test_env"))
26982698

26992699
adapter_mock.assert_not_called()
27002700
adapter_mock.transaction.assert_not_called()
@@ -3837,7 +3837,7 @@ def test_multiple_engine_creation(snapshot: Snapshot, adapters, make_snapshot):
38373837
assert len(post_calls) == 1
38383838
assert post_calls[0].sql(dialect="postgres") == expected_call
38393839

3840-
evaluator.demote([snapshot_2], EnvironmentNamingInfo(name="test_env"), snapshots={})
3840+
evaluator.demote([snapshot_2], EnvironmentNamingInfo(name="test_env"))
38413841
engine_adapters["secondary"].drop_view.assert_not_called()
38423842
engine_adapters["default"].drop_view.assert_called_once_with(
38433843
"test_schema__test_env.test_model",
@@ -4083,7 +4083,7 @@ def model_with_statements(context, **kwargs):
40834083
engine_adapters["default"].get_catalog_type.assert_not_called()
40844084
assert len(engine_adapters["secondary"].get_catalog_type.call_args_list) == 2
40854085

4086-
evaluator.demote([snapshot], environment_naming_info, snapshots={})
4086+
evaluator.demote([snapshot], environment_naming_info)
40874087
engine_adapters["default"].drop_view.assert_called_once_with(
40884088
"db__test_env.multi_engine_test_model",
40894089
cascade=False,
@@ -4097,7 +4097,7 @@ def model_with_statements(context, **kwargs):
40974097
assert view_args[0][0][0] == "db__test_env.multi_engine_test_model"
40984098

40994099
# Similarly for demotion
4100-
evaluator.demote([snapshot], environment_naming_info_gw, snapshots={})
4100+
evaluator.demote([snapshot], environment_naming_info_gw)
41014101
engine_adapters["secondary"].drop_view.assert_called_once_with(
41024102
"db__test_env.multi_engine_test_model",
41034103
cascade=False,
@@ -4155,7 +4155,7 @@ def test_multiple_engine_virtual_layer(snapshot: Snapshot, adapters, make_snapsh
41554155
assert view_args_secondary[0][0][0] == "test_schema__test_env.test_model"
41564156

41574157
# Demotion will follow with the same pattern
4158-
evaluator.demote([snapshot_2, snapshot], environment_naming_info, snapshots={})
4158+
evaluator.demote([snapshot_2, snapshot], environment_naming_info)
41594159
engine_adapters["default"].drop_view.assert_called_once_with(
41604160
"db__test_env.model",
41614161
cascade=False,

0 commit comments

Comments
 (0)