1- INSERT INTO shifts(job_id, worker_id, valid_from , valid_to) VALUES
1+ INSERT INTO shifts(job_id, worker_id, valid_after , valid_to) VALUES
22 (1, 1, '2017-11-27 06:00:00', '2017-11-27 12:00:00'),
33 (1, 2, '2017-11-27 12:00:00', '2017-11-27 17:00:00'),
44 (2, 3, '2017-11-27 06:00:00', '2017-11-27 12:00:00'),
@@ -10,7 +10,7 @@ INSERT INTO shifts(job_id, worker_id, valid_from, valid_to) VALUES
1010;
1111-- TRUE:
1212-- it covers when the range matches one exactly:
13- SELECT sql_saga.no_gaps(tstzrange(valid_from ,valid_to), tstzrange('2017-11-27 06:00:00', '2017-11-27 12:00:00'))
13+ SELECT sql_saga.no_gaps(tstzrange(valid_after ,valid_to), tstzrange('2017-11-27 06:00:00', '2017-11-27 12:00:00'))
1414FROM shifts
1515WHERE job_id = 1;
1616 no_gaps
@@ -19,7 +19,7 @@ WHERE job_id = 1;
1919(1 row)
2020
2121-- it covers when the range matches two exactly:
22- SELECT sql_saga.no_gaps(tstzrange(valid_from ,valid_to), tstzrange('2017-11-27 06:00:00', '2017-11-27 17:00:00'))
22+ SELECT sql_saga.no_gaps(tstzrange(valid_after ,valid_to), tstzrange('2017-11-27 06:00:00', '2017-11-27 17:00:00'))
2323FROM shifts
2424WHERE job_id = 1;
2525 no_gaps
@@ -28,7 +28,7 @@ WHERE job_id = 1;
2828(1 row)
2929
3030-- it covers when the range has extra in front:
31- SELECT sql_saga.no_gaps(tstzrange(valid_from ,valid_to), tstzrange('2017-11-27 08:00:00', '2017-11-27 17:00:00'))
31+ SELECT sql_saga.no_gaps(tstzrange(valid_after ,valid_to), tstzrange('2017-11-27 08:00:00', '2017-11-27 17:00:00'))
3232FROM shifts
3333WHERE job_id = 1;
3434 no_gaps
@@ -37,7 +37,7 @@ WHERE job_id = 1;
3737(1 row)
3838
3939-- it covers when the range has extra behind:
40- SELECT sql_saga.no_gaps(tstzrange(valid_from ,valid_to), tstzrange('2017-11-27 06:00:00', '2017-11-27 14:00:00'))
40+ SELECT sql_saga.no_gaps(tstzrange(valid_after ,valid_to), tstzrange('2017-11-27 06:00:00', '2017-11-27 14:00:00'))
4141FROM shifts
4242WHERE job_id = 1;
4343 no_gaps
@@ -46,7 +46,7 @@ WHERE job_id = 1;
4646(1 row)
4747
4848-- it covers when the range has extra on both sides:
49- SELECT sql_saga.no_gaps(tstzrange(valid_from ,valid_to), tstzrange('2017-11-27 08:00:00', '2017-11-27 14:00:00'))
49+ SELECT sql_saga.no_gaps(tstzrange(valid_after ,valid_to), tstzrange('2017-11-27 08:00:00', '2017-11-27 14:00:00'))
5050FROM shifts
5151WHERE job_id = 1;
5252 no_gaps
@@ -55,7 +55,7 @@ WHERE job_id = 1;
5555(1 row)
5656
5757-- an infinite start will cover a finite target:
58- SELECT sql_saga.no_gaps(tstzrange(valid_from ,valid_to), tstzrange('2017-11-27 06:00:00', '2017-11-27 17:00:00'))
58+ SELECT sql_saga.no_gaps(tstzrange(valid_after ,valid_to), tstzrange('2017-11-27 06:00:00', '2017-11-27 17:00:00'))
5959FROM shifts
6060WHERE job_id = 3;
6161 no_gaps
@@ -64,7 +64,7 @@ WHERE job_id = 3;
6464(1 row)
6565
6666-- an infinite start will cover an infinite target:
67- SELECT sql_saga.no_gaps(tstzrange(valid_from ,valid_to), tstzrange('-infinity', '2017-11-27 17:00:00'))
67+ SELECT sql_saga.no_gaps(tstzrange(valid_after ,valid_to), tstzrange('-infinity', '2017-11-27 17:00:00'))
6868FROM shifts
6969WHERE job_id = 3;
7070 no_gaps
@@ -73,7 +73,7 @@ WHERE job_id = 3;
7373(1 row)
7474
7575-- an infinite end will cover a finite target:
76- SELECT sql_saga.no_gaps(tstzrange(valid_from ,valid_to), tstzrange('2017-11-27 06:00:00', '2017-11-27 17:00:00'))
76+ SELECT sql_saga.no_gaps(tstzrange(valid_after ,valid_to), tstzrange('2017-11-27 06:00:00', '2017-11-27 17:00:00'))
7777FROM shifts
7878WHERE job_id = 4;
7979 no_gaps
@@ -82,7 +82,7 @@ WHERE job_id = 4;
8282(1 row)
8383
8484-- an infinite end will cover an infinite target:
85- SELECT sql_saga.no_gaps(tstzrange(valid_from ,valid_to), tstzrange('2017-11-27 06:00:00', 'infinity'))
85+ SELECT sql_saga.no_gaps(tstzrange(valid_after ,valid_to), tstzrange('2017-11-27 06:00:00', 'infinity'))
8686FROM shifts
8787WHERE job_id = 4;
8888 no_gaps
@@ -101,7 +101,7 @@ WHERE job_id = 1;
101101(1 row)
102102
103103-- it does not cover when the range misses completely:
104- SELECT sql_saga.no_gaps(tstzrange(valid_from ,valid_to), tstzrange('2017-11-29 08:00:00', '2017-11-29 14:00:00'))
104+ SELECT sql_saga.no_gaps(tstzrange(valid_after ,valid_to), tstzrange('2017-11-29 08:00:00', '2017-11-29 14:00:00'))
105105FROM shifts
106106WHERE job_id = 1;
107107 no_gaps
@@ -110,7 +110,7 @@ WHERE job_id = 1;
110110(1 row)
111111
112112-- it does not cover when the range has something at the beginning:
113- SELECT sql_saga.no_gaps(tstzrange(valid_from ,valid_to), tstzrange('2017-11-27 04:00:00', '2017-11-27 14:00:00'))
113+ SELECT sql_saga.no_gaps(tstzrange(valid_after ,valid_to), tstzrange('2017-11-27 04:00:00', '2017-11-27 14:00:00'))
114114FROM shifts
115115WHERE job_id = 1;
116116 no_gaps
@@ -119,7 +119,7 @@ WHERE job_id = 1;
119119(1 row)
120120
121121-- it does not cover when the range has something at the end:
122- SELECT sql_saga.no_gaps(tstzrange(valid_from ,valid_to), tstzrange('2017-11-27 06:00:00', '2017-11-27 20:00:00'))
122+ SELECT sql_saga.no_gaps(tstzrange(valid_after ,valid_to), tstzrange('2017-11-27 06:00:00', '2017-11-27 20:00:00'))
123123FROM shifts
124124WHERE job_id = 1;
125125 no_gaps
@@ -128,7 +128,7 @@ WHERE job_id = 1;
128128(1 row)
129129
130130-- it does not cover when the range has something in the middle:
131- SELECT sql_saga.no_gaps(tstzrange(valid_from ,valid_to), tstzrange('2017-11-27 06:00:00', '2017-11-27 17:00:00'))
131+ SELECT sql_saga.no_gaps(tstzrange(valid_after ,valid_to), tstzrange('2017-11-27 06:00:00', '2017-11-27 17:00:00'))
132132FROM shifts
133133WHERE job_id = 2;
134134 no_gaps
@@ -137,7 +137,7 @@ WHERE job_id = 2;
137137(1 row)
138138
139139-- it does not cover when the range is lower-unbounded:
140- SELECT sql_saga.no_gaps(tstzrange(valid_from ,valid_to), tstzrange('-infinity', '2017-11-27 17:00:00'))
140+ SELECT sql_saga.no_gaps(tstzrange(valid_after ,valid_to), tstzrange('-infinity', '2017-11-27 17:00:00'))
141141FROM shifts
142142WHERE job_id = 1;
143143 no_gaps
@@ -146,7 +146,7 @@ WHERE job_id = 1;
146146(1 row)
147147
148148-- it does not cover when the range is upper-unbounded:
149- SELECT sql_saga.no_gaps(tstzrange(valid_from ,valid_to), tstzrange('2017-11-27 06:00:00', 'infinity'))
149+ SELECT sql_saga.no_gaps(tstzrange(valid_after ,valid_to), tstzrange('2017-11-27 06:00:00', 'infinity'))
150150FROM shifts
151151WHERE job_id = 1;
152152 no_gaps
@@ -155,7 +155,7 @@ WHERE job_id = 1;
155155(1 row)
156156
157157-- it does not cover when the range is both-sides-unbounded:
158- SELECT sql_saga.no_gaps(tstzrange(valid_from ,valid_to), tstzrange('-infinity', 'infinity'))
158+ SELECT sql_saga.no_gaps(tstzrange(valid_after ,valid_to), tstzrange('-infinity', 'infinity'))
159159FROM shifts
160160WHERE job_id = 1;
161161 no_gaps
@@ -164,7 +164,7 @@ WHERE job_id = 1;
164164(1 row)
165165
166166-- an infinite start will not cover a finite target if there is uncovered time at the end:
167- SELECT sql_saga.no_gaps(tstzrange(valid_from ,valid_to), tstzrange('2017-11-27 06:00:00', '2017-11-27 20:00:00'))
167+ SELECT sql_saga.no_gaps(tstzrange(valid_after ,valid_to), tstzrange('2017-11-27 06:00:00', '2017-11-27 20:00:00'))
168168FROM shifts
169169WHERE job_id = 3;
170170 no_gaps
@@ -173,7 +173,7 @@ WHERE job_id = 3;
173173(1 row)
174174
175175-- an infinite start will not cover an infinite target if there is uncovered time at the end:
176- SELECT sql_saga.no_gaps(tstzrange(valid_from ,valid_to), tstzrange('-infinity', '2017-11-27 20:00:00'))
176+ SELECT sql_saga.no_gaps(tstzrange(valid_after ,valid_to), tstzrange('-infinity', '2017-11-27 20:00:00'))
177177FROM shifts
178178WHERE job_id = 3;
179179 no_gaps
@@ -182,7 +182,7 @@ WHERE job_id = 3;
182182(1 row)
183183
184184-- an infinite end will not cover a finite target if there is uncovered time at the beginning:
185- SELECT sql_saga.no_gaps(tstzrange(valid_from ,valid_to), tstzrange('2017-11-27 03:00:00', '2017-11-27 17:00:00'))
185+ SELECT sql_saga.no_gaps(tstzrange(valid_after ,valid_to), tstzrange('2017-11-27 03:00:00', '2017-11-27 17:00:00'))
186186FROM shifts
187187WHERE job_id = 4;
188188 no_gaps
@@ -191,7 +191,7 @@ WHERE job_id = 4;
191191(1 row)
192192
193193-- an infinite end will not cover an infinite target if there is uncovered time at the beginning:
194- SELECT sql_saga.no_gaps(tstzrange(valid_from ,valid_to), tstzrange('2017-11-27 03:00:00', 'infinity'))
194+ SELECT sql_saga.no_gaps(tstzrange(valid_after ,valid_to), tstzrange('2017-11-27 03:00:00', 'infinity'))
195195FROM shifts
196196WHERE job_id = 4;
197197 no_gaps
@@ -201,7 +201,7 @@ WHERE job_id = 4;
201201
202202-- NULL:
203203-- it is unknown when the target is null:
204- SELECT sql_saga.no_gaps(tstzrange(valid_from ,valid_to), null)
204+ SELECT sql_saga.no_gaps(tstzrange(valid_after ,valid_to), null)
205205FROM shifts
206206WHERE job_id = 1;
207207 no_gaps
@@ -211,10 +211,10 @@ WHERE job_id = 1;
211211
212212-- Errors:
213213-- it fails if the input ranges go backwards:
214- SELECT sql_saga.no_gaps(tstzrange(valid_from ,valid_to), tstzrange('2017-11-27 13:00:00', '2017-11-27 20:00:00') ORDER BY worker_id DESC)
214+ SELECT sql_saga.no_gaps(tstzrange(valid_after ,valid_to), tstzrange('2017-11-27 13:00:00', '2017-11-27 20:00:00') ORDER BY worker_id DESC)
215215FROM shifts
216216WHERE job_id = 1;
217217ERROR: no_gaps first argument should be sorted but got a range ending before the last covered_to
218- -- TODO: handle an empty target range? e.g. [ 5, 5)
218+ -- TODO: handle an empty target range? e.g. ( 5, 5]
219219-- Or maybe since that is a self-contradiction maybe ignore that case?
220220DELETE FROM shifts;
0 commit comments