Skip to content

Commit 1128130

Browse files
committed
fix: traverse target snapshots instead of all snapshots
1 parent af3a16f commit 1128130

File tree

2 files changed

+58
-1
lines changed

2 files changed

+58
-1
lines changed

sqlmesh/core/snapshot/evaluator.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -494,7 +494,7 @@ def migrate(
494494
with self.concurrent_context():
495495
# Only migrate snapshots for which there's an existing data object
496496
concurrent_apply_to_snapshots(
497-
snapshots_by_name.values(),
497+
target_snapshots,
498498
lambda s: self._migrate_snapshot(
499499
s,
500500
snapshots_by_name,

tests/core/test_snapshot_evaluator.py

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3955,6 +3955,63 @@ def test_migrate_snapshot(snapshot: Snapshot, mocker: MockerFixture, adapter_moc
39553955
)
39563956

39573957

3958+
def test_migrate_only_processes_target_snapshots(
3959+
mocker: MockerFixture, adapter_mock, make_snapshot
3960+
):
3961+
evaluator = SnapshotEvaluator(adapter_mock)
3962+
3963+
target_model = SqlModel(
3964+
name="test_schema.target_model",
3965+
kind=FullKind(),
3966+
query=parse_one("SELECT 1 AS a"),
3967+
)
3968+
extra_model = SqlModel(
3969+
name="test_schema.extra_model",
3970+
kind=FullKind(),
3971+
query=parse_one("SELECT 1 AS a"),
3972+
)
3973+
3974+
target_snapshot = make_snapshot(target_model)
3975+
extra_snapshot = make_snapshot(extra_model)
3976+
target_snapshot.categorize_as(SnapshotChangeCategory.BREAKING)
3977+
extra_snapshot.categorize_as(SnapshotChangeCategory.BREAKING)
3978+
3979+
target_snapshots = [target_snapshot]
3980+
snapshots = {
3981+
target_snapshot.snapshot_id: target_snapshot,
3982+
extra_snapshot.snapshot_id: extra_snapshot,
3983+
}
3984+
3985+
mocker.patch.object(
3986+
evaluator,
3987+
"_get_data_objects",
3988+
return_value={target_snapshot.snapshot_id: mocker.Mock()},
3989+
)
3990+
migrate_mock = mocker.patch.object(evaluator, "_migrate_snapshot")
3991+
3992+
def apply_side_effect(snapshot_iterable, fn, *_args, **_kwargs):
3993+
for snapshot in snapshot_iterable:
3994+
fn(snapshot)
3995+
return ([], [])
3996+
3997+
apply_mock = mocker.patch(
3998+
"sqlmesh.core.snapshot.evaluator.concurrent_apply_to_snapshots",
3999+
side_effect=apply_side_effect,
4000+
)
4001+
4002+
evaluator.migrate(target_snapshots=target_snapshots, snapshots=snapshots)
4003+
4004+
assert apply_mock.call_count == 1
4005+
called_snapshots = list(apply_mock.call_args.args[0])
4006+
assert called_snapshots == target_snapshots
4007+
4008+
migrate_mock.assert_called_once()
4009+
called_snapshot, snapshots_by_name, *_ = migrate_mock.call_args.args
4010+
assert called_snapshot is target_snapshot
4011+
assert target_snapshot.name in snapshots_by_name
4012+
assert extra_snapshot.name in snapshots_by_name
4013+
4014+
39584015
def test_migrate_managed(adapter_mock, make_snapshot, mocker: MockerFixture):
39594016
evaluator = SnapshotEvaluator(adapter_mock)
39604017

0 commit comments

Comments
 (0)