@@ -384,6 +384,78 @@ def test_seed_intervals(make_snapshot):
384384 assert snapshot_a .missing_intervals ("2020-01-02" , "2020-01-02" ) == []
385385
386386
387+ def test_missing_interval_smaller_than_interval_unit (make_snapshot ):
388+ snapshot_daily = make_snapshot (
389+ SqlModel (
390+ name = "name" ,
391+ kind = IncrementalByTimeRangeKind (time_column = "ds" , batch_size = 30 ),
392+ owner = "owner" ,
393+ dialect = "spark" ,
394+ cron = "@daily" ,
395+ start = "2020-01-01" ,
396+ query = parse_one ("SELECT @EACH([1, 2], x -> x), ds FROM parent.tbl" ),
397+ )
398+ )
399+
400+ assert snapshot_daily .missing_intervals ("2020-01-01 00:00:05" , "2020-01-01 23:59:59" ) == []
401+ assert snapshot_daily .missing_intervals ("2020-01-01 00:00:00" , "2020-01-02 00:00:00" ) == [
402+ (to_timestamp ("2020-01-01" ), to_timestamp ("2020-01-02" ))
403+ ]
404+
405+ snapshot_hourly = make_snapshot (
406+ SqlModel (
407+ name = "name" ,
408+ kind = IncrementalByTimeRangeKind (time_column = "ds" , batch_size = 30 ),
409+ owner = "owner" ,
410+ dialect = "spark" ,
411+ cron = "@hourly" ,
412+ start = "2020-01-01" ,
413+ query = parse_one ("SELECT @EACH([1, 2], x -> x), ds FROM parent.tbl" ),
414+ )
415+ )
416+
417+ assert snapshot_hourly .missing_intervals ("2020-01-01 00:00:00" , "2020-01-01 00:59:00" ) == []
418+ assert snapshot_hourly .missing_intervals ("2020-01-01 00:00:00" , "2020-01-01 01:00:00" ) == [
419+ (to_timestamp ("2020-01-01" ), to_timestamp ("2020-01-01 01:00:00" ))
420+ ]
421+
422+ snapshot_end_categorical = make_snapshot (
423+ SqlModel (
424+ name = "name" ,
425+ kind = IncrementalByTimeRangeKind (time_column = "ds" , batch_size = 30 ),
426+ owner = "owner" ,
427+ dialect = "spark" ,
428+ cron = "@daily" ,
429+ start = "2020-01-01" ,
430+ query = parse_one ("SELECT @EACH([1, 2], x -> x), ds FROM parent.tbl" ),
431+ )
432+ )
433+
434+ assert snapshot_end_categorical .missing_intervals ("2020-01-01 00:00:00" , "2020-01-01" ) == [
435+ (to_timestamp ("2020-01-01" ), to_timestamp ("2020-01-02" ))
436+ ]
437+
438+ snapshot_partial = make_snapshot (
439+ SqlModel (
440+ name = "name" ,
441+ kind = IncrementalByTimeRangeKind (time_column = "ds" , batch_size = 30 ),
442+ owner = "owner" ,
443+ dialect = "spark" ,
444+ cron = "@daily" ,
445+ start = "2020-01-01" ,
446+ query = parse_one ("SELECT @EACH([1, 2], x -> x), ds FROM parent.tbl" ),
447+ allow_partials = True ,
448+ )
449+ )
450+
451+ assert snapshot_partial .missing_intervals ("2020-01-01 00:00:05" , "2020-01-01 23:59:59" ) == [
452+ (to_timestamp ("2020-01-01" ), to_timestamp ("2020-01-02" ))
453+ ]
454+ assert snapshot_partial .missing_intervals ("2020-01-01 00:00:00" , "2020-01-02 00:00:00" ) == [
455+ (to_timestamp ("2020-01-01" ), to_timestamp ("2020-01-02" ))
456+ ]
457+
458+
387459def test_remove_intervals (snapshot : Snapshot ):
388460 snapshot .add_interval ("2020-01-01" , "2020-01-01" )
389461 snapshot .remove_interval (snapshot .get_removal_interval ("2020-01-01" , "2020-01-01" ))
0 commit comments