mirror of
https://github.com/postgres/postgres.git
synced 2025-11-19 13:42:17 +03:00
Allow a time zone to be specified (and silently ignored) in the input
for type 'time without time zone', as we already did for type 'timestamp without time zone'. This patch was proposed by Tom Lockhart on 7-Nov-02, but he never got around to applying it. Adjust regression tests and documentation to match.
This commit is contained in:
@@ -8,7 +8,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/backend/utils/adt/date.c,v 1.77 2003/01/29 01:08:42 tgl Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/utils/adt/date.c,v 1.78 2003/01/31 01:08:08 tgl Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@@ -511,6 +511,7 @@ time_in(PG_FUNCTION_ARGS)
|
||||
fsec_t fsec;
|
||||
struct tm tt,
|
||||
*tm = &tt;
|
||||
int tz;
|
||||
int nf;
|
||||
char lowstr[MAXDATELEN + 1];
|
||||
char *field[MAXDATEFIELDS];
|
||||
@@ -521,7 +522,7 @@ time_in(PG_FUNCTION_ARGS)
|
||||
elog(ERROR, "Bad time external representation (too long) '%s'", str);
|
||||
|
||||
if ((ParseDateTime(str, lowstr, field, ftype, MAXDATEFIELDS, &nf) != 0)
|
||||
|| (DecodeTimeOnly(field, ftype, nf, &dtype, tm, &fsec, NULL) != 0))
|
||||
|| (DecodeTimeOnly(field, ftype, nf, &dtype, tm, &fsec, &tz) != 0))
|
||||
elog(ERROR, "Bad time external representation '%s'", str);
|
||||
|
||||
tm2time(tm, fsec, &result);
|
||||
|
||||
@@ -196,15 +196,31 @@ SELECT timestamp with time zone '27.12.2001 04:05:06.789-08';
|
||||
(1 row)
|
||||
|
||||
SET DateStyle = 'ISO';
|
||||
-- Reject time without time zone having a time zone specified
|
||||
-- As of 7.4, allow time without time zone having a time zone specified
|
||||
SELECT time without time zone '040506.789+08';
|
||||
ERROR: Bad time external representation '040506.789+08'
|
||||
time
|
||||
---------------
|
||||
04:05:06.7890
|
||||
(1 row)
|
||||
|
||||
SELECT time without time zone '040506.789-08';
|
||||
ERROR: Bad time external representation '040506.789-08'
|
||||
time
|
||||
---------------
|
||||
04:05:06.7890
|
||||
(1 row)
|
||||
|
||||
SELECT time without time zone 'T040506.789+08';
|
||||
ERROR: Bad time external representation 'T040506.789+08'
|
||||
time
|
||||
---------------
|
||||
04:05:06.7890
|
||||
(1 row)
|
||||
|
||||
SELECT time without time zone 'T040506.789-08';
|
||||
ERROR: Bad time external representation 'T040506.789-08'
|
||||
time
|
||||
---------------
|
||||
04:05:06.7890
|
||||
(1 row)
|
||||
|
||||
SELECT time with time zone '040506.789+08';
|
||||
timetz
|
||||
------------------
|
||||
|
||||
@@ -196,15 +196,31 @@ SELECT timestamp with time zone '27.12.2001 04:05:06.789-08';
|
||||
(1 row)
|
||||
|
||||
SET DateStyle = 'ISO';
|
||||
-- Reject time without time zone having a time zone specified
|
||||
-- As of 7.4, allow time without time zone having a time zone specified
|
||||
SELECT time without time zone '040506.789+08';
|
||||
ERROR: Bad time external representation '040506.789+08'
|
||||
time
|
||||
---------------
|
||||
04:05:06.7890
|
||||
(1 row)
|
||||
|
||||
SELECT time without time zone '040506.789-08';
|
||||
ERROR: Bad time external representation '040506.789-08'
|
||||
time
|
||||
---------------
|
||||
04:05:06.7890
|
||||
(1 row)
|
||||
|
||||
SELECT time without time zone 'T040506.789+08';
|
||||
ERROR: Bad time external representation 'T040506.789+08'
|
||||
time
|
||||
---------------
|
||||
04:05:06.7890
|
||||
(1 row)
|
||||
|
||||
SELECT time without time zone 'T040506.789-08';
|
||||
ERROR: Bad time external representation 'T040506.789-08'
|
||||
time
|
||||
---------------
|
||||
04:05:06.7890
|
||||
(1 row)
|
||||
|
||||
SELECT time with time zone '040506.789+08';
|
||||
timetz
|
||||
------------------
|
||||
|
||||
@@ -196,15 +196,31 @@ SELECT timestamp with time zone '27.12.2001 04:05:06.789-08';
|
||||
(1 row)
|
||||
|
||||
SET DateStyle = 'ISO';
|
||||
-- Reject time without time zone having a time zone specified
|
||||
-- As of 7.4, allow time without time zone having a time zone specified
|
||||
SELECT time without time zone '040506.789+08';
|
||||
ERROR: Bad time external representation '040506.789+08'
|
||||
time
|
||||
---------------
|
||||
04:05:06.7890
|
||||
(1 row)
|
||||
|
||||
SELECT time without time zone '040506.789-08';
|
||||
ERROR: Bad time external representation '040506.789-08'
|
||||
time
|
||||
---------------
|
||||
04:05:06.7890
|
||||
(1 row)
|
||||
|
||||
SELECT time without time zone 'T040506.789+08';
|
||||
ERROR: Bad time external representation 'T040506.789+08'
|
||||
time
|
||||
---------------
|
||||
04:05:06.7890
|
||||
(1 row)
|
||||
|
||||
SELECT time without time zone 'T040506.789-08';
|
||||
ERROR: Bad time external representation 'T040506.789-08'
|
||||
time
|
||||
---------------
|
||||
04:05:06.7890
|
||||
(1 row)
|
||||
|
||||
SELECT time with time zone '040506.789+08';
|
||||
timetz
|
||||
------------------
|
||||
|
||||
@@ -4,12 +4,9 @@
|
||||
CREATE TABLE TIME_TBL (f1 time(2));
|
||||
INSERT INTO TIME_TBL VALUES ('00:00');
|
||||
INSERT INTO TIME_TBL VALUES ('01:00');
|
||||
INSERT INTO TIME_TBL VALUES ('02:03');
|
||||
INSERT INTO TIME_TBL VALUES ('07:07 PST');
|
||||
ERROR: Bad time external representation '07:07 PST'
|
||||
INSERT INTO TIME_TBL VALUES ('08:08 EDT');
|
||||
ERROR: Bad time external representation '08:08 EDT'
|
||||
INSERT INTO TIME_TBL VALUES ('11:59');
|
||||
-- as of 7.4, timezone spec should be accepted and ignored
|
||||
INSERT INTO TIME_TBL VALUES ('02:03 PST');
|
||||
INSERT INTO TIME_TBL VALUES ('11:59 EDT');
|
||||
INSERT INTO TIME_TBL VALUES ('12:00');
|
||||
INSERT INTO TIME_TBL VALUES ('12:01');
|
||||
INSERT INTO TIME_TBL VALUES ('23:59');
|
||||
|
||||
@@ -42,7 +42,7 @@ SET DateStyle = 'German';
|
||||
SELECT timestamp with time zone '27.12.2001 04:05:06.789+08';
|
||||
SELECT timestamp with time zone '27.12.2001 04:05:06.789-08';
|
||||
SET DateStyle = 'ISO';
|
||||
-- Reject time without time zone having a time zone specified
|
||||
-- As of 7.4, allow time without time zone having a time zone specified
|
||||
SELECT time without time zone '040506.789+08';
|
||||
SELECT time without time zone '040506.789-08';
|
||||
SELECT time without time zone 'T040506.789+08';
|
||||
|
||||
@@ -6,10 +6,9 @@ CREATE TABLE TIME_TBL (f1 time(2));
|
||||
|
||||
INSERT INTO TIME_TBL VALUES ('00:00');
|
||||
INSERT INTO TIME_TBL VALUES ('01:00');
|
||||
INSERT INTO TIME_TBL VALUES ('02:03');
|
||||
INSERT INTO TIME_TBL VALUES ('07:07 PST');
|
||||
INSERT INTO TIME_TBL VALUES ('08:08 EDT');
|
||||
INSERT INTO TIME_TBL VALUES ('11:59');
|
||||
-- as of 7.4, timezone spec should be accepted and ignored
|
||||
INSERT INTO TIME_TBL VALUES ('02:03 PST');
|
||||
INSERT INTO TIME_TBL VALUES ('11:59 EDT');
|
||||
INSERT INTO TIME_TBL VALUES ('12:00');
|
||||
INSERT INTO TIME_TBL VALUES ('12:01');
|
||||
INSERT INTO TIME_TBL VALUES ('23:59');
|
||||
|
||||
Reference in New Issue
Block a user