@@ -3554,3 +3554,81 @@ def test_update_environment_statements(state_sync: EngineAdapterStateSync):
35543554 "@grant_schema_usage()" ,
35553555 "@grant_select_privileges()" ,
35563556 ]
3557+
3558+
3559+ def test_get_snapshot_ids_by_names (
3560+ state_sync : EngineAdapterStateSync , make_snapshot : t .Callable [..., Snapshot ]
3561+ ):
3562+ assert state_sync .get_snapshot_ids_by_names (snapshot_names = []) == set ()
3563+
3564+ snap_a_v1 , snap_a_v2 = (
3565+ make_snapshot (
3566+ SqlModel (
3567+ name = "a" ,
3568+ query = parse_one (f"select { i } , ds" ),
3569+ ),
3570+ version = "a" ,
3571+ )
3572+ for i in range (2 )
3573+ )
3574+
3575+ snap_b = make_snapshot (
3576+ SqlModel (
3577+ name = "b" ,
3578+ query = parse_one (f"select 'b' as b, ds" ),
3579+ ),
3580+ version = "b" ,
3581+ )
3582+
3583+ state_sync .push_snapshots ([snap_a_v1 , snap_a_v2 , snap_b ])
3584+
3585+ assert state_sync .get_snapshot_ids_by_names (snapshot_names = ['"a"' ]) == {
3586+ snap_a_v1 .snapshot_id ,
3587+ snap_a_v2 .snapshot_id ,
3588+ }
3589+ assert state_sync .get_snapshot_ids_by_names (snapshot_names = ['"a"' , '"b"' ]) == {
3590+ snap_a_v1 .snapshot_id ,
3591+ snap_a_v2 .snapshot_id ,
3592+ snap_b .snapshot_id ,
3593+ }
3594+
3595+
3596+ def test_get_snapshot_ids_by_names_include_expired (
3597+ state_sync : EngineAdapterStateSync , make_snapshot : t .Callable [..., Snapshot ]
3598+ ):
3599+ now_ts = now_timestamp ()
3600+
3601+ normal_a = make_snapshot (
3602+ SqlModel (
3603+ name = "a" ,
3604+ query = parse_one (f"select 1, ds" ),
3605+ ),
3606+ version = "a" ,
3607+ )
3608+
3609+ expired_a = make_snapshot (
3610+ SqlModel (
3611+ name = "a" ,
3612+ query = parse_one (f"select 2, ds" ),
3613+ ),
3614+ version = "a" ,
3615+ ttl = "in 10 seconds" ,
3616+ )
3617+ expired_a .updated_ts = now_ts - (
3618+ 1000 * 15
3619+ ) # last updated 15 seconds ago, expired 10 seconds from last updated = expired 5 seconds ago
3620+
3621+ state_sync .push_snapshots ([normal_a , expired_a ])
3622+
3623+ assert state_sync .get_snapshot_ids_by_names (snapshot_names = ['"a"' ], current_ts = now_ts ) == {
3624+ normal_a .snapshot_id
3625+ }
3626+ assert state_sync .get_snapshot_ids_by_names (snapshot_names = ['"a"' ], exclude_expired = False ) == {
3627+ normal_a .snapshot_id ,
3628+ expired_a .snapshot_id ,
3629+ }
3630+
3631+ # wind back time to 10 seconds ago (before the expired snapshot is expired - it expired 5 seconds ago) to test it stil shows in a normal query
3632+ assert state_sync .get_snapshot_ids_by_names (
3633+ snapshot_names = ['"a"' ], current_ts = (now_ts - (10 * 1000 ))
3634+ ) == {normal_a .snapshot_id , expired_a .snapshot_id }
0 commit comments