Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
P
Postgres FD Implementation
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Abuhujair Javed
Postgres FD Implementation
Commits
81322fc4
Commit
81322fc4
authored
Jul 22, 2021
by
John Naylor
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Fix division by zero error in date_bin
Bauyrzhan Sakhariyev, via Github Backpatch to v14
parent
b1c1b7af
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
22 additions
and
0 deletions
+22
-0
src/backend/utils/adt/timestamp.c
src/backend/utils/adt/timestamp.c
+10
-0
src/test/regress/expected/timestamp.out
src/test/regress/expected/timestamp.out
+3
-0
src/test/regress/expected/timestamptz.out
src/test/regress/expected/timestamptz.out
+3
-0
src/test/regress/sql/timestamp.sql
src/test/regress/sql/timestamp.sql
+3
-0
src/test/regress/sql/timestamptz.sql
src/test/regress/sql/timestamptz.sql
+3
-0
No files found.
src/backend/utils/adt/timestamp.c
View file @
81322fc4
...
...
@@ -3843,6 +3843,11 @@ timestamp_bin(PG_FUNCTION_ARGS)
stride_usecs
=
stride
->
day
*
USECS_PER_DAY
+
stride
->
time
;
if
(
stride_usecs
==
0
)
ereport
(
ERROR
,
(
errcode
(
ERRCODE_DATETIME_VALUE_OUT_OF_RANGE
),
errmsg
(
"stride cannot equal zero"
)));
tm_diff
=
timestamp
-
origin
;
tm_delta
=
tm_diff
-
tm_diff
%
stride_usecs
;
...
...
@@ -4021,6 +4026,11 @@ timestamptz_bin(PG_FUNCTION_ARGS)
stride_usecs
=
stride
->
day
*
USECS_PER_DAY
+
stride
->
time
;
if
(
stride_usecs
==
0
)
ereport
(
ERROR
,
(
errcode
(
ERRCODE_DATETIME_VALUE_OUT_OF_RANGE
),
errmsg
(
"stride cannot equal zero"
)));
tm_diff
=
timestamp
-
origin
;
tm_delta
=
tm_diff
-
tm_diff
%
stride_usecs
;
...
...
src/test/regress/expected/timestamp.out
View file @
81322fc4
...
...
@@ -704,6 +704,9 @@ SELECT date_bin('5 months'::interval, timestamp '2020-02-01 01:01:01', timestamp
ERROR: timestamps cannot be binned into intervals containing months or years
SELECT date_bin('5 years'::interval, timestamp '2020-02-01 01:01:01', timestamp '2001-01-01');
ERROR: timestamps cannot be binned into intervals containing months or years
-- disallow zero intervals
SELECT date_bin('0 days'::interval, timestamp '1970-01-01 01:00:00' , timestamp '1970-01-01 00:00:00');
ERROR: stride cannot equal zero
-- Test casting within a BETWEEN qualifier
SELECT d1 - timestamp without time zone '1997-01-02' AS diff
FROM TIMESTAMP_TBL
...
...
src/test/regress/expected/timestamptz.out
View file @
81322fc4
...
...
@@ -748,6 +748,9 @@ SELECT date_bin('5 months'::interval, timestamp with time zone '2020-02-01 01:01
ERROR: timestamps cannot be binned into intervals containing months or years
SELECT date_bin('5 years'::interval, timestamp with time zone '2020-02-01 01:01:01+00', timestamp with time zone '2001-01-01+00');
ERROR: timestamps cannot be binned into intervals containing months or years
-- disallow zero intervals
SELECT date_bin('0 days'::interval, timestamp with time zone '1970-01-01 01:00:00+00' , timestamp with time zone '1970-01-01 00:00:00+00');
ERROR: stride cannot equal zero
-- Test casting within a BETWEEN qualifier
SELECT d1 - timestamp with time zone '1997-01-02' AS diff
FROM TIMESTAMPTZ_TBL
...
...
src/test/regress/sql/timestamp.sql
View file @
81322fc4
...
...
@@ -263,6 +263,9 @@ SELECT date_bin('5 min'::interval, timestamp '2020-02-01 01:01:01', timestamp '2
SELECT
date_bin
(
'5 months'
::
interval
,
timestamp
'2020-02-01 01:01:01'
,
timestamp
'2001-01-01'
);
SELECT
date_bin
(
'5 years'
::
interval
,
timestamp
'2020-02-01 01:01:01'
,
timestamp
'2001-01-01'
);
-- disallow zero intervals
SELECT
date_bin
(
'0 days'
::
interval
,
timestamp
'1970-01-01 01:00:00'
,
timestamp
'1970-01-01 00:00:00'
);
-- Test casting within a BETWEEN qualifier
SELECT
d1
-
timestamp
without
time
zone
'1997-01-02'
AS
diff
FROM
TIMESTAMP_TBL
...
...
src/test/regress/sql/timestamptz.sql
View file @
81322fc4
...
...
@@ -238,6 +238,9 @@ SELECT date_bin('5 min'::interval, timestamptz '2020-02-01 01:01:01+00', timesta
SELECT
date_bin
(
'5 months'
::
interval
,
timestamp
with
time
zone
'2020-02-01 01:01:01+00'
,
timestamp
with
time
zone
'2001-01-01+00'
);
SELECT
date_bin
(
'5 years'
::
interval
,
timestamp
with
time
zone
'2020-02-01 01:01:01+00'
,
timestamp
with
time
zone
'2001-01-01+00'
);
-- disallow zero intervals
SELECT
date_bin
(
'0 days'
::
interval
,
timestamp
with
time
zone
'1970-01-01 01:00:00+00'
,
timestamp
with
time
zone
'1970-01-01 00:00:00+00'
);
-- Test casting within a BETWEEN qualifier
SELECT
d1
-
timestamp
with
time
zone
'1997-01-02'
AS
diff
FROM
TIMESTAMPTZ_TBL
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment