diff options
Diffstat (limited to 'src/include')
| -rw-r--r-- | src/include/catalog/catversion.h | 4 | ||||
| -rw-r--r-- | src/include/catalog/pg_aggregate.h | 14 | ||||
| -rw-r--r-- | src/include/catalog/pg_opclass.h | 6 | ||||
| -rw-r--r-- | src/include/catalog/pg_operator.h | 91 | ||||
| -rw-r--r-- | src/include/catalog/pg_proc.h | 310 | ||||
| -rw-r--r-- | src/include/catalog/pg_type.h | 17 | ||||
| -rw-r--r-- | src/include/parser/parse_coerce.h | 25 | ||||
| -rw-r--r-- | src/include/utils/builtins.h | 98 | ||||
| -rw-r--r-- | src/include/utils/date.h | 52 | ||||
| -rw-r--r-- | src/include/utils/datetime.h | 425 | ||||
| -rw-r--r-- | src/include/utils/dt.h | 378 | ||||
| -rw-r--r-- | src/include/utils/formatting.h | 22 | ||||
| -rw-r--r-- | src/include/utils/nabstime.h | 49 | ||||
| -rw-r--r-- | src/include/utils/timestamp.h | 208 |
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 */ |
