diff --git a/doc/src/sgml/datatype.sgml b/doc/src/sgml/datatype.sgml index 9bbd5146c2..4f166e06bc 100644 --- a/doc/src/sgml/datatype.sgml +++ b/doc/src/sgml/datatype.sgml @@ -1,5 +1,5 @@ @@ -1488,14 +1488,21 @@ SELECT b, char_length(b) FROM test2; - The time type can be specified as time or - as time without time zone. The optional precision - p should be between 0 and 6, and - defaults to the precision of the input time literal. + The time-of-day types are time [ + (p) ] without time zone and + time [ (p) ] with time + zone. Writing just time is equivalent to + time without time zone. - shows the valid time inputs. + Valid input for these types consists of a time of day followed by an + optional time zone. (See .) + The optional precision + p should be between 0 and 6, and + defaults to the precision of the input time literal. If a time zone + is specified in the input for time without time zone, + it is silently ignored. @@ -1536,27 +1543,6 @@ SELECT b, char_length(b) FROM test2; allballssame as 00:00:00 - - -
- - - The type time with time zone accepts all input also - legal for the time type, appended with a legal time - zone, as shown in . - - - - Time With Time Zone Input - - - - Example - Description - - - 04:05:06.789-8 ISO 8601 diff --git a/src/backend/utils/adt/date.c b/src/backend/utils/adt/date.c index 90f41ad817..09d0e9aa25 100644 --- a/src/backend/utils/adt/date.c +++ b/src/backend/utils/adt/date.c @@ -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); diff --git a/src/test/regress/expected/horology-no-DST-before-1970.out b/src/test/regress/expected/horology-no-DST-before-1970.out index b8b7423ec5..ab40a6404c 100644 --- a/src/test/regress/expected/horology-no-DST-before-1970.out +++ b/src/test/regress/expected/horology-no-DST-before-1970.out @@ -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 ------------------ diff --git a/src/test/regress/expected/horology-solaris-1947.out b/src/test/regress/expected/horology-solaris-1947.out index 1601a346f0..222ee30367 100644 --- a/src/test/regress/expected/horology-solaris-1947.out +++ b/src/test/regress/expected/horology-solaris-1947.out @@ -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 ------------------ diff --git a/src/test/regress/expected/horology.out b/src/test/regress/expected/horology.out index 294b785410..2735641e39 100644 --- a/src/test/regress/expected/horology.out +++ b/src/test/regress/expected/horology.out @@ -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 ------------------ diff --git a/src/test/regress/expected/time.out b/src/test/regress/expected/time.out index ddefeadc34..e8b2b6de33 100644 --- a/src/test/regress/expected/time.out +++ b/src/test/regress/expected/time.out @@ -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'); diff --git a/src/test/regress/sql/horology.sql b/src/test/regress/sql/horology.sql index 6d767d2376..0af769a8b2 100644 --- a/src/test/regress/sql/horology.sql +++ b/src/test/regress/sql/horology.sql @@ -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'; diff --git a/src/test/regress/sql/time.sql b/src/test/regress/sql/time.sql index 8ab8caa607..510cc14854 100644 --- a/src/test/regress/sql/time.sql +++ b/src/test/regress/sql/time.sql @@ -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');