Add regression tests for date, time, and time with time zone types.

Modify date->timestamp conversion to use mktime().
 This should do better than before around Daylight Savings Time
 transitions.
This commit is contained in:
Thomas G. Lockhart 2000-09-12 05:42:20 +00:00
parent 4d745dadc9
commit 0d93504c40
9 changed files with 512 additions and 1 deletions

View File

@ -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)

View File

@ -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";

View File

@ -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;
*/

View File

@ -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;
--

View File

@ -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";

View File

@ -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
--

View File

@ -29,6 +29,8 @@ parallel group2
test path
test polygon
test circle
test date
test time
test interval
test timestamp
test reltime

View File

@ -18,6 +18,8 @@ path
polygon
circle
geometry
date
time
interval
timestamp
reltime

View File

@ -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;
*/