@@ -4137,11 +4137,11 @@ def test_indirect_change_to_materialized_view_is_breaking(make_snapshot):
41374137 snapshot_a_old = make_snapshot (
41384138 SqlModel (
41394139 name = "a" ,
4140- query = parse_one ("select 1 as col_a, col_b " ),
4140+ query = parse_one ("select 1 as col_a" ),
41414141 kind = ViewKind (materialized = True ),
41424142 )
41434143 )
4144- snapshot_a_old .categorize_as (SnapshotChangeCategory .BREAKING , forward_only = False )
4144+ snapshot_a_old .categorize_as (SnapshotChangeCategory .BREAKING )
41454145
41464146 snapshot_b_old = make_snapshot (
41474147 SqlModel (
@@ -4151,12 +4151,12 @@ def test_indirect_change_to_materialized_view_is_breaking(make_snapshot):
41514151 ),
41524152 nodes = {'"a"' : snapshot_a_old .model },
41534153 )
4154- snapshot_b_old .categorize_as (SnapshotChangeCategory .BREAKING , forward_only = False )
4154+ snapshot_b_old .categorize_as (SnapshotChangeCategory .BREAKING )
41554155
41564156 snapshot_a_new = make_snapshot (
41574157 SqlModel (
41584158 name = "a" ,
4159- query = parse_one ("select 2 as col_a, col_b" ),
4159+ query = parse_one ("select 1 as col_a, 2 as col_b" ),
41604160 kind = ViewKind (materialized = True ),
41614161 )
41624162 )
@@ -4198,6 +4198,74 @@ def test_indirect_change_to_materialized_view_is_breaking(make_snapshot):
41984198 environment_statements = [],
41994199 )
42004200
4201- PlanBuilder (context_diff ).build ()
4201+ PlanBuilder (context_diff , forward_only = False ).build ()
42024202
42034203 assert snapshot_b_new .change_category == SnapshotChangeCategory .INDIRECT_BREAKING
4204+
4205+
4206+ def test_forward_only_indirect_change_to_materialized_view (make_snapshot ):
4207+ snapshot_a_old = make_snapshot (
4208+ SqlModel (
4209+ name = "a" ,
4210+ query = parse_one ("select 1 as col_a" ),
4211+ )
4212+ )
4213+ snapshot_a_old .categorize_as (SnapshotChangeCategory .BREAKING )
4214+
4215+ snapshot_b_old = make_snapshot (
4216+ SqlModel (
4217+ name = "b" ,
4218+ query = parse_one ("select col_a from a" ),
4219+ kind = ViewKind (materialized = True ),
4220+ ),
4221+ nodes = {'"a"' : snapshot_a_old .model },
4222+ )
4223+ snapshot_b_old .categorize_as (SnapshotChangeCategory .BREAKING )
4224+
4225+ snapshot_a_new = make_snapshot (
4226+ SqlModel (
4227+ name = "a" ,
4228+ query = parse_one ("select 1 as col_a, 2 as col_b" ),
4229+ )
4230+ )
4231+
4232+ snapshot_a_new .previous_versions = snapshot_a_old .all_versions
4233+
4234+ snapshot_b_new = make_snapshot (
4235+ snapshot_b_old .model ,
4236+ nodes = {'"a"' : snapshot_a_new .model },
4237+ )
4238+ snapshot_b_new .previous_versions = snapshot_b_old .all_versions
4239+
4240+ context_diff = ContextDiff (
4241+ environment = "test_environment" ,
4242+ is_new_environment = True ,
4243+ is_unfinalized_environment = False ,
4244+ normalize_environment_name = True ,
4245+ create_from = "prod" ,
4246+ create_from_env_exists = True ,
4247+ added = set (),
4248+ removed_snapshots = {},
4249+ modified_snapshots = {
4250+ snapshot_a_new .name : (snapshot_a_new , snapshot_a_old ),
4251+ snapshot_b_new .name : (snapshot_b_new , snapshot_b_old ),
4252+ },
4253+ snapshots = {
4254+ snapshot_a_new .snapshot_id : snapshot_a_new ,
4255+ snapshot_b_new .snapshot_id : snapshot_b_new ,
4256+ },
4257+ new_snapshots = {
4258+ snapshot_a_new .snapshot_id : snapshot_a_new ,
4259+ snapshot_b_new .snapshot_id : snapshot_b_new ,
4260+ },
4261+ previous_plan_id = None ,
4262+ previously_promoted_snapshot_ids = set (),
4263+ previous_finalized_snapshots = None ,
4264+ previous_gateway_managed_virtual_layer = False ,
4265+ gateway_managed_virtual_layer = False ,
4266+ environment_statements = [],
4267+ )
4268+
4269+ PlanBuilder (context_diff , forward_only = True ).build ()
4270+
4271+ assert snapshot_b_new .change_category == SnapshotChangeCategory .INDIRECT_NON_BREAKING
0 commit comments