diff --git a/doc/src/sgml/func.sgml b/doc/src/sgml/func.sgml
index 8a624614e8d196b0dc9730c9fa31f35c3f8ccfe8..cb7a5a00d981115911b43758da245f5dee336c6a 100644
--- a/doc/src/sgml/func.sgml
+++ b/doc/src/sgml/func.sgml
@@ -1,5 +1,5 @@
 <!--
-$PostgreSQL: pgsql/doc/src/sgml/func.sgml,v 1.212 2004/07/02 18:59:20 joe Exp $
+$PostgreSQL: pgsql/doc/src/sgml/func.sgml,v 1.213 2004/07/02 22:49:45 tgl Exp $
 PostgreSQL documentation
 -->
 
@@ -4689,7 +4689,10 @@ substring('foobar' from 'o(.)b')   <lineannotation>o</lineannotation>
    All the functions and operators described below that take <type>time</type> or <type>timestamp</type>
    inputs actually come in two variants: one that takes <type>time with time zone</type> or <type>timestamp
    with time zone</type>, and one that takes <type>time without time zone</type> or <type>timestamp without time zone</type>.
-   For brevity, these variants are not shown separately.
+   For brevity, these variants are not shown separately.  Also, the
+   <literal>+</> and <literal>*</> operators come in commutative pairs (for
+   example both date + integer and integer + date); we show only one of each
+   such pair.
   </para>
 
     <table id="operators-datetime-table">
@@ -4723,12 +4726,6 @@ substring('foobar' from 'o(.)b')   <lineannotation>o</lineannotation>
         <entry><literal>timestamp '2001-09-28 03:00'</literal></entry>
        </row>
 
-       <row>
-        <entry> <literal>+</literal> </entry>
-        <entry><literal>time '03:00' + date '2001-09-28'</literal></entry>
-        <entry><literal>timestamp '2001-09-28 03:00'</literal></entry>
-       </row>
-
        <row>
         <entry> <literal>+</literal> </entry>
         <entry><literal>interval '1 day' + interval '1 hour'</literal></entry>
@@ -4747,12 +4744,6 @@ substring('foobar' from 'o(.)b')   <lineannotation>o</lineannotation>
         <entry><literal>time '04:00'</literal></entry>
        </row>
 
-       <row>
-        <entry> <literal>+</literal> </entry>
-        <entry><literal>interval '3 hours' + time '01:00'</literal></entry>
-        <entry><literal>time '04:00'</literal></entry>
-       </row>
-
        <row>
         <entry> <literal>-</literal> </entry>
         <entry><literal>- interval '23 hours'</literal></entry>
@@ -4801,24 +4792,12 @@ substring('foobar' from 'o(.)b')   <lineannotation>o</lineannotation>
         <entry><literal>interval '23:00'</literal></entry>
        </row>
 
-       <row>
-        <entry> <literal>-</literal> </entry>
-        <entry><literal>interval '2 hours' - time '05:00'</literal></entry>
-        <entry><literal>time '03:00'</literal></entry>
-       </row>
-
        <row>
         <entry> <literal>-</literal> </entry>
         <entry><literal>timestamp '2001-09-29 03:00' - timestamp '2001-09-27 12:00'</literal></entry>
         <entry><literal>interval '1 day 15:00'</literal></entry>
        </row>
 
-       <row>
-        <entry> <literal>*</literal> </entry>
-        <entry><literal>double precision '3.5' * interval '1 hour'</literal></entry>
-        <entry><literal>interval '03:30'</literal></entry>
-       </row>
-
        <row>
         <entry> <literal>*</literal> </entry>
         <entry><literal>interval '1 hour' * double precision '3.5'</literal></entry>
@@ -7332,7 +7311,7 @@ SELECT pg_type_is_visible('myschema.widget'::regtype);
       <row>
        <entry><literal><function>pg_tablespace_databases</function>(<parameter>tablespace_oid</parameter>)</literal></entry>
        <entry><type>setof oid</type></entry>
-       <entry>get set of database oids that have objects in the tablespace</entry>
+       <entry>get set of database OIDs that have objects in the tablespace</entry>
       </row>
      </tbody>
     </tgroup>
@@ -7373,12 +7352,13 @@ SELECT pg_type_is_visible('myschema.widget'::regtype);
 
   <para>
   <function>pg_tablespace_databases</function> 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 
-  <function>pg_tablespace_databases</function> 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 
+  <function>pg_tablespace_databases</function> and query their
+  <structname>pg_class</> catalogs.
   </para>
 
    <indexterm zone="functions-misc">
diff --git a/src/backend/utils/adt/date.c b/src/backend/utils/adt/date.c
index 1caa68d774ba5a191a5394deeb077111ad7ec35e..c4fe0b71dcd5a7a92c215968b896c68f880f4b8a 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 98e554e759992b7892526c4cc9c7c60cb7939a02..4550e67057f33b7a0e868f0d50f83b968cae315b 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 d0761b148e29980a4ff0aa8d193668c20ee078a4..3305e64dbe0a475009e7ff5f86bb498a660ae8db 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 8d2485c168d5393379ae9f3c8bf283b5cea38f30..263a3492db5440613125d4c7286abba52f718164 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 910bac4ec4a75998990cbad0dd666a7720c75025..64d448b389c33d227a29c4b4f472e710e3351167 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 4523947b5652784acd598400d72d8d2009fe58ed..188b8e7b78ae008dbc180dc10c884e6c0589700e 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 c9171b28bdd0f47b5789c00a2c19f6536c8d4fac..874700c4b92d901f4ecd5c38836d7b978654467b 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';