aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/backend/utils/adt/timestamp.c28
-rw-r--r--src/test/regress/expected/timestamp.out27
-rw-r--r--src/test/regress/expected/timestamptz.out27
-rw-r--r--src/test/regress/sql/timestamp.sql11
-rw-r--r--src/test/regress/sql/timestamptz.sql11
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);