Skip to content

Commit 2003d19

Browse files
committed
Fix: A restatement plan should not override environment statements (#4880)
1 parent d8ca970 commit 2003d19

File tree

3 files changed

+76
-1
lines changed

3 files changed

+76
-1
lines changed

sqlmesh/core/context_diff.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ class ContextDiff(PydanticModel):
8484
"""Python dependencies."""
8585
previous_environment_statements: t.List[EnvironmentStatements] = []
8686
"""Previous environment statements."""
87-
environment_statements: t.List[EnvironmentStatements] = []
87+
environment_statements: t.List[EnvironmentStatements]
8888
"""Environment statements."""
8989
diff_rendered: bool = False
9090
"""Whether the diff should compare raw vs rendered models"""
@@ -268,6 +268,7 @@ def create_no_diff(cls, environment: str, state_reader: StateReader) -> ContextD
268268
if not env:
269269
raise SQLMeshError(f"Environment '{environment}' must exist for this operation.")
270270

271+
environment_statements = state_reader.get_environment_statements(environment)
271272
snapshots = state_reader.get_snapshots(env.snapshots)
272273

273274
return ContextDiff(
@@ -288,6 +289,7 @@ def create_no_diff(cls, environment: str, state_reader: StateReader) -> ContextD
288289
previous_requirements=env.requirements,
289290
requirements=env.requirements,
290291
previous_environment_statements=[],
292+
environment_statements=environment_statements,
291293
previous_gateway_managed_virtual_layer=env.gateway_managed,
292294
gateway_managed_virtual_layer=env.gateway_managed,
293295
)

tests/core/test_integration.py

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5652,6 +5652,28 @@ def test_restatement_of_full_model_with_start(init_and_plan_context: t.Callable)
56525652
assert waiter_by_day_interval == (to_timestamp("2023-01-07"), to_timestamp("2023-01-08"))
56535653

56545654

5655+
@time_machine.travel("2023-01-08 15:00:00 UTC")
5656+
def test_restatement_should_not_override_environment_statements(init_and_plan_context: t.Callable):
5657+
context, _ = init_and_plan_context("examples/sushi")
5658+
context.config.before_all = ["SELECT 'test_before_all';"]
5659+
context.load()
5660+
5661+
context.plan("prod", auto_apply=True, no_prompts=True, skip_tests=True)
5662+
5663+
prod_env_statements = context.state_reader.get_environment_statements(c.PROD)
5664+
assert prod_env_statements[0].before_all == ["SELECT 'test_before_all';"]
5665+
5666+
context.plan(
5667+
restate_models=["sushi.waiter_revenue_by_day"],
5668+
start="2023-01-07",
5669+
auto_apply=True,
5670+
no_prompts=True,
5671+
)
5672+
5673+
prod_env_statements = context.state_reader.get_environment_statements(c.PROD)
5674+
assert prod_env_statements[0].before_all == ["SELECT 'test_before_all';"]
5675+
5676+
56555677
@time_machine.travel("2023-01-08 15:00:00 UTC")
56565678
def test_restatement_shouldnt_backfill_beyond_prod_intervals(init_and_plan_context: t.Callable):
56575679
context, _ = init_and_plan_context("examples/sushi")

0 commit comments

Comments
 (0)