diff options
-rw-r--r-- | src/backend/utils/adt/timestamp.c | 28 | ||||
-rw-r--r-- | src/test/regress/expected/timestamp.out | 27 | ||||
-rw-r--r-- | src/test/regress/expected/timestamptz.out | 27 | ||||
-rw-r--r-- | src/test/regress/sql/timestamp.sql | 11 | ||||
-rw-r--r-- | src/test/regress/sql/timestamptz.sql | 11 |
5 files changed, 48 insertions, 56 deletions
diff --git a/src/backend/utils/adt/timestamp.c b/src/backend/utils/adt/timestamp.c index 9834989f598..cc24bcde71a 100644 --- a/src/backend/utils/adt/timestamp.c +++ b/src/backend/utils/adt/timestamp.c @@ -5305,20 +5305,6 @@ generate_series_timestamp(PG_FUNCTION_ARGS) MemoryContext oldcontext; Interval interval_zero; - /* Reject infinities in start and stop values */ - if (TIMESTAMP_IS_NOBEGIN(start) || - TIMESTAMP_IS_NOEND(start)) - ereport(ERROR, - (errcode(ERRCODE_INVALID_PARAMETER_VALUE), - errmsg("start value cannot be infinity"))); - if (TIMESTAMP_IS_NOBEGIN(finish) || - TIMESTAMP_IS_NOEND(finish)) - ereport(ERROR, - (errcode(ERRCODE_INVALID_PARAMETER_VALUE), - errmsg("stop value cannot be infinity"))); - - /* Interval doesn't (currently) have infinity, so nothing to check */ - /* create a function context for cross-call persistence */ funcctx = SRF_FIRSTCALL_INIT(); @@ -5400,20 +5386,6 @@ generate_series_timestamptz(PG_FUNCTION_ARGS) MemoryContext oldcontext; Interval interval_zero; - /* Reject infinities in start and stop values */ - if (TIMESTAMP_IS_NOBEGIN(start) || - TIMESTAMP_IS_NOEND(start)) - ereport(ERROR, - (errcode(ERRCODE_INVALID_PARAMETER_VALUE), - errmsg("start value cannot be infinity"))); - if (TIMESTAMP_IS_NOBEGIN(finish) || - TIMESTAMP_IS_NOEND(finish)) - ereport(ERROR, - (errcode(ERRCODE_INVALID_PARAMETER_VALUE), - errmsg("stop value cannot be infinity"))); - - /* Interval doesn't (currently) have infinity, so nothing to check */ - /* create a function context for cross-call persistence */ funcctx = SRF_FIRSTCALL_INIT(); diff --git a/src/test/regress/expected/timestamp.out b/src/test/regress/expected/timestamp.out index ec4f364c3b1..0ef838eaf60 100644 --- a/src/test/regress/expected/timestamp.out +++ b/src/test/regress/expected/timestamp.out @@ -1780,15 +1780,26 @@ select * from generate_series('2020-01-01 00:00'::timestamp, Thu Jan 02 03:00:00 2020 (28 rows) +-- the LIMIT should allow this to terminate in a reasonable amount of time +-- (but that unfortunately doesn't work yet for SELECT * FROM ...) +select generate_series('2022-01-01 00:00'::timestamp, + 'infinity'::timestamp, + '1 month'::interval) limit 10; + generate_series +-------------------------- + Sat Jan 01 00:00:00 2022 + Tue Feb 01 00:00:00 2022 + Tue Mar 01 00:00:00 2022 + Fri Apr 01 00:00:00 2022 + Sun May 01 00:00:00 2022 + Wed Jun 01 00:00:00 2022 + Fri Jul 01 00:00:00 2022 + Mon Aug 01 00:00:00 2022 + Thu Sep 01 00:00:00 2022 + Sat Oct 01 00:00:00 2022 +(10 rows) + -- errors -select * from generate_series('-infinity'::timestamp, - '2020-01-02 03:00'::timestamp, - '1 hour'::interval); -ERROR: start value cannot be infinity -select * from generate_series('2020-01-01 00:00'::timestamp, - 'infinity'::timestamp, - '1 hour'::interval); -ERROR: stop value cannot be infinity select * from generate_series('2020-01-01 00:00'::timestamp, '2020-01-02 03:00'::timestamp, '0 hour'::interval); diff --git a/src/test/regress/expected/timestamptz.out b/src/test/regress/expected/timestamptz.out index 55ef10daa90..71d9a0bcb2f 100644 --- a/src/test/regress/expected/timestamptz.out +++ b/src/test/regress/expected/timestamptz.out @@ -2122,15 +2122,26 @@ select * from generate_series('2020-01-01 00:00'::timestamptz, Thu Jan 02 03:00:00 2020 PST (28 rows) +-- the LIMIT should allow this to terminate in a reasonable amount of time +-- (but that unfortunately doesn't work yet for SELECT * FROM ...) +select generate_series('2022-01-01 00:00'::timestamptz, + 'infinity'::timestamptz, + '1 month'::interval) limit 10; + generate_series +------------------------------ + Sat Jan 01 00:00:00 2022 PST + Tue Feb 01 00:00:00 2022 PST + Tue Mar 01 00:00:00 2022 PST + Fri Apr 01 00:00:00 2022 PDT + Sun May 01 00:00:00 2022 PDT + Wed Jun 01 00:00:00 2022 PDT + Fri Jul 01 00:00:00 2022 PDT + Mon Aug 01 00:00:00 2022 PDT + Thu Sep 01 00:00:00 2022 PDT + Sat Oct 01 00:00:00 2022 PDT +(10 rows) + -- errors -select * from generate_series('-infinity'::timestamptz, - '2020-01-02 03:00'::timestamptz, - '1 hour'::interval); -ERROR: start value cannot be infinity -select * from generate_series('2020-01-01 00:00'::timestamptz, - 'infinity'::timestamptz, - '1 hour'::interval); -ERROR: stop value cannot be infinity select * from generate_series('2020-01-01 00:00'::timestamptz, '2020-01-02 03:00'::timestamptz, '0 hour'::interval); diff --git a/src/test/regress/sql/timestamp.sql b/src/test/regress/sql/timestamp.sql index 5a8defa9bbe..32066f1fde6 100644 --- a/src/test/regress/sql/timestamp.sql +++ b/src/test/regress/sql/timestamp.sql @@ -248,13 +248,12 @@ SELECT make_timestamp(2014,12,28,6,30,45.887); select * from generate_series('2020-01-01 00:00'::timestamp, '2020-01-02 03:00'::timestamp, '1 hour'::interval); +-- the LIMIT should allow this to terminate in a reasonable amount of time +-- (but that unfortunately doesn't work yet for SELECT * FROM ...) +select generate_series('2022-01-01 00:00'::timestamp, + 'infinity'::timestamp, + '1 month'::interval) limit 10; -- errors -select * from generate_series('-infinity'::timestamp, - '2020-01-02 03:00'::timestamp, - '1 hour'::interval); -select * from generate_series('2020-01-01 00:00'::timestamp, - 'infinity'::timestamp, - '1 hour'::interval); select * from generate_series('2020-01-01 00:00'::timestamp, '2020-01-02 03:00'::timestamp, '0 hour'::interval); diff --git a/src/test/regress/sql/timestamptz.sql b/src/test/regress/sql/timestamptz.sql index 925814f8c10..14ca790a01c 100644 --- a/src/test/regress/sql/timestamptz.sql +++ b/src/test/regress/sql/timestamptz.sql @@ -338,13 +338,12 @@ RESET TimeZone; select * from generate_series('2020-01-01 00:00'::timestamptz, '2020-01-02 03:00'::timestamptz, '1 hour'::interval); +-- the LIMIT should allow this to terminate in a reasonable amount of time +-- (but that unfortunately doesn't work yet for SELECT * FROM ...) +select generate_series('2022-01-01 00:00'::timestamptz, + 'infinity'::timestamptz, + '1 month'::interval) limit 10; -- errors -select * from generate_series('-infinity'::timestamptz, - '2020-01-02 03:00'::timestamptz, - '1 hour'::interval); -select * from generate_series('2020-01-01 00:00'::timestamptz, - 'infinity'::timestamptz, - '1 hour'::interval); select * from generate_series('2020-01-01 00:00'::timestamptz, '2020-01-02 03:00'::timestamptz, '0 hour'::interval); |