diff options
-rw-r--r-- | doc/src/sgml/datatype.sgml | 40 | ||||
-rw-r--r-- | src/backend/utils/adt/date.c | 5 | ||||
-rw-r--r-- | src/test/regress/expected/horology-no-DST-before-1970.out | 26 | ||||
-rw-r--r-- | src/test/regress/expected/horology-solaris-1947.out | 26 | ||||
-rw-r--r-- | src/test/regress/expected/horology.out | 26 | ||||
-rw-r--r-- | src/test/regress/expected/time.out | 9 | ||||
-rw-r--r-- | src/test/regress/sql/horology.sql | 2 | ||||
-rw-r--r-- | src/test/regress/sql/time.sql | 7 |
8 files changed, 86 insertions, 55 deletions
diff --git a/doc/src/sgml/datatype.sgml b/doc/src/sgml/datatype.sgml index 9bbd5146c2a..4f166e06bc7 100644 --- a/doc/src/sgml/datatype.sgml +++ b/doc/src/sgml/datatype.sgml @@ -1,5 +1,5 @@ <!-- -$Header: /cvsroot/pgsql/doc/src/sgml/datatype.sgml,v 1.112 2003/01/29 01:08:42 tgl Exp $ +$Header: /cvsroot/pgsql/doc/src/sgml/datatype.sgml,v 1.113 2003/01/31 01:08:07 tgl Exp $ --> <chapter id="datatype"> @@ -1488,14 +1488,21 @@ SELECT b, char_length(b) FROM test2; </indexterm> <para> - The <type>time</type> type can be specified as <type>time</type> or - as <type>time without time zone</type>. The optional precision - <replaceable>p</replaceable> should be between 0 and 6, and - defaults to the precision of the input time literal. + The time-of-day types are <type>time [ + (<replaceable>p</replaceable>) ] without time zone</type> and + <type>time [ (<replaceable>p</replaceable>) ] with time + zone</type>. Writing just <type>time</type> is equivalent to + <type>time without time zone</type>. </para> <para> - <xref linkend="datatype-datetime-time-table"> shows the valid <type>time</type> inputs. + Valid input for these types consists of a time of day followed by an + optional time zone. (See <xref linkend="datatype-datetime-time-table">.) + The optional precision + <replaceable>p</replaceable> 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 <type>time without time zone</type>, + it is silently ignored. </para> <table id="datatype-datetime-time-table"> @@ -1536,27 +1543,6 @@ SELECT b, char_length(b) FROM test2; <entry><literal>allballs</literal></entry> <entry>same as 00:00:00</entry> </row> - </tbody> - </tgroup> - </table> - - <para> - The type <type>time with time zone</type> accepts all input also - legal for the <type>time</type> type, appended with a legal time - zone, as shown in <xref - linkend="datatype-datetime-timetz-table">. - </para> - - <table id="datatype-datetime-timetz-table"> - <title>Time With Time Zone Input</title> - <tgroup cols="2"> - <thead> - <row> - <entry>Example</entry> - <entry>Description</entry> - </row> - </thead> - <tbody> <row> <entry>04:05:06.789-8</entry> <entry>ISO 8601</entry> diff --git a/src/backend/utils/adt/date.c b/src/backend/utils/adt/date.c index 90f41ad817d..09d0e9aa256 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 b8b7423ec52..ab40a6404ca 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 1601a346f01..222ee303679 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 294b7854106..2735641e396 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 ddefeadc34d..e8b2b6de337 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 6d767d23760..0af769a8b2c 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 8ab8caa6077..510cc148549 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'); |