From e34082ee3b07c0cf483e0bc5b8e25cc882e19ddc Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Fri, 2 Jul 2004 22:50:23 +0000 Subject: [PATCH] Add missing operators of the form interval-plus-datetime, as required for better SQL compliance in this area, per recent discussion. Mark related operators as commutators where possible. (The system doesn't actually care about commutator marking for operators not returning boolean, at the moment, but this seems forward-thinking and besides it made it easier to verify that we hadn't missed any.) Also, remove interval-minus-time and interval-minus-timetz operators. I'm not sure how these got in, but they are nonstandard and had very obviously broken behavior. (minus is not commutative in anyone's book.) I doubt anyone had ever used 'em, because we'd surely have gotten a bug report about it if so. --- doc/src/sgml/func.sgml | 44 ++++++++++------------------------ src/backend/utils/adt/date.c | 14 +---------- src/include/catalog/catversion.h | 4 ++-- src/include/catalog/pg_operator.h | 37 +++++++++++++++------------- src/include/catalog/pg_proc.h | 24 +++++++++---------- src/include/utils/date.h | 3 +-- src/test/regress/expected/horology.out | 12 ---------- src/test/regress/sql/horology.sql | 3 --- 8 files changed, 48 insertions(+), 93 deletions(-) diff --git a/doc/src/sgml/func.sgml b/doc/src/sgml/func.sgml index 8a624614e8..cb7a5a00d9 100644 --- a/doc/src/sgml/func.sgml +++ b/doc/src/sgml/func.sgml @@ -1,5 +1,5 @@ @@ -4689,7 +4689,10 @@ substring('foobar' from 'o(.)b') o All the functions and operators described below that take time or timestamp inputs actually come in two variants: one that takes time with time zone or timestamp with time zone, and one that takes time without time zone or timestamp without time zone. - For brevity, these variants are not shown separately. + For brevity, these variants are not shown separately. Also, the + + and * operators come in commutative pairs (for + example both date + integer and integer + date); we show only one of each + such pair. @@ -4725,12 +4728,6 @@ substring('foobar' from 'o(.)b') o + - time '03:00' + date '2001-09-28' - timestamp '2001-09-28 03:00' - - - - + interval '1 day' + interval '1 hour' interval '1 day 01:00' @@ -4748,12 +4745,6 @@ substring('foobar' from 'o(.)b') o - + - interval '3 hours' + time '01:00' - time '04:00' - - - - - interval '23 hours' interval '-23:00' @@ -4803,24 +4794,12 @@ substring('foobar' from 'o(.)b') o - - interval '2 hours' - time '05:00' - time '03:00' - - - - - timestamp '2001-09-29 03:00' - timestamp '2001-09-27 12:00' interval '1 day 15:00' * - double precision '3.5' * interval '1 hour' - interval '03:30' - - - - * interval '1 hour' * double precision '3.5' interval '03:30' @@ -7332,7 +7311,7 @@ SELECT pg_type_is_visible('myschema.widget'::regtype); pg_tablespace_databases(tablespace_oid) setof oid - get set of database oids that have objects in the tablespace + get set of database OIDs that have objects in the tablespace @@ -7373,12 +7352,13 @@ SELECT pg_type_is_visible('myschema.widget'::regtype); pg_tablespace_databases allows usage examination of a - tablespace. It will return a set of database oids, that have objects + tablespace. It will return a set of OIDs of databases that have objects stored in the tablespace. If this function returns any row, the - tablespace is assumed not to be empty and cannot be dropped. To - display the actual objects populating the tablespace, you will need - to connect to the databases returned by - pg_tablespace_databases to query pg_class. + tablespace is not empty and cannot be dropped. To + display the specific objects populating the tablespace, you will need + to connect to the databases identified by + pg_tablespace_databases and query their + pg_class catalogs. diff --git a/src/backend/utils/adt/date.c b/src/backend/utils/adt/date.c index 1caa68d774..c4fe0b71dc 100644 --- a/src/backend/utils/adt/date.c +++ b/src/backend/utils/adt/date.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/utils/adt/date.c,v 1.99 2004/06/03 02:08:04 tgl Exp $ + * $PostgreSQL: pgsql/src/backend/utils/adt/date.c,v 1.100 2004/07/02 22:49:46 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -1531,18 +1531,6 @@ time_mi_interval(PG_FUNCTION_ARGS) PG_RETURN_TIMEADT(result); } -/* interval_pl_time() - * Add time to interval. - */ -Datum -interval_pl_time(PG_FUNCTION_ARGS) -{ - Datum span = PG_GETARG_DATUM(0); - Datum time = PG_GETARG_DATUM(1); - - return DirectFunctionCall2(time_pl_interval, time, span); -} - /* time_text() * Convert time to text data type. diff --git a/src/include/catalog/catversion.h b/src/include/catalog/catversion.h index 98e554e759..4550e67057 100644 --- a/src/include/catalog/catversion.h +++ b/src/include/catalog/catversion.h @@ -37,7 +37,7 @@ * Portions Copyright (c) 1996-2003, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * $PostgreSQL: pgsql/src/include/catalog/catversion.h,v 1.242 2004/07/02 18:59:24 joe Exp $ + * $PostgreSQL: pgsql/src/include/catalog/catversion.h,v 1.243 2004/07/02 22:49:48 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -53,6 +53,6 @@ */ /* yyyymmddN */ -#define CATALOG_VERSION_NO 200407021 +#define CATALOG_VERSION_NO 200407022 #endif diff --git a/src/include/catalog/pg_operator.h b/src/include/catalog/pg_operator.h index d0761b148e..3305e64dbe 100644 --- a/src/include/catalog/pg_operator.h +++ b/src/include/catalog/pg_operator.h @@ -8,7 +8,7 @@ * Portions Copyright (c) 1996-2003, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * $PostgreSQL: pgsql/src/include/catalog/pg_operator.h,v 1.125 2004/03/22 01:38:17 tgl Exp $ + * $PostgreSQL: pgsql/src/include/catalog/pg_operator.h,v 1.126 2004/07/02 22:49:48 tgl Exp $ * * NOTES * the genbki.sh script reads this file and generates .bki @@ -451,7 +451,7 @@ DATA(insert OID = 1074 ( "<=" PGNSP PGUID b f 2277 2277 16 1075 1073 0 0 0 DATA(insert OID = 1075 ( ">=" PGNSP PGUID b f 2277 2277 16 1074 1072 0 0 0 0 array_ge scalargtsel scalargtjoinsel )); /* date operators */ -DATA(insert OID = 1076 ( "+" PGNSP PGUID b f 1082 1186 1114 0 0 0 0 0 0 date_pl_interval - - )); +DATA(insert OID = 1076 ( "+" PGNSP PGUID b f 1082 1186 1114 2551 0 0 0 0 0 date_pl_interval - - )); DATA(insert OID = 1077 ( "-" PGNSP PGUID b f 1082 1186 1114 0 0 0 0 0 0 date_mi_interval - - )); DATA(insert OID = 1093 ( "=" PGNSP PGUID b t 1082 1082 16 1093 1094 1095 1095 1095 1097 date_eq eqsel eqjoinsel )); DATA(insert OID = 1094 ( "<>" PGNSP PGUID b f 1082 1082 16 1094 1093 0 0 0 0 date_ne neqsel neqjoinsel )); @@ -460,7 +460,7 @@ DATA(insert OID = 1096 ( "<=" PGNSP PGUID b f 1082 1082 16 1098 1097 0 0 0 DATA(insert OID = 1097 ( ">" PGNSP PGUID b f 1082 1082 16 1095 1096 0 0 0 0 date_gt scalargtsel scalargtjoinsel )); DATA(insert OID = 1098 ( ">=" PGNSP PGUID b f 1082 1082 16 1096 1095 0 0 0 0 date_ge scalargtsel scalargtjoinsel )); DATA(insert OID = 1099 ( "-" PGNSP PGUID b f 1082 1082 23 0 0 0 0 0 0 date_mi - - )); -DATA(insert OID = 1100 ( "+" PGNSP PGUID b f 1082 23 1082 0 0 0 0 0 0 date_pli - - )); +DATA(insert OID = 1100 ( "+" PGNSP PGUID b f 1082 23 1082 2555 0 0 0 0 0 date_pli - - )); DATA(insert OID = 1101 ( "-" PGNSP PGUID b f 1082 23 1082 0 0 0 0 0 0 date_mii - - )); /* time operators */ @@ -470,10 +470,8 @@ DATA(insert OID = 1110 ( "<" PGNSP PGUID b f 1083 1083 16 1112 1113 0 0 0 DATA(insert OID = 1111 ( "<=" PGNSP PGUID b f 1083 1083 16 1113 1112 0 0 0 0 time_le scalarltsel scalarltjoinsel )); DATA(insert OID = 1112 ( ">" PGNSP PGUID b f 1083 1083 16 1110 1111 0 0 0 0 time_gt scalargtsel scalargtjoinsel )); DATA(insert OID = 1113 ( ">=" PGNSP PGUID b f 1083 1083 16 1111 1110 0 0 0 0 time_ge scalargtsel scalargtjoinsel )); -DATA(insert OID = 1269 ( "-" PGNSP PGUID b f 1186 1083 1083 0 0 0 0 0 0 interval_mi_time - - )); /* timetz operators */ -DATA(insert OID = 1295 ( "-" PGNSP PGUID b f 1186 1266 1266 0 0 0 0 0 0 interval_mi_timetz - - )); DATA(insert OID = 1550 ( "=" PGNSP PGUID b t 1266 1266 16 1550 1551 1552 1552 1552 1554 timetz_eq eqsel eqjoinsel )); DATA(insert OID = 1551 ( "<>" PGNSP PGUID b f 1266 1266 16 1551 1550 0 0 0 0 timetz_ne neqsel neqjoinsel )); DATA(insert OID = 1552 ( "<" PGNSP PGUID b f 1266 1266 16 1554 1555 0 0 0 0 timetz_lt scalarltsel scalarltjoinsel )); @@ -535,7 +533,7 @@ DATA(insert OID = 1322 ( "<" PGNSP PGUID b f 1184 1184 16 1324 1325 0 0 0 0 DATA(insert OID = 1323 ( "<=" PGNSP PGUID b f 1184 1184 16 1325 1324 0 0 0 0 timestamptz_le scalarltsel scalarltjoinsel )); DATA(insert OID = 1324 ( ">" PGNSP PGUID b f 1184 1184 16 1322 1323 0 0 0 0 timestamptz_gt scalargtsel scalargtjoinsel )); DATA(insert OID = 1325 ( ">=" PGNSP PGUID b f 1184 1184 16 1323 1322 0 0 0 0 timestamptz_ge scalargtsel scalargtjoinsel )); -DATA(insert OID = 1327 ( "+" PGNSP PGUID b f 1184 1186 1184 0 0 0 0 0 0 timestamptz_pl_interval - - )); +DATA(insert OID = 1327 ( "+" PGNSP PGUID b f 1184 1186 1184 2554 0 0 0 0 0 timestamptz_pl_interval - - )); DATA(insert OID = 1328 ( "-" PGNSP PGUID b f 1184 1184 1186 0 0 0 0 0 0 timestamptz_mi - - )); DATA(insert OID = 1329 ( "-" PGNSP PGUID b f 1184 1186 1184 0 0 0 0 0 0 timestamptz_mi_interval - - )); @@ -551,10 +549,10 @@ DATA(insert OID = 1336 ( "-" PGNSP PGUID l f 0 1186 1186 0 0 0 0 0 0 inte DATA(insert OID = 1337 ( "+" PGNSP PGUID b f 1186 1186 1186 1337 0 0 0 0 0 interval_pl - - )); DATA(insert OID = 1338 ( "-" PGNSP PGUID b f 1186 1186 1186 0 0 0 0 0 0 interval_mi - - )); -DATA(insert OID = 1360 ( "+" PGNSP PGUID b f 1082 1083 1114 0 0 0 0 0 0 datetime_pl - - )); -DATA(insert OID = 1361 ( "+" PGNSP PGUID b f 1082 1266 1184 0 0 0 0 0 0 datetimetz_pl - - )); -DATA(insert OID = 1363 ( "+" PGNSP PGUID b f 1083 1082 1114 0 0 0 0 0 0 timedate_pl - - )); -DATA(insert OID = 1366 ( "+" PGNSP PGUID b f 1266 1082 1184 0 0 0 0 0 0 timetzdate_pl - - )); +DATA(insert OID = 1360 ( "+" PGNSP PGUID b f 1082 1083 1114 1363 0 0 0 0 0 datetime_pl - - )); +DATA(insert OID = 1361 ( "+" PGNSP PGUID b f 1082 1266 1184 1366 0 0 0 0 0 datetimetz_pl - - )); +DATA(insert OID = 1363 ( "+" PGNSP PGUID b f 1083 1082 1114 1360 0 0 0 0 0 timedate_pl - - )); +DATA(insert OID = 1366 ( "+" PGNSP PGUID b f 1266 1082 1184 1361 0 0 0 0 0 timetzdate_pl - - )); DATA(insert OID = 1399 ( "-" PGNSP PGUID b f 1083 1083 1186 0 0 0 0 0 0 time_mi_time - - )); @@ -616,8 +614,8 @@ DATA(insert OID = 1567 ( "##" PGNSP PGUID b f 601 603 600 0 0 0 0 0 0 cl DATA(insert OID = 1568 ( "##" PGNSP PGUID b f 628 603 600 0 0 0 0 0 0 close_lb - - )); DATA(insert OID = 1577 ( "##" PGNSP PGUID b f 628 601 600 0 0 0 0 0 0 close_ls - - )); DATA(insert OID = 1578 ( "##" PGNSP PGUID b f 601 601 600 0 0 0 0 0 0 close_lseg - - )); -DATA(insert OID = 1583 ( "*" PGNSP PGUID b f 1186 701 1186 0 0 0 0 0 0 interval_mul - - )); -DATA(insert OID = 1584 ( "*" PGNSP PGUID b f 701 1186 1186 0 0 0 0 0 0 mul_d_interval - - )); +DATA(insert OID = 1583 ( "*" PGNSP PGUID b f 1186 701 1186 1584 0 0 0 0 0 interval_mul - - )); +DATA(insert OID = 1584 ( "*" PGNSP PGUID b f 701 1186 1186 1583 0 0 0 0 0 mul_d_interval - - )); DATA(insert OID = 1585 ( "/" PGNSP PGUID b f 1186 701 1186 0 0 0 0 0 0 interval_div - - )); DATA(insert OID = 1586 ( "<>" PGNSP PGUID b f 601 601 16 1586 1535 0 0 0 0 lseg_ne neqsel neqjoinsel )); @@ -716,9 +714,9 @@ DATA(insert OID = 1795 ( "<<" PGNSP PGUID b f 1560 23 1560 0 0 0 0 0 DATA(insert OID = 1796 ( ">>" PGNSP PGUID b f 1560 23 1560 0 0 0 0 0 0 bitshiftright - - )); DATA(insert OID = 1797 ( "||" PGNSP PGUID b f 1560 1560 1560 0 0 0 0 0 0 bitcat - - )); -DATA(insert OID = 1800 ( "+" PGNSP PGUID b f 1083 1186 1083 0 0 0 0 0 0 time_pl_interval - - )); +DATA(insert OID = 1800 ( "+" PGNSP PGUID b f 1083 1186 1083 1849 0 0 0 0 0 time_pl_interval - - )); DATA(insert OID = 1801 ( "-" PGNSP PGUID b f 1083 1186 1083 0 0 0 0 0 0 time_mi_interval - - )); -DATA(insert OID = 1802 ( "+" PGNSP PGUID b f 1266 1186 1266 0 0 0 0 0 0 timetz_pl_interval - - )); +DATA(insert OID = 1802 ( "+" PGNSP PGUID b f 1266 1186 1266 2552 0 0 0 0 0 timetz_pl_interval - - )); DATA(insert OID = 1803 ( "-" PGNSP PGUID b f 1266 1186 1266 0 0 0 0 0 0 timetz_mi_interval - - )); DATA(insert OID = 1804 ( "=" PGNSP PGUID b f 1562 1562 16 1804 1805 1806 1806 1806 1807 varbiteq eqsel eqjoinsel )); @@ -728,7 +726,7 @@ DATA(insert OID = 1807 ( ">" PGNSP PGUID b f 1562 1562 16 1806 1808 0 0 0 DATA(insert OID = 1808 ( "<=" PGNSP PGUID b f 1562 1562 16 1809 1807 0 0 0 0 varbitle scalarltsel scalarltjoinsel )); DATA(insert OID = 1809 ( ">=" PGNSP PGUID b f 1562 1562 16 1808 1806 0 0 0 0 varbitge scalargtsel scalargtjoinsel )); -DATA(insert OID = 1849 ( "+" PGNSP PGUID b f 1186 1083 1083 0 0 0 0 0 0 interval_pl_time - - )); +DATA(insert OID = 1849 ( "+" PGNSP PGUID b f 1186 1083 1083 1800 0 0 0 0 0 interval_pl_time - - )); DATA(insert OID = 1862 ( "=" PGNSP PGUID b f 21 20 16 1868 1863 95 412 1864 1865 int28eq eqsel eqjoinsel )); DATA(insert OID = 1863 ( "<>" PGNSP PGUID b f 21 20 16 1869 1862 0 0 0 0 int28ne neqsel neqjoinsel )); @@ -791,7 +789,7 @@ DATA(insert OID = 2062 ( "<" PGNSP PGUID b f 1114 1114 16 2064 2065 0 0 0 0 DATA(insert OID = 2063 ( "<=" PGNSP PGUID b f 1114 1114 16 2065 2064 0 0 0 0 timestamp_le scalarltsel scalarltjoinsel )); DATA(insert OID = 2064 ( ">" PGNSP PGUID b f 1114 1114 16 2062 2063 0 0 0 0 timestamp_gt scalargtsel scalargtjoinsel )); DATA(insert OID = 2065 ( ">=" PGNSP PGUID b f 1114 1114 16 2063 2062 0 0 0 0 timestamp_ge scalargtsel scalargtjoinsel )); -DATA(insert OID = 2066 ( "+" PGNSP PGUID b f 1114 1186 1114 0 0 0 0 0 0 timestamp_pl_interval - - )); +DATA(insert OID = 2066 ( "+" PGNSP PGUID b f 1114 1186 1114 2553 0 0 0 0 0 timestamp_pl_interval - - )); DATA(insert OID = 2067 ( "-" PGNSP PGUID b f 1114 1114 1186 0 0 0 0 0 0 timestamp_mi - - )); DATA(insert OID = 2068 ( "-" PGNSP PGUID b f 1114 1186 1114 0 0 0 0 0 0 timestamp_mi_interval - - )); @@ -864,6 +862,13 @@ DATA(insert OID = 2543 ( ">=" PGNSP PGUID b f 1184 1114 16 2535 2540 0 0 0 DATA(insert OID = 2544 ( ">" PGNSP PGUID b f 1184 1114 16 2534 2541 0 0 0 0 timestamptz_gt_timestamp scalargtsel scalargtjoinsel )); DATA(insert OID = 2545 ( "<>" PGNSP PGUID b f 1184 1114 16 2539 2542 0 0 0 0 timestamptz_ne_timestamp neqsel neqjoinsel )); +/* formerly-missing interval + datetime operators */ +DATA(insert OID = 2551 ( "+" PGNSP PGUID b f 1186 1082 1114 1076 0 0 0 0 0 interval_pl_date - - )); +DATA(insert OID = 2552 ( "+" PGNSP PGUID b f 1186 1266 1266 1802 0 0 0 0 0 interval_pl_timetz - - )); +DATA(insert OID = 2553 ( "+" PGNSP PGUID b f 1186 1114 1114 2066 0 0 0 0 0 interval_pl_timestamp - - )); +DATA(insert OID = 2554 ( "+" PGNSP PGUID b f 1186 1184 1184 1327 0 0 0 0 0 interval_pl_timestamptz - - )); +DATA(insert OID = 2555 ( "+" PGNSP PGUID b f 23 1082 1082 1100 0 0 0 0 0 integer_pl_date - - )); + /* * function prototypes diff --git a/src/include/catalog/pg_proc.h b/src/include/catalog/pg_proc.h index 8d2485c168..263a3492db 100644 --- a/src/include/catalog/pg_proc.h +++ b/src/include/catalog/pg_proc.h @@ -7,7 +7,7 @@ * Portions Copyright (c) 1996-2003, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * $PostgreSQL: pgsql/src/include/catalog/pg_proc.h,v 1.340 2004/07/02 18:59:24 joe Exp $ + * $PostgreSQL: pgsql/src/include/catalog/pg_proc.h,v 1.341 2004/07/02 22:49:48 tgl Exp $ * * NOTES * The script catalog/genbki.sh reads this file and generates .bki @@ -2677,7 +2677,7 @@ DESCR("encode text from encoding to ASCII text"); DATA(insert OID = 1847 ( to_ascii PGNSP PGUID 12 f f t f i 2 25 "25 19" _null_ to_ascii_encname - _null_ )); DESCR("encode text from encoding to ASCII text"); -DATA(insert OID = 1848 ( interval_pl_time PGNSP PGUID 12 f f t f i 2 1083 "1186 1083" _null_ interval_pl_time - _null_ )); +DATA(insert OID = 1848 ( interval_pl_time PGNSP PGUID 14 f f t f i 2 1083 "1186 1083" _null_ "select $2 + $1" - _null_ )); DESCR("plus"); DATA(insert OID = 1850 ( int28eq PGNSP PGUID 12 f f t f i 2 16 "21 20" _null_ int28eq - _null_ )); @@ -2938,10 +2938,6 @@ DATA(insert OID = 2048 ( isfinite PGNSP PGUID 12 f f t f i 1 16 "1114" _null DESCR("finite timestamp?"); DATA(insert OID = 2049 ( to_char PGNSP PGUID 12 f f t f s 2 25 "1114 25" _null_ timestamp_to_char - _null_ )); DESCR("format timestamp to text"); -DATA(insert OID = 2050 ( interval_mi_time PGNSP PGUID 14 f f t f i 2 1083 "1186 1083" _null_ "select $2 - $1" - _null_ )); -DESCR("minus"); -DATA(insert OID = 2051 ( interval_mi_timetz PGNSP PGUID 14 f f t f i 2 1266 "1186 1266" _null_ "select $2 - $1" - _null_ )); -DESCR("minus"); DATA(insert OID = 2052 ( timestamp_eq PGNSP PGUID 12 f f t f i 2 16 "1114 1114" _null_ timestamp_eq - _null_ )); DESCR("equal"); DATA(insert OID = 2053 ( timestamp_ne PGNSP PGUID 12 f f t f i 2 16 "1114 1114" _null_ timestamp_ne - _null_ )); @@ -3553,19 +3549,16 @@ DATA(insert OID = 1066 ( generate_series PGNSP PGUID 12 f f t t v 3 23 "23 23 2 DESCR("non-persistent series generator"); DATA(insert OID = 1067 ( generate_series PGNSP PGUID 12 f f t t v 2 23 "23 23" _null_ generate_series_int4 - _null_ )); DESCR("non-persistent series generator"); - DATA(insert OID = 1068 ( generate_series PGNSP PGUID 12 f f t t v 3 20 "20 20 20" _null_ generate_series_step_int8 - _null_ )); DESCR("non-persistent series generator"); DATA(insert OID = 1069 ( generate_series PGNSP PGUID 12 f f t t v 2 20 "20 20" _null_ generate_series_int8 - _null_ )); DESCR("non-persistent series generator"); - /* boolean aggregates */ DATA(insert OID = 2515 ( booland_statefunc PGNSP PGUID 12 f f t f i 2 16 "16 16" _null_ booland_statefunc - _null_ )); DESCR("boolean-and aggregate transition function"); DATA(insert OID = 2516 ( boolor_statefunc PGNSP PGUID 12 f f t f i 2 16 "16 16" _null_ boolor_statefunc - _null_ )); DESCR("boolean-or aggregate transition function"); - DATA(insert OID = 2517 ( bool_and PGNSP PGUID 12 t f f f i 1 16 "16" _null_ aggregate_dummy - _null_ )); DESCR("boolean-and aggregate"); /* ANY, SOME? These names conflict with subquery operators. See doc. */ @@ -3579,25 +3572,30 @@ DATA(insert OID = 2236 ( bit_and PGNSP PGUID 12 t f f f i 1 21 "21" _nul DESCR("bitwise-and smallint aggregate"); DATA(insert OID = 2237 ( bit_or PGNSP PGUID 12 t f f f i 1 21 "21" _null_ aggregate_dummy - _null_)); DESCR("bitwise-or smallint aggregate"); - DATA(insert OID = 2238 ( bit_and PGNSP PGUID 12 t f f f i 1 23 "23" _null_ aggregate_dummy - _null_)); DESCR("bitwise-and integer aggregate"); DATA(insert OID = 2239 ( bit_or PGNSP PGUID 12 t f f f i 1 23 "23" _null_ aggregate_dummy - _null_)); DESCR("bitwise-or integer aggregate"); - DATA(insert OID = 2240 ( bit_and PGNSP PGUID 12 t f f f i 1 20 "20" _null_ aggregate_dummy - _null_)); DESCR("bitwise-and bigint aggregate"); DATA(insert OID = 2241 ( bit_or PGNSP PGUID 12 t f f f i 1 20 "20" _null_ aggregate_dummy - _null_)); DESCR("bitwise-or bigint aggregate"); - DATA(insert OID = 2242 ( bit_and PGNSP PGUID 12 t f f f i 1 1560 "1560" _null_ aggregate_dummy - _null_)); DESCR("bitwise-and bit aggregate"); DATA(insert OID = 2243 ( bit_or PGNSP PGUID 12 t f f f i 1 1560 "1560" _null_ aggregate_dummy - _null_)); DESCR("bitwise-or bit aggregate"); -DATA(insert OID = 2554( pg_tablespace_databases PGNSP PGUID 12 f f t t s 1 26 "26" _null_ pg_tablespace_databases - _null_)); +/* formerly-missing interval + datetime operators */ +DATA(insert OID = 2546 ( interval_pl_date PGNSP PGUID 14 f f t f i 2 1114 "1186 1082" _null_ "select $2 + $1" - _null_ )); +DATA(insert OID = 2547 ( interval_pl_timetz PGNSP PGUID 14 f f t f i 2 1266 "1186 1266" _null_ "select $2 + $1" - _null_ )); +DATA(insert OID = 2548 ( interval_pl_timestamp PGNSP PGUID 14 f f t f i 2 1114 "1186 1114" _null_ "select $2 + $1" - _null_ )); +DATA(insert OID = 2549 ( interval_pl_timestamptz PGNSP PGUID 14 f f t f i 2 1184 "1186 1184" _null_ "select $2 + $1" - _null_ )); +DATA(insert OID = 2550 ( integer_pl_date PGNSP PGUID 14 f f t f i 2 1082 "23 1082" _null_ "select $2 + $1" - _null_ )); + +DATA(insert OID = 2556 ( pg_tablespace_databases PGNSP PGUID 12 f f t t s 1 26 "26" _null_ pg_tablespace_databases - _null_)); DESCR("returns database oids in a tablespace"); + /* * Symbolic values for provolatile column: these indicate whether the result * of a function is dependent *only* on the values of its explicit arguments, diff --git a/src/include/utils/date.h b/src/include/utils/date.h index 910bac4ec4..64d448b389 100644 --- a/src/include/utils/date.h +++ b/src/include/utils/date.h @@ -7,7 +7,7 @@ * Portions Copyright (c) 1996-2003, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * $PostgreSQL: pgsql/src/include/utils/date.h,v 1.26 2004/02/14 20:16:18 tgl Exp $ + * $PostgreSQL: pgsql/src/include/utils/date.h,v 1.27 2004/07/02 22:50:06 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -147,7 +147,6 @@ extern Datum text_time(PG_FUNCTION_ARGS); extern Datum time_text(PG_FUNCTION_ARGS); extern Datum time_pl_interval(PG_FUNCTION_ARGS); extern Datum time_mi_interval(PG_FUNCTION_ARGS); -extern Datum interval_pl_time(PG_FUNCTION_ARGS); extern Datum time_part(PG_FUNCTION_ARGS); extern Datum timetz_in(PG_FUNCTION_ARGS); diff --git a/src/test/regress/expected/horology.out b/src/test/regress/expected/horology.out index 4523947b56..188b8e7b78 100644 --- a/src/test/regress/expected/horology.out +++ b/src/test/regress/expected/horology.out @@ -805,12 +805,6 @@ SELECT time '03:30' + interval '1 month 04:01' AS "07:31:00"; 07:31:00 (1 row) -SELECT interval '04:30' - time '01:02' AS "20:32:00"; - 20:32:00 ----------- - 20:32:00 -(1 row) - SELECT CAST(time with time zone '01:02-08' AS interval) AS "+00:01"; ERROR: cannot cast type time with time zone to interval SELECT CAST(interval '02:03' AS time with time zone) AS "02:03:00-08"; @@ -846,12 +840,6 @@ SELECT CAST(cast(date 'today' + time with time zone '03:30' 07:31:00 (1 row) -SELECT interval '04:30' - time with time zone '01:02-05' AS "20:32:00-05"; - 20:32:00-05 -------------- - 20:32:00-05 -(1 row) - SELECT t.d1 + i.f1 AS "102" FROM TIMESTAMP_TBL t, INTERVAL_TBL i WHERE t.d1 BETWEEN '1990-01-01' AND '2001-01-01' AND i.f1 BETWEEN '00:00' AND '23:00'; diff --git a/src/test/regress/sql/horology.sql b/src/test/regress/sql/horology.sql index c9171b28bd..874700c4b9 100644 --- a/src/test/regress/sql/horology.sql +++ b/src/test/regress/sql/horology.sql @@ -133,7 +133,6 @@ SELECT time '01:30' + interval '02:01' AS "03:31:00"; SELECT time '01:30' - interval '02:01' AS "23:29:00"; SELECT time '02:30' + interval '36:01' AS "14:31:00"; SELECT time '03:30' + interval '1 month 04:01' AS "07:31:00"; -SELECT interval '04:30' - time '01:02' AS "20:32:00"; SELECT CAST(time with time zone '01:02-08' AS interval) AS "+00:01"; SELECT CAST(interval '02:03' AS time with time zone) AS "02:03:00-08"; SELECT time with time zone '01:30-08' - interval '02:01' AS "23:29:00-08"; @@ -151,8 +150,6 @@ SELECT CAST(CAST(date 'today' + time with time zone '01:30' SELECT CAST(cast(date 'today' + time with time zone '03:30' + interval '1 month 04:01' as timestamp without time zone) AS time) AS "07:31:00"; -SELECT interval '04:30' - time with time zone '01:02-05' AS "20:32:00-05"; - SELECT t.d1 + i.f1 AS "102" FROM TIMESTAMP_TBL t, INTERVAL_TBL i WHERE t.d1 BETWEEN '1990-01-01' AND '2001-01-01' AND i.f1 BETWEEN '00:00' AND '23:00'; -- 2.11.0