should be it
This commit is contained in:
169
external/duckdb/test/sql/table_function/range_timestamp.test
vendored
Normal file
169
external/duckdb/test/sql/table_function/range_timestamp.test
vendored
Normal file
@@ -0,0 +1,169 @@
|
||||
# name: test/sql/table_function/range_timestamp.test
|
||||
# description: Test range function with DATE/TIMESTAMP
|
||||
# group: [table_function]
|
||||
|
||||
# date
|
||||
query I
|
||||
SELECT d::DATE FROM range(DATE '1992-01-01', DATE '1992-10-01', INTERVAL (1) MONTH) tbl(d)
|
||||
----
|
||||
1992-01-01
|
||||
1992-02-01
|
||||
1992-03-01
|
||||
1992-04-01
|
||||
1992-05-01
|
||||
1992-06-01
|
||||
1992-07-01
|
||||
1992-08-01
|
||||
1992-09-01
|
||||
|
||||
# range is exclusive
|
||||
query I
|
||||
SELECT * FROM range(date '1992-01-01', date '1992-01-01', interval '1' month);
|
||||
----
|
||||
|
||||
# generate_series is inclusive
|
||||
query I
|
||||
SELECT d::DATE FROM generate_series(DATE '1992-01-01', DATE '1992-10-01', INTERVAL (1) MONTH) tbl(d)
|
||||
----
|
||||
1992-01-01
|
||||
1992-02-01
|
||||
1992-03-01
|
||||
1992-04-01
|
||||
1992-05-01
|
||||
1992-06-01
|
||||
1992-07-01
|
||||
1992-08-01
|
||||
1992-09-01
|
||||
1992-10-01
|
||||
|
||||
# timestamp
|
||||
query I
|
||||
SELECT d FROM range(TIMESTAMP '1992-01-01 00:00:00', TIMESTAMP '1992-01-01 12:00:00', INTERVAL (1) HOUR) tbl(d)
|
||||
----
|
||||
1992-01-01 00:00:00
|
||||
1992-01-01 01:00:00
|
||||
1992-01-01 02:00:00
|
||||
1992-01-01 03:00:00
|
||||
1992-01-01 04:00:00
|
||||
1992-01-01 05:00:00
|
||||
1992-01-01 06:00:00
|
||||
1992-01-01 07:00:00
|
||||
1992-01-01 08:00:00
|
||||
1992-01-01 09:00:00
|
||||
1992-01-01 10:00:00
|
||||
1992-01-01 11:00:00
|
||||
|
||||
# range is exclusive
|
||||
query I
|
||||
SELECT * FROM range(timestamp '1992-01-01 00:00:00', timestamp '1992-01-01 00:00:00', interval '1' month);
|
||||
----
|
||||
|
||||
query I
|
||||
SELECT * FROM range(timestamp '1992-01-01 00:00:00', timestamp '1992-01-01 00:00:01', interval '1' month);
|
||||
----
|
||||
1992-01-01 00:00:00
|
||||
|
||||
# negative interval
|
||||
query I
|
||||
SELECT d FROM range(TIMESTAMP '1992-01-01 00:00:00', TIMESTAMP '1991-06-01 00:00:00', INTERVAL '1 MONTH ago') tbl(d)
|
||||
----
|
||||
1992-01-01 00:00:00
|
||||
1991-12-01 00:00:00
|
||||
1991-11-01 00:00:00
|
||||
1991-10-01 00:00:00
|
||||
1991-09-01 00:00:00
|
||||
1991-08-01 00:00:00
|
||||
1991-07-01 00:00:00
|
||||
|
||||
query I
|
||||
SELECT d FROM generate_series(TIMESTAMP '1992-01-01 00:00:00', TIMESTAMP '1991-06-01 00:00:00', -INTERVAL '1 MONTH') tbl(d)
|
||||
----
|
||||
1992-01-01 00:00:00
|
||||
1991-12-01 00:00:00
|
||||
1991-11-01 00:00:00
|
||||
1991-10-01 00:00:00
|
||||
1991-09-01 00:00:00
|
||||
1991-08-01 00:00:00
|
||||
1991-07-01 00:00:00
|
||||
1991-06-01 00:00:00
|
||||
|
||||
# composite interval
|
||||
query I
|
||||
SELECT d FROM range(TIMESTAMP '1992-01-01 00:00:00', TIMESTAMP '1992-12-31 12:00:00', INTERVAL '1 MONTH 1 DAY 1 HOUR') tbl(d)
|
||||
----
|
||||
1992-01-01 00:00:00
|
||||
1992-02-02 01:00:00
|
||||
1992-03-03 02:00:00
|
||||
1992-04-04 03:00:00
|
||||
1992-05-05 04:00:00
|
||||
1992-06-06 05:00:00
|
||||
1992-07-07 06:00:00
|
||||
1992-08-08 07:00:00
|
||||
1992-09-09 08:00:00
|
||||
1992-10-10 09:00:00
|
||||
1992-11-11 10:00:00
|
||||
1992-12-12 11:00:00
|
||||
|
||||
# large result
|
||||
query I
|
||||
SELECT COUNT(*) FROM range(TIMESTAMP '1992-01-01 00:00:00', TIMESTAMP '2020-01-01 00:00:00', INTERVAL '1 DAY') tbl(d)
|
||||
----
|
||||
10227
|
||||
|
||||
query I
|
||||
SELECT COUNT(*) FROM generate_series(TIMESTAMP '1992-01-01 00:00:00', TIMESTAMP '2020-01-01 00:00:00', INTERVAL '1 DAY') tbl(d)
|
||||
----
|
||||
10228
|
||||
|
||||
# null values result in no rows
|
||||
query I
|
||||
SELECT COUNT(*) FROM range(NULL, TIMESTAMP '1992-12-31 12:00:00', INTERVAL '1 MONTH') tbl(d)
|
||||
----
|
||||
0
|
||||
|
||||
query I
|
||||
SELECT COUNT(*) FROM generate_series(NULL, TIMESTAMP '1992-12-31 12:00:00', INTERVAL '1 MONTH') tbl(d)
|
||||
----
|
||||
0
|
||||
|
||||
# Extreme ranges should not overflow in the binder.
|
||||
statement ok
|
||||
explain
|
||||
from range('290309-12-22 (BC) 00:00:00'::TIMESTAMP, '294247-01-10 04:00:54.775806'::TIMESTAMP, interval '1 hour');
|
||||
|
||||
# zero interval not supported
|
||||
statement error
|
||||
SELECT d FROM range(TIMESTAMP '1992-01-01 00:00:00', TIMESTAMP '1992-12-31 12:00:00', INTERVAL '0 MONTH') tbl(d)
|
||||
----
|
||||
|
||||
# start is smaller than end but we have a negative interval
|
||||
query I
|
||||
SELECT d FROM range(TIMESTAMP '1992-01-01 00:00:00', TIMESTAMP '1992-12-31 12:00:00', INTERVAL '1 MONTH ago') tbl(d)
|
||||
----
|
||||
|
||||
# start is bigger than end but we have a positive interval
|
||||
query I
|
||||
SELECT d FROM range(TIMESTAMP '1993-01-01 00:00:00', TIMESTAMP '1992-01-01 00:00:00', INTERVAL '1 MONTH') tbl(d)
|
||||
----
|
||||
|
||||
# composite interval with negative types not supported
|
||||
statement error
|
||||
SELECT d FROM range(TIMESTAMP '1992-01-01 00:00:00', TIMESTAMP '1992-12-31 12:00:00', INTERVAL '1 MONTH' - INTERVAL '1 HOUR') tbl(d)
|
||||
----
|
||||
|
||||
# Infinities will overflow or cause infinite loops (PG behaviour!) so we ban them
|
||||
statement error
|
||||
SELECT COUNT(*) FROM generate_series('294247-01-10'::TIMESTAMP, 'infinity'::TIMESTAMP, INTERVAL '1 DAY');
|
||||
----
|
||||
|
||||
statement error
|
||||
SELECT COUNT(*) FROM range('294247-01-10'::TIMESTAMP, 'infinity'::TIMESTAMP, INTERVAL '1 DAY');
|
||||
----
|
||||
|
||||
statement error
|
||||
SELECT COUNT(*) FROM generate_series('-infinity'::TIMESTAMP, '290309-12-22 (BC) 00:00:00'::TIMESTAMP, INTERVAL '1 DAY');
|
||||
----
|
||||
|
||||
statement error
|
||||
SELECT COUNT(*) FROM range('-infinity'::TIMESTAMP, '290309-12-22 (BC) 00:00:00'::TIMESTAMP, INTERVAL '1 DAY');
|
||||
----
|
||||
Reference in New Issue
Block a user