@@ -3569,3 +3569,81 @@ def test_update_environment_statements(state_sync: EngineAdapterStateSync):
35693569 "@grant_schema_usage()" ,
35703570 "@grant_select_privileges()" ,
35713571 ]
3572+
3573+
3574+ def test_get_snapshot_ids_by_names (
3575+ state_sync : EngineAdapterStateSync , make_snapshot : t .Callable [..., Snapshot ]
3576+ ):
3577+ assert state_sync .get_snapshot_ids_by_names (snapshot_names = []) == set ()
3578+
3579+ snap_a_v1 , snap_a_v2 = (
3580+ make_snapshot (
3581+ SqlModel (
3582+ name = "a" ,
3583+ query = parse_one (f"select { i } , ds" ),
3584+ ),
3585+ version = "a" ,
3586+ )
3587+ for i in range (2 )
3588+ )
3589+
3590+ snap_b = make_snapshot (
3591+ SqlModel (
3592+ name = "b" ,
3593+ query = parse_one (f"select 'b' as b, ds" ),
3594+ ),
3595+ version = "b" ,
3596+ )
3597+
3598+ state_sync .push_snapshots ([snap_a_v1 , snap_a_v2 , snap_b ])
3599+
3600+ assert state_sync .get_snapshot_ids_by_names (snapshot_names = ['"a"' ]) == {
3601+ snap_a_v1 .snapshot_id ,
3602+ snap_a_v2 .snapshot_id ,
3603+ }
3604+ assert state_sync .get_snapshot_ids_by_names (snapshot_names = ['"a"' , '"b"' ]) == {
3605+ snap_a_v1 .snapshot_id ,
3606+ snap_a_v2 .snapshot_id ,
3607+ snap_b .snapshot_id ,
3608+ }
3609+
3610+
3611+ def test_get_snapshot_ids_by_names_include_expired (
3612+ state_sync : EngineAdapterStateSync , make_snapshot : t .Callable [..., Snapshot ]
3613+ ):
3614+ now_ts = now_timestamp ()
3615+
3616+ normal_a = make_snapshot (
3617+ SqlModel (
3618+ name = "a" ,
3619+ query = parse_one (f"select 1, ds" ),
3620+ ),
3621+ version = "a" ,
3622+ )
3623+
3624+ expired_a = make_snapshot (
3625+ SqlModel (
3626+ name = "a" ,
3627+ query = parse_one (f"select 2, ds" ),
3628+ ),
3629+ version = "a" ,
3630+ ttl = "in 10 seconds" ,
3631+ )
3632+ expired_a .updated_ts = now_ts - (
3633+ 1000 * 15
3634+ ) # last updated 15 seconds ago, expired 10 seconds from last updated = expired 5 seconds ago
3635+
3636+ state_sync .push_snapshots ([normal_a , expired_a ])
3637+
3638+ assert state_sync .get_snapshot_ids_by_names (snapshot_names = ['"a"' ], current_ts = now_ts ) == {
3639+ normal_a .snapshot_id
3640+ }
3641+ assert state_sync .get_snapshot_ids_by_names (snapshot_names = ['"a"' ], exclude_expired = False ) == {
3642+ normal_a .snapshot_id ,
3643+ expired_a .snapshot_id ,
3644+ }
3645+
3646+ # 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
3647+ assert state_sync .get_snapshot_ids_by_names (
3648+ snapshot_names = ['"a"' ], current_ts = (now_ts - (10 * 1000 ))
3649+ ) == {normal_a .snapshot_id , expired_a .snapshot_id }
0 commit comments