diff --git a/deploy/unset_season_range.sql b/deploy/unset_season_range.sql index 28b2ee3..129fb0f 100644 --- a/deploy/unset_season_range.sql +++ b/deploy/unset_season_range.sql @@ -13,6 +13,8 @@ declare tmp_range daterange; tmp_id integer; begin + delete from season_calendar where range @> season_range; + for tmp_id, tmp_range in select season_id, season_range from season_calendar @@ -25,8 +27,6 @@ begin ; end loop; - delete from season_calendar where range @> season_range; - update season_calendar set season_range = season_range - range where season_range && range diff --git a/test/unset_season_range.sql b/test/unset_season_range.sql index 76ded84..583571a 100644 --- a/test/unset_season_range.sql +++ b/test/unset_season_range.sql @@ -5,7 +5,7 @@ reset client_min_messages; begin; -select plan(14); +select plan(15); set search_path to camper, public; @@ -47,12 +47,17 @@ values ( 9, '[2023-04-01, 2023-04-05]') , (10, '[2023-04-20, 2023-04-22]') , ( 9, '[2023-04-23, 2023-04-27]') , ( 8, '[2023-04-28, 2023-04-30]') + , ( 7, '[2023-05-01, 2023-05-31]') ; select lives_ok($$ select unset_season_range('[2023-04-08, 2023-04-11]') $$); select lives_ok($$ select unset_season_range('[2023-04-15, 2023-04-15]') $$); select lives_ok($$ select unset_season_range('[2023-04-20, 2023-04-23]') $$); select lives_ok($$ select unset_season_range('[2023-04-26, 2023-04-29]') $$); +select lives_ok( + $$ select unset_season_range('[2023-05-01, 2023-05-31]') $$, + 'Should work if the range to unset is exactly the same as an existing range' +); select bag_eq( $$ select season_id, season_range from season_calendar $$,