summaryrefslogtreecommitdiff
path: root/src/include
diff options
context:
space:
mode:
Diffstat (limited to 'src/include')
-rw-r--r--src/include/catalog/catversion.h4
-rw-r--r--src/include/catalog/pg_aggregate.h14
-rw-r--r--src/include/catalog/pg_opclass.h6
-rw-r--r--src/include/catalog/pg_operator.h91
-rw-r--r--src/include/catalog/pg_proc.h310
-rw-r--r--src/include/catalog/pg_type.h17
-rw-r--r--src/include/parser/parse_coerce.h25
-rw-r--r--src/include/utils/builtins.h98
-rw-r--r--src/include/utils/date.h52
-rw-r--r--src/include/utils/datetime.h425
-rw-r--r--src/include/utils/dt.h378
-rw-r--r--src/include/utils/formatting.h22
-rw-r--r--src/include/utils/nabstime.h49
-rw-r--r--src/include/utils/timestamp.h208
14 files changed, 954 insertions, 745 deletions
diff --git a/src/include/catalog/catversion.h b/src/include/catalog/catversion.h
index bf93830ca21..482b299c55d 100644
--- a/src/include/catalog/catversion.h
+++ b/src/include/catalog/catversion.h
@@ -37,7 +37,7 @@
* Portions Copyright (c) 1996-2000, PostgreSQL, Inc
* Portions Copyright (c) 1994, Regents of the University of California
*
- * $Id: catversion.h,v 1.14 2000/02/15 20:49:23 tgl Exp $
+ * $Id: catversion.h,v 1.15 2000/02/16 17:26:06 thomas Exp $
*
*-------------------------------------------------------------------------
*/
@@ -53,6 +53,6 @@
*/
/* yyyymmddN */
-#define CATALOG_VERSION_NO 200002151
+#define CATALOG_VERSION_NO 200002161
#endif
diff --git a/src/include/catalog/pg_aggregate.h b/src/include/catalog/pg_aggregate.h
index 7376e3ee72d..67c761e3690 100644
--- a/src/include/catalog/pg_aggregate.h
+++ b/src/include/catalog/pg_aggregate.h
@@ -8,7 +8,7 @@
* Portions Copyright (c) 1996-2000, PostgreSQL, Inc
* Portions Copyright (c) 1994, Regents of the University of California
*
- * $Id: pg_aggregate.h,v 1.22 2000/01/26 05:57:56 momjian Exp $
+ * $Id: pg_aggregate.h,v 1.23 2000/02/16 17:26:06 thomas Exp $
*
* NOTES
* the genbki.sh script reads this file and generates .bki
@@ -95,7 +95,7 @@ DATA(insert OID = 0 ( avg PGUID int2pl int2inc int2div 21 21 21 21 _nul
DATA(insert OID = 0 ( avg PGUID float4pl float4inc float4div 700 700 700 700 _null_ 0.0 ));
DATA(insert OID = 0 ( avg PGUID float8pl float8inc float8div 701 701 701 701 _null_ 0.0 ));
DATA(insert OID = 0 ( avg PGUID cash_pl float8inc cash_div_flt8 790 790 701 790 _null_ 0.0 ));
-DATA(insert OID = 0 ( avg PGUID timespan_pl float8inc timespan_div 1186 1186 701 1186 _null_ 0.0 ));
+DATA(insert OID = 0 ( avg PGUID interval_pl float8inc interval_div 1186 1186 701 1186 _null_ 0.0 ));
DATA(insert OID = 0 ( avg PGUID numeric_add numeric_inc numeric_div 1700 1700 1700 1700 _null_ 0 ));
DATA(insert OID = 0 ( sum PGUID int8pl - - 20 20 0 20 _null_ _null_ ));
@@ -104,7 +104,7 @@ DATA(insert OID = 0 ( sum PGUID int2pl - - 21 21 0 21 _null_ _null_ ));
DATA(insert OID = 0 ( sum PGUID float4pl - - 700 700 0 700 _null_ _null_ ));
DATA(insert OID = 0 ( sum PGUID float8pl - - 701 701 0 701 _null_ _null_ ));
DATA(insert OID = 0 ( sum PGUID cash_pl - - 790 790 0 790 _null_ _null_ ));
-DATA(insert OID = 0 ( sum PGUID timespan_pl - - 1186 1186 0 1186 _null_ _null_ ));
+DATA(insert OID = 0 ( sum PGUID interval_pl - - 1186 1186 0 1186 _null_ _null_ ));
DATA(insert OID = 0 ( sum PGUID numeric_add - - 1700 1700 0 1700 _null_ _null_ ));
DATA(insert OID = 0 ( max PGUID int8larger - - 20 20 0 20 _null_ _null_ ));
@@ -115,8 +115,8 @@ DATA(insert OID = 0 ( max PGUID float8larger - - 701 701 0 701 _null_ _null_
DATA(insert OID = 0 ( max PGUID int4larger - - 702 702 0 702 _null_ _null_ ));
DATA(insert OID = 0 ( max PGUID date_larger - - 1082 1082 0 1082 _null_ _null_ ));
DATA(insert OID = 0 ( max PGUID cashlarger - - 790 790 0 790 _null_ _null_ ));
-DATA(insert OID = 0 ( max PGUID datetime_larger - - 1184 1184 0 1184 _null_ _null_ ));
-DATA(insert OID = 0 ( max PGUID timespan_larger - - 1186 1186 0 1186 _null_ _null_ ));
+DATA(insert OID = 0 ( max PGUID timestamp_larger - - 1184 1184 0 1184 _null_ _null_ ));
+DATA(insert OID = 0 ( max PGUID interval_larger - - 1186 1186 0 1186 _null_ _null_ ));
DATA(insert OID = 0 ( max PGUID text_larger - - 25 25 0 25 _null_ _null_ ));
DATA(insert OID = 0 ( max PGUID numeric_larger - - 1700 1700 0 1700 _null_ _null_ ));
@@ -128,8 +128,8 @@ DATA(insert OID = 0 ( min PGUID float8smaller - - 701 701 0 701 _null_ _null
DATA(insert OID = 0 ( min PGUID int4smaller - - 702 702 0 702 _null_ _null_ ));
DATA(insert OID = 0 ( min PGUID date_smaller - - 1082 1082 0 1082 _null_ _null_ ));
DATA(insert OID = 0 ( min PGUID cashsmaller - - 790 790 0 790 _null_ _null_ ));
-DATA(insert OID = 0 ( min PGUID datetime_smaller - - 1184 1184 0 1184 _null_ _null_ ));
-DATA(insert OID = 0 ( min PGUID timespan_smaller - - 1186 1186 0 1186 _null_ _null_ ));
+DATA(insert OID = 0 ( min PGUID timestamp_smaller - - 1184 1184 0 1184 _null_ _null_ ));
+DATA(insert OID = 0 ( min PGUID interval_smaller - - 1186 1186 0 1186 _null_ _null_ ));
DATA(insert OID = 0 ( min PGUID text_smaller - - 25 25 0 25 _null_ _null_ ));
DATA(insert OID = 0 ( min PGUID numeric_smaller - - 1700 1700 0 1700 _null_ _null_ ));
diff --git a/src/include/catalog/pg_opclass.h b/src/include/catalog/pg_opclass.h
index f33c6894afc..c036ef5eac1 100644
--- a/src/include/catalog/pg_opclass.h
+++ b/src/include/catalog/pg_opclass.h
@@ -8,7 +8,7 @@
* Portions Copyright (c) 1996-2000, PostgreSQL, Inc
* Portions Copyright (c) 1994, Regents of the University of California
*
- * $Id: pg_opclass.h,v 1.28 2000/02/10 19:51:45 momjian Exp $
+ * $Id: pg_opclass.h,v 1.29 2000/02/16 17:26:07 thomas Exp $
*
* NOTES
* the genbki.sh script reads this file and generates .bki
@@ -106,9 +106,9 @@ DATA(insert OID = 1115 ( time_ops 1083 ));
DESCR("");
DATA(insert OID = 1181 ( name_ops 19 ));
DESCR("");
-DATA(insert OID = 1312 ( datetime_ops 1184 ));
+DATA(insert OID = 1312 ( timestamp_ops 1184 ));
DESCR("");
-DATA(insert OID = 1313 ( timespan_ops 1186 ));
+DATA(insert OID = 1313 ( interval_ops 1186 ));
DESCR("");
DATA(insert OID = 810 ( macaddr_ops 829 ));
DESCR("");
diff --git a/src/include/catalog/pg_operator.h b/src/include/catalog/pg_operator.h
index fd33b4b510f..e510c621d02 100644
--- a/src/include/catalog/pg_operator.h
+++ b/src/include/catalog/pg_operator.h
@@ -8,7 +8,7 @@
* Portions Copyright (c) 1996-2000, PostgreSQL, Inc
* Portions Copyright (c) 1994, Regents of the University of California
*
- * $Id: pg_operator.h,v 1.67 2000/02/10 19:51:45 momjian Exp $
+ * $Id: pg_operator.h,v 1.68 2000/02/16 17:26:07 thomas Exp $
*
* NOTES
* the genbki.sh script reads this file and generates .bki
@@ -244,18 +244,18 @@ DATA(insert OID = 568 ( "<" PGUID 0 b t f 703 703 16 569 571 0 0 reltimelt
DATA(insert OID = 569 ( ">" PGUID 0 b t f 703 703 16 568 570 0 0 reltimegt scalargtsel scalargtjoinsel ));
DATA(insert OID = 570 ( "<=" PGUID 0 b t f 703 703 16 571 569 0 0 reltimele scalarltsel scalarltjoinsel ));
DATA(insert OID = 571 ( ">=" PGUID 0 b t f 703 703 16 570 568 0 0 reltimege scalargtsel scalargtjoinsel ));
-DATA(insert OID = 572 ( "~=" PGUID 0 b t f 704 704 16 572 0 0 0 intervalsame eqsel eqjoinsel ));
-DATA(insert OID = 573 ( "<<" PGUID 0 b t f 704 704 16 0 0 0 0 intervalct - - ));
-DATA(insert OID = 574 ( "&&" PGUID 0 b t f 704 704 16 0 0 0 0 intervalov - - ));
-DATA(insert OID = 575 ( "#=" PGUID 0 b t f 704 703 16 0 576 0 0 intervalleneq - - ));
-DATA(insert OID = 576 ( "#<>" PGUID 0 b t f 704 703 16 0 575 0 0 intervallenne - - ));
-DATA(insert OID = 577 ( "#<" PGUID 0 b t f 704 703 16 0 580 0 0 intervallenlt - - ));
-DATA(insert OID = 578 ( "#>" PGUID 0 b t f 704 703 16 0 579 0 0 intervallengt - - ));
-DATA(insert OID = 579 ( "#<=" PGUID 0 b t f 704 703 16 0 578 0 0 intervallenle - - ));
-DATA(insert OID = 580 ( "#>=" PGUID 0 b t f 704 703 16 0 577 0 0 intervallenge - - ));
+DATA(insert OID = 572 ( "~=" PGUID 0 b t f 704 704 16 572 0 0 0 tintervalsame eqsel eqjoinsel ));
+DATA(insert OID = 573 ( "<<" PGUID 0 b t f 704 704 16 0 0 0 0 tintervalct - - ));
+DATA(insert OID = 574 ( "&&" PGUID 0 b t f 704 704 16 0 0 0 0 tintervalov - - ));
+DATA(insert OID = 575 ( "#=" PGUID 0 b t f 704 703 16 0 576 0 0 tintervalleneq - - ));
+DATA(insert OID = 576 ( "#<>" PGUID 0 b t f 704 703 16 0 575 0 0 tintervallenne - - ));
+DATA(insert OID = 577 ( "#<" PGUID 0 b t f 704 703 16 0 580 0 0 tintervallenlt - - ));
+DATA(insert OID = 578 ( "#>" PGUID 0 b t f 704 703 16 0 579 0 0 tintervallengt - - ));
+DATA(insert OID = 579 ( "#<=" PGUID 0 b t f 704 703 16 0 578 0 0 tintervallenle - - ));
+DATA(insert OID = 580 ( "#>=" PGUID 0 b t f 704 703 16 0 577 0 0 tintervallenge - - ));
DATA(insert OID = 581 ( "+" PGUID 0 b t f 702 703 702 0 0 0 0 timepl - - ));
DATA(insert OID = 582 ( "-" PGUID 0 b t f 702 703 702 0 0 0 0 timemi - - ));
-DATA(insert OID = 583 ( "<?>" PGUID 0 b t f 702 704 16 0 0 0 0 ininterval - - ));
+DATA(insert OID = 583 ( "<?>" PGUID 0 b t f 702 704 16 0 0 0 0 intinterval - - ));
DATA(insert OID = 584 ( "-" PGUID 0 l t f 0 700 700 0 0 0 0 float4um - - ));
DATA(insert OID = 585 ( "-" PGUID 0 l t f 0 701 701 0 0 0 0 float8um - - ));
DATA(insert OID = 586 ( "+" PGUID 0 b t f 700 700 700 586 0 0 0 float4pl - - ));
@@ -274,7 +274,7 @@ DATA(insert OID = 598 ( "%" PGUID 0 l t f 0 701 701 0 0 0 0 dtrunc
DATA(insert OID = 599 ( "%" PGUID 0 r t f 701 0 701 0 0 0 0 dround - - ));
DATA(insert OID = 1282 ( ":" PGUID 0 l t f 0 701 701 0 0 0 0 dexp - - ));
DATA(insert OID = 1283 ( ";" PGUID 0 l t f 0 701 701 0 0 0 0 dlog1 - - ));
-DATA(insert OID = 1284 ( "|" PGUID 0 l t f 0 704 702 0 0 0 0 intervalstart - - ));
+DATA(insert OID = 1284 ( "|" PGUID 0 l t f 0 704 702 0 0 0 0 tintervalstart - - ));
DATA(insert OID = 606 ( "<#>" PGUID 0 b t f 702 702 704 0 0 0 0 mktinterval - - ));
DATA(insert OID = 607 ( "=" PGUID 0 b t t 26 26 16 607 608 609 609 oideq eqsel eqjoinsel ));
#define MIN_OIDCMP 607 /* used by cache code */
@@ -399,12 +399,12 @@ DATA(insert OID = 807 ( "/" PGUID 0 b t f 603 600 603 0 0 0 0 box_div
DATA(insert OID = 808 ( "?-" PGUID 0 b t f 600 600 16 808 0 0 0 point_horiz - - ));
DATA(insert OID = 809 ( "?|" PGUID 0 b t f 600 600 16 809 0 0 0 point_vert - - ));
-DATA(insert OID = 811 ( "=" PGUID 0 b t f 704 704 16 811 812 0 0 intervaleq eqsel eqjoinsel ));
-DATA(insert OID = 812 ( "<>" PGUID 0 b t f 704 704 16 812 811 0 0 intervalne neqsel neqjoinsel ));
-DATA(insert OID = 813 ( "<" PGUID 0 b t f 704 704 16 814 816 0 0 intervallt scalarltsel scalarltjoinsel ));
-DATA(insert OID = 814 ( ">" PGUID 0 b t f 704 704 16 813 815 0 0 intervalgt scalargtsel scalargtjoinsel ));
-DATA(insert OID = 815 ( "<=" PGUID 0 b t f 704 704 16 816 814 0 0 intervalle scalarltsel scalarltjoinsel ));
-DATA(insert OID = 816 ( ">=" PGUID 0 b t f 704 704 16 815 813 0 0 intervalge scalargtsel scalargtjoinsel ));
+DATA(insert OID = 811 ( "=" PGUID 0 b t f 704 704 16 811 812 0 0 tintervaleq eqsel eqjoinsel ));
+DATA(insert OID = 812 ( "<>" PGUID 0 b t f 704 704 16 812 811 0 0 tintervalne neqsel neqjoinsel ));
+DATA(insert OID = 813 ( "<" PGUID 0 b t f 704 704 16 814 816 0 0 tintervallt scalarltsel scalarltjoinsel ));
+DATA(insert OID = 814 ( ">" PGUID 0 b t f 704 704 16 813 815 0 0 tintervalgt scalargtsel scalargtjoinsel ));
+DATA(insert OID = 815 ( "<=" PGUID 0 b t f 704 704 16 816 814 0 0 tintervalle scalarltsel scalarltjoinsel ));
+DATA(insert OID = 816 ( ">=" PGUID 0 b t f 704 704 16 815 813 0 0 tintervalge scalargtsel scalargtjoinsel ));
DATA(insert OID = 843 ( "*" PGUID 0 b t f 790 700 790 845 0 0 0 cash_mul_flt4 - - ));
DATA(insert OID = 844 ( "/" PGUID 0 b t f 790 700 790 0 0 0 0 cash_div_flt4 - - ));
@@ -536,37 +536,30 @@ DATA(insert OID = 1234 ( "~*" PGUID 0 b t f 1042 25 16 0 1235 0 0 texticreg
#define OID_BPCHAR_ICREGEXEQ_OP 1234
DATA(insert OID = 1235 ( "!~*" PGUID 0 b t f 1042 25 16 0 1234 0 0 texticregexne neqsel neqjoinsel ));
-DATA(insert OID = 1300 ( "=" PGUID 0 b t t 1296 1296 16 1300 1301 1302 1302 timestampeq eqsel eqjoinsel ));
-DATA(insert OID = 1301 ( "<>" PGUID 0 b t f 1296 1296 16 1301 1300 0 0 timestampne neqsel neqjoinsel ));
-DATA(insert OID = 1302 ( "<" PGUID 0 b t f 1296 1296 16 1303 1305 0 0 timestamplt scalarltsel scalarltjoinsel ));
-DATA(insert OID = 1303 ( ">" PGUID 0 b t f 1296 1296 16 1302 1304 0 0 timestampgt scalargtsel scalargtjoinsel ));
-DATA(insert OID = 1304 ( "<=" PGUID 0 b t f 1296 1296 16 1305 1303 0 0 timestample scalarltsel scalarltjoinsel ));
-DATA(insert OID = 1305 ( ">=" PGUID 0 b t f 1296 1296 16 1304 1302 0 0 timestampge scalargtsel scalargtjoinsel ));
-
-/* datetime operators */
+/* timestamp operators */
/* name, owner, prec, kind, isleft, canhash, left, right, result, com, negate, lsortop, rsortop, oprcode, operrest, oprjoin */
-DATA(insert OID = 1320 ( "=" PGUID 0 b t f 1184 1184 16 1320 1321 1322 1322 datetime_eq eqsel eqjoinsel ));
-DATA(insert OID = 1321 ( "<>" PGUID 0 b t f 1184 1184 16 1321 1320 0 0 datetime_ne neqsel neqjoinsel ));
-DATA(insert OID = 1322 ( "<" PGUID 0 b t f 1184 1184 16 1324 1325 0 0 datetime_lt scalarltsel scalarltjoinsel ));
-DATA(insert OID = 1323 ( "<=" PGUID 0 b t f 1184 1184 16 1325 1324 0 0 datetime_le scalarltsel scalarltjoinsel ));
-DATA(insert OID = 1324 ( ">" PGUID 0 b t f 1184 1184 16 1322 1323 0 0 datetime_gt scalargtsel scalargtjoinsel ));
-DATA(insert OID = 1325 ( ">=" PGUID 0 b t f 1184 1184 16 1323 1322 0 0 datetime_ge scalargtsel scalargtjoinsel ));
-
-DATA(insert OID = 1327 ( "+" PGUID 0 b t f 1184 1186 1184 0 0 0 0 datetime_pl_span - - ));
-DATA(insert OID = 1328 ( "-" PGUID 0 b t f 1184 1184 1186 0 0 0 0 datetime_mi - - ));
-DATA(insert OID = 1329 ( "-" PGUID 0 b t f 1184 1186 1184 0 0 0 0 datetime_mi_span - - ));
-
-/* timespan operators */
-DATA(insert OID = 1330 ( "=" PGUID 0 b t f 1186 1186 16 1330 1331 1332 1332 timespan_eq eqsel eqjoinsel ));
-DATA(insert OID = 1331 ( "<>" PGUID 0 b t f 1186 1186 16 1331 1330 0 0 timespan_ne neqsel neqjoinsel ));
-DATA(insert OID = 1332 ( "<" PGUID 0 b t f 1186 1186 16 1334 1335 0 0 timespan_lt scalarltsel scalarltjoinsel ));
-DATA(insert OID = 1333 ( "<=" PGUID 0 b t f 1186 1186 16 1335 1334 0 0 timespan_le scalarltsel scalarltjoinsel ));
-DATA(insert OID = 1334 ( ">" PGUID 0 b t f 1186 1186 16 1332 1333 0 0 timespan_gt scalargtsel scalargtjoinsel ));
-DATA(insert OID = 1335 ( ">=" PGUID 0 b t f 1186 1186 16 1333 1332 0 0 timespan_ge scalargtsel scalargtjoinsel ));
-
-DATA(insert OID = 1336 ( "-" PGUID 0 l t f 0 1186 1186 0 0 0 0 timespan_um - - ));
-DATA(insert OID = 1337 ( "+" PGUID 0 b t f 1186 1186 1186 1337 0 0 0 timespan_pl - - ));
-DATA(insert OID = 1338 ( "-" PGUID 0 b t f 1186 1186 1186 0 0 0 0 timespan_mi - - ));
+DATA(insert OID = 1320 ( "=" PGUID 0 b t f 1184 1184 16 1320 1321 1322 1322 timestamp_eq eqsel eqjoinsel ));
+DATA(insert OID = 1321 ( "<>" PGUID 0 b t f 1184 1184 16 1321 1320 0 0 timestamp_ne neqsel neqjoinsel ));
+DATA(insert OID = 1322 ( "<" PGUID 0 b t f 1184 1184 16 1324 1325 0 0 timestamp_lt scalarltsel scalarltjoinsel ));
+DATA(insert OID = 1323 ( "<=" PGUID 0 b t f 1184 1184 16 1325 1324 0 0 timestamp_le scalarltsel scalarltjoinsel ));
+DATA(insert OID = 1324 ( ">" PGUID 0 b t f 1184 1184 16 1322 1323 0 0 timestamp_gt scalargtsel scalargtjoinsel ));
+DATA(insert OID = 1325 ( ">=" PGUID 0 b t f 1184 1184 16 1323 1322 0 0 timestamp_ge scalargtsel scalargtjoinsel ));
+
+DATA(insert OID = 1327 ( "+" PGUID 0 b t f 1184 1186 1184 0 0 0 0 timestamp_pl_span - - ));
+DATA(insert OID = 1328 ( "-" PGUID 0 b t f 1184 1184 1186 0 0 0 0 timestamp_mi - - ));
+DATA(insert OID = 1329 ( "-" PGUID 0 b t f 1184 1186 1184 0 0 0 0 timestamp_mi_span - - ));
+
+/* interval operators */
+DATA(insert OID = 1330 ( "=" PGUID 0 b t f 1186 1186 16 1330 1331 1332 1332 interval_eq eqsel eqjoinsel ));
+DATA(insert OID = 1331 ( "<>" PGUID 0 b t f 1186 1186 16 1331 1330 0 0 interval_ne neqsel neqjoinsel ));
+DATA(insert OID = 1332 ( "<" PGUID 0 b t f 1186 1186 16 1334 1335 0 0 interval_lt scalarltsel scalarltjoinsel ));
+DATA(insert OID = 1333 ( "<=" PGUID 0 b t f 1186 1186 16 1335 1334 0 0 interval_le scalarltsel scalarltjoinsel ));
+DATA(insert OID = 1334 ( ">" PGUID 0 b t f 1186 1186 16 1332 1333 0 0 interval_gt scalargtsel scalargtjoinsel ));
+DATA(insert OID = 1335 ( ">=" PGUID 0 b t f 1186 1186 16 1333 1332 0 0 interval_ge scalargtsel scalargtjoinsel ));
+
+DATA(insert OID = 1336 ( "-" PGUID 0 l t f 0 1186 1186 0 0 0 0 interval_um - - ));
+DATA(insert OID = 1337 ( "+" PGUID 0 b t f 1186 1186 1186 1337 0 0 0 interval_pl - - ));
+DATA(insert OID = 1338 ( "-" PGUID 0 b t f 1186 1186 1186 0 0 0 0 interval_mi - - ));
/* additional geometric operators - thomas 97/04/18 */
DATA(insert OID = 1420 ( "@@" PGUID 0 l t f 0 718 600 0 0 0 0 circle_center - - ));
@@ -626,7 +619,7 @@ DATA(insert OID = 1567 ( "##" PGUID 0 b t f 601 603 600 0 0 0 0 close_s
DATA(insert OID = 1568 ( "##" PGUID 0 b t f 628 603 600 0 0 0 0 close_lb - - ));
DATA(insert OID = 1577 ( "##" PGUID 0 b t f 628 601 600 0 0 0 0 close_ls - - ));
DATA(insert OID = 1578 ( "##" PGUID 0 b t f 601 601 600 0 0 0 0 close_lseg - - ));
-DATA(insert OID = 1585 ( "/" PGUID 0 b t f 1186 701 1186 0 0 0 0 timespan_div - - ));
+DATA(insert OID = 1585 ( "/" PGUID 0 b t f 1186 701 1186 0 0 0 0 interval_div - - ));
DATA(insert OID = 1586 ( "<>" PGUID 0 b t f 601 601 16 1586 1535 0 0 lseg_ne neqsel neqjoinsel ));
DATA(insert OID = 1587 ( "<" PGUID 0 b t f 601 601 16 1589 1590 0 0 lseg_lt - - ));
diff --git a/src/include/catalog/pg_proc.h b/src/include/catalog/pg_proc.h
index 87107b1df36..64c015fbff2 100644
--- a/src/include/catalog/pg_proc.h
+++ b/src/include/catalog/pg_proc.h
@@ -7,7 +7,7 @@
* Portions Copyright (c) 1996-2000, PostgreSQL, Inc
* Portions Copyright (c) 1994, Regents of the University of California
*
- * $Id: pg_proc.h,v 1.121 2000/02/15 20:49:23 tgl Exp $
+ * $Id: pg_proc.h,v 1.122 2000/02/16 17:26:07 thomas Exp $
*
* NOTES
* The script catalog/genbki.sh reads this file and generates .bki
@@ -517,9 +517,9 @@ DATA(insert OID = 246 ( tintervalin PGUID 11 f t f 1 f 704 "0" 100 0 0 100
DESCR("(internal)");
DATA(insert OID = 247 ( tintervalout PGUID 11 f t f 1 f 23 "0" 100 0 0 100 tintervalout - ));
DESCR("(internal)");
-DATA(insert OID = 248 ( ininterval PGUID 11 f t f 2 f 16 "702 704" 100 0 0 100 ininterval - ));
+DATA(insert OID = 248 ( intinterval PGUID 11 f t f 2 f 16 "702 704" 100 0 0 100 intinterval - ));
DESCR("abstime in tinterval");
-DATA(insert OID = 249 ( intervalrel PGUID 11 f t f 1 f 703 "704" 100 0 0 100 intervalrel - ));
+DATA(insert OID = 249 ( tintervalrel PGUID 11 f t f 1 f 703 "704" 100 0 0 100 tintervalrel - ));
DESCR("");
DATA(insert OID = 250 ( timenow PGUID 11 f t f 0 f 702 "0" 100 0 0 100 timenow - ));
DESCR("Current date and time");
@@ -547,27 +547,27 @@ DATA(insert OID = 261 ( reltimele PGUID 11 f t t 2 f 16 "703 703" 100 0 0 1
DESCR("less-than-or-equal");
DATA(insert OID = 262 ( reltimege PGUID 11 f t t 2 f 16 "703 703" 100 0 0 100 reltimege - ));
DESCR("greater-than-or-equal");
-DATA(insert OID = 263 ( intervalsame PGUID 11 f t f 2 f 16 "704 704" 100 0 0 100 intervalsame - ));
+DATA(insert OID = 263 ( tintervalsame PGUID 11 f t f 2 f 16 "704 704" 100 0 0 100 tintervalsame - ));
DESCR("same as");
-DATA(insert OID = 264 ( intervalct PGUID 11 f t f 2 f 16 "704 704" 100 0 0 100 intervalct - ));
+DATA(insert OID = 264 ( tintervalct PGUID 11 f t f 2 f 16 "704 704" 100 0 0 100 tintervalct - ));
DESCR("less-than");
-DATA(insert OID = 265 ( intervalov PGUID 11 f t f 2 f 16 "704 704" 100 0 0 100 intervalov - ));
+DATA(insert OID = 265 ( tintervalov PGUID 11 f t f 2 f 16 "704 704" 100 0 0 100 tintervalov - ));
DESCR("overlaps");
-DATA(insert OID = 266 ( intervalleneq PGUID 11 f t f 2 f 16 "704 703" 100 0 0 100 intervalleneq - ));
+DATA(insert OID = 266 ( tintervalleneq PGUID 11 f t f 2 f 16 "704 703" 100 0 0 100 tintervalleneq - ));
DESCR("length equal");
-DATA(insert OID = 267 ( intervallenne PGUID 11 f t f 2 f 16 "704 703" 100 0 0 100 intervallenne - ));
+DATA(insert OID = 267 ( tintervallenne PGUID 11 f t f 2 f 16 "704 703" 100 0 0 100 tintervallenne - ));
DESCR("length not equal to");
-DATA(insert OID = 268 ( intervallenlt PGUID 11 f t f 2 f 16 "704 703" 100 0 0 100 intervallenlt - ));
+DATA(insert OID = 268 ( tintervallenlt PGUID 11 f t f 2 f 16 "704 703" 100 0 0 100 tintervallenlt - ));
DESCR("length less-than");
-DATA(insert OID = 269 ( intervallengt PGUID 11 f t f 2 f 16 "704 703" 100 0 0 100 intervallengt - ));
+DATA(insert OID = 269 ( tintervallengt PGUID 11 f t f 2 f 16 "704 703" 100 0 0 100 tintervallengt - ));
DESCR("length greater-than");
-DATA(insert OID = 270 ( intervallenle PGUID 11 f t f 2 f 16 "704 703" 100 0 0 100 intervallenle - ));
+DATA(insert OID = 270 ( tintervallenle PGUID 11 f t f 2 f 16 "704 703" 100 0 0 100 tintervallenle - ));
DESCR("length less-than-or-equal");
-DATA(insert OID = 271 ( intervallenge PGUID 11 f t f 2 f 16 "704 703" 100 0 0 100 intervallenge - ));
+DATA(insert OID = 271 ( tintervallenge PGUID 11 f t f 2 f 16 "704 703" 100 0 0 100 tintervallenge - ));
DESCR("length greater-than-or-equal");
-DATA(insert OID = 272 ( intervalstart PGUID 11 f t f 1 f 702 "704" 100 0 0 100 intervalstart - ));
+DATA(insert OID = 272 ( tintervalstart PGUID 11 f t f 1 f 702 "704" 100 0 0 100 tintervalstart - ));
DESCR("start of interval");
-DATA(insert OID = 273 ( intervalend PGUID 11 f t f 1 f 702 "704" 100 0 0 100 intervalend - ));
+DATA(insert OID = 273 ( tintervalend PGUID 11 f t f 1 f 702 "704" 100 0 0 100 tintervalend - ));
DESCR("");
DATA(insert OID = 274 ( timeofday PGUID 11 f t f 0 f 25 "0" 100 0 0 100 timeofday - ));
DESCR("Current date and time with microseconds");
@@ -920,7 +920,7 @@ DATA(insert OID = 669 ( varchar PGUID 11 f t t 2 f 1043 "1043 23" 100 0 0 1
DESCR("truncate varchar()");
DATA(insert OID = 676 ( mktinterval PGUID 11 f t f 2 f 704 "702 702" 100 0 0 100 mktinterval - ));
-DESCR("convert to interval");
+DESCR("convert to tinterval");
DATA(insert OID = 619 ( oidvectorne PGUID 11 f t t 2 f 16 "30 30" 100 0 0 100 oidvectorne - ));
DESCR("less-than");
DATA(insert OID = 677 ( oidvectorlt PGUID 11 f t t 2 f 16 "30 30" 100 0 0 100 oidvectorlt - ));
@@ -1052,17 +1052,17 @@ DESCR("gist(internal)");
DATA(insert OID = 782 ( gistbuild PGUID 11 f t f 9 f 23 "0" 100 0 0 100 gistbuild - ));
DESCR("gist(internal)");
-DATA(insert OID = 784 ( intervaleq PGUID 11 f t f 2 f 16 "704 704" 100 0 0 100 intervaleq - ));
+DATA(insert OID = 784 ( tintervaleq PGUID 11 f t f 2 f 16 "704 704" 100 0 0 100 tintervaleq - ));
DESCR("equal");
-DATA(insert OID = 785 ( intervalne PGUID 11 f t f 2 f 16 "704 704" 100 0 0 100 intervalne - ));
+DATA(insert OID = 785 ( tintervalne PGUID 11 f t f 2 f 16 "704 704" 100 0 0 100 tintervalne - ));
DESCR("not equal");
-DATA(insert OID = 786 ( intervallt PGUID 11 f t f 2 f 16 "704 704" 100 0 0 100 intervallt - ));
+DATA(insert OID = 786 ( tintervallt PGUID 11 f t f 2 f 16 "704 704" 100 0 0 100 tintervallt - ));
DESCR("less-than");
-DATA(insert OID = 787 ( intervalgt PGUID 11 f t f 2 f 16 "704 704" 100 0 0 100 intervalgt - ));
+DATA(insert OID = 787 ( tintervalgt PGUID 11 f t f 2 f 16 "704 704" 100 0 0 100 tintervalgt - ));
DESCR("greater-than");
-DATA(insert OID = 788 ( intervalle PGUID 11 f t f 2 f 16 "704 704" 100 0 0 100 intervalle - ));
+DATA(insert OID = 788 ( tintervalle PGUID 11 f t f 2 f 16 "704 704" 100 0 0 100 tintervalle - ));
DESCR("less-than-or-equal");
-DATA(insert OID = 789 ( intervalge PGUID 11 f t f 2 f 16 "704 704" 100 0 0 100 intervalge - ));
+DATA(insert OID = 789 ( tintervalge PGUID 11 f t f 2 f 16 "704 704" 100 0 0 100 tintervalge - ));
DESCR("greater-than-or-equal");
/* OIDS 800 - 899 */
@@ -1397,94 +1397,92 @@ DESCR("multiply");
DATA(insert OID = 1149 ( circle_div_pt PGUID 11 f t t 2 f 718 "718 600" 100 0 0 100 circle_div_pt - ));
DESCR("divide");
-DATA(insert OID = 1150 ( datetime_in PGUID 11 f t f 1 f 1184 "0" 100 0 0 100 datetime_in - ));
+DATA(insert OID = 1150 ( timestamp_in PGUID 11 f t f 1 f 1184 "0" 100 0 0 100 timestamp_in - ));
DESCR("(internal)");
-DATA(insert OID = 1151 ( datetime_out PGUID 11 f t f 1 f 23 "0" 100 0 0 100 datetime_out - ));
+DATA(insert OID = 1151 ( timestamp_out PGUID 11 f t f 1 f 23 "0" 100 0 0 100 timestamp_out - ));
DESCR("(internal)");
-DATA(insert OID = 1152 ( datetime_eq PGUID 11 f t f 2 f 16 "1184 1184" 100 0 0 100 datetime_eq - ));
+DATA(insert OID = 1152 ( timestamp_eq PGUID 11 f t f 2 f 16 "1184 1184" 100 0 0 100 timestamp_eq - ));
DESCR("equal");
-DATA(insert OID = 1153 ( datetime_ne PGUID 11 f t f 2 f 16 "1184 1184" 100 0 0 100 datetime_ne - ));
+DATA(insert OID = 1153 ( timestamp_ne PGUID 11 f t f 2 f 16 "1184 1184" 100 0 0 100 timestamp_ne - ));
DESCR("not equal");
-DATA(insert OID = 1154 ( datetime_lt PGUID 11 f t f 2 f 16 "1184 1184" 100 0 0 100 datetime_lt - ));
+DATA(insert OID = 1154 ( timestamp_lt PGUID 11 f t f 2 f 16 "1184 1184" 100 0 0 100 timestamp_lt - ));
DESCR("less-than");
-DATA(insert OID = 1155 ( datetime_le PGUID 11 f t f 2 f 16 "1184 1184" 100 0 0 100 datetime_le - ));
+DATA(insert OID = 1155 ( timestamp_le PGUID 11 f t f 2 f 16 "1184 1184" 100 0 0 100 timestamp_le - ));
DESCR("less-than-or-equal");
-DATA(insert OID = 1156 ( datetime_ge PGUID 11 f t f 2 f 16 "1184 1184" 100 0 0 100 datetime_ge - ));
+DATA(insert OID = 1156 ( timestamp_ge PGUID 11 f t f 2 f 16 "1184 1184" 100 0 0 100 timestamp_ge - ));
DESCR("greater-than-or-equal");
-DATA(insert OID = 1157 ( datetime_gt PGUID 11 f t f 2 f 16 "1184 1184" 100 0 0 100 datetime_gt - ));
+DATA(insert OID = 1157 ( timestamp_gt PGUID 11 f t f 2 f 16 "1184 1184" 100 0 0 100 timestamp_gt - ));
DESCR("greater-than");
-DATA(insert OID = 1158 ( datetime_finite PGUID 11 f t f 1 f 16 "1184" 100 0 0 100 datetime_finite - ));
+DATA(insert OID = 1158 ( timestamp_finite PGUID 11 f t f 1 f 16 "1184" 100 0 0 100 timestamp_finite - ));
DESCR("");
-DATA(insert OID = 1159 ( datetime_zone PGUID 11 f t f 2 f 25 "25 1184" 100 0 0 100 datetime_zone - ));
+DATA(insert OID = 1159 ( timestamp_zone PGUID 11 f t f 2 f 25 "25 1184" 100 0 0 100 timestamp_zone - ));
DESCR("");
-DATA(insert OID = 1160 ( timespan_in PGUID 11 f t f 1 f 1186 "0" 100 0 0 100 timespan_in - ));
+DATA(insert OID = 1160 ( interval_in PGUID 11 f t f 1 f 1186 "0" 100 0 0 100 interval_in - ));
DESCR("(internal)");
-DATA(insert OID = 1161 ( timespan_out PGUID 11 f t f 1 f 23 "0" 100 0 0 100 timespan_out - ));
+DATA(insert OID = 1161 ( interval_out PGUID 11 f t f 1 f 23 "0" 100 0 0 100 interval_out - ));
DESCR("(internal)");
-DATA(insert OID = 1162 ( timespan_eq PGUID 11 f t f 2 f 16 "1186 1186" 100 0 0 100 timespan_eq - ));
+DATA(insert OID = 1162 ( interval_eq PGUID 11 f t f 2 f 16 "1186 1186" 100 0 0 100 interval_eq - ));
DESCR("equal");
-DATA(insert OID = 1163 ( timespan_ne PGUID 11 f t f 2 f 16 "1186 1186" 100 0 0 100 timespan_ne - ));
+DATA(insert OID = 1163 ( interval_ne PGUID 11 f t f 2 f 16 "1186 1186" 100 0 0 100 interval_ne - ));
DESCR("not equal");
-DATA(insert OID = 1164 ( timespan_lt PGUID 11 f t f 2 f 16 "1186 1186" 100 0 0 100 timespan_lt - ));
+DATA(insert OID = 1164 ( interval_lt PGUID 11 f t f 2 f 16 "1186 1186" 100 0 0 100 interval_lt - ));
DESCR("less-than");
-DATA(insert OID = 1165 ( timespan_le PGUID 11 f t f 2 f 16 "1186 1186" 100 0 0 100 timespan_le - ));
+DATA(insert OID = 1165 ( interval_le PGUID 11 f t f 2 f 16 "1186 1186" 100 0 0 100 interval_le - ));
DESCR("less-than-or-equal");
-DATA(insert OID = 1166 ( timespan_ge PGUID 11 f t f 2 f 16 "1186 1186" 100 0 0 100 timespan_ge - ));
+DATA(insert OID = 1166 ( interval_ge PGUID 11 f t f 2 f 16 "1186 1186" 100 0 0 100 interval_ge - ));
DESCR("greater-than-or-equal");
-DATA(insert OID = 1167 ( timespan_gt PGUID 11 f t f 2 f 16 "1186 1186" 100 0 0 100 timespan_gt - ));
+DATA(insert OID = 1167 ( interval_gt PGUID 11 f t f 2 f 16 "1186 1186" 100 0 0 100 interval_gt - ));
DESCR("greater-than");
-DATA(insert OID = 1168 ( timespan_um PGUID 11 f t f 1 f 1186 "1186" 100 0 0 100 timespan_um - ));
+DATA(insert OID = 1168 ( interval_um PGUID 11 f t f 1 f 1186 "1186" 100 0 0 100 interval_um - ));
DESCR("subtract");
-DATA(insert OID = 1169 ( timespan_pl PGUID 11 f t f 2 f 1186 "1186 1186" 100 0 0 100 timespan_pl - ));
+DATA(insert OID = 1169 ( interval_pl PGUID 11 f t f 2 f 1186 "1186 1186" 100 0 0 100 interval_pl - ));
DESCR("addition");
-DATA(insert OID = 1170 ( timespan_mi PGUID 11 f t f 2 f 1186 "1186 1186" 100 0 0 100 timespan_mi - ));
+DATA(insert OID = 1170 ( interval_mi PGUID 11 f t f 2 f 1186 "1186 1186" 100 0 0 100 interval_mi - ));
DESCR("subtract");
-DATA(insert OID = 1171 ( datetime_part PGUID 11 f t f 2 f 701 "25 1184" 100 0 0 100 datetime_part - ));
-DESCR("extract field from datetime");
-DATA(insert OID = 1172 ( timespan_part PGUID 11 f t f 2 f 701 "25 1186" 100 0 0 100 timespan_part - ));
-DESCR("extract field from timespan");
-
-DATA(insert OID = 1173 ( abstime_datetime PGUID 11 f t f 1 f 1184 "702" 100 0 0 100 abstime_datetime - ));
-DESCR("convert abstime to datetime");
-DATA(insert OID = 1174 ( date_datetime PGUID 11 f t f 1 f 1184 "1082" 100 0 0 100 date_datetime - ));
-DESCR("convert date to datetime");
-DATA(insert OID = 1175 ( timestamp_datetime PGUID 11 f t f 1 f 1184 "1296" 100 0 0 100 timestamp_datetime - ));
-DESCR("convert timestamp to datetime");
-DATA(insert OID = 1176 ( datetime_datetime PGUID 11 f t f 2 f 1184 "1082 1083" 100 0 0 100 datetime_datetime - ));
-DESCR("convert date and time to datetime");
-DATA(insert OID = 1177 ( reltime_timespan PGUID 11 f t f 1 f 1186 "703" 100 0 0 100 reltime_timespan - ));
-DESCR("convert reltime to timespan");
-DATA(insert OID = 1178 ( datetime_date PGUID 11 f t f 1 f 1082 "1184" 100 0 0 100 datetime_date - ));
-DESCR("convert datetime to date");
+DATA(insert OID = 1171 ( timestamp_part PGUID 11 f t f 2 f 701 "25 1184" 100 0 0 100 timestamp_part - ));
+DESCR("extract field from timestamp");
+DATA(insert OID = 1172 ( interval_part PGUID 11 f t f 2 f 701 "25 1186" 100 0 0 100 interval_part - ));
+DESCR("extract field from interval");
+
+DATA(insert OID = 1173 ( abstime_timestamp PGUID 11 f t f 1 f 1184 "702" 100 0 0 100 abstime_timestamp - ));
+DESCR("convert abstime to timestamp");
+DATA(insert OID = 1174 ( date_timestamp PGUID 11 f t f 1 f 1184 "1082" 100 0 0 100 date_timestamp - ));
+DESCR("convert date to timestamp");
+DATA(insert OID = 1176 ( datetime_timestamp PGUID 11 f t f 2 f 1184 "1082 1083" 100 0 0 100 datetime_timestamp - ));
+DESCR("convert date and time to timestamp");
+DATA(insert OID = 1177 ( reltime_interval PGUID 11 f t f 1 f 1186 "703" 100 0 0 100 reltime_interval - ));
+DESCR("convert reltime to interval");
+DATA(insert OID = 1178 ( timestamp_date PGUID 11 f t f 1 f 1082 "1184" 100 0 0 100 timestamp_date - ));
+DESCR("convert timestamp to date");
DATA(insert OID = 1179 ( abstime_date PGUID 11 f t f 1 f 1082 "702" 100 0 0 100 abstime_date - ));
DESCR("convert abstime to date");
-DATA(insert OID = 1180 ( datetime_abstime PGUID 11 f t f 1 f 702 "1184" 100 0 0 100 datetime_abstime - ));
-DESCR("convert datetime to abstime");
+DATA(insert OID = 1180 ( timestamp_abstime PGUID 11 f t f 1 f 702 "1184" 100 0 0 100 timestamp_abstime - ));
+DESCR("convert timestamp to abstime");
-DATA(insert OID = 1188 ( datetime_mi PGUID 11 f t f 2 f 1186 "1184 1184" 100 0 0 100 datetime_mi - ));
+DATA(insert OID = 1188 ( timestamp_mi PGUID 11 f t f 2 f 1186 "1184 1184" 100 0 0 100 timestamp_mi - ));
DESCR("subtract");
-DATA(insert OID = 1189 ( datetime_pl_span PGUID 11 f t f 2 f 1184 "1184 1186" 100 0 0 100 datetime_pl_span - ));
+DATA(insert OID = 1189 ( timestamp_pl_span PGUID 11 f t f 2 f 1184 "1184 1186" 100 0 0 100 timestamp_pl_span - ));
DESCR("plus");
-DATA(insert OID = 1190 ( datetime_mi_span PGUID 11 f t f 2 f 1184 "1184 1186" 100 0 0 100 datetime_mi_span - ));
+DATA(insert OID = 1190 ( timestamp_mi_span PGUID 11 f t f 2 f 1184 "1184 1186" 100 0 0 100 timestamp_mi_span - ));
DESCR("minus");
-DATA(insert OID = 1191 ( text_datetime PGUID 11 f t f 1 f 1184 "25" 100 0 0 100 text_datetime - ));
-DESCR("convert text to datetime");
-DATA(insert OID = 1192 ( datetime_text PGUID 11 f t f 1 f 25 "1184" 100 0 0 100 datetime_text - ));
-DESCR("convert datetime to text");
-DATA(insert OID = 1193 ( timespan_text PGUID 11 f t f 1 f 25 "1186" 100 0 0 100 timespan_text - ));
-DESCR("convert timespan to text");
-DATA(insert OID = 1194 ( timespan_reltime PGUID 11 f t f 1 f 703 "1186" 100 0 0 100 timespan_reltime - ));
-DESCR("convert timespan to reltime");
-DATA(insert OID = 1195 ( datetime_smaller PGUID 11 f t f 2 f 1184 "1184 1184" 100 0 0 100 datetime_smaller - ));
+DATA(insert OID = 1191 ( text_timestamp PGUID 11 f t f 1 f 1184 "25" 100 0 0 100 text_timestamp - ));
+DESCR("convert text to timestamp");
+DATA(insert OID = 1192 ( timestamp_text PGUID 11 f t f 1 f 25 "1184" 100 0 0 100 timestamp_text - ));
+DESCR("convert timestamp to text");
+DATA(insert OID = 1193 ( interval_text PGUID 11 f t f 1 f 25 "1186" 100 0 0 100 interval_text - ));
+DESCR("convert interval to text");
+DATA(insert OID = 1194 ( interval_reltime PGUID 11 f t f 1 f 703 "1186" 100 0 0 100 interval_reltime - ));
+DESCR("convert interval to reltime");
+DATA(insert OID = 1195 ( timestamp_smaller PGUID 11 f t f 2 f 1184 "1184 1184" 100 0 0 100 timestamp_smaller - ));
DESCR("smaller of two");
-DATA(insert OID = 1196 ( datetime_larger PGUID 11 f t f 2 f 1184 "1184 1184" 100 0 0 100 datetime_larger - ));
+DATA(insert OID = 1196 ( timestamp_larger PGUID 11 f t f 2 f 1184 "1184 1184" 100 0 0 100 timestamp_larger - ));
DESCR("larger of two");
-DATA(insert OID = 1197 ( timespan_smaller PGUID 11 f t f 2 f 1186 "1186 1186" 100 0 0 100 timespan_smaller - ));
+DATA(insert OID = 1197 ( interval_smaller PGUID 11 f t f 2 f 1186 "1186 1186" 100 0 0 100 interval_smaller - ));
DESCR("smaller of two");
-DATA(insert OID = 1198 ( timespan_larger PGUID 11 f t f 2 f 1186 "1186 1186" 100 0 0 100 timespan_larger - ));
+DATA(insert OID = 1198 ( interval_larger PGUID 11 f t f 2 f 1186 "1186 1186" 100 0 0 100 interval_larger - ));
DESCR("larger of two");
-DATA(insert OID = 1199 ( datetime_age PGUID 11 f t f 2 f 1186 "1184 1184" 100 0 0 100 datetime_age - ));
+DATA(insert OID = 1199 ( timestamp_age PGUID 11 f t f 2 f 1186 "1184 1184" 100 0 0 100 timestamp_age - ));
DESCR("date difference preserving months and years");
/* OIDS 1200 - 1299 */
@@ -1492,10 +1490,10 @@ DESCR("date difference preserving months and years");
DATA(insert OID = 1200 ( int4reltime PGUID 11 f t t 1 f 703 "23" 100 0 0 100 int4reltime - ));
DESCR("convert int4 to reltime");
-DATA(insert OID = 1217 ( datetime_trunc PGUID 11 f t f 2 f 1184 "25 1184" 100 0 0 100 datetime_trunc - ));
-DESCR("truncate datetime to specified units");
-DATA(insert OID = 1218 ( timespan_trunc PGUID 11 f t f 2 f 1186 "25 1186" 100 0 0 100 timespan_trunc - ));
-DESCR("truncate timespan to specified units");
+DATA(insert OID = 1217 ( timestamp_trunc PGUID 11 f t f 2 f 1184 "25 1184" 100 0 0 100 timestamp_trunc - ));
+DESCR("truncate timestamp to specified units");
+DATA(insert OID = 1218 ( interval_trunc PGUID 11 f t f 2 f 1186 "25 1186" 100 0 0 100 interval_trunc - ));
+DESCR("truncate interval to specified units");
DATA(insert OID = 1230 ( bpchar PGUID 11 f t t 1 f 1042 "18" 100 0 0 100 char_bpchar - ));
DESCR("convert char to char()");
@@ -1523,9 +1521,9 @@ DESCR("character length");
DATA(insert OID = 1379 ( varcharoctetlen PGUID 11 f t t 1 f 23 "1043" 100 0 0 100 varcharoctetlen - ));
DESCR("octet length");
-DATA(insert OID = 1263 ( text_timespan PGUID 11 f t f 1 f 1186 "25" 100 0 0 100 text_timespan - ));
-DESCR("convert text to timespan");
-DATA(insert OID = 1271 ( timespan_finite PGUID 11 f t f 1 f 16 "1186" 100 0 0 100 timespan_finite - ));
+DATA(insert OID = 1263 ( text_interval PGUID 11 f t f 1 f 1186 "25" 100 0 0 100 text_interval - ));
+DESCR("convert text to interval");
+DATA(insert OID = 1271 ( interval_finite PGUID 11 f t f 1 f 16 "1186" 100 0 0 100 interval_finite - ));
DESCR("boolean test");
DATA(insert OID = 1274 ( int84pl PGUID 11 f t t 2 f 20 "20 23" 100 0 0 100 int84pl - ));
@@ -1562,44 +1560,26 @@ DESCR("latest tid of a tuple");
DATA(insert OID = 1294 ( currtid2 PGUID 11 f t f 2 f 27 "25 27" 100 0 0 100 currtid_byrelname - ));
DESCR("latest tid of a tuple");
-DATA(insert OID = 1297 ( timestamp_in PGUID 11 f t f 1 f 1296 "0" 100 0 0 100 timestamp_in - ));
-DESCR("(internal)");
-DATA(insert OID = 1298 ( timestamp_out PGUID 11 f t f 1 f 23 "0" 100 0 0 100 timestamp_out - ));
-DESCR("(internal)");
-DATA(insert OID = 1299 ( now PGUID 11 f t f 0 f 1296 "0" 100 0 0 100 now - ));
+DATA(insert OID = 1299 ( now PGUID 11 f t f 0 f 1184 "0" 100 0 0 100 now - ));
DESCR("current transaction time");
/* OIDS 1300 - 1399 */
-DATA(insert OID = 1306 ( timestampeq PGUID 11 f t t 2 f 16 "1296 1296" 100 0 0 100 timestampeq - ));
-DESCR("equal");
-DATA(insert OID = 1307 ( timestampne PGUID 11 f t t 2 f 16 "1296 1296" 100 0 0 100 timestampne - ));
-DESCR("not equal");
-DATA(insert OID = 1308 ( timestamplt PGUID 11 f t t 2 f 16 "1296 1296" 100 0 0 100 timestamplt - ));
-DESCR("less-than");
-DATA(insert OID = 1309 ( timestampgt PGUID 11 f t t 2 f 16 "1296 1296" 100 0 0 100 timestampgt - ));
-DESCR("greater-than");
-DATA(insert OID = 1310 ( timestample PGUID 11 f t t 2 f 16 "1296 1296" 100 0 0 100 timestample - ));
-DESCR("less-than-or-equal");
-DATA(insert OID = 1311 ( timestampge PGUID 11 f t t 2 f 16 "1296 1296" 100 0 0 100 timestampge - ));
-DESCR("greater-than-or-equal");
-DATA(insert OID = 1314 ( datetime_cmp PGUID 11 f t f 2 f 23 "1184 1184" 100 0 0 100 datetime_cmp - ));
+DATA(insert OID = 1314 ( timestamp_cmp PGUID 11 f t f 2 f 23 "1184 1184" 100 0 0 100 timestamp_cmp - ));
DESCR("less-equal-greater");
-DATA(insert OID = 1315 ( timespan_cmp PGUID 11 f t f 2 f 23 "1186 1186" 100 0 0 100 timespan_cmp - ));
+DATA(insert OID = 1315 ( interval_cmp PGUID 11 f t f 2 f 23 "1186 1186" 100 0 0 100 interval_cmp - ));
DESCR("less-equal-greater");
-DATA(insert OID = 1316 ( datetime_time PGUID 11 f t f 1 f 1083 "1184" 100 0 0 100 datetime_time - ));
-DESCR("convert datetime to time");
-DATA(insert OID = 1318 ( datetime_timestamp PGUID 11 f t f 1 f 1296 "1184" 100 0 0 100 datetime_timestamp - ));
-DESCR("convert datetime to timestamp");
-DATA(insert OID = 1326 ( timespan_div PGUID 11 f t f 2 f 1186 "1186 701" 100 0 0 100 timespan_div - ));
+DATA(insert OID = 1316 ( timestamp_time PGUID 11 f t f 1 f 1083 "1184" 100 0 0 100 timestamp_time - ));
+DESCR("convert timestamp to time");
+DATA(insert OID = 1326 ( interval_div PGUID 11 f t f 2 f 1186 "1186 701" 100 0 0 100 interval_div - ));
DESCR("divide");
-DATA(insert OID = 1339 ( date_zone PGUID 11 f t f 2 f 25 "25 1184" 100 0 0 100 datetime_zone - ));
+DATA(insert OID = 1339 ( date_zone PGUID 11 f t f 2 f 25 "25 1184" 100 0 0 100 timestamp_zone - ));
DESCR("");
-DATA(insert OID = 1340 ( text PGUID 11 f t f 1 f 25 "1184" 100 0 0 100 datetime_text - ));
-DESCR("convert datetime to text");
-DATA(insert OID = 1341 ( text PGUID 11 f t f 1 f 25 "1186" 100 0 0 100 timespan_text - ));
-DESCR("convert timespan to text");
+DATA(insert OID = 1340 ( text PGUID 11 f t f 1 f 25 "1184" 100 0 0 100 timestamp_text - ));
+DESCR("convert timestamp to text");
+DATA(insert OID = 1341 ( text PGUID 11 f t f 1 f 25 "1186" 100 0 0 100 interval_text - ));
+DESCR("convert interval to text");
DATA(insert OID = 1342 ( text PGUID 11 f t t 1 f 25 "23" 100 0 0 100 int4_text - ));
DESCR("convert int4 to text");
DATA(insert OID = 1343 ( text PGUID 11 f t t 1 f 25 "21" 100 0 0 100 int2_text - ));
@@ -1617,48 +1597,42 @@ DESCR("get description for object id");
DATA(insert OID = 1349 ( oidvectortypes PGUID 11 f t f 1 f 25 "30" 100 0 0 100 oidvectortypes - ));
DESCR("print type names of oidvector field");
-DATA(insert OID = 1350 ( datetime PGUID 14 f t f 1 f 1184 "1184" 100 0 0 100 "select $1" - ));
+DATA(insert OID = 1350 ( timestamp PGUID 14 f t f 1 f 1184 "1184" 100 0 0 100 "select $1" - ));
DESCR("convert (noop)");
-DATA(insert OID = 1351 ( datetime PGUID 11 f t f 1 f 1184 "25" 100 0 0 100 text_datetime - ));
-DESCR("convert text to datetime");
-DATA(insert OID = 1352 ( datetime PGUID 11 f t f 1 f 1184 "702" 100 0 0 100 abstime_datetime - ));
-DESCR("convert abstime to datetime");
-DATA(insert OID = 1353 ( datetime PGUID 11 f t f 1 f 1184 "1082" 100 0 0 100 date_datetime - ));
-DESCR("convert date to datetime");
-DATA(insert OID = 1354 ( datetime PGUID 11 f t f 1 f 1184 "1296" 100 0 0 100 timestamp_datetime - ));
-DESCR("convert timestamp to datetime");
-DATA(insert OID = 1355 ( datetime PGUID 11 f t f 2 f 1184 "1082 1083" 100 0 0 100 datetime_datetime - ));
-DESCR("convert date and time to datetime");
-DATA(insert OID = 1356 ( timespan PGUID 14 f t t 1 f 1186 "1186" 100 0 0 100 "select $1" - ));
+DATA(insert OID = 1351 ( timestamp PGUID 11 f t f 1 f 1184 "25" 100 0 0 100 text_timestamp - ));
+DESCR("convert text to timestamp");
+DATA(insert OID = 1352 ( timestamp PGUID 11 f t f 1 f 1184 "702" 100 0 0 100 abstime_timestamp - ));
+DESCR("convert abstime to timestamp");
+DATA(insert OID = 1353 ( timestamp PGUID 11 f t f 1 f 1184 "1082" 100 0 0 100 date_timestamp - ));
+DESCR("convert date to timestamp");
+DATA(insert OID = 1355 ( timestamp PGUID 11 f t f 2 f 1184 "1082 1083" 100 0 0 100 datetime_timestamp - ));
+DESCR("convert date and time to timestamp");
+DATA(insert OID = 1356 ( interval PGUID 14 f t t 1 f 1186 "1186" 100 0 0 100 "select $1" - ));
DESCR("convert (noop)");
-DATA(insert OID = 1357 ( timespan PGUID 11 f t f 1 f 1186 "703" 100 0 0 100 reltime_timespan - ));
-DESCR("convert reltime to timespan");
-DATA(insert OID = 1358 ( timespan PGUID 14 f t f 1 f 1186 "1083" 100 0 0 100 "select time_timespan($1)" - ));
-DESCR("convert time to timespan");
+DATA(insert OID = 1357 ( interval PGUID 11 f t f 1 f 1186 "703" 100 0 0 100 reltime_interval - ));
+DESCR("convert reltime to interval");
+DATA(insert OID = 1358 ( interval PGUID 14 f t f 1 f 1186 "1083" 100 0 0 100 "select time_interval($1)" - ));
+DESCR("convert time to interval");
DATA(insert OID = 1359 ( date PGUID 14 f t t 1 f 1082 "1082" 100 0 0 100 "select $1" - ));
DESCR("convert (noop)");
-DATA(insert OID = 1360 ( date PGUID 11 f t f 1 f 1082 "1184" 100 0 0 100 datetime_date - ));
-DESCR("convert datetime to date");
+DATA(insert OID = 1360 ( date PGUID 11 f t f 1 f 1082 "1184" 100 0 0 100 timestamp_date - ));
+DESCR("convert timestamp to date");
DATA(insert OID = 1361 ( date PGUID 11 f t f 1 f 1082 "702" 100 0 0 100 abstime_date - ));
DESCR("convert abstime to date");
DATA(insert OID = 1362 ( time PGUID 14 f t t 1 f 1083 "1083" 100 0 0 100 "select $1" - ));
DESCR("convert (noop)");
-DATA(insert OID = 1363 ( time PGUID 11 f t f 1 f 1083 "1184" 100 0 0 100 datetime_time - ));
-DESCR("convert datetime to time");
-DATA(insert OID = 1364 ( time PGUID 14 f t f 1 f 1083 "702" 100 0 0 100 "select time(datetime($1))" - ));
+DATA(insert OID = 1363 ( time PGUID 11 f t f 1 f 1083 "1184" 100 0 0 100 timestamp_time - ));
+DESCR("convert timestamp to time");
+DATA(insert OID = 1364 ( time PGUID 14 f t f 1 f 1083 "702" 100 0 0 100 "select time(timestamp($1))" - ));
DESCR("convert abstime to time");
DATA(insert OID = 1365 ( abstime PGUID 14 f t f 1 f 702 "702" 100 0 0 100 "select $1" - ));
DESCR("convert (noop)");
-DATA(insert OID = 1366 ( abstime PGUID 11 f t f 1 f 702 "1184" 100 0 0 100 datetime_abstime - ));
-DESCR("convert datetime to abstime");
+DATA(insert OID = 1366 ( abstime PGUID 11 f t f 1 f 702 "1184" 100 0 0 100 timestamp_abstime - ));
+DESCR("convert timestamp to abstime");
DATA(insert OID = 1367 ( reltime PGUID 14 f t t 1 f 703 "703" 100 0 0 100 "select $1" - ));
DESCR("convert (noop)");
-DATA(insert OID = 1368 ( reltime PGUID 11 f t f 1 f 703 "1186" 100 0 0 100 timespan_reltime - ));
-DESCR("convert timespan to reltime");
-DATA(insert OID = 1369 ( timestamp PGUID 14 f t t 1 f 1296 "1296" 100 0 0 100 "select $1" - ));
-DESCR("convert (noop)");
-DATA(insert OID = 1370 ( timestamp PGUID 11 f t f 1 f 1296 "1184" 100 0 0 100 datetime_timestamp - ));
-DESCR("convert datetime to timestamp");
+DATA(insert OID = 1368 ( reltime PGUID 11 f t f 1 f 703 "1186" 100 0 0 100 interval_reltime - ));
+DESCR("convert interval to reltime");
DATA(insert OID = 1371 ( length PGUID 11 f t t 1 f 23 "25" 100 0 0 100 textlen - ));
DESCR("character length");
DATA(insert OID = 1372 ( length PGUID 11 f t t 1 f 23 "1042" 100 0 0 100 bpcharlen - ));
@@ -1673,36 +1647,36 @@ DESCR("octet length");
DATA(insert OID = 1376 ( octet_length PGUID 11 f t t 1 f 23 "1043" 100 0 0 100 varcharoctetlen - ));
DESCR("octet length");
-DATA(insert OID = 1380 ( date_part PGUID 11 f t f 2 f 701 "25 1184" 100 0 0 100 datetime_part - ));
-DESCR("extract field from datetime");
-DATA(insert OID = 1381 ( date_part PGUID 11 f t f 2 f 701 "25 1186" 100 0 0 100 timespan_part - ));
-DESCR("extract field from timespan");
-DATA(insert OID = 1382 ( date_part PGUID 14 f t f 2 f 701 "25 702" 100 0 0 100 "select datetime_part($1, datetime($2))" - ));
+DATA(insert OID = 1380 ( date_part PGUID 11 f t f 2 f 701 "25 1184" 100 0 0 100 timestamp_part - ));
+DESCR("extract field from timestamp");
+DATA(insert OID = 1381 ( date_part PGUID 11 f t f 2 f 701 "25 1186" 100 0 0 100 interval_part - ));
+DESCR("extract field from interval");
+DATA(insert OID = 1382 ( date_part PGUID 14 f t f 2 f 701 "25 702" 100 0 0 100 "select timestamp_part($1, timestamp($2))" - ));
DESCR("extract field from abstime");
-DATA(insert OID = 1383 ( date_part PGUID 14 f t f 2 f 701 "25 703" 100 0 0 100 "select timespan_part($1, timespan($2))" - ));
+DATA(insert OID = 1383 ( date_part PGUID 14 f t f 2 f 701 "25 703" 100 0 0 100 "select interval_part($1, interval($2))" - ));
DESCR("extract field from reltime");
-DATA(insert OID = 1384 ( date_part PGUID 14 f t f 2 f 701 "25 1082" 100 0 0 100 "select datetime_part($1, datetime($2))" - ));
+DATA(insert OID = 1384 ( date_part PGUID 14 f t f 2 f 701 "25 1082" 100 0 0 100 "select timestamp_part($1, timestamp($2))" - ));
DESCR("extract field from date");
-DATA(insert OID = 1385 ( date_part PGUID 14 f t f 2 f 701 "25 1083" 100 0 0 100 "select timespan_part($1, timespan($2))" - ));
+DATA(insert OID = 1385 ( date_part PGUID 14 f t f 2 f 701 "25 1083" 100 0 0 100 "select interval_part($1, interval($2))" - ));
DESCR("extract field from time");
-DATA(insert OID = 1386 ( date_trunc PGUID 11 f t f 2 f 1184 "25 1184" 100 0 0 100 datetime_trunc - ));
-DESCR("truncate datetime to field");
-DATA(insert OID = 1387 ( date_trunc PGUID 11 f t f 2 f 1186 "25 1186" 100 0 0 100 timespan_trunc - ));
-DESCR("truncate timespan to field");
-DATA(insert OID = 1388 ( age PGUID 11 f t f 2 f 1186 "1184 1184" 100 0 0 100 datetime_age - ));
-DESCR("difference between datetimes but leave years and months unresolved");
-DATA(insert OID = 1389 ( age PGUID 14 f t f 1 f 1186 "1184" 100 0 0 100 "select datetime_age(\'today\', $1)" - ));
-DESCR("difference between datetime and today but leave years and months unresolved");
-
-DATA(insert OID = 1390 ( isfinite PGUID 11 f t f 1 f 16 "1184" 100 0 0 100 datetime_finite - ));
+DATA(insert OID = 1386 ( date_trunc PGUID 11 f t f 2 f 1184 "25 1184" 100 0 0 100 timestamp_trunc - ));
+DESCR("truncate timestamp to field");
+DATA(insert OID = 1387 ( date_trunc PGUID 11 f t f 2 f 1186 "25 1186" 100 0 0 100 interval_trunc - ));
+DESCR("truncate interval to field");
+DATA(insert OID = 1388 ( age PGUID 11 f t f 2 f 1186 "1184 1184" 100 0 0 100 timestamp_age - ));
+DESCR("difference between timestamps but leave years and months unresolved");
+DATA(insert OID = 1389 ( age PGUID 14 f t f 1 f 1186 "1184" 100 0 0 100 "select timestamp_age(\'today\', $1)" - ));
+DESCR("difference between timestamp and today but leave years and months unresolved");
+
+DATA(insert OID = 1390 ( isfinite PGUID 11 f t f 1 f 16 "1184" 100 0 0 100 timestamp_finite - ));
DESCR("boolean test");
-DATA(insert OID = 1391 ( isfinite PGUID 11 f t f 1 f 16 "1186" 100 0 0 100 timespan_finite - ));
+DATA(insert OID = 1391 ( isfinite PGUID 11 f t f 1 f 16 "1186" 100 0 0 100 interval_finite - ));
DESCR("boolean test");
DATA(insert OID = 1392 ( isfinite PGUID 11 f t f 1 f 16 "702" 100 0 0 100 abstime_finite - ));
DESCR("boolean test");
-DATA(insert OID = 1393 ( timespan PGUID 11 f t f 1 f 1186 "25" 100 0 0 100 text_timespan - ));
-DESCR("convert text to timespan");
+DATA(insert OID = 1393 ( interval PGUID 11 f t f 1 f 1186 "25" 100 0 0 100 text_interval - ));
+DESCR("convert text to interval");
DATA(insert OID = 1394 ( name PGUID 11 f t t 1 f 19 "25" 100 0 0 100 text_name - ));
DESCR("convert text to name");
@@ -2352,9 +2326,7 @@ DATA(insert OID = 1769 ( numeric_cmp PGUID 11 f t t 2 f 23 "1700 1700" 100 0 0
DESCR("compare two numbers");
/* formatting */
-DATA(insert OID = 1770 ( to_char PGUID 11 f t f 2 f 25 "1184 25" 100 0 0 100 datetime_to_char - ));
-DESCR("convert / formatting datetime to text");
-DATA(insert OID = 1771 ( to_char PGUID 11 f t f 2 f 25 "1296 25" 100 0 0 100 timestamp_to_char - ));
+DATA(insert OID = 1770 ( to_char PGUID 11 f t f 2 f 25 "1184 25" 100 0 0 100 timestamp_to_char - ));
DESCR("convert / formatting timestamp to text");
DATA(insert OID = 1772 ( to_char PGUID 11 f t f 2 f 25 "1700 25" 100 0 0 100 numeric_to_char - ));
DESCR("convert / formatting numeric to text");
@@ -2368,10 +2340,8 @@ DATA(insert OID = 1776 ( to_char PGUID 11 f t f 2 f 25 "701 25" 100 0 0 100
DESCR("convert / formatting float8 to text");
DATA(insert OID = 1777 ( to_number PGUID 11 f t f 2 f 1700 "25 25" 100 0 0 100 numeric_to_number - ));
DESCR("convert text to numeric");
-DATA(insert OID = 1778 ( to_datetime PGUID 11 f t f 2 f 1184 "25 25" 100 0 0 100 to_datetime - ));
-DESCR("convert text to datetime");
-DATA(insert OID = 1779 ( to_timestamp PGUID 11 f t f 2 f 1296 "25 25" 100 0 0 100 to_timestamp - ));
-DESCR("convert text to datetime");
+DATA(insert OID = 1778 ( to_timestamp PGUID 11 f t f 2 f 1184 "25 25" 100 0 0 100 to_timestamp - ));
+DESCR("convert text to timestamp");
DATA(insert OID = 1780 ( to_date PGUID 11 f t f 2 f 1082 "25 25" 100 0 0 100 to_date - ));
DESCR("convert text to date");
diff --git a/src/include/catalog/pg_type.h b/src/include/catalog/pg_type.h
index b22c80e0f0b..fa074460a7f 100644
--- a/src/include/catalog/pg_type.h
+++ b/src/include/catalog/pg_type.h
@@ -8,7 +8,7 @@
* Portions Copyright (c) 1996-2000, PostgreSQL, Inc
* Portions Copyright (c) 1994, Regents of the University of California
*
- * $Id: pg_type.h,v 1.80 2000/02/15 03:28:31 thomas Exp $
+ * $Id: pg_type.h,v 1.81 2000/02/16 17:26:07 thomas Exp $
*
* NOTES
* the genbki.sh script reads this file and generates .bki
@@ -370,20 +370,17 @@ DESCR("hh:mm:ss, ANSI SQL time");
/* OIDS 1100 - 1199 */
DATA(insert OID = 1182 ( _date PGUID -1 -1 f b t \054 0 1082 array_in array_out array_in array_out i _null_ ));
DATA(insert OID = 1183 ( _time PGUID -1 -1 f b t \054 0 1083 array_in array_out array_in array_out d _null_ ));
-DATA(insert OID = 1184 ( datetime PGUID 8 47 f b t \054 0 0 datetime_in datetime_out datetime_in datetime_out d _null_ ));
+DATA(insert OID = 1184 ( timestamp PGUID 8 47 f b t \054 0 0 timestamp_in timestamp_out timestamp_in timestamp_out d _null_ ));
DESCR("date and time");
-#define DATETIMEOID 1184
-DATA(insert OID = 1185 ( _datetime PGUID -1 -1 f b t \054 0 1184 array_in array_out array_in array_out d _null_ ));
-DATA(insert OID = 1186 ( timespan PGUID 12 47 f b t \054 0 0 timespan_in timespan_out timespan_in timespan_out d _null_ ));
+#define TIMESTAMPOID 1184
+DATA(insert OID = 1185 ( _timestamp PGUID -1 -1 f b t \054 0 1184 array_in array_out array_in array_out d _null_ ));
+DATA(insert OID = 1186 ( interval PGUID 12 47 f b t \054 0 0 interval_in interval_out interval_in interval_out d _null_ ));
DESCR("@ <number> <units>, time interval");
-#define TIMESPANOID 1186
-DATA(insert OID = 1187 ( _timespan PGUID -1 -1 f b t \054 0 1186 array_in array_out array_in array_out d _null_ ));
+#define INTERVALOID 1186
+DATA(insert OID = 1187 ( _interval PGUID -1 -1 f b t \054 0 1186 array_in array_out array_in array_out d _null_ ));
/* OIDS 1200 - 1299 */
DATA(insert OID = 1231 ( _numeric PGUID -1 -1 f b t \054 0 1700 array_in array_out array_in array_out i _null_ ));
-DATA(insert OID = 1296 ( timestamp PGUID 4 19 t b t \054 0 0 timestamp_in timestamp_out timestamp_in timestamp_out i _null_ ));
-DESCR("date time timezone, limited-range ISO-formated date and time");
-#define TIMESTAMPOID 1296
/* OIDS 1700 - 1799 */
DATA(insert OID = 1700 ( numeric PGUID -1 -1 f b t \054 0 0 numeric_in numeric_out numeric_in numeric_out i _null_ ));
diff --git a/src/include/parser/parse_coerce.h b/src/include/parser/parse_coerce.h
index bedaaa37bd9..54107ef3b80 100644
--- a/src/include/parser/parse_coerce.h
+++ b/src/include/parser/parse_coerce.h
@@ -7,7 +7,7 @@
* Portions Copyright (c) 1996-2000, PostgreSQL, Inc
* Portions Copyright (c) 1994, Regents of the University of California
*
- * $Id: parse_coerce.h,v 1.17 2000/01/26 05:58:27 momjian Exp $
+ * $Id: parse_coerce.h,v 1.18 2000/02/16 17:26:16 thomas Exp $
*
*-------------------------------------------------------------------------
*/
@@ -48,8 +48,9 @@ typedef enum CATEGORY
|| ((t) == INT4OID) \
|| ((t) == INT8OID) \
|| ((t) == FLOAT8OID) \
- || ((t) == DATETIMEOID) \
+ || ((t) == NUMERICOID) \
|| ((t) == TIMESTAMPOID) \
+ || ((t) == INTERVALOID) \
|| ((t) == ABSTIMEOID) \
|| ((t) == RELTIMEOID) \
|| ((t) == CHAROID) \
@@ -70,8 +71,8 @@ typedef enum CATEGORY
* Check for types with the same underlying binary representation.
* This allows us to cheat and directly exchange values without
* going through the trouble of calling a conversion function.
- * Remove equivalencing of FLOAT8 and DATETIME. They really are not
- * close enough in behavior, with the DATETIME reserved values
+ * Remove equivalencing of FLOAT8 and TIMESTAMP. They really are not
+ * close enough in behavior, with the TIMESTAMP reserved values
* and special formatting. - thomas 1999-01-24
*/
#define IS_BINARY_COMPATIBLE(a,b) \
@@ -87,12 +88,8 @@ typedef enum CATEGORY
|| ((a) == INT4OID && (b) == REGPROCOID) \
|| ((a) == REGPROCOID && (b) == OIDOID) \
|| ((a) == REGPROCOID && (b) == INT4OID) \
- || ((a) == ABSTIMEOID && (b) == TIMESTAMPOID) \
|| ((a) == ABSTIMEOID && (b) == INT4OID) \
- || ((a) == TIMESTAMPOID && (b) == ABSTIMEOID) \
- || ((a) == TIMESTAMPOID && (b) == INT4OID) \
|| ((a) == INT4OID && (b) == ABSTIMEOID) \
- || ((a) == INT4OID && (b) == TIMESTAMPOID) \
|| ((a) == RELTIMEOID && (b) == INT4OID) \
|| ((a) == INT4OID && (b) == RELTIMEOID) \
|| ((a) == INETOID && (b) == CIDROID) \
@@ -104,21 +101,21 @@ typedef enum CATEGORY
#define IS_HIGHER_TYPE(t) \
(((t) == TEXTOID) \
|| ((t) == FLOAT8OID) \
- || ((t) == TIMESPANOID) \
- || ((t) == DATETIMEOID) \
+ || ((t) == INTERVALOID) \
+ || ((t) == TIMESTAMPOID) \
|| ((t) == POLYGONOID) \
|| ((t) == INETOID) )
/* IS_HIGHEST_TYPE()
* These types are the most general in each of the type categories.
- * Since timespan and datetime overload so many functions, let's
- * give datetime the preference.
+ * Since interval and timestamp overload so many functions, let's
+ * give timestamp the preference.
* Since text is a generic string type let's leave it out too.
*/
#define IS_HIGHEST_TYPE(t) \
(((t) == FLOAT8OID) \
- || ((t) == DATETIMEOID) \
- || ((t) == TIMESPANOID))
+ || ((t) == TIMESTAMPOID) \
+ || ((t) == INTERVALOID))
extern bool IsPreferredType(CATEGORY category, Oid type);
diff --git a/src/include/utils/builtins.h b/src/include/utils/builtins.h
index 7f9dcc6c469..df8dad8dc38 100644
--- a/src/include/utils/builtins.h
+++ b/src/include/utils/builtins.h
@@ -7,7 +7,7 @@
* Portions Copyright (c) 1996-2000, PostgreSQL, Inc
* Portions Copyright (c) 1994, Regents of the University of California
*
- * $Id: builtins.h,v 1.101 2000/02/15 20:49:27 tgl Exp $
+ * $Id: builtins.h,v 1.102 2000/02/16 17:26:25 thomas Exp $
*
* NOTES
* This should normally only be included by fmgr.h.
@@ -27,12 +27,14 @@
#include "nodes/relation.h" /* for amcostestimate parameters */
#include "storage/itemptr.h"
#include "utils/array.h"
-#include "utils/datetime.h"
-#include "utils/geo_decls.h"
#include "utils/inet.h"
#include "utils/int8.h"
-#include "utils/nabstime.h"
+#include "utils/geo_decls.h"
#include "utils/numeric.h"
+#include "utils/datetime.h"
+#include "utils/timestamp.h"
+#include "utils/nabstime.h"
+#include "utils/date.h"
/*
* Defined in adt/
@@ -204,46 +206,6 @@ extern int32 pqtest(struct varlena * vlena);
/* arrayfuncs.c */
-/* date.c */
-extern RelativeTime reltimein(char *timestring);
-extern char *reltimeout(RelativeTime timevalue);
-extern TimeInterval tintervalin(char *intervalstr);
-extern char *tintervalout(TimeInterval interval);
-extern RelativeTime timespan_reltime(TimeSpan *timespan);
-extern TimeSpan *reltime_timespan(RelativeTime reltime);
-extern TimeInterval mktinterval(AbsoluteTime t1, AbsoluteTime t2);
-extern AbsoluteTime timepl(AbsoluteTime t1, RelativeTime t2);
-extern AbsoluteTime timemi(AbsoluteTime t1, RelativeTime t2);
-
-/* extern RelativeTime abstimemi(AbsoluteTime t1, AbsoluteTime t2); static*/
-extern int ininterval(AbsoluteTime t, TimeInterval interval);
-extern RelativeTime intervalrel(TimeInterval interval);
-extern AbsoluteTime timenow(void);
-extern bool reltimeeq(RelativeTime t1, RelativeTime t2);
-extern bool reltimene(RelativeTime t1, RelativeTime t2);
-extern bool reltimelt(RelativeTime t1, RelativeTime t2);
-extern bool reltimegt(RelativeTime t1, RelativeTime t2);
-extern bool reltimele(RelativeTime t1, RelativeTime t2);
-extern bool reltimege(RelativeTime t1, RelativeTime t2);
-extern bool intervalsame(TimeInterval i1, TimeInterval i2);
-extern bool intervaleq(TimeInterval i1, TimeInterval i2);
-extern bool intervalne(TimeInterval i1, TimeInterval i2);
-extern bool intervallt(TimeInterval i1, TimeInterval i2);
-extern bool intervalgt(TimeInterval i1, TimeInterval i2);
-extern bool intervalle(TimeInterval i1, TimeInterval i2);
-extern bool intervalge(TimeInterval i1, TimeInterval i2);
-extern bool intervalleneq(TimeInterval i, RelativeTime t);
-extern bool intervallenne(TimeInterval i, RelativeTime t);
-extern bool intervallenlt(TimeInterval i, RelativeTime t);
-extern bool intervallengt(TimeInterval i, RelativeTime t);
-extern bool intervallenle(TimeInterval i, RelativeTime t);
-extern bool intervallenge(TimeInterval i, RelativeTime t);
-extern bool intervalct(TimeInterval i1, TimeInterval i2);
-extern bool intervalov(TimeInterval i1, TimeInterval i2);
-extern AbsoluteTime intervalstart(TimeInterval i);
-extern AbsoluteTime intervalend(TimeInterval i);
-extern text *timeofday(void);
-
/* filename.c */
extern char *filename_in(char *file);
extern char *filename_out(char *s);
@@ -326,9 +288,6 @@ extern bool float84le(float64 arg1, float32 arg2);
extern bool float84gt(float64 arg1, float32 arg2);
extern bool float84ge(float64 arg1, float32 arg2);
-/* geo_ops.c, geo_selfuncs.c */
-extern double *box_area(BOX *box);
-
/* misc.c */
extern bool nullvalue(Datum value, bool *isNull);
extern bool nonnullvalue(Datum value, bool *isNull);
@@ -432,19 +391,6 @@ extern ItemPointer text_tid(const text *);
extern ItemPointer currtid_byreloid(Oid relOid, ItemPointer);
extern ItemPointer currtid_byrelname(const text* relName, ItemPointer);
-/* timestamp.c */
-extern time_t timestamp_in(const char *timestamp_str);
-extern char *timestamp_out(time_t timestamp);
-extern time_t now(void);
-bool timestampeq(time_t t1, time_t t2);
-bool timestampne(time_t t1, time_t t2);
-bool timestamplt(time_t t1, time_t t2);
-bool timestampgt(time_t t1, time_t t2);
-bool timestample(time_t t1, time_t t2);
-bool timestampge(time_t t1, time_t t2);
-DateTime *timestamp_datetime(time_t timestamp);
-time_t datetime_timestamp(DateTime *datetime);
-
/* varchar.c */
extern char *bpcharin(char *s, int dummy, int32 atttypmod);
extern char *bpcharout(char *s);
@@ -508,38 +454,6 @@ extern int32 byteaGetBit(struct varlena * v, int32 n);
extern struct varlena *byteaSetByte(struct varlena * v, int32 n, int32 newByte);
extern struct varlena *byteaSetBit(struct varlena * v, int32 n, int32 newBit);
-/* datetime.c */
-extern DateADT date_in(char *datestr);
-extern char *date_out(DateADT dateVal);
-extern bool date_eq(DateADT dateVal1, DateADT dateVal2);
-extern bool date_ne(DateADT dateVal1, DateADT dateVal2);
-extern bool date_lt(DateADT dateVal1, DateADT dateVal2);
-extern bool date_le(DateADT dateVal1, DateADT dateVal2);
-extern bool date_gt(DateADT dateVal1, DateADT dateVal2);
-extern bool date_ge(DateADT dateVal1, DateADT dateVal2);
-extern int date_cmp(DateADT dateVal1, DateADT dateVal2);
-extern DateADT date_larger(DateADT dateVal1, DateADT dateVal2);
-extern DateADT date_smaller(DateADT dateVal1, DateADT dateVal2);
-extern int32 date_mi(DateADT dateVal1, DateADT dateVal2);
-extern DateADT date_pli(DateADT dateVal, int32 days);
-extern DateADT date_mii(DateADT dateVal, int32 days);
-extern DateTime *date_datetime(DateADT date);
-extern DateADT datetime_date(DateTime *datetime);
-extern DateTime *datetime_datetime(DateADT date, TimeADT *time);
-extern DateADT abstime_date(AbsoluteTime abstime);
-
-extern TimeADT *time_in(char *timestr);
-extern char *time_out(TimeADT *time);
-extern bool time_eq(TimeADT *time1, TimeADT *time2);
-extern bool time_ne(TimeADT *time1, TimeADT *time2);
-extern bool time_lt(TimeADT *time1, TimeADT *time2);
-extern bool time_le(TimeADT *time1, TimeADT *time2);
-extern bool time_gt(TimeADT *time1, TimeADT *time2);
-extern bool time_ge(TimeADT *time1, TimeADT *time2);
-extern int time_cmp(TimeADT *time1, TimeADT *time2);
-extern TimeADT *datetime_time(DateTime *datetime);
-extern int32 int4reltime(int32 timevalue);
-
/* like.c */
extern bool namelike(NameData *n, struct varlena * p);
extern bool namenlike(NameData *s, struct varlena * p);
diff --git a/src/include/utils/date.h b/src/include/utils/date.h
new file mode 100644
index 00000000000..003ee2e0265
--- /dev/null
+++ b/src/include/utils/date.h
@@ -0,0 +1,52 @@
+/*-------------------------------------------------------------------------
+ *
+ * date.h
+ * Definitions for the SQL92 "date" and "time" types.
+ *
+ *
+ * Portions Copyright (c) 1996-2000, PostgreSQL, Inc
+ * Portions Copyright (c) 1994, Regents of the University of California
+ *
+ * $Id: date.h,v 1.1 2000/02/16 17:26:26 thomas Exp $
+ *
+ *-------------------------------------------------------------------------
+ */
+#ifndef DATE_H
+#define DATE_H
+
+typedef int32 DateADT;
+
+typedef float8 TimeADT;
+
+/* date.c */
+extern DateADT date_in(char *datestr);
+extern char *date_out(DateADT dateVal);
+extern bool date_eq(DateADT dateVal1, DateADT dateVal2);
+extern bool date_ne(DateADT dateVal1, DateADT dateVal2);
+extern bool date_lt(DateADT dateVal1, DateADT dateVal2);
+extern bool date_le(DateADT dateVal1, DateADT dateVal2);
+extern bool date_gt(DateADT dateVal1, DateADT dateVal2);
+extern bool date_ge(DateADT dateVal1, DateADT dateVal2);
+extern int date_cmp(DateADT dateVal1, DateADT dateVal2);
+extern DateADT date_larger(DateADT dateVal1, DateADT dateVal2);
+extern DateADT date_smaller(DateADT dateVal1, DateADT dateVal2);
+extern int32 date_mi(DateADT dateVal1, DateADT dateVal2);
+extern DateADT date_pli(DateADT dateVal, int32 days);
+extern DateADT date_mii(DateADT dateVal, int32 days);
+extern Timestamp *date_timestamp(DateADT date);
+extern DateADT timestamp_date(Timestamp *timestamp);
+extern Timestamp *datetime_timestamp(DateADT date, TimeADT *time);
+extern DateADT abstime_date(AbsoluteTime abstime);
+
+extern TimeADT *time_in(char *timestr);
+extern char *time_out(TimeADT *time);
+extern bool time_eq(TimeADT *time1, TimeADT *time2);
+extern bool time_ne(TimeADT *time1, TimeADT *time2);
+extern bool time_lt(TimeADT *time1, TimeADT *time2);
+extern bool time_le(TimeADT *time1, TimeADT *time2);
+extern bool time_gt(TimeADT *time1, TimeADT *time2);
+extern bool time_ge(TimeADT *time1, TimeADT *time2);
+extern int time_cmp(TimeADT *time1, TimeADT *time2);
+extern TimeADT *timestamp_time(Timestamp *timestamp);
+
+#endif /* DATE_H */
diff --git a/src/include/utils/datetime.h b/src/include/utils/datetime.h
index 2a97f5e0dd5..3df9ddf19f0 100644
--- a/src/include/utils/datetime.h
+++ b/src/include/utils/datetime.h
@@ -1,21 +1,438 @@
/*-------------------------------------------------------------------------
*
* datetime.h
- * Definitions for the datetime
+ * Definitions for the date/time and other date/time support code.
+ * The support code is shared with other date data types,
+ * including abstime, reltime, date, and time.
*
*
* Portions Copyright (c) 1996-2000, PostgreSQL, Inc
* Portions Copyright (c) 1994, Regents of the University of California
*
- * $Id: datetime.h,v 1.9 2000/01/26 05:58:37 momjian Exp $
+ * $Id: datetime.h,v 1.10 2000/02/16 17:26:26 thomas Exp $
*
*-------------------------------------------------------------------------
*/
#ifndef DATETIME_H
#define DATETIME_H
-typedef int32 DateADT;
+#include <time.h>
+#include <math.h>
+#include <limits.h>
+#include "utils/timestamp.h"
+
+#if 0
+
+
+/*
+ * Timestamp represents absolute time.
+ * TimeSpan represents delta time. Keep track of months (and years)
+ * separately since the elapsed time spanned is unknown until instantiated
+ * relative to an absolute time.
+ *
+ * Note that Postgres uses "time interval" to mean a bounded interval,
+ * consisting of a beginning and ending time, not a time span - thomas 97/03/20
+ */
+
+typedef double Timestamp;
+
+typedef struct
+{
+ double time; /* all time units other than months and
+ * years */
+ int4 month; /* months and years, after time for
+ * alignment */
+} TimeSpan;
+
+
+#endif
+
+
+/* ----------------------------------------------------------------
+ * time types + support macros
+ *
+ * String definitions for standard time quantities.
+ *
+ * These strings are the defaults used to form output time strings.
+ * Other alternate forms are hardcoded into token tables in datetime.c.
+ * ----------------------------------------------------------------
+ */
+
+#define DAGO "ago"
+#define DCURRENT "current"
+#define EPOCH "epoch"
+#define INVALID "invalid"
+#define EARLY "-infinity"
+#define LATE "infinity"
+#define NOW "now"
+#define TODAY "today"
+#define TOMORROW "tomorrow"
+#define YESTERDAY "yesterday"
+#define ZULU "zulu"
+
+#define DMICROSEC "usecond"
+#define DMILLISEC "msecond"
+#define DSECOND "second"
+#define DMINUTE "minute"
+#define DHOUR "hour"
+#define DDAY "day"
+#define DWEEK "week"
+#define DMONTH "month"
+#define DQUARTER "quarter"
+#define DYEAR "year"
+#define DDECADE "decade"
+#define DCENTURY "century"
+#define DMILLENIUM "millenium"
+#define DA_D "ad"
+#define DB_C "bc"
+#define DTIMEZONE "timezone"
+
+/*
+ * Fundamental time field definitions for parsing.
+ *
+ * Meridian: am, pm, or 24-hour style.
+ * Millenium: ad, bc
+ */
+
+#define AM 0
+#define PM 1
+#define HR24 2
+
+#define AD 0
+#define BC 1
+
+/*
+ * Fields for time decoding.
+ * Can't have more of these than there are bits in an unsigned int
+ * since these are turned into bit masks during parsing and decoding.
+ */
+
+#define RESERV 0
+#define MONTH 1
+#define YEAR 2
+#define DAY 3
+#define TIMES 4 /* not used - thomas 1997-07-14 */
+#define TZ 5
+#define DTZ 6
+#define DTZMOD 7
+#define IGNORE 8
+#define AMPM 9
+#define HOUR 10
+#define MINUTE 11
+#define SECOND 12
+#define DOY 13
+#define DOW 14
+#define UNITS 15
+#define ADBC 16
+/* these are only for relative dates */
+#define AGO 17
+#define ABS_BEFORE 18
+#define ABS_AFTER 19
+
+/*
+ * Token field definitions for time parsing and decoding.
+ * These need to fit into the datetkn table type.
+ * At the moment, that means keep them within [-127,127].
+ * These are also used for bit masks in DecodeDateDelta()
+ * so actually restrict them to within [0,31] for now.
+ * - thomas 97/06/19
+ * Not all of these fields are used for masks in DecodeDateDelta
+ * so allow some larger than 31. - thomas 1997-11-17
+ */
+
+#define DTK_NUMBER 0
+#define DTK_STRING 1
+
+#define DTK_DATE 2
+#define DTK_TIME 3
+#define DTK_TZ 4
+#define DTK_AGO 5
+
+#define DTK_SPECIAL 6
+#define DTK_INVALID 7
+#define DTK_CURRENT 8
+#define DTK_EARLY 9
+#define DTK_LATE 10
+#define DTK_EPOCH 11
+#define DTK_NOW 12
+#define DTK_YESTERDAY 13
+#define DTK_TODAY 14
+#define DTK_TOMORROW 15
+#define DTK_ZULU 16
+
+#define DTK_DELTA 17
+#define DTK_SECOND 18
+#define DTK_MINUTE 19
+#define DTK_HOUR 20
+#define DTK_DAY 21
+#define DTK_WEEK 22
+#define DTK_MONTH 23
+#define DTK_QUARTER 24
+#define DTK_YEAR 25
+#define DTK_DECADE 26
+#define DTK_CENTURY 27
+#define DTK_MILLENIUM 28
+#define DTK_MILLISEC 29
+#define DTK_MICROSEC 30
+
+#define DTK_DOW 32
+#define DTK_DOY 33
+#define DTK_TZ_HOUR 34
+#define DTK_TZ_MINUTE 35
+
+/*
+ * Bit mask definitions for time parsing.
+ */
+
+#define DTK_M(t) (0x01 << (t))
+
+#define DTK_DATE_M (DTK_M(YEAR) | DTK_M(MONTH) | DTK_M(DAY))
+#define DTK_TIME_M (DTK_M(HOUR) | DTK_M(MINUTE) | DTK_M(SECOND))
+
+#define MAXDATELEN 47 /* maximum possible length of an input
+ * date string */
+#define MAXDATEFIELDS 25 /* maximum possible number of fields in a
+ * date string */
+#define TOKMAXLEN 10 /* only this many chars are stored in
+ * datetktbl */
+
+/* keep this struct small; it gets used a lot */
+typedef struct
+{
+#if defined(_AIX)
+ char *token;
+#else
+ char token[TOKMAXLEN];
+#endif /* _AIX */
+ char type;
+ char value; /* this may be unsigned, alas */
+} datetkn;
+
+
+#if 0
+
+
+#ifdef NAN
+#define TIMESTAMP_INVALID (NAN)
+#else
+#define TIMESTAMP_INVALID (DBL_MIN+DBL_MIN)
+#endif
+#ifdef HUGE_VAL
+#define TIMESTAMP_NOBEGIN (-HUGE_VAL)
+#define TIMESTAMP_NOEND (HUGE_VAL)
+#else
+#define TIMESTAMP_NOBEGIN (-DBL_MAX)
+#define TIMESTAMP_NOEND (DBL_MAX)
+#endif
+#define TIMESTAMP_CURRENT (DBL_MIN)
+#define TIMESTAMP_EPOCH (-DBL_MIN)
+
+#define TIMESTAMP_INVALID(j) {j = TIMESTAMP_INVALID;}
+#ifdef NAN
+#define TIMESTAMP_IS_INVALID(j) (isnan(j))
+#else
+#define TIMESTAMP_IS_INVALID(j) (j == TIMESTAMP_INVALID)
+#endif
+
+#define TIMESTAMP_NOBEGIN(j) {j = DT_NOBEGIN;}
+#define TIMESTAMP_IS_NOBEGIN(j) (j == TIMESTAMP_NOBEGIN)
+
+#define TIMESTAMP_NOEND(j) {j = TIMESTAMP_NOEND;}
+#define TIMESTAMP_IS_NOEND(j) (j == TIMESTAMP_NOEND)
+
+#define TIMESTAMP_CURRENT(j) {j = TIMESTAMP_CURRENT;}
+#if defined(linux) && defined(__powerpc__)
+extern int timestamp_is_current(double j);
+
+#define TIMESTAMP_IS_CURRENT(j) timestamp_is_current(j)
+#else
+#define TIMESTAMP_IS_CURRENT(j) (j == TIMESTAMP_CURRENT)
+#endif
+
+#define TIMESTAMP_EPOCH(j) {j = TIMESTAMP_EPOCH;}
+#if defined(linux) && defined(__powerpc__)
+extern int timestamp_is_epoch(double j);
+
+#define TIMESTAMP_IS_EPOCH(j) timestamp_is_epoch(j)
+#else
+#define TIMESTAMP_IS_EPOCH(j) (j == TIMESTAMP_EPOCH)
+#endif
+
+#define TIMESTAMP_IS_RELATIVE(j) (TIMESTAMP_IS_CURRENT(j) || TIMESTAMP_IS_EPOCH(j))
+#define TIMESTAMP_NOT_FINITE(j) (TIMESTAMP_IS_INVALID(j) \
+ || TIMESTAMP_IS_NOBEGIN(j) || TIMESTAMP_IS_NOEND(j))
+#define TIMESTAMP_IS_RESERVED(j) (TIMESTAMP_IS_RELATIVE(j) || TIMESTAMP_NOT_FINITE(j))
+
+#define TIMESPAN_INVALID(j) {(j).time = DT_INVALID;}
+#ifdef NAN
+#define TIMESPAN_IS_INVALID(j) (isnan((j).time))
+#else
+#define TIMESPAN_IS_INVALID(j) ((j).time == DATETIME_INVALID)
+#endif
+#define TIMESPAN_NOT_FINITE(j) TIMESPAN_IS_INVALID(j)
+
+#define TIME_PREC_INV 1000000.0
+#define JROUND(j) (rint(((double) (j))*TIME_PREC_INV)/TIME_PREC_INV)
+
+
+#endif
+
+/* TMODULO()
+ * Macro to replace modf(), which is broken on some platforms.
+ */
+#define TMODULO(t,q,u) \
+do { \
+ q = ((t < 0)? ceil(t / u): floor(t / u)); \
+ if (q != 0) \
+ t -= rint(q * u); \
+} while(0)
+
+
+/*
+ * Date/time validation
+ * Include check for leap year.
+ */
+
+extern int day_tab[2][13];
+
+#define isleap(y) (((y) % 4) == 0 && (((y) % 100) != 0 || ((y) % 400) == 0))
+
+/* Julian date support for date2j() and j2date()
+ * Set the minimum year to one greater than the year of the first valid day
+ * to avoid having to check year and day both. - tgl 97/05/08
+ */
+
+#define JULIAN_MINYEAR (-4713)
+#define JULIAN_MINMONTH (11)
+#define JULIAN_MINDAY (23)
+
+#define IS_VALID_JULIAN(y,m,d) ((y > JULIAN_MINYEAR) \
+ || ((y == JULIAN_MINYEAR) && ((m > JULIAN_MINMONTH) \
+ || ((m == JULIAN_MINMONTH) && (d >= JULIAN_MINDAY)))))
+
+#define UTIME_MINYEAR (1901)
+#define UTIME_MINMONTH (12)
+#define UTIME_MINDAY (14)
+#define UTIME_MAXYEAR (2038)
+#define UTIME_MAXMONTH (01)
+#define UTIME_MAXDAY (18)
+
+#define IS_VALID_UTIME(y,m,d) (((y > UTIME_MINYEAR) \
+ || ((y == UTIME_MINYEAR) && ((m > UTIME_MINMONTH) \
+ || ((m == UTIME_MINMONTH) && (d >= UTIME_MINDAY))))) \
+ && ((y < UTIME_MAXYEAR) \
+ || ((y == UTIME_MAXYEAR) && ((m < UTIME_MAXMONTH) \
+ || ((m == UTIME_MAXMONTH) && (d <= UTIME_MAXDAY))))))
+
+
+#if 0
+
+
+/*
+ * datetime.c prototypes
+ */
+
+extern DateTime *datetime_in(char *str);
+extern char *datetime_out(DateTime *dt);
+extern bool datetime_eq(DateTime *dt1, DateTime *dt2);
+extern bool datetime_ne(DateTime *dt1, DateTime *dt2);
+extern bool datetime_lt(DateTime *dt1, DateTime *dt2);
+extern bool datetime_le(DateTime *dt1, DateTime *dt2);
+extern bool datetime_ge(DateTime *dt1, DateTime *dt2);
+extern bool datetime_gt(DateTime *dt1, DateTime *dt2);
+extern bool datetime_finite(DateTime *datetime);
+extern int datetime_cmp(DateTime *dt1, DateTime *dt2);
+extern DateTime *datetime_smaller(DateTime *dt1, DateTime *dt2);
+extern DateTime *datetime_larger(DateTime *dt1, DateTime *dt2);
+
+extern TimeSpan *timespan_in(char *str);
+extern char *timespan_out(TimeSpan *span);
+extern bool timespan_eq(TimeSpan *span1, TimeSpan *span2);
+extern bool timespan_ne(TimeSpan *span1, TimeSpan *span2);
+extern bool timespan_lt(TimeSpan *span1, TimeSpan *span2);
+extern bool timespan_le(TimeSpan *span1, TimeSpan *span2);
+extern bool timespan_ge(TimeSpan *span1, TimeSpan *span2);
+extern bool timespan_gt(TimeSpan *span1, TimeSpan *span2);
+extern bool timespan_finite(TimeSpan *span);
+extern int timespan_cmp(TimeSpan *span1, TimeSpan *span2);
+extern TimeSpan *timespan_smaller(TimeSpan *span1, TimeSpan *span2);
+extern TimeSpan *timespan_larger(TimeSpan *span1, TimeSpan *span2);
+
+extern text *datetime_text(DateTime *datetime);
+extern DateTime *text_datetime(text *str);
+extern text *timespan_text(TimeSpan *timespan);
+extern TimeSpan *text_timespan(text *str);
+extern DateTime *datetime_trunc(text *units, DateTime *datetime);
+extern TimeSpan *timespan_trunc(text *units, TimeSpan *timespan);
+extern float64 datetime_part(text *units, DateTime *datetime);
+extern float64 timespan_part(text *units, TimeSpan *timespan);
+extern text *datetime_zone(text *zone, DateTime *datetime);
+
+extern TimeSpan *timespan_um(TimeSpan *span);
+extern TimeSpan *timespan_pl(TimeSpan *span1, TimeSpan *span2);
+extern TimeSpan *timespan_mi(TimeSpan *span1, TimeSpan *span2);
+extern TimeSpan *timespan_div(TimeSpan *span1, float8 *arg2);
+
+extern TimeSpan *datetime_mi(DateTime *dt1, DateTime *dt2);
+extern DateTime *datetime_pl_span(DateTime *dt, TimeSpan *span);
+extern DateTime *datetime_mi_span(DateTime *dt, TimeSpan *span);
+extern TimeSpan *datetime_age(DateTime *dt1, DateTime *dt2);
+
+
+#endif
+
+
+extern void GetCurrentTime(struct tm * tm);
+extern void j2date(int jd, int *year, int *month, int *day);
+extern int date2j(int year, int month, int day);
+
+extern int ParseDateTime(char *timestr, char *lowstr,
+ char **field, int *ftype,
+ int maxfields, int *numfields);
+extern int DecodeDateTime(char **field, int *ftype,
+ int nf, int *dtype,
+ struct tm * tm, double *fsec, int *tzp);
+
+extern int DecodeTimeOnly(char **field, int *ftype, int nf,
+ int *dtype, struct tm * tm, double *fsec);
+
+extern int DecodeDateDelta(char **field, int *ftype,
+ int nf, int *dtype,
+ struct tm * tm, double *fsec);
+
+extern int EncodeDateOnly(struct tm * tm, int style, char *str);
+extern int EncodeTimeOnly(struct tm * tm, double fsec, int style, char *str);
+extern int EncodeDateTime(struct tm * tm, double fsec, int *tzp, char **tzn, int style, char *str);
+extern int EncodeTimeSpan(struct tm * tm, double fsec, int style, char *str);
+
+extern int DecodeDate(char *str, int fmask, int *tmask, struct tm * tm);
+extern int DecodeNumber(int flen, char *field,
+ int fmask, int *tmask,
+ struct tm * tm, double *fsec, int *is2digits);
+extern int DecodeNumberField(int len, char *str,
+ int fmask, int *tmask,
+ struct tm * tm, double *fsec, int *is2digits);
+extern int DecodeSpecial(int field, char *lowtoken, int *val);
+extern int DecodeTime(char *str, int fmask, int *tmask,
+ struct tm * tm, double *fsec);
+extern int DecodeTimezone(char *str, int *tzp);
+extern int DecodeUnits(int field, char *lowtoken, int *val);
+extern datetkn *datebsearch(char *key, datetkn *base, unsigned int nel);
+
+extern int j2day(int jd);
+
+
+#if 0
+
+
+static int EncodeSpecialTimestamp(Timestamp dt, char *str);
+static Timestamp dt2local(Timestamp dt, int timezone);
+static void dt2time(Timestamp dt, int *hour, int *min, double *sec);
+static int timespan2tm(TimeSpan span, struct tm * tm, float8 *fsec);
+static int tm2timespan(struct tm * tm, double fsec, TimeSpan *span);
+
+
+#endif
-typedef float8 TimeADT;
#endif /* DATETIME_H */
diff --git a/src/include/utils/dt.h b/src/include/utils/dt.h
deleted file mode 100644
index 739c3c22baa..00000000000
--- a/src/include/utils/dt.h
+++ /dev/null
@@ -1,378 +0,0 @@
-/*-------------------------------------------------------------------------
- *
- * dt.h
- * Definitions for the date/time and other date/time support code.
- * The support code is shared with other date data types,
- * including abstime, reltime, date, and time.
- *
- *
- * Portions Copyright (c) 1996-2000, PostgreSQL, Inc
- * Portions Copyright (c) 1994, Regents of the University of California
- *
- * $Id: dt.h,v 1.42 2000/01/26 05:58:37 momjian Exp $
- *
- *-------------------------------------------------------------------------
- */
-#ifndef DT_H
-#define DT_H
-
-#include <time.h>
-#include <math.h>
-#include <limits.h>
-
-/*
- * DateTime represents absolute time.
- * TimeSpan represents delta time. Keep track of months (and years)
- * separately since the elapsed time spanned is unknown until instantiated
- * relative to an absolute time.
- *
- * Note that Postgres uses "time interval" to mean a bounded interval,
- * consisting of a beginning and ending time, not a time span - thomas 97/03/20
- */
-
-typedef double DateTime;
-
-typedef struct
-{
- double time; /* all time units other than months and
- * years */
- int4 month; /* months and years, after time for
- * alignment */
-} TimeSpan;
-
-
-/* ----------------------------------------------------------------
- * time types + support macros
- *
- * String definitions for standard time quantities.
- *
- * These strings are the defaults used to form output time strings.
- * Other alternate forms are hardcoded into token tables in dt.c.
- * ----------------------------------------------------------------
- */
-
-#define DAGO "ago"
-#define DCURRENT "current"
-#define EPOCH "epoch"
-#define INVALID "invalid"
-#define EARLY "-infinity"
-#define LATE "infinity"
-#define NOW "now"
-#define TODAY "today"
-#define TOMORROW "tomorrow"
-#define YESTERDAY "yesterday"
-#define ZULU "zulu"
-
-#define DMICROSEC "usecond"
-#define DMILLISEC "msecond"
-#define DSECOND "second"
-#define DMINUTE "minute"
-#define DHOUR "hour"
-#define DDAY "day"
-#define DWEEK "week"
-#define DMONTH "month"
-#define DQUARTER "quarter"
-#define DYEAR "year"
-#define DDECADE "decade"
-#define DCENTURY "century"
-#define DMILLENIUM "millenium"
-#define DA_D "ad"
-#define DB_C "bc"
-#define DTIMEZONE "timezone"
-
-/*
- * Fundamental time field definitions for parsing.
- *
- * Meridian: am, pm, or 24-hour style.
- * Millenium: ad, bc
- */
-
-#define AM 0
-#define PM 1
-#define HR24 2
-
-#define AD 0
-#define BC 1
-
-/*
- * Fields for time decoding.
- * Can't have more of these than there are bits in an unsigned int
- * since these are turned into bit masks during parsing and decoding.
- */
-
-#define RESERV 0
-#define MONTH 1
-#define YEAR 2
-#define DAY 3
-#define TIMES 4 /* not used - thomas 1997-07-14 */
-#define TZ 5
-#define DTZ 6
-#define DTZMOD 7
-#define IGNORE 8
-#define AMPM 9
-#define HOUR 10
-#define MINUTE 11
-#define SECOND 12
-#define DOY 13
-#define DOW 14
-#define UNITS 15
-#define ADBC 16
-/* these are only for relative dates */
-#define AGO 17
-#define ABS_BEFORE 18
-#define ABS_AFTER 19
-
-/*
- * Token field definitions for time parsing and decoding.
- * These need to fit into the datetkn table type.
- * At the moment, that means keep them within [-127,127].
- * These are also used for bit masks in DecodeDateDelta()
- * so actually restrict them to within [0,31] for now.
- * - thomas 97/06/19
- * Not all of these fields are used for masks in DecodeDateDelta
- * so allow some larger than 31. - thomas 1997-11-17
- */
-
-#define DTK_NUMBER 0
-#define DTK_STRING 1
-
-#define DTK_DATE 2
-#define DTK_TIME 3
-#define DTK_TZ 4
-#define DTK_AGO 5
-
-#define DTK_SPECIAL 6
-#define DTK_INVALID 7
-#define DTK_CURRENT 8
-#define DTK_EARLY 9
-#define DTK_LATE 10
-#define DTK_EPOCH 11
-#define DTK_NOW 12
-#define DTK_YESTERDAY 13
-#define DTK_TODAY 14
-#define DTK_TOMORROW 15
-#define DTK_ZULU 16
-
-#define DTK_DELTA 17
-#define DTK_SECOND 18
-#define DTK_MINUTE 19
-#define DTK_HOUR 20
-#define DTK_DAY 21
-#define DTK_WEEK 22
-#define DTK_MONTH 23
-#define DTK_QUARTER 24
-#define DTK_YEAR 25
-#define DTK_DECADE 26
-#define DTK_CENTURY 27
-#define DTK_MILLENIUM 28
-#define DTK_MILLISEC 29
-#define DTK_MICROSEC 30
-
-#define DTK_DOW 32
-#define DTK_DOY 33
-#define DTK_TZ_HOUR 34
-#define DTK_TZ_MINUTE 35
-
-/*
- * Bit mask definitions for time parsing.
- */
-
-#define DTK_M(t) (0x01 << (t))
-
-#define DTK_DATE_M (DTK_M(YEAR) | DTK_M(MONTH) | DTK_M(DAY))
-#define DTK_TIME_M (DTK_M(HOUR) | DTK_M(MINUTE) | DTK_M(SECOND))
-
-#define MAXDATELEN 47 /* maximum possible length of an input
- * date string */
-#define MAXDATEFIELDS 25 /* maximum possible number of fields in a
- * date string */
-#define TOKMAXLEN 10 /* only this many chars are stored in
- * datetktbl */
-
-/* keep this struct small; it gets used a lot */
-typedef struct
-{
-#if defined(_AIX)
- char *token;
-#else
- char token[TOKMAXLEN];
-#endif /* _AIX */
- char type;
- char value; /* this may be unsigned, alas */
-} datetkn;
-
-#ifdef NAN
-#define DT_INVALID (NAN)
-#else
-#define DT_INVALID (DBL_MIN+DBL_MIN)
-#endif
-#ifdef HUGE_VAL
-#define DT_NOBEGIN (-HUGE_VAL)
-#define DT_NOEND (HUGE_VAL)
-#else
-#define DT_NOBEGIN (-DBL_MAX)
-#define DT_NOEND (DBL_MAX)
-#endif
-#define DT_CURRENT (DBL_MIN)
-#define DT_EPOCH (-DBL_MIN)
-
-#define DATETIME_INVALID(j) {j = DT_INVALID;}
-#ifdef NAN
-#define DATETIME_IS_INVALID(j) (isnan(j))
-#else
-#define DATETIME_IS_INVALID(j) (j == DT_INVALID)
-#endif
-
-#define DATETIME_NOBEGIN(j) {j = DT_NOBEGIN;}
-#define DATETIME_IS_NOBEGIN(j) (j == DT_NOBEGIN)
-
-#define DATETIME_NOEND(j) {j = DT_NOEND;}
-#define DATETIME_IS_NOEND(j) (j == DT_NOEND)
-
-#define DATETIME_CURRENT(j) {j = DT_CURRENT;}
-#if defined(linux) && defined(__powerpc__)
-extern int datetime_is_current(double j);
-
-#define DATETIME_IS_CURRENT(j) datetime_is_current(j)
-#else
-#define DATETIME_IS_CURRENT(j) (j == DT_CURRENT)
-#endif
-
-#define DATETIME_EPOCH(j) {j = DT_EPOCH;}
-#if defined(linux) && defined(__powerpc__)
-extern int datetime_is_epoch(double j);
-
-#define DATETIME_IS_EPOCH(j) datetime_is_epoch(j)
-#else
-#define DATETIME_IS_EPOCH(j) (j == DT_EPOCH)
-#endif
-
-#define DATETIME_IS_RELATIVE(j) (DATETIME_IS_CURRENT(j) || DATETIME_IS_EPOCH(j))
-#define DATETIME_NOT_FINITE(j) (DATETIME_IS_INVALID(j) \
- || DATETIME_IS_NOBEGIN(j) || DATETIME_IS_NOEND(j))
-#define DATETIME_IS_RESERVED(j) (DATETIME_IS_RELATIVE(j) || DATETIME_NOT_FINITE(j))
-
-#define TIMESPAN_INVALID(j) {(j).time = DT_INVALID;}
-#ifdef NAN
-#define TIMESPAN_IS_INVALID(j) (isnan((j).time))
-#else
-#define TIMESPAN_IS_INVALID(j) ((j).time == DT_INVALID)
-#endif
-#define TIMESPAN_NOT_FINITE(j) TIMESPAN_IS_INVALID(j)
-
-#define TIME_PREC_INV 1000000.0
-#define JROUND(j) (rint(((double) (j))*TIME_PREC_INV)/TIME_PREC_INV)
-
-
-
-/*
- * Date/time validation
- * Include check for leap year.
- */
-
-extern int day_tab[2][13];
-
-#define isleap(y) (((y) % 4) == 0 && (((y) % 100) != 0 || ((y) % 400) == 0))
-
-/* Julian date support for date2j() and j2date()
- * Set the minimum year to one greater than the year of the first valid day
- * to avoid having to check year and day both. - tgl 97/05/08
- */
-
-#define JULIAN_MINYEAR (-4713)
-#define JULIAN_MINMONTH (11)
-#define JULIAN_MINDAY (23)
-
-#define IS_VALID_JULIAN(y,m,d) ((y > JULIAN_MINYEAR) \
- || ((y == JULIAN_MINYEAR) && ((m > JULIAN_MINMONTH) \
- || ((m == JULIAN_MINMONTH) && (d >= JULIAN_MINDAY)))))
-
-#define UTIME_MINYEAR (1901)
-#define UTIME_MINMONTH (12)
-#define UTIME_MINDAY (14)
-#define UTIME_MAXYEAR (2038)
-#define UTIME_MAXMONTH (01)
-#define UTIME_MAXDAY (18)
-
-#define IS_VALID_UTIME(y,m,d) (((y > UTIME_MINYEAR) \
- || ((y == UTIME_MINYEAR) && ((m > UTIME_MINMONTH) \
- || ((m == UTIME_MINMONTH) && (d >= UTIME_MINDAY))))) \
- && ((y < UTIME_MAXYEAR) \
- || ((y == UTIME_MAXYEAR) && ((m < UTIME_MAXMONTH) \
- || ((m == UTIME_MAXMONTH) && (d <= UTIME_MAXDAY))))))
-
-/*
- * dt.c prototypes
- */
-
-extern DateTime *datetime_in(char *str);
-extern char *datetime_out(DateTime *dt);
-extern bool datetime_eq(DateTime *dt1, DateTime *dt2);
-extern bool datetime_ne(DateTime *dt1, DateTime *dt2);
-extern bool datetime_lt(DateTime *dt1, DateTime *dt2);
-extern bool datetime_le(DateTime *dt1, DateTime *dt2);
-extern bool datetime_ge(DateTime *dt1, DateTime *dt2);
-extern bool datetime_gt(DateTime *dt1, DateTime *dt2);
-extern bool datetime_finite(DateTime *datetime);
-extern int datetime_cmp(DateTime *dt1, DateTime *dt2);
-extern DateTime *datetime_smaller(DateTime *dt1, DateTime *dt2);
-extern DateTime *datetime_larger(DateTime *dt1, DateTime *dt2);
-
-extern TimeSpan *timespan_in(char *str);
-extern char *timespan_out(TimeSpan *span);
-extern bool timespan_eq(TimeSpan *span1, TimeSpan *span2);
-extern bool timespan_ne(TimeSpan *span1, TimeSpan *span2);
-extern bool timespan_lt(TimeSpan *span1, TimeSpan *span2);
-extern bool timespan_le(TimeSpan *span1, TimeSpan *span2);
-extern bool timespan_ge(TimeSpan *span1, TimeSpan *span2);
-extern bool timespan_gt(TimeSpan *span1, TimeSpan *span2);
-extern bool timespan_finite(TimeSpan *span);
-extern int timespan_cmp(TimeSpan *span1, TimeSpan *span2);
-extern TimeSpan *timespan_smaller(TimeSpan *span1, TimeSpan *span2);
-extern TimeSpan *timespan_larger(TimeSpan *span1, TimeSpan *span2);
-
-extern text *datetime_text(DateTime *datetime);
-extern DateTime *text_datetime(text *str);
-extern text *timespan_text(TimeSpan *timespan);
-extern TimeSpan *text_timespan(text *str);
-extern DateTime *datetime_trunc(text *units, DateTime *datetime);
-extern TimeSpan *timespan_trunc(text *units, TimeSpan *timespan);
-extern float64 datetime_part(text *units, DateTime *datetime);
-extern float64 timespan_part(text *units, TimeSpan *timespan);
-extern text *datetime_zone(text *zone, DateTime *datetime);
-
-extern TimeSpan *timespan_um(TimeSpan *span);
-extern TimeSpan *timespan_pl(TimeSpan *span1, TimeSpan *span2);
-extern TimeSpan *timespan_mi(TimeSpan *span1, TimeSpan *span2);
-extern TimeSpan *timespan_div(TimeSpan *span1, float8 *arg2);
-
-extern TimeSpan *datetime_mi(DateTime *dt1, DateTime *dt2);
-extern DateTime *datetime_pl_span(DateTime *dt, TimeSpan *span);
-extern DateTime *datetime_mi_span(DateTime *dt, TimeSpan *span);
-extern TimeSpan *datetime_age(DateTime *dt1, DateTime *dt2);
-
-extern void GetCurrentTime(struct tm * tm);
-extern DateTime SetDateTime(DateTime datetime);
-extern int tm2datetime(struct tm * tm, double fsec, int *tzp, DateTime *dt);
-extern int datetime2tm(DateTime dt, int *tzp, struct tm * tm, double *fsec, char **tzn);
-
-extern void j2date(int jd, int *year, int *month, int *day);
-extern int date2j(int year, int month, int day);
-
-extern int ParseDateTime(char *timestr, char *lowstr,
- char **field, int *ftype, int maxfields, int *numfields);
-extern int DecodeDateTime(char **field, int *ftype,
- int nf, int *dtype, struct tm * tm, double *fsec, int *tzp);
-
-extern int DecodeTimeOnly(char **field, int *ftype, int nf,
- int *dtype, struct tm * tm, double *fsec);
-
-extern int DecodeDateDelta(char **field, int *ftype,
- int nf, int *dtype, struct tm * tm, double *fsec);
-
-extern int EncodeDateOnly(struct tm * tm, int style, char *str);
-extern int EncodeTimeOnly(struct tm * tm, double fsec, int style, char *str);
-extern int EncodeDateTime(struct tm * tm, double fsec, int *tzp, char **tzn, int style, char *str);
-extern int EncodeTimeSpan(struct tm * tm, double fsec, int style, char *str);
-
-#endif /* DT_H */
diff --git a/src/include/utils/formatting.h b/src/include/utils/formatting.h
index 51c649fd9da..39259afff24 100644
--- a/src/include/utils/formatting.h
+++ b/src/include/utils/formatting.h
@@ -2,7 +2,7 @@
/* -----------------------------------------------------------------------
* formatting.h
*
- * $Id: formatting.h,v 1.2 2000/02/08 15:56:57 momjian Exp $
+ * $Id: formatting.h,v 1.3 2000/02/16 17:26:26 thomas Exp $
*
*
* Portions Copyright (c) 1999-2000, PostgreSQL, Inc
@@ -18,16 +18,14 @@
#ifndef _FORMATTING_H_
#define _FORMATTING_H_
-extern text *datetime_to_char(DateTime *dt, text *fmt);
-extern text *timestamp_to_char(time_t dt, text *fmt);
-extern DateTime *to_datetime(text *date_str, text *fmt);
-extern time_t to_timestamp(text *date_str, text *fmt);
-extern DateADT to_date(text *date_str, text *fmt);
-extern Numeric numeric_to_number(text *value, text *fmt);
-extern text *numeric_to_char(Numeric value, text *fmt);
-extern text *int4_to_char(int32 value, text *fmt);
-extern text *int8_to_char(int64 *value, text *fmt);
-extern text *float4_to_char(float32 value, text *fmt);
-extern text *float8_to_char(float64 value, text *fmt);
+extern text *timestamp_to_char(Timestamp *dt, text *fmt);
+extern Timestamp *to_timestamp(text *date_str, text *fmt);
+extern DateADT to_date(text *date_str, text *fmt);
+extern Numeric numeric_to_number(text *value, text *fmt);
+extern text *numeric_to_char(Numeric value, text *fmt);
+extern text *int4_to_char(int32 value, text *fmt);
+extern text *int8_to_char(int64 *value, text *fmt);
+extern text *float4_to_char(float32 value, text *fmt);
+extern text *float8_to_char(float64 value, text *fmt);
#endif
diff --git a/src/include/utils/nabstime.h b/src/include/utils/nabstime.h
index 4da1c283436..09eea75ec64 100644
--- a/src/include/utils/nabstime.h
+++ b/src/include/utils/nabstime.h
@@ -7,7 +7,7 @@
* Portions Copyright (c) 1996-2000, PostgreSQL, Inc
* Portions Copyright (c) 1994, Regents of the University of California
*
- * $Id: nabstime.h,v 1.22 2000/01/26 05:58:38 momjian Exp $
+ * $Id: nabstime.h,v 1.23 2000/02/16 17:26:26 thomas Exp $
*
*-------------------------------------------------------------------------
*/
@@ -15,7 +15,8 @@
#define NABSTIME_H
#include <time.h>
-#include "utils/dt.h"
+#include "utils/timestamp.h"
+#include "utils/datetime.h"
/* ----------------------------------------------------------------
@@ -119,11 +120,51 @@ extern bool abstimele(AbsoluteTime t1, AbsoluteTime t2);
extern bool abstimege(AbsoluteTime t1, AbsoluteTime t2);
extern bool abstime_finite(AbsoluteTime time);
-extern AbsoluteTime datetime_abstime(DateTime *datetime);
-extern DateTime *abstime_datetime(AbsoluteTime abstime);
+extern AbsoluteTime timestamp_abstime(Timestamp *timestamp);
+extern Timestamp *abstime_timestamp(AbsoluteTime abstime);
extern bool AbsoluteTimeIsBefore(AbsoluteTime time1, AbsoluteTime time2);
extern void abstime2tm(AbsoluteTime time, int *tzp, struct tm * tm, char *tzn);
+extern RelativeTime reltimein(char *timestring);
+extern char *reltimeout(RelativeTime timevalue);
+extern TimeInterval tintervalin(char *intervalstr);
+extern char *tintervalout(TimeInterval interval);
+extern RelativeTime interval_reltime(Interval *interval);
+extern Interval *reltime_interval(RelativeTime reltime);
+extern TimeInterval mktinterval(AbsoluteTime t1, AbsoluteTime t2);
+extern AbsoluteTime timepl(AbsoluteTime t1, RelativeTime t2);
+extern AbsoluteTime timemi(AbsoluteTime t1, RelativeTime t2);
+
+/* extern RelativeTime abstimemi(AbsoluteTime t1, AbsoluteTime t2); static*/
+extern int intinterval(AbsoluteTime t, TimeInterval interval);
+extern RelativeTime tintervalrel(TimeInterval interval);
+extern AbsoluteTime timenow(void);
+extern bool reltimeeq(RelativeTime t1, RelativeTime t2);
+extern bool reltimene(RelativeTime t1, RelativeTime t2);
+extern bool reltimelt(RelativeTime t1, RelativeTime t2);
+extern bool reltimegt(RelativeTime t1, RelativeTime t2);
+extern bool reltimele(RelativeTime t1, RelativeTime t2);
+extern bool reltimege(RelativeTime t1, RelativeTime t2);
+extern bool tintervalsame(TimeInterval i1, TimeInterval i2);
+extern bool tintervaleq(TimeInterval i1, TimeInterval i2);
+extern bool tintervalne(TimeInterval i1, TimeInterval i2);
+extern bool tintervallt(TimeInterval i1, TimeInterval i2);
+extern bool tintervalgt(TimeInterval i1, TimeInterval i2);
+extern bool tintervalle(TimeInterval i1, TimeInterval i2);
+extern bool tintervalge(TimeInterval i1, TimeInterval i2);
+extern bool tintervalleneq(TimeInterval i, RelativeTime t);
+extern bool tintervallenne(TimeInterval i, RelativeTime t);
+extern bool tintervallenlt(TimeInterval i, RelativeTime t);
+extern bool tintervallengt(TimeInterval i, RelativeTime t);
+extern bool tintervallenle(TimeInterval i, RelativeTime t);
+extern bool tintervallenge(TimeInterval i, RelativeTime t);
+extern bool tintervalct(TimeInterval i1, TimeInterval i2);
+extern bool tintervalov(TimeInterval i1, TimeInterval i2);
+extern AbsoluteTime tintervalstart(TimeInterval i);
+extern AbsoluteTime tintervalend(TimeInterval i);
+extern int32 int4reltime(int32 timevalue);
+extern text *timeofday(void);
+
#endif /* NABSTIME_H */
diff --git a/src/include/utils/timestamp.h b/src/include/utils/timestamp.h
new file mode 100644
index 00000000000..27a5288cf39
--- /dev/null
+++ b/src/include/utils/timestamp.h
@@ -0,0 +1,208 @@
+/*-------------------------------------------------------------------------
+ *
+ * timestamp.h
+ * Definitions for the SQL92 "timestamp" and "interval" types.
+ *
+ * Portions Copyright (c) 1996-2000, PostgreSQL, Inc
+ * Portions Copyright (c) 1994, Regents of the University of California
+ *
+ * $Id: timestamp.h,v 1.1 2000/02/16 17:26:26 thomas Exp $
+ *
+ *-------------------------------------------------------------------------
+ */
+#ifndef TIMESTAMP_H
+#define TIMESTAMP_H
+
+#include <time.h>
+#include <math.h>
+#include <limits.h>
+
+/*
+ * Timestamp represents absolute time.
+ * Interval represents delta time. Keep track of months (and years)
+ * separately since the elapsed time spanned is unknown until instantiated
+ * relative to an absolute time.
+ *
+ * Note that Postgres uses "time interval" to mean a bounded interval,
+ * consisting of a beginning and ending time, not a time span - thomas 97/03/20
+ */
+
+typedef double Timestamp;
+
+typedef struct
+{
+ double time; /* all time units other than months and
+ * years */
+ int4 month; /* months and years, after time for
+ * alignment */
+} Interval;
+
+
+#ifdef NAN
+#define DT_INVALID (NAN)
+#else
+#define DT_INVALID (DBL_MIN+DBL_MIN)
+#endif
+#ifdef HUGE_VAL
+#define DT_NOBEGIN (-HUGE_VAL)
+#define DT_NOEND (HUGE_VAL)
+#else
+#define DT_NOBEGIN (-DBL_MAX)
+#define DT_NOEND (DBL_MAX)
+#endif
+#define DT_CURRENT (DBL_MIN)
+#define DT_EPOCH (-DBL_MIN)
+
+#define TIMESTAMP_INVALID(j) {j = DT_INVALID;}
+#ifdef NAN
+#define TIMESTAMP_IS_INVALID(j) (isnan(j))
+#else
+#define TIMESTAMP_IS_INVALID(j) (j == DT_INVALID)
+#endif
+
+#define TIMESTAMP_NOBEGIN(j) {j = DT_NOBEGIN;}
+#define TIMESTAMP_IS_NOBEGIN(j) (j == DT_NOBEGIN)
+
+#define TIMESTAMP_NOEND(j) {j = DT_NOEND;}
+#define TIMESTAMP_IS_NOEND(j) (j == DT_NOEND)
+
+#define TIMESTAMP_CURRENT(j) {j = DT_CURRENT;}
+#if defined(linux) && defined(__powerpc__)
+extern int timestamp_is_current(double j);
+
+#define TIMESTAMP_IS_CURRENT(j) timestamp_is_current(j)
+#else
+#define TIMESTAMP_IS_CURRENT(j) (j == DT_CURRENT)
+#endif
+
+#define TIMESTAMP_EPOCH(j) {j = DT_EPOCH;}
+#if defined(linux) && defined(__powerpc__)
+extern int timestamp_is_epoch(double j);
+
+#define TIMESTAMP_IS_EPOCH(j) timestamp_is_epoch(j)
+#else
+#define TIMESTAMP_IS_EPOCH(j) (j == DT_EPOCH)
+#endif
+
+#define TIMESTAMP_IS_RELATIVE(j) (TIMESTAMP_IS_CURRENT(j) || TIMESTAMP_IS_EPOCH(j))
+#define TIMESTAMP_NOT_FINITE(j) (TIMESTAMP_IS_INVALID(j) \
+ || TIMESTAMP_IS_NOBEGIN(j) || TIMESTAMP_IS_NOEND(j))
+#define TIMESTAMP_IS_RESERVED(j) (TIMESTAMP_IS_RELATIVE(j) || TIMESTAMP_NOT_FINITE(j))
+
+#define INTERVAL_INVALID(j) {(j).time = DT_INVALID;}
+#ifdef NAN
+#define INTERVAL_IS_INVALID(j) (isnan((j).time))
+#else
+#define INTERVAL_IS_INVALID(j) ((j).time == DT_INVALID)
+#endif
+#define INTERVAL_NOT_FINITE(j) INTERVAL_IS_INVALID(j)
+
+#define TIME_PREC_INV 1000000.0
+#define JROUND(j) (rint(((double) (j))*TIME_PREC_INV)/TIME_PREC_INV)
+
+
+#if 0
+
+
+/*
+ * Date/time validation
+ * Include check for leap year.
+ */
+
+extern int day_tab[2][13];
+
+#define isleap(y) (((y) % 4) == 0 && (((y) % 100) != 0 || ((y) % 400) == 0))
+
+/* Julian date support for date2j() and j2date()
+ * Set the minimum year to one greater than the year of the first valid day
+ * to avoid having to check year and day both. - tgl 97/05/08
+ */
+
+#define JULIAN_MINYEAR (-4713)
+#define JULIAN_MINMONTH (11)
+#define JULIAN_MINDAY (23)
+
+#define IS_VALID_JULIAN(y,m,d) ((y > JULIAN_MINYEAR) \
+ || ((y == JULIAN_MINYEAR) && ((m > JULIAN_MINMONTH) \
+ || ((m == JULIAN_MINMONTH) && (d >= JULIAN_MINDAY)))))
+
+#define UTIME_MINYEAR (1901)
+#define UTIME_MINMONTH (12)
+#define UTIME_MINDAY (14)
+#define UTIME_MAXYEAR (2038)
+#define UTIME_MAXMONTH (01)
+#define UTIME_MAXDAY (18)
+
+#define IS_VALID_UTIME(y,m,d) (((y > UTIME_MINYEAR) \
+ || ((y == UTIME_MINYEAR) && ((m > UTIME_MINMONTH) \
+ || ((m == UTIME_MINMONTH) && (d >= UTIME_MINDAY))))) \
+ && ((y < UTIME_MAXYEAR) \
+ || ((y == UTIME_MAXYEAR) && ((m < UTIME_MAXMONTH) \
+ || ((m == UTIME_MAXMONTH) && (d <= UTIME_MAXDAY))))))
+
+
+#endif
+
+
+/*
+ * timestamp.c prototypes
+ */
+
+extern Timestamp *timestamp_in(char *str);
+extern char *timestamp_out(Timestamp *dt);
+extern bool timestamp_eq(Timestamp *dt1, Timestamp *dt2);
+extern bool timestamp_ne(Timestamp *dt1, Timestamp *dt2);
+extern bool timestamp_lt(Timestamp *dt1, Timestamp *dt2);
+extern bool timestamp_le(Timestamp *dt1, Timestamp *dt2);
+extern bool timestamp_ge(Timestamp *dt1, Timestamp *dt2);
+extern bool timestamp_gt(Timestamp *dt1, Timestamp *dt2);
+extern bool timestamp_finite(Timestamp *timestamp);
+extern int timestamp_cmp(Timestamp *dt1, Timestamp *dt2);
+extern Timestamp *timestamp_smaller(Timestamp *dt1, Timestamp *dt2);
+extern Timestamp *timestamp_larger(Timestamp *dt1, Timestamp *dt2);
+
+extern Interval *interval_in(char *str);
+extern char *interval_out(Interval *span);
+extern bool interval_eq(Interval *span1, Interval *span2);
+extern bool interval_ne(Interval *span1, Interval *span2);
+extern bool interval_lt(Interval *span1, Interval *span2);
+extern bool interval_le(Interval *span1, Interval *span2);
+extern bool interval_ge(Interval *span1, Interval *span2);
+extern bool interval_gt(Interval *span1, Interval *span2);
+extern bool interval_finite(Interval *span);
+extern int interval_cmp(Interval *span1, Interval *span2);
+extern Interval *interval_smaller(Interval *span1, Interval *span2);
+extern Interval *interval_larger(Interval *span1, Interval *span2);
+
+extern text *timestamp_text(Timestamp *timestamp);
+extern Timestamp *text_timestamp(text *str);
+extern text *interval_text(Interval *interval);
+extern Interval *text_interval(text *str);
+extern Timestamp *timestamp_trunc(text *units, Timestamp *timestamp);
+extern Interval *interval_trunc(text *units, Interval *interval);
+extern float64 timestamp_part(text *units, Timestamp *timestamp);
+extern float64 interval_part(text *units, Interval *interval);
+extern text *timestamp_zone(text *zone, Timestamp *timestamp);
+
+extern Interval *interval_um(Interval *span);
+extern Interval *interval_pl(Interval *span1, Interval *span2);
+extern Interval *interval_mi(Interval *span1, Interval *span2);
+extern Interval *interval_div(Interval *span1, float8 *arg2);
+
+extern Interval *timestamp_mi(Timestamp *dt1, Timestamp *dt2);
+extern Timestamp *timestamp_pl_span(Timestamp *dt, Interval *span);
+extern Timestamp *timestamp_mi_span(Timestamp *dt, Interval *span);
+extern Interval *timestamp_age(Timestamp *dt1, Timestamp *dt2);
+
+extern int tm2timestamp(struct tm * tm, double fsec, int *tzp, Timestamp *dt);
+extern int timestamp2tm(Timestamp dt, int *tzp, struct tm * tm, double *fsec, char **tzn);
+
+extern Timestamp SetTimestamp(Timestamp timestamp);
+extern Timestamp dt2local(Timestamp dt, int timezone);
+extern void dt2time(Timestamp dt, int *hour, int *min, double *sec);
+extern int EncodeSpecialTimestamp(Timestamp dt, char *str);
+extern int interval2tm(Interval span, struct tm * tm, float8 *fsec);
+extern int tm2interval(struct tm * tm, double fsec, Interval *span);
+extern Timestamp *now(void);
+
+#endif /* TIMESTAMP_H */