should be it

This commit is contained in:
2025-10-24 19:21:19 -05:00
parent a4b23fc57c
commit f09560c7b1
14047 changed files with 3161551 additions and 1 deletions

View 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');
----