diff --git a/src/test/regress/expected/date.out b/src/test/regress/expected/date.out new file mode 100644 index 0000000000..9437fd085a --- /dev/null +++ b/src/test/regress/expected/date.out @@ -0,0 +1,144 @@ +-- +-- DATE +-- +CREATE TABLE DATE_TBL (f1 date); +INSERT INTO DATE_TBL VALUES ('1957-04-09'); +INSERT INTO DATE_TBL VALUES ('1957-06-13'); +INSERT INTO DATE_TBL VALUES ('1996-02-28'); +INSERT INTO DATE_TBL VALUES ('1996-02-29'); +INSERT INTO DATE_TBL VALUES ('1996-03-01'); +INSERT INTO DATE_TBL VALUES ('1996-03-02'); +INSERT INTO DATE_TBL VALUES ('1997-02-28'); +INSERT INTO DATE_TBL VALUES ('1997-02-29'); +ERROR: Bad date external representation '1997-02-29' +INSERT INTO DATE_TBL VALUES ('1997-03-01'); +INSERT INTO DATE_TBL VALUES ('1997-03-02'); +INSERT INTO DATE_TBL VALUES ('2000-04-01'); +INSERT INTO DATE_TBL VALUES ('2000-04-02'); +INSERT INTO DATE_TBL VALUES ('2000-04-03'); +INSERT INTO DATE_TBL VALUES ('2038-04-08'); +INSERT INTO DATE_TBL VALUES ('2039-04-09'); +INSERT INTO DATE_TBL VALUES ('2040-04-10'); +SELECT f1 AS "Fifteen" FROM DATE_TBL; + Fifteen +------------ + 04-09-1957 + 06-13-1957 + 02-28-1996 + 02-29-1996 + 03-01-1996 + 03-02-1996 + 02-28-1997 + 03-01-1997 + 03-02-1997 + 04-01-2000 + 04-02-2000 + 04-03-2000 + 04-08-2038 + 04-09-2039 + 04-10-2040 +(15 rows) + +SELECT f1 AS "Nine" FROM DATE_TBL WHERE f1 < '2000-01-01'; + Nine +------------ + 04-09-1957 + 06-13-1957 + 02-28-1996 + 02-29-1996 + 03-01-1996 + 03-02-1996 + 02-28-1997 + 03-01-1997 + 03-02-1997 +(9 rows) + +SELECT f1 AS "Three" FROM DATE_TBL + WHERE f1 BETWEEN '2000-01-01' AND '2001-01-01'; + Three +------------ + 04-01-2000 + 04-02-2000 + 04-03-2000 +(3 rows) + +-- +-- Simple math +-- Leave most of it for the horology tests +-- +SELECT f1 - date '2000-01-01' AS "Days From 2K" FROM DATE_TBL; + Days From 2K +-------------- + -15607 + -15542 + -1403 + -1402 + -1401 + -1400 + -1037 + -1036 + -1035 + 91 + 92 + 93 + 13977 + 14343 + 14710 +(15 rows) + +SELECT f1 - date 'epoch' AS "Days From Epoch" FROM DATE_TBL; + Days From Epoch +----------------- + -4650 + -4585 + 9554 + 9555 + 9556 + 9557 + 9920 + 9921 + 9922 + 11048 + 11049 + 11050 + 24934 + 25300 + 25667 +(15 rows) + +SELECT date 'yesterday' - date 'today' AS "One day"; + One day +--------- + -1 +(1 row) + +SELECT date 'today' - date 'tomorrow' AS "One day"; + One day +--------- + -1 +(1 row) + +SELECT date 'yesterday' - date 'tomorrow' AS "Two days"; + Two days +---------- + -2 +(1 row) + +SELECT date 'tomorrow' - date 'today' AS "One day"; + One day +--------- + 1 +(1 row) + +SELECT date 'today' - date 'yesterday' AS "One day"; + One day +--------- + 1 +(1 row) + +SELECT date 'tomorrow' - date 'yesterday' AS "Two days"; + Two days +---------- + 2 +(1 row) + diff --git a/src/test/regress/expected/horology.out b/src/test/regress/expected/horology.out index f026b93fa8..ec84757474 100644 --- a/src/test/regress/expected/horology.out +++ b/src/test/regress/expected/horology.out @@ -2,6 +2,48 @@ -- HOROLOGY -- -- +-- date, time arithmetic +-- +SELECT date '1981-02-03' + time '04:05:06' AS "Date + Time"; + Date + Time +------------------------------ + Tue Feb 03 04:05:06 1981 PST +(1 row) + +SELECT date '1991-02-03' + time with time zone '04:05:06 PST' AS "Date + Time PST"; + Date + Time PST +------------------------------ + Sun Feb 03 04:05:06 1991 PST +(1 row) + +SELECT date '2001-02-03' + time with time zone '04:05:06 UTC' AS "Date + Time UTC"; + Date + Time UTC +------------------------------ + Fri Feb 02 20:05:06 2001 PST +(1 row) + +SELECT date '1991-02-03' + interval '2 years' AS "Add Two Years"; + Add Two Years +------------------------------ + Wed Feb 03 00:00:00 1993 PST +(1 row) + +SELECT date '2001-12-13' - interval '2 years' AS "Subtract Two Years"; + Subtract Two Years +------------------------------ + Mon Dec 13 00:00:00 1999 PST +(1 row) + +SELECT date '1991-02-03' - time '04:05:06' AS "Subtract Time"; + Subtract Time +------------------------------ + Sat Feb 02 19:54:54 1991 PST +(1 row) + +SELECT date '1991-02-03' - time with time zone '04:05:06 UTC' AS "Subtract Time UTC"; +ERROR: Unable to identify an operator '-' for types 'date' and 'timetz' + You will have to retype this query using an explicit cast +-- -- timestamp, interval arithmetic -- SELECT timestamp '1996-03-01' - interval '1 second' AS "Feb 29"; diff --git a/src/test/regress/expected/time.out b/src/test/regress/expected/time.out new file mode 100644 index 0000000000..e28da20ec1 --- /dev/null +++ b/src/test/regress/expected/time.out @@ -0,0 +1,183 @@ +-- +-- TIME +-- +CREATE TABLE TIME_TBL (f1 time, f2 time with time zone); +INSERT INTO TIME_TBL VALUES ('00:00', '00:00 PDT'); +INSERT INTO TIME_TBL VALUES ('01:00', '01:00 PDT'); +INSERT INTO TIME_TBL VALUES ('02:03', '02:03 PDT'); +INSERT INTO TIME_TBL VALUES ('11:59', '11:59 PDT'); +INSERT INTO TIME_TBL VALUES ('12:00', '12:00 PDT'); +INSERT INTO TIME_TBL VALUES ('12:01', '12:01 PDT'); +INSERT INTO TIME_TBL VALUES ('23:59', '23:59 PDT'); +INSERT INTO TIME_TBL VALUES ('11:59:59.99 PM', '11:59:59.99 PM PDT'); +SELECT f1 AS "Time", f2 AS "Time TZ" FROM TIME_TBL; + Time | Time TZ +----------+------------- + 00:00:00 | 00:00:00-07 + 01:00:00 | 01:00:00-07 + 02:03:00 | 02:03:00-07 + 11:59:00 | 11:59:00-07 + 12:00:00 | 12:00:00-07 + 12:01:00 | 12:01:00-07 + 23:59:00 | 23:59:00-07 + 23:59:59 | 23:59:59-07 +(8 rows) + +SELECT f1 AS "Three" FROM TIME_TBL WHERE f1 < '05:06:07'; + Three +---------- + 00:00:00 + 01:00:00 + 02:03:00 +(3 rows) + +SELECT f1 AS "Five" FROM TIME_TBL WHERE f1 > '05:06:07'; + Five +---------- + 11:59:00 + 12:00:00 + 12:01:00 + 23:59:00 + 23:59:59 +(5 rows) + +SELECT f1 AS "None" FROM TIME_TBL WHERE f1 < '00:00'; + None +------ +(0 rows) + +SELECT f1 AS "Eight" FROM TIME_TBL WHERE f1 >= '00:00'; + Eight +---------- + 00:00:00 + 01:00:00 + 02:03:00 + 11:59:00 + 12:00:00 + 12:01:00 + 23:59:00 + 23:59:59 +(8 rows) + +-- +-- TIME simple math +-- +SELECT f1 + time '00:01' AS "Eight" FROM TIME_TBL; + Eight +-------------------- + @ 1 min + @ 1 hour 1 min + @ 2 hours 4 mins + @ 12 hours + @ 12 hours 1 min + @ 12 hours 2 mins + @ 1 day + @ 1 day 59.99 secs +(8 rows) + +SELECT f1 + time '01:00' AS "Eight" FROM TIME_TBL; + Eight +---------------------------- + @ 1 hour + @ 2 hours + @ 3 hours 3 mins + @ 12 hours 59 mins + @ 13 hours + @ 13 hours 1 min + @ 1 day 59 mins + @ 1 day 59 mins 59.99 secs +(8 rows) + +SELECT f1 + time '00:00:01.11' AS "Eight" FROM TIME_TBL; + Eight +------------------------------ + @ 1.11 secs + @ 1 hour 1.11 secs + @ 2 hours 3 mins 1.11 secs + @ 11 hours 59 mins 1.11 secs + @ 12 hours 1.11 secs + @ 12 hours 1 min 1.11 secs + @ 23 hours 59 mins 1.11 secs + @ 1 day 1.10 secs +(8 rows) + +SELECT f1 + time '00:00:59.99' AS "Eight" FROM TIME_TBL; + Eight +------------------------------- + @ 59.99 secs + @ 1 hour 59.99 secs + @ 2 hours 3 mins 59.99 secs + @ 11 hours 59 mins 59.99 secs + @ 12 hours 59.99 secs + @ 12 hours 1 min 59.99 secs + @ 23 hours 59 mins 59.99 secs + @ 1 day 59.98 secs +(8 rows) + +SELECT f1 - '00:01' AS "Eight" FROM TIME_TBL; + Eight +------------------------------- + @ 1 min ago + @ 59 mins + @ 2 hours 2 mins + @ 11 hours 58 mins + @ 11 hours 59 mins + @ 12 hours + @ 23 hours 58 mins + @ 23 hours 58 mins 59.99 secs +(8 rows) + +SELECT f1 - '01:00' AS "Eight" FROM TIME_TBL; + Eight +------------------------------- + @ 1 hour ago + @ 0 + @ 1 hour 3 mins + @ 10 hours 59 mins + @ 11 hours + @ 11 hours 1 min + @ 22 hours 59 mins + @ 22 hours 59 mins 59.99 secs +(8 rows) + +SELECT f1 - '00:00:01.11' AS "Eight" FROM TIME_TBL; + Eight +------------------------------- + @ 1.11 secs ago + @ 59 mins 58.89 secs + @ 2 hours 2 mins 58.89 secs + @ 11 hours 58 mins 58.89 secs + @ 11 hours 59 mins 58.89 secs + @ 12 hours 58.89 secs + @ 23 hours 58 mins 58.89 secs + @ 23 hours 59 mins 58.88 secs +(8 rows) + +SELECT f1 - '00:00:59.99' AS "Eight" FROM TIME_TBL; + Eight +------------------------------ + @ 59.99 secs ago + @ 59 mins 0.01 secs + @ 2 hours 2 mins 0.01 secs + @ 11 hours 58 mins 0.01 secs + @ 11 hours 59 mins 0.01 secs + @ 12 hours 0.01 secs + @ 23 hours 58 mins 0.01 secs + @ 23 hours 59 mins +(8 rows) + +-- +-- TIME WITH TIME ZONE simple math +-- +/* +-- Not yet implemented +-- Thomas 2000-09-09 +SELECT f2 + time '00:01' AS "" FROM TIME_TBL; +SELECT f2 + time '01:00' AS "" FROM TIME_TBL; +SELECT f2 + time '00:00:01.11' AS "" FROM TIME_TBL; +SELECT f2 + '00:00:59.99' AS "" FROM TIME_TBL; +SELECT f2 - '00:01' AS "" FROM TIME_TBL; +SELECT f2 - '01:00' AS "" FROM TIME_TBL; +SELECT f2 - '00:00:01.11' AS "" FROM TIME_TBL; +SELECT f2 - '00:00:59.99' AS "" FROM TIME_TBL; +*/ diff --git a/src/test/regress/output/misc.source b/src/test/regress/output/misc.source index dba952f863..a39f70a315 100644 --- a/src/test/regress/output/misc.source +++ b/src/test/regress/output/misc.source @@ -587,6 +587,7 @@ SELECT user_relns() AS user_relns copy_tbl d d_star + date_tbl default_seq default_tbl defaultexpr_tbl @@ -648,12 +649,13 @@ SELECT user_relns() AS user_relns tenk1 tenk2 text_tbl + time_tbl timestamp_tbl tinterval_tbl toyemp varchar_tbl xacttest -(90 rows) +(92 rows) --SELECT name(equipment(hobby_construct(text 'skywalking', text 'mer'))) AS equip_name; -- diff --git a/src/test/regress/sql/date.sql b/src/test/regress/sql/date.sql new file mode 100644 index 0000000000..9e98041ce8 --- /dev/null +++ b/src/test/regress/sql/date.sql @@ -0,0 +1,50 @@ +-- +-- DATE +-- + +CREATE TABLE DATE_TBL (f1 date); + +INSERT INTO DATE_TBL VALUES ('1957-04-09'); +INSERT INTO DATE_TBL VALUES ('1957-06-13'); +INSERT INTO DATE_TBL VALUES ('1996-02-28'); +INSERT INTO DATE_TBL VALUES ('1996-02-29'); +INSERT INTO DATE_TBL VALUES ('1996-03-01'); +INSERT INTO DATE_TBL VALUES ('1996-03-02'); +INSERT INTO DATE_TBL VALUES ('1997-02-28'); +INSERT INTO DATE_TBL VALUES ('1997-02-29'); +INSERT INTO DATE_TBL VALUES ('1997-03-01'); +INSERT INTO DATE_TBL VALUES ('1997-03-02'); +INSERT INTO DATE_TBL VALUES ('2000-04-01'); +INSERT INTO DATE_TBL VALUES ('2000-04-02'); +INSERT INTO DATE_TBL VALUES ('2000-04-03'); +INSERT INTO DATE_TBL VALUES ('2038-04-08'); +INSERT INTO DATE_TBL VALUES ('2039-04-09'); +INSERT INTO DATE_TBL VALUES ('2040-04-10'); + +SELECT f1 AS "Fifteen" FROM DATE_TBL; + +SELECT f1 AS "Nine" FROM DATE_TBL WHERE f1 < '2000-01-01'; + +SELECT f1 AS "Three" FROM DATE_TBL + WHERE f1 BETWEEN '2000-01-01' AND '2001-01-01'; + +-- +-- Simple math +-- Leave most of it for the horology tests +-- + +SELECT f1 - date '2000-01-01' AS "Days From 2K" FROM DATE_TBL; + +SELECT f1 - date 'epoch' AS "Days From Epoch" FROM DATE_TBL; + +SELECT date 'yesterday' - date 'today' AS "One day"; + +SELECT date 'today' - date 'tomorrow' AS "One day"; + +SELECT date 'yesterday' - date 'tomorrow' AS "Two days"; + +SELECT date 'tomorrow' - date 'today' AS "One day"; + +SELECT date 'today' - date 'yesterday' AS "One day"; + +SELECT date 'tomorrow' - date 'yesterday' AS "Two days"; diff --git a/src/test/regress/sql/horology.sql b/src/test/regress/sql/horology.sql index 58cad20505..aaaf14faf3 100644 --- a/src/test/regress/sql/horology.sql +++ b/src/test/regress/sql/horology.sql @@ -2,6 +2,24 @@ -- HOROLOGY -- +-- +-- date, time arithmetic +-- + +SELECT date '1981-02-03' + time '04:05:06' AS "Date + Time"; + +SELECT date '1991-02-03' + time with time zone '04:05:06 PST' AS "Date + Time PST"; + +SELECT date '2001-02-03' + time with time zone '04:05:06 UTC' AS "Date + Time UTC"; + +SELECT date '1991-02-03' + interval '2 years' AS "Add Two Years"; + +SELECT date '2001-12-13' - interval '2 years' AS "Subtract Two Years"; + +SELECT date '1991-02-03' - time '04:05:06' AS "Subtract Time"; + +SELECT date '1991-02-03' - time with time zone '04:05:06 UTC' AS "Subtract Time UTC"; + -- -- timestamp, interval arithmetic -- diff --git a/src/test/regress/sql/run_check.tests b/src/test/regress/sql/run_check.tests index b3caf933f0..ae848c9197 100644 --- a/src/test/regress/sql/run_check.tests +++ b/src/test/regress/sql/run_check.tests @@ -29,6 +29,8 @@ parallel group2 test path test polygon test circle + test date + test time test interval test timestamp test reltime diff --git a/src/test/regress/sql/tests b/src/test/regress/sql/tests index 69f928b005..2dc72a7e57 100644 --- a/src/test/regress/sql/tests +++ b/src/test/regress/sql/tests @@ -18,6 +18,8 @@ path polygon circle geometry +date +time interval timestamp reltime diff --git a/src/test/regress/sql/time.sql b/src/test/regress/sql/time.sql new file mode 100644 index 0000000000..dbb72c0ba8 --- /dev/null +++ b/src/test/regress/sql/time.sql @@ -0,0 +1,68 @@ +-- +-- TIME +-- + +CREATE TABLE TIME_TBL (f1 time, f2 time with time zone); + +INSERT INTO TIME_TBL VALUES ('00:00', '00:00 PDT'); +INSERT INTO TIME_TBL VALUES ('01:00', '01:00 PDT'); +INSERT INTO TIME_TBL VALUES ('02:03', '02:03 PDT'); +INSERT INTO TIME_TBL VALUES ('11:59', '11:59 PDT'); +INSERT INTO TIME_TBL VALUES ('12:00', '12:00 PDT'); +INSERT INTO TIME_TBL VALUES ('12:01', '12:01 PDT'); +INSERT INTO TIME_TBL VALUES ('23:59', '23:59 PDT'); +INSERT INTO TIME_TBL VALUES ('11:59:59.99 PM', '11:59:59.99 PM PDT'); + +SELECT f1 AS "Time", f2 AS "Time TZ" FROM TIME_TBL; + +SELECT f1 AS "Three" FROM TIME_TBL WHERE f1 < '05:06:07'; + +SELECT f1 AS "Five" FROM TIME_TBL WHERE f1 > '05:06:07'; + +SELECT f1 AS "None" FROM TIME_TBL WHERE f1 < '00:00'; + +SELECT f1 AS "Eight" FROM TIME_TBL WHERE f1 >= '00:00'; + +-- +-- TIME simple math +-- + +SELECT f1 + time '00:01' AS "Eight" FROM TIME_TBL; + +SELECT f1 + time '01:00' AS "Eight" FROM TIME_TBL; + +SELECT f1 + time '00:00:01.11' AS "Eight" FROM TIME_TBL; + +SELECT f1 + time '00:00:59.99' AS "Eight" FROM TIME_TBL; + +SELECT f1 - '00:01' AS "Eight" FROM TIME_TBL; + +SELECT f1 - '01:00' AS "Eight" FROM TIME_TBL; + +SELECT f1 - '00:00:01.11' AS "Eight" FROM TIME_TBL; + +SELECT f1 - '00:00:59.99' AS "Eight" FROM TIME_TBL; + +-- +-- TIME WITH TIME ZONE simple math +-- + +/* +-- Not yet implemented +-- Thomas 2000-09-09 +SELECT f2 + time '00:01' AS "" FROM TIME_TBL; + +SELECT f2 + time '01:00' AS "" FROM TIME_TBL; + +SELECT f2 + time '00:00:01.11' AS "" FROM TIME_TBL; + +SELECT f2 + '00:00:59.99' AS "" FROM TIME_TBL; + +SELECT f2 - '00:01' AS "" FROM TIME_TBL; + +SELECT f2 - '01:00' AS "" FROM TIME_TBL; + +SELECT f2 - '00:00:01.11' AS "" FROM TIME_TBL; + +SELECT f2 - '00:00:59.99' AS "" FROM TIME_TBL; +*/