Measure the current transaction time to milliseconds.
authorThomas G. Lockhart
Fri, 28 Sep 2001 08:09:14 +0000 (08:09 +0000)
committerThomas G. Lockhart
Fri, 28 Sep 2001 08:09:14 +0000 (08:09 +0000)
Define a new function, GetCurrentTransactionStartTimeUsec() to get the time
 to this precision.
Allow now() and timestamp 'now' to use this higher precision result so
 we now have fractional seconds in this "constant".
Add timestamp without time zone type.
Move previous timestamp type to timestamp with time zone.
Accept another ISO variant for date/time values: yyyy-mm-ddThh:mm:ss
 (note the "T" separating the day from hours information).
Remove 'current' from date/time types; convert to 'now' in input.
Separate time and timetz regression tests.
Separate timestamp and timestamptz regression test.

27 files changed:
src/backend/access/transam/xact.c
src/backend/parser/gram.y
src/backend/parser/parse_coerce.c
src/backend/parser/parse_expr.c
src/backend/parser/parse_target.c
src/backend/utils/adt/date.c
src/backend/utils/adt/datetime.c
src/backend/utils/adt/format_type.c
src/backend/utils/adt/formatting.c
src/backend/utils/adt/nabstime.c
src/backend/utils/adt/timestamp.c
src/include/access/xact.h
src/include/catalog/catversion.h
src/include/catalog/duplicate_oids
src/include/catalog/pg_aggregate.h
src/include/catalog/pg_amop.h
src/include/catalog/pg_amproc.h
src/include/catalog/pg_opclass.h
src/include/catalog/pg_operator.h
src/include/catalog/pg_proc.h
src/include/catalog/pg_type.h
src/include/utils/builtins.h
src/include/utils/date.h
src/include/utils/datetime.h
src/include/utils/formatting.h
src/include/utils/nabstime.h
src/include/utils/timestamp.h

index c3d6326d42a724f3f06b38371e4ed6cd27d5ce29..6b0d4de720e0b6643f7a9048757cad47b4ef0946 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *   $Header: /cvsroot/pgsql/src/backend/access/transam/xact.c,v 1.109 2001/08/25 18:52:41 tgl Exp $
+ *   $Header: /cvsroot/pgsql/src/backend/access/transam/xact.c,v 1.110 2001/09/28 08:08:57 thomas Exp $
  *
  * NOTES
  *     Transaction aborts can now occur two ways:
@@ -369,6 +369,21 @@ GetCurrentTransactionStartTime(void)
 }
 
 
+/* --------------------------------
+ *     GetCurrentTransactionStartTimeUsec
+ * --------------------------------
+ */
+AbsoluteTime
+GetCurrentTransactionStartTimeUsec(int *msec)
+{
+   TransactionState s = CurrentTransactionState;
+
+   *msec = s->startTimeMsec;
+
+   return s->startTime;
+}
+
+
 /* --------------------------------
  *     TransactionIdIsCurrentTransactionId
  * --------------------------------
@@ -859,7 +874,10 @@ StartTransaction(void)
     */
    s->commandId = FirstCommandId;
    s->scanCommandId = FirstCommandId;
+#if NOT_USED
    s->startTime = GetCurrentAbsoluteTime();
+#endif
+   s->startTime = GetCurrentAbsoluteTimeUsec(&(s->startTimeMsec));
 
    /*
     * initialize the various transaction subsystems
index 64d71d28bd7d73cee76569fe48b235710ea0bfa3..0298742c611278073708dc2cce4c75228b6c7bb4 100644 (file)
@@ -11,7 +11,7 @@
  *
  *
  * IDENTIFICATION
- *   $Header: /cvsroot/pgsql/src/backend/parser/gram.y,v 2.253 2001/09/23 03:39:01 momjian Exp $
+ *   $Header: /cvsroot/pgsql/src/backend/parser/gram.y,v 2.254 2001/09/28 08:09:09 thomas Exp $
  *
  * HISTORY
  *   AUTHOR            DATE            MAJOR EVENT
@@ -259,7 +259,7 @@ static void doNegateFloat(Value *v);
 %type         opt_charset, opt_collate
 %type         opt_float
 %type    opt_numeric, opt_decimal
-%type     opt_varying, opt_timezone
+%type     opt_varying, opt_timezone, opt_timezone_x
 
 %type    Iconst
 %type         Sconst, comment_text
@@ -4229,10 +4229,16 @@ ConstDatetime:  datetime
                    $$->name = xlateSqlType($1);
                    $$->typmod = -1;
                }
-       | TIMESTAMP opt_timezone
+       | TIMESTAMP opt_timezone_x
                {
                    $$ = makeNode(TypeName);
-                   $$->name = xlateSqlType("timestamp");
+                   if ($2)
+                       $$->name = xlateSqlType("timestamptz");
+                   else
+                       $$->name = xlateSqlType("timestamp");
+                   /* XXX the timezone field seems to be unused
+                    * - thomas 2001-09-06
+                    */
                    $$->timezone = $2;
                    $$->typmod = -1;
                }
@@ -4263,6 +4269,16 @@ datetime:  YEAR_P                                { $$ = "year"; }
        | SECOND_P                              { $$ = "second"; }
        ;
 
+/* XXX Make the default be WITH TIME ZONE for 7.2 to help with database upgrades
+ * but revert this back to WITHOUT TIME ZONE for 7.3.
+ * Do this by simply reverting opt_timezone_x to opt_timezone - thomas 2001-09-06
+ */
+
+opt_timezone_x:  WITH TIME ZONE                    { $$ = TRUE; }
+       | WITHOUT TIME ZONE                     { $$ = FALSE; }
+       | /*EMPTY*/                             { $$ = TRUE; }
+       ;
+
 opt_timezone:  WITH TIME ZONE                  { $$ = TRUE; }
        | WITHOUT TIME ZONE                     { $$ = FALSE; }
        | /*EMPTY*/                             { $$ = FALSE; }
index 5f769a81eacfe5e33fa3eb14a987ed7f1070ab33..80164f86b3a013d386d1035f33a3e17ae0d24975 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *   $Header: /cvsroot/pgsql/src/backend/parser/parse_coerce.c,v 2.60 2001/06/24 02:41:21 momjian Exp $
+ *   $Header: /cvsroot/pgsql/src/backend/parser/parse_coerce.c,v 2.61 2001/09/28 08:09:09 thomas Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -240,7 +240,7 @@ can_coerce_type(int nargs, Oid *input_typeids, Oid *func_typeids)
        oid_array[0] = inputTypeId;
 
        ftup = SearchSysCache(PROCNAME,
-                          PointerGetDatum(typeidTypeName(targetTypeId)),
+                             PointerGetDatum(typeidTypeName(targetTypeId)),
                              Int32GetDatum(1),
                              PointerGetDatum(oid_array),
                              0);
@@ -498,6 +498,7 @@ TypeCategory(Oid inType)
        case (TIMETZOID):
        case (ABSTIMEOID):
        case (TIMESTAMPOID):
+       case (TIMESTAMPTZOID):
            result = DATETIME_TYPE;
            break;
 
@@ -577,7 +578,10 @@ PreferredType(CATEGORY category, Oid type)
            break;
 
        case (DATETIME_TYPE):
-           result = TIMESTAMPOID;
+           if (type == DATEOID)
+               result = TIMESTAMPOID;
+           else
+               result = TIMESTAMPTZOID;
            break;
 
        case (TIMESPAN_TYPE):
@@ -634,10 +638,14 @@ PromoteTypeToNext(Oid inType)
            break;
 
        case (DATEOID):
-       case (ABSTIMEOID):
            result = TIMESTAMPOID;
            break;
 
+       case (ABSTIMEOID):
+       case (TIMESTAMPOID):
+           result = TIMESTAMPTZOID;
+           break;
+
        case (TIMEOID):
        case (RELTIMEOID):
            result = INTERVALOID;
@@ -646,7 +654,7 @@ PromoteTypeToNext(Oid inType)
        case (BOOLOID):
        case (TEXTOID):
        case (FLOAT8OID):
-       case (TIMESTAMPOID):
+       case (TIMESTAMPTZOID):
        case (INTERVALOID):
        default:
            result = inType;
index e1574993529814cfffd753cfb60ed3d26e6eb36a..d1512c61c0e61b43fd81a62cb3e5fe825f9842eb 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *   $Header: /cvsroot/pgsql/src/backend/parser/parse_expr.c,v 1.101 2001/09/20 23:31:08 tgl Exp $
+ *   $Header: /cvsroot/pgsql/src/backend/parser/parse_expr.c,v 1.102 2001/09/28 08:09:09 thomas Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -40,11 +40,11 @@ bool        Transform_null_equals = false;
 
 static Node *parser_typecast_constant(Value *expr, TypeName *typename);
 static Node *parser_typecast_expression(ParseState *pstate,
-                          Node *expr, TypeName *typename);
+                                       Node *expr, TypeName *typename);
 static Node *transformAttr(ParseState *pstate, Attr *att, int precedence);
 static Node *transformIdent(ParseState *pstate, Ident *ident, int precedence);
 static Node *transformIndirection(ParseState *pstate, Node *basenode,
-                    List *indirection);
+                                 List *indirection);
 
 
 /*
index a39e3108804286ab3d44e6cc3b15e73906014aa1..c40792072b13b7f810ad8448d86ad1b5658df183 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *   $Header: /cvsroot/pgsql/src/backend/parser/parse_target.c,v 1.72 2001/09/17 01:06:36 tgl Exp $
+ *   $Header: /cvsroot/pgsql/src/backend/parser/parse_target.c,v 1.73 2001/09/28 08:09:09 thomas Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -462,10 +462,13 @@ FigureColname(Node *node)
 {
    if (node == NULL)
        return "?column?";
+
    switch (nodeTag(node))
    {
        case T_Ident:
            return ((Ident *) node)->name;
+       case T_A_Const:
+           return (FigureColname((Node *)((A_Const *) node)->typename));
        case T_Attr:
            {
                List       *attrs = ((Attr *) node)->attrs;
@@ -481,7 +484,15 @@ FigureColname(Node *node)
        case T_FuncCall:
            return ((FuncCall *) node)->funcname;
        case T_TypeCast: 
-           return FigureColname(((TypeCast *) node)->arg);
+           {
+               char       *name;
+
+               name = FigureColname(((TypeCast *) node)->arg);
+               if (strcmp(name, "?column?") == 0)
+                 name = FigureColname((Node *)((TypeCast *) node)->typename);
+               return name;
+           }
+           break;
        case T_CaseExpr:
            {
                char       *name;
@@ -492,6 +503,8 @@ FigureColname(Node *node)
                return name;
            }
            break;
+       case T_TypeName:
+           return ((TypeName *) node)->name;
        default:
            break;
    }
index 4504f5f043c27bd8805f01f9b9204c00e1fbd8df..36b3a52de254bdd6db8ef1ecbb0556ae2df6449f 100644 (file)
@@ -8,21 +8,24 @@
  *
  *
  * IDENTIFICATION
- *   $Header: /cvsroot/pgsql/src/backend/utils/adt/date.c,v 1.57 2001/05/03 19:00:36 tgl Exp $
+ *   $Header: /cvsroot/pgsql/src/backend/utils/adt/date.c,v 1.58 2001/09/28 08:09:10 thomas Exp $
  *
  *-------------------------------------------------------------------------
  */
 
 #include "postgres.h"
 
+#include 
 #include 
 #include 
 #include 
 
 #include "access/hash.h"
 #include "miscadmin.h"
+#include "utils/builtins.h"
 #include "utils/date.h"
 #include "utils/nabstime.h"
+#include "utils/timestamp.h"
 
 
 /*****************************************************************************
@@ -58,13 +61,13 @@ date_in(PG_FUNCTION_ARGS)
            break;
 
        case DTK_CURRENT:
+           elog(ERROR, "Date CURRENT no longer supported"
+                "\n\tdate_in() internal coding error");
            GetCurrentTime(tm);
            break;
 
        case DTK_EPOCH:
-           tm->tm_year = 1970;
-           tm->tm_mon = 1;
-           tm->tm_mday = 1;
+           GetEpochTime(tm);
            break;
 
        default:
@@ -224,6 +227,46 @@ date_timestamp(PG_FUNCTION_ARGS)
 {
    DateADT     dateVal = PG_GETARG_DATEADT(0);
    Timestamp   result;
+
+   /* date is days since 2000, timestamp is seconds since same... */
+   result = dateVal * 86400.0;
+
+   PG_RETURN_TIMESTAMP(result);
+}
+
+
+/* timestamp_date()
+ * Convert timestamp to date data type.
+ */
+Datum
+timestamp_date(PG_FUNCTION_ARGS)
+{
+   Timestamp   timestamp = PG_GETARG_TIMESTAMP(0);
+   DateADT     result;
+   struct tm   tt,
+              *tm = &tt;
+   double      fsec;
+
+   if (TIMESTAMP_NOT_FINITE(timestamp))
+       PG_RETURN_NULL();
+
+   if (timestamp2tm(timestamp, NULL, tm, &fsec, NULL) != 0)
+       elog(ERROR, "Unable to convert timestamp to date");
+
+   result = date2j(tm->tm_year, tm->tm_mon, tm->tm_mday) - date2j(2000, 1, 1);
+
+   PG_RETURN_DATEADT(result);
+}
+
+
+/* date_timestamptz()
+ * Convert date to timestamp with time zone data type.
+ */
+Datum
+date_timestamptz(PG_FUNCTION_ARGS)
+{
+   DateADT     dateVal = PG_GETARG_DATEADT(0);
+   TimestampTz result;
    struct tm   tt,
               *tm = &tt;
    time_t      utime;
@@ -259,32 +302,25 @@ date_timestamp(PG_FUNCTION_ARGS)
 }
 
 
-/* timestamp_date()
- * Convert timestamp to date data type.
+/* timestamptz_date()
+ * Convert timestamp with time zone to date data type.
  */
 Datum
-timestamp_date(PG_FUNCTION_ARGS)
+timestamptz_date(PG_FUNCTION_ARGS)
 {
-   Timestamp   timestamp = PG_GETARG_TIMESTAMP(0);
+   TimestampTz timestamp = PG_GETARG_TIMESTAMP(0);
    DateADT     result;
    struct tm   tt,
               *tm = &tt;
-   int         tz;
    double      fsec;
+   int         tz;
    char       *tzn;
 
    if (TIMESTAMP_NOT_FINITE(timestamp))
-       elog(ERROR, "Unable to convert timestamp to date");
+       PG_RETURN_NULL();
 
-   if (TIMESTAMP_IS_EPOCH(timestamp))
-       timestamp2tm(SetTimestamp(timestamp), NULL, tm, &fsec, NULL);
-   else if (TIMESTAMP_IS_CURRENT(timestamp))
-       timestamp2tm(SetTimestamp(timestamp), &tz, tm, &fsec, &tzn);
-   else
-   {
-       if (timestamp2tm(timestamp, &tz, tm, &fsec, &tzn) != 0)
-           elog(ERROR, "Unable to convert timestamp to date");
-   }
+   if (timestamp2tm(timestamp, &tz, tm, &fsec, &tzn) != 0)
+       elog(ERROR, "Unable to convert timestamp to date");
 
    result = date2j(tm->tm_year, tm->tm_mon, tm->tm_mday) - date2j(2000, 1, 1);
 
@@ -316,15 +352,6 @@ abstime_date(PG_FUNCTION_ARGS)
             * will be set
             */
 
-       case EPOCH_ABSTIME:
-           result = date2j(1970, 1, 1) - date2j(2000, 1, 1);
-           break;
-
-       case CURRENT_ABSTIME:
-           GetCurrentTime(tm);
-           result = date2j(tm->tm_year, tm->tm_mon, tm->tm_mday) - date2j(2000, 1, 1);
-           break;
-
        default:
            abstime2tm(abstime, &tz, tm, NULL);
            result = date2j(tm->tm_year, tm->tm_mon, tm->tm_mday) - date2j(2000, 1, 1);
@@ -664,22 +691,13 @@ timestamp_time(PG_FUNCTION_ARGS)
    TimeADT     result;
    struct tm   tt,
               *tm = &tt;
-   int         tz;
    double      fsec;
-   char       *tzn;
 
    if (TIMESTAMP_NOT_FINITE(timestamp))
-       elog(ERROR, "Unable to convert timestamp to date");
+       PG_RETURN_NULL();
 
-   if (TIMESTAMP_IS_EPOCH(timestamp))
-       timestamp2tm(SetTimestamp(timestamp), NULL, tm, &fsec, NULL);
-   else if (TIMESTAMP_IS_CURRENT(timestamp))
-       timestamp2tm(SetTimestamp(timestamp), &tz, tm, &fsec, &tzn);
-   else
-   {
-       if (timestamp2tm(timestamp, &tz, tm, &fsec, &tzn) != 0)
-           elog(ERROR, "Unable to convert timestamp to date");
-   }
+   if (timestamp2tm(timestamp, NULL, tm, &fsec, NULL) != 0)
+       elog(ERROR, "Unable to convert timestamp to date");
 
    result = ((((tm->tm_hour * 60) + tm->tm_min) * 60) + tm->tm_sec + fsec);
 
@@ -736,6 +754,24 @@ interval_time(PG_FUNCTION_ARGS)
    PG_RETURN_TIMEADT(result);
 }
 
+/* time_mi_time()
+ * Subtract two times to produce an interval.
+ */
+Datum
+time_mi_time(PG_FUNCTION_ARGS)
+{
+   TimeADT     time1 = PG_GETARG_TIMEADT(0);
+   TimeADT     time2 = PG_GETARG_TIMEADT(1);
+   Interval   *result;
+
+   result = (Interval *) palloc(sizeof(Interval));
+
+   result->time = time2 - time1;
+   result->month = 0;
+
+   PG_RETURN_INTERVAL_P(result);
+}
+
 /* time_pl_interval()
  * Add interval to time.
  */
@@ -918,7 +954,12 @@ timetz_cmp_internal(TimeTzADT *time1, TimeTzADT *time2)
     * If same GMT time, sort by timezone; we only want to say that two
     * timetz's are equal if both the time and zone parts are equal.
     */
-   return time1->zone - time2->zone;
+   if (time1->zone > time2->zone)
+       return 1;
+   if (time1->zone < time2->zone)
+       return -1;
+
+   return 0;
 }
 
 Datum
@@ -1199,13 +1240,48 @@ overlaps_timetz(PG_FUNCTION_ARGS)
 #undef TIMETZ_LT
 }
 
-/* timestamp_timetz()
+
+Datum
+timetz_time(PG_FUNCTION_ARGS)
+{
+   TimeTzADT  *timetz = PG_GETARG_TIMETZADT_P(0);
+   TimeADT     result;
+
+   /* swallow the time zone and just return the time */
+   result = timetz->time;
+
+   PG_RETURN_TIMEADT(result);
+}
+
+
+Datum
+time_timetz(PG_FUNCTION_ARGS)
+{
+   TimeADT     time = PG_GETARG_TIMEADT(0);
+   TimeTzADT  *result;
+   struct tm   tt,
+              *tm = &tt;
+   int         tz;
+
+   GetCurrentTime(tm);
+   tz = DetermineLocalTimeZone(tm);
+
+   result = (TimeTzADT *) palloc(sizeof(TimeTzADT));
+
+   result->time = time;
+   result->zone = tz;
+
+   PG_RETURN_TIMETZADT_P(result);
+}
+
+
+/* timestamptz_timetz()
  * Convert timestamp to timetz data type.
  */
 Datum
-timestamp_timetz(PG_FUNCTION_ARGS)
+timestamptz_timetz(PG_FUNCTION_ARGS)
 {
-   Timestamp   timestamp = PG_GETARG_TIMESTAMP(0);
+   TimestampTz timestamp = PG_GETARG_TIMESTAMP(0);
    TimeTzADT  *result;
    struct tm   tt,
               *tm = &tt;
@@ -1214,20 +1290,10 @@ timestamp_timetz(PG_FUNCTION_ARGS)
    char       *tzn;
 
    if (TIMESTAMP_NOT_FINITE(timestamp))
-       elog(ERROR, "Unable to convert timestamp to date");
+       PG_RETURN_NULL();
 
-   if (TIMESTAMP_IS_EPOCH(timestamp))
-   {
-       timestamp2tm(SetTimestamp(timestamp), NULL, tm, &fsec, NULL);
-       tz = 0;
-   }
-   else if (TIMESTAMP_IS_CURRENT(timestamp))
-       timestamp2tm(SetTimestamp(timestamp), &tz, tm, &fsec, &tzn);
-   else
-   {
-       if (timestamp2tm(timestamp, &tz, tm, &fsec, &tzn) != 0)
-           elog(ERROR, "Unable to convert timestamp to date");
-   }
+   if (timestamp2tm(timestamp, &tz, tm, &fsec, &tzn) != 0)
+       elog(ERROR, "Unable to convert timestamp to date");
 
    result = (TimeTzADT *) palloc(sizeof(TimeTzADT));
 
@@ -1238,18 +1304,18 @@ timestamp_timetz(PG_FUNCTION_ARGS)
 }
 
 
-/* datetimetz_timestamp()
- * Convert date and timetz to timestamp data type.
+/* datetimetz_timestamptz()
+ * Convert date and timetz to timestamp with time zone data type.
  * Timestamp is stored in GMT, so add the time zone
  * stored with the timetz to the result.
  * - thomas 2000-03-10
  */
 Datum
-datetimetz_timestamp(PG_FUNCTION_ARGS)
+datetimetz_timestamptz(PG_FUNCTION_ARGS)
 {
    DateADT     date = PG_GETARG_DATEADT(0);
    TimeTzADT  *time = PG_GETARG_TIMETZADT_P(1);
-   Timestamp   result;
+   TimestampTz result;
 
    result = date * 86400.0 + time->time + time->zone;
 
@@ -1310,3 +1376,83 @@ text_timetz(PG_FUNCTION_ARGS)
    return DirectFunctionCall1(timetz_in,
                               CStringGetDatum(dstr));
 }
+
+/* timetz_zone()
+ * Encode time with time zone type with specified time zone.
+ */
+Datum
+timetz_zone(PG_FUNCTION_ARGS)
+{
+   text       *zone = PG_GETARG_TEXT_P(0);
+   TimeTzADT  *time = PG_GETARG_TIMETZADT_P(1);
+   TimeTzADT  *result;
+   TimeADT     time1;
+   int         tz;
+   int         type,
+               val;
+   int         i;
+   char       *up,
+              *lp,
+               lowzone[MAXDATELEN + 1];
+
+   if (VARSIZE(zone) - VARHDRSZ > MAXDATELEN)
+       elog(ERROR, "Time zone '%s' not recognized",
+            DatumGetCString(DirectFunctionCall1(textout,
+                                                PointerGetDatum(zone))));
+   up = VARDATA(zone);
+   lp = lowzone;
+   for (i = 0; i < (VARSIZE(zone) - VARHDRSZ); i++)
+       *lp++ = tolower((unsigned char) *up++);
+   *lp = '\0';
+
+   type = DecodeSpecial(0, lowzone, &val);
+
+   result = (TimeTzADT *) palloc(sizeof(TimeTzADT));
+
+   if ((type == TZ) || (type == DTZ))
+   {
+       tz = val * 60;
+       time1 = time->time - time->zone + tz;
+       TMODULO(result->time, time1, 86400e0);
+       if (result->time < 0)
+           result->time += 86400;
+       result->zone = tz;
+   }
+   else
+   {
+       elog(ERROR, "Time zone '%s' not recognized", lowzone);
+       PG_RETURN_NULL();
+   }
+
+   PG_RETURN_TIMETZADT_P(result);
+}  /* timetz_zone() */
+
+/* timetz_izone()
+ * Encode time with time zone type with specified time interval as time zone.
+ */
+Datum
+timetz_izone(PG_FUNCTION_ARGS)
+{
+   Interval   *zone = PG_GETARG_INTERVAL_P(0);
+   TimeTzADT  *time = PG_GETARG_TIMETZADT_P(1);
+   TimeTzADT  *result;
+   TimeADT     time1;
+   int         tz;
+
+   if (zone->month != 0)
+       elog(ERROR, "INTERVAL time zone '%s' not legal (month specified)",
+            DatumGetCString(DirectFunctionCall1(interval_out,
+                                                PointerGetDatum(zone))));
+
+   tz = -(zone->time);
+
+   result = (TimeTzADT *) palloc(sizeof(TimeTzADT));
+
+   time1 = time->time - time->zone + tz;
+   TMODULO(result->time, time1, 86400e0);
+   if (result->time < 0)
+       result->time += 86400;
+   result->zone = tz;
+
+   PG_RETURN_TIMETZADT_P(result);
+}  /* timetz_izone() */
index 7095f24de7313023f9210f7b5dc9cc3b36a58331..28ca77b64ea54c9c339b8da60b3f45142aea99a6 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *   $Header: /cvsroot/pgsql/src/backend/utils/adt/datetime.c,v 1.66 2001/07/10 01:41:47 tgl Exp $
+ *   $Header: /cvsroot/pgsql/src/backend/utils/adt/datetime.c,v 1.67 2001/09/28 08:09:10 thomas Exp $
  *
  *-------------------------------------------------------------------------
  */
 #define ROUND_ALL 1
 
 static int DecodeNumber(int flen, char *field,
-            int fmask, int *tmask,
-            struct tm * tm, double *fsec, int *is2digits);
+                       int fmask, int *tmask,
+                       struct tm * tm, double *fsec, int *is2digits);
 static int DecodeNumberField(int len, char *str,
-                 int fmask, int *tmask,
-                 struct tm * tm, double *fsec, int *is2digits);
+                            int fmask, int *tmask,
+                            struct tm * tm, double *fsec, int *is2digits);
 static int DecodeTime(char *str, int fmask, int *tmask,
-          struct tm * tm, double *fsec);
+                     struct tm * tm, double *fsec);
 static int DecodeTimezone(char *str, int *tzp);
 static datetkn *datebsearch(char *key, datetkn *base, unsigned int nel);
 static int DecodeDate(char *str, int fmask, int *tmask, struct tm * tm);
@@ -47,10 +47,10 @@ int         day_tab[2][13] = {
    {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31, 0}};
 
 char      *months[] = {"Jan", "Feb", "Mar", "Apr", "May", "Jun",
-"Jul", "Aug", "Sep", "Oct", "Nov", "Dec", NULL};
+                       "Jul", "Aug", "Sep", "Oct", "Nov", "Dec", NULL};
 
 char      *days[] = {"Sunday", "Monday", "Tuesday", "Wednesday",
-"Thursday", "Friday", "Saturday", NULL};
+                     "Thursday", "Friday", "Saturday", NULL};
 
 
 /*****************************************************************************
@@ -71,7 +71,7 @@ char     *days[] = {"Sunday", "Monday", "Tuesday", "Wednesday",
  * the text field is not guaranteed to be NULL-terminated.
  */
 static datetkn datetktbl[] = {
-/*     text            token   lexval */
+/* text, token, lexval */
    {EARLY, RESERV, DTK_EARLY}, /* "-infinity" reserved for "early time" */
    {"acsst", DTZ, 63},         /* Cent. Australia */
    {"acst", TZ, 57},           /* Cent. Australia */
@@ -104,6 +104,7 @@ static datetkn datetktbl[] = {
    {"cetdst", DTZ, 12},        /* Central European Dayl.Time */
    {"cst", TZ, NEG(36)},       /* Central Standard Time */
    {DCURRENT, RESERV, DTK_CURRENT},    /* "current" is always now */
+   {"d", UNITS, DAY},          /* "day of month" for ISO input */
    {"dec", MONTH, 12},
    {"december", MONTH, 12},
    {"dnt", TZ, 6},             /* Dansk Normal Tid */
@@ -124,6 +125,7 @@ static datetkn datetktbl[] = {
    {"fwt", DTZ, 12},           /* French Winter Time  */
    {"gmt", TZ, 0},             /* Greenwish Mean Time */
    {"gst", TZ, 60},            /* Guam Std Time, USSR Zone 9 */
+   {"h", UNITS, HOUR},         /* "hour" */
    {"hdt", DTZ, NEG(54)},      /* Hawaii/Alaska */
    {"hmt", DTZ, 18},           /* Hellas ? ? */
    {"hst", TZ, NEG(60)},       /* Hawaii Std Time */
@@ -134,16 +136,19 @@ static datetkn datetktbl[] = {
    /* "invalid" reserved for invalid time */
    {"ist", TZ, 12},            /* Israel */
    {"it", TZ, 21},             /* Iran Time */
+   {"j", UNITS, JULIAN},
    {"jan", MONTH, 1},
    {"january", MONTH, 1},
+   {"jd", UNITS, JULIAN},
    {"jst", TZ, 54},            /* Japan Std Time,USSR Zone 8 */
    {"jt", TZ, 45},             /* Java Time */
    {"jul", MONTH, 7},
-   {"july", MONTH, 7},
+   {"julian", UNITS, JULIAN},
    {"jun", MONTH, 6},
    {"june", MONTH, 6},
    {"kst", TZ, 54},            /* Korea Standard Time */
    {"ligt", TZ, 60},           /* From Melbourne, Australia */
+   {"m", UNITS, MONTH},        /* "month" for ISO input */
    {"mar", MONTH, 3},
    {"march", MONTH, 3},
    {"may", MONTH, 5},
@@ -153,6 +158,7 @@ static datetkn datetktbl[] = {
    {"metdst", DTZ, 12},        /* Middle Europe Daylight Time */
    {"mewt", TZ, 6},            /* Middle Europe Winter Time */
    {"mez", TZ, 6},             /* Middle Europe Zone */
+   {"mm", UNITS, MINUTE},      /* "minute" for ISO input */
    {"mon", DOW, 1},
    {"monday", DOW, 1},
    {"mst", TZ, NEG(42)},       /* Mountain Standard Time */
@@ -174,6 +180,7 @@ static datetkn datetktbl[] = {
    {"pdt", DTZ, NEG(42)},      /* Pacific Daylight Time */
    {"pm", AMPM, PM},
    {"pst", TZ, NEG(48)},       /* Pacific Standard Time */
+   {"s", UNITS, SECOND},       /* "seconds" for ISO input */
    {"sadt", DTZ, 63},          /* S. Australian Dayl. Time */
    {"sast", TZ, 57},           /* South Australian Std Time */
    {"sat", DOW, 6},
@@ -186,6 +193,7 @@ static datetkn datetktbl[] = {
    {"sun", DOW, 0},
    {"sunday", DOW, 0},
    {"swt", TZ, 6},             /* Swedish Winter Time  */
+   {"t", DTK_ISO_TIME, 0},     /* Filler for ISO time fields */
    {"thu", DOW, 4},
    {"thur", DOW, 4},
    {"thurs", DOW, 4},
@@ -208,6 +216,7 @@ static datetkn datetktbl[] = {
    {"wet", TZ, 0},             /* Western Europe */
    {"wetdst", DTZ, 6},         /* Western Europe */
    {"wst", TZ, 48},            /* West Australian Std Time */
+   {"y", UNITS, YEAR},         /* "year" for ISO input */
    {"ydt", DTZ, NEG(48)},      /* Yukon Daylight Time */
    {YESTERDAY, RESERV, DTK_YESTERDAY}, /* yesterday midnight */
    {"yst", TZ, NEG(54)},       /* Yukon Standard Time */
@@ -222,7 +231,7 @@ static unsigned int szdatetktbl = sizeof datetktbl / sizeof datetktbl[0];
 
 /* Used for SET australian_timezones to override North American ones */
 static datetkn australian_datetktbl[] = {
-   {"cst", TZ, 63},            /* Australia Eastern Std Time */
+   {"cst", TZ, 63},            /* Australia Central Std Time */
    {"est", TZ, 60},            /* Australia Eastern Std Time */
    {"sat", TZ, 57},
 };
@@ -231,7 +240,7 @@ static unsigned int australian_szdatetktbl = sizeof australian_datetktbl /
                                             sizeof australian_datetktbl[0];
 
 static datetkn deltatktbl[] = {
-/*     text            token   lexval */
+/* text, token, lexval */
    {"@", IGNORE, 0},           /* postgres relative time prefix */
    {DAGO, AGO, 0},             /* "ago" indicates negative time offset */
    {"c", UNITS, DTK_CENTURY},  /* "century" relative time units */
@@ -329,7 +338,8 @@ datetkn    *deltacache[MAXDATEFIELDS] = {NULL};
  * Use the algorithm by Henry Fliegel, a former NASA/JPL colleague
  * now at Aerospace Corp. (hi, Henry!)
  *
- * These routines will be used by other date/time packages - tgl 97/02/25
+ * These routines will be used by other date/time packages
+ * - thomas 97/02/25
  */
 
 int
@@ -413,6 +423,7 @@ ParseDateTime(char *timestr, char *lowstr,
            if (*cp == ':')
            {
                ftype[nf] = DTK_TIME;
+               *lp++ = *cp++;
                while (isdigit((unsigned char) *cp) ||
                       (*cp == ':') || (*cp == '.'))
                    *lp++ = *cp++;
@@ -422,10 +433,20 @@ ParseDateTime(char *timestr, char *lowstr,
            else if ((*cp == '-') || (*cp == '/') || (*cp == '.'))
            {
                ftype[nf] = DTK_DATE;
-               while (isalnum((unsigned char) *cp) || (*cp == '-') ||
-                      (*cp == '/') || (*cp == '.'))
-                   *lp++ = tolower((unsigned char) *cp++);
-
+               *lp++ = *cp++;
+               /* second field is all digits? then no embedded text month */
+               if (isdigit((unsigned char) *cp))
+               {
+                   while (isdigit((unsigned char) *cp) || (*cp == '-') ||
+                          (*cp == '/') || (*cp == '.'))
+                       *lp++ = *cp++;
+               }
+               else
+               {
+                   while (isalnum((unsigned char) *cp) || (*cp == '-') ||
+                          (*cp == '/') || (*cp == '.'))
+                       *lp++ = tolower((unsigned char) *cp++);
+               }
            }
 
            /*
@@ -539,7 +560,7 @@ ParseDateTime(char *timestr, char *lowstr,
  * Use the system-provided functions to get the current time zone
  * if not specified in the input string.
  * If the date is outside the time_t system-supported time range,
- * then assume GMT time zone. - tgl 97/05/27
+ * then assume GMT time zone. - thomas 1997/05/27
  */
 int
 DecodeDateTime(char **field, int *ftype, int nf,
@@ -548,6 +569,7 @@ DecodeDateTime(char **field, int *ftype, int nf,
    int         fmask = 0,
                tmask,
                type;
+   int         ptype = 0;      /* "prefix type" for ISO y2001m02d04 format */
    int         i;
    int         flen,
                val;
@@ -556,13 +578,16 @@ DecodeDateTime(char **field, int *ftype, int nf,
    int         is2digits = FALSE;
    int         bc = FALSE;
 
+   /* We'll insist on at least all of the date fields,
+    * but initialize the remaining fields in case they are not
+    * set later...
+    */
    *dtype = DTK_DATE;
    tm->tm_hour = 0;
    tm->tm_min = 0;
    tm->tm_sec = 0;
    *fsec = 0;
-   tm->tm_isdst = -1;          /* don't know daylight savings time status
-                                * apriori */
+   tm->tm_isdst = -1;  /* don't know daylight savings time status apriori */
    if (tzp != NULL)
        *tzp = 0;
 
@@ -571,13 +596,32 @@ DecodeDateTime(char **field, int *ftype, int nf,
        switch (ftype[i])
        {
            case DTK_DATE:
+               /* Previous field was a label for "julian date"?
+                * then this should be a julian date with fractional day...
+                */
+               if (ptype == JULIAN)
+               {
+                   char *cp;
+                   double dt, date, time;
 
-               /*
-                * Already have a date? Then this might be a POSIX time
-                * zone with an embedded dash (e.g. "PST-3" == "EST") -
-                * thomas 2000-03-15
+                   dt = strtod(field[i], &cp);
+                   if (*cp != '\0')
+                       return -1;
+
+                   time = dt * 86400;
+                   TMODULO(time, date, 86400e0);
+                   j2date((int) date, &tm->tm_year, &tm->tm_mon, &tm->tm_mday);
+                   dt2time(time, &tm->tm_hour, &tm->tm_min, fsec);
+
+                   tmask = DTK_DATE_M | DTK_TIME_M;
+                   *dtype = DTK_DATE;
+               }
+
+               /* Already have a date? Then this might be a POSIX time
+                * zone with an embedded dash (e.g. "PST-3" == "EST")
+                * - thomas 2000-03-15
                 */
-               if ((fmask & DTK_DATE_M) == DTK_DATE_M)
+               else if ((fmask & DTK_DATE_M) == DTK_DATE_M)
                {
                    if ((tzp == NULL)
                        || (DecodePosixTimezone(field[i], tzp) != 0))
@@ -587,15 +631,16 @@ DecodeDateTime(char **field, int *ftype, int nf,
                    tmask = DTK_M(TZ);
                }
                else if (DecodeDate(field[i], fmask, &tmask, tm) != 0)
+               {
                    return -1;
+               }
                break;
 
            case DTK_TIME:
                if (DecodeTime(field[i], fmask, &tmask, tm, fsec) != 0)
                    return -1;
 
-               /*
-                * check upper limit on hours; other limits checked in
+               /* Check upper limit on hours; other limits checked in
                 * DecodeTime()
                 */
                if (tm->tm_hour > 23)
@@ -618,7 +663,8 @@ DecodeDateTime(char **field, int *ftype, int nf,
                     * PST)
                     */
                    if ((i > 0) && ((fmask & DTK_M(TZ)) != 0)
-                       && (ftype[i - 1] == DTK_TZ) && (isalpha((unsigned char) *field[i - 1])))
+                       && (ftype[i - 1] == DTK_TZ)
+                       && (isalpha((unsigned char) *field[i - 1])))
                    {
                        *tzp -= tz;
                        tmask = 0;
@@ -634,21 +680,81 @@ DecodeDateTime(char **field, int *ftype, int nf,
            case DTK_NUMBER:
                flen = strlen(field[i]);
 
+               /* Was this an "ISO date" with embedded field labels?
+                * An example is "y2001m02d04" - thomas 2001-02-04
+                */
+               if (ptype != 0)
+               {
+                   char *cp;
+                   int val;
+
+                   val = strtol(field[i], &cp, 10);
+                   if (*cp != '\0')
+                       return -1;
+
+                   switch (ptype) {
+                       case YEAR:
+                           tm->tm_year = val;
+                           tmask = DTK_M(ptype);
+                           break;
+
+                       case MONTH:
+                           tm->tm_mon = val;
+                           tmask = DTK_M(ptype);
+                           break;
+
+                       case DAY:
+                           tm->tm_mday = val;
+                           tmask = DTK_M(ptype);
+                           break;
+
+                       case HOUR:
+                           tm->tm_hour = val;
+                           tmask = DTK_M(ptype);
+                           break;
+
+                       case MINUTE:
+                           tm->tm_min = val;
+                           tmask = DTK_M(ptype);
+                           break;
+
+                       case SECOND:
+                           tm->tm_sec = val;
+                           tmask = DTK_M(ptype);
+                           break;
+
+                       case JULIAN:
+                           /* previous field was a label for "julian date"?
+                            * then this is a julian day with no fractional part
+                            * (see DTK_DATE for cases involving fractional parts)
+                            */
+                           j2date(val, &tm->tm_year, &tm->tm_mon, &tm->tm_mday);
+
+                           tmask = DTK_DATE_M;
+                           break;
+
+                       default:
+                           return -1;
+                           break;
+                   }
+
+                   ptype = 0;
+                   *dtype = DTK_DATE;
+               }
                /*
                 * long numeric string and either no date or no time read
                 * yet? then interpret as a concatenated date or time...
                 */
-               if ((flen > 4) && !((fmask & DTK_DATE_M) && (fmask & DTK_TIME_M)))
+               else if ((flen > 4) && !((fmask & DTK_DATE_M) && (fmask & DTK_TIME_M)))
                {
                    if (DecodeNumberField(flen, field[i], fmask, &tmask, tm, fsec, &is2digits) != 0)
                        return -1;
 
                }
                /* otherwise it is a single date/time field... */
-               else
+               else if (DecodeNumber(flen, field[i], fmask, &tmask, tm, fsec, &is2digits) != 0)
                {
-                   if (DecodeNumber(flen, field[i], fmask, &tmask, tm, fsec, &is2digits) != 0)
-                       return -1;
+                   return -1;
                }
                break;
 
@@ -664,10 +770,15 @@ DecodeDateTime(char **field, int *ftype, int nf,
                    case RESERV:
                        switch (val)
                        {
+                           case DTK_CURRENT:
                            case DTK_NOW:
                                tmask = (DTK_DATE_M | DTK_TIME_M | DTK_M(TZ));
                                *dtype = DTK_DATE;
+#if NOT_USED
                                GetCurrentTime(tm);
+#else
+                               GetCurrentTimeUsec(tm, fsec);
+#endif
                                if (tzp != NULL)
                                    *tzp = CTimeZone;
                                break;
@@ -786,6 +897,18 @@ DecodeDateTime(char **field, int *ftype, int nf,
                        tm->tm_wday = val;
                        break;
 
+                   case UNITS:
+                       ptype = val;
+                       tmask = 0;
+                       break;
+
+                   case DTK_ISO_TIME:
+                       if ((i < 1) || (i >= (nf-1))
+                           || (ftype[i-1] != DTK_DATE)
+                           || (ftype[i+1] != DTK_TIME))
+                           return -1;
+                       break;
+
                    default:
                        return -1;
                }
@@ -1182,6 +1305,7 @@ DecodeDate(char *str, int fmask, int *tmask, struct tm * tm)
                str++;
        }
 
+       /* Just get rid of any non-digit, non-alpha characters... */
        if (*str != '\0')
            *str++ = '\0';
        nf++;
@@ -1362,8 +1486,9 @@ DecodeNumber(int flen, char *str, int fmask,
    /*
     * Enough digits to be unequivocal year? Used to test for 4 digits or
     * more, but we now test first for a three-digit doy so anything
-    * bigger than two digits had better be an explicit year. - thomas
-    * 1999-01-09 Back to requiring a 4 digit year. We accept a two digit
+    * bigger than two digits had better be an explicit year.
+    * - thomas 1999-01-09
+    * Back to requiring a 4 digit year. We accept a two digit
     * year farther down. - thomas 2000-03-28
     */
    else if (flen >= 4)
@@ -1613,7 +1738,7 @@ DecodeSpecial(int field, char *lowtoken, int *val)
    datecache[field] = tp;
    if (tp == NULL)
    {
-       type = IGNORE;
+       type = UNKNOWN_FIELD;
        *val = 0;
    }
    else
@@ -1747,10 +1872,11 @@ DecodeDateDelta(char **field, int *ftype, int nf, int *dtype, struct tm * tm, do
            case DTK_NUMBER:
                val = strtol(field[i], &cp, 10);
 
+               if (type == IGNORE)
+                   type = DTK_SECOND;
+
                if (*cp == '.')
                {
-                   if (type == IGNORE)
-                       type = DTK_SECOND;
                    fval = strtod(cp, &cp);
                    if (*cp != '\0')
                        return -1;
@@ -1928,7 +2054,7 @@ DecodeUnits(int field, char *lowtoken, int *val)
    deltacache[field] = tp;
    if (tp == NULL)
    {
-       type = IGNORE;
+       type = UNKNOWN_FIELD;
        *val = 0;
    }
    else
@@ -1985,8 +2111,8 @@ EncodeDateOnly(struct tm * tm, int style, char *str)
 
    switch (style)
    {
-           /* compatible with ISO date formats */
        case USE_ISO_DATES:
+           /* compatible with ISO date formats */
            if (tm->tm_year > 0)
                sprintf(str, "%04d-%02d-%02d",
                        tm->tm_year, tm->tm_mon, tm->tm_mday);
@@ -1995,8 +2121,8 @@ EncodeDateOnly(struct tm * tm, int style, char *str)
                      -(tm->tm_year - 1), tm->tm_mon, tm->tm_mday, "BC");
            break;
 
-           /* compatible with Oracle/Ingres date formats */
        case USE_SQL_DATES:
+           /* compatible with Oracle/Ingres date formats */
            if (EuroDates)
                sprintf(str, "%02d/%02d", tm->tm_mday, tm->tm_mon);
            else
@@ -2007,8 +2133,8 @@ EncodeDateOnly(struct tm * tm, int style, char *str)
                sprintf((str + 5), "/%04d %s", -(tm->tm_year - 1), "BC");
            break;
 
-           /* German-style date format */
        case USE_GERMAN_DATES:
+           /* German-style date format */
            sprintf(str, "%02d.%02d", tm->tm_mday, tm->tm_mon);
            if (tm->tm_year > 0)
                sprintf((str + 5), ".%04d", tm->tm_year);
@@ -2016,9 +2142,9 @@ EncodeDateOnly(struct tm * tm, int style, char *str)
                sprintf((str + 5), ".%04d %s", -(tm->tm_year - 1), "BC");
            break;
 
-           /* traditional date-only style for Postgres */
        case USE_POSTGRES_DATES:
        default:
+           /* traditional date-only style for Postgres */
            if (EuroDates)
                sprintf(str, "%02d-%02d", tm->tm_mday, tm->tm_mon);
            else
index 59b516556c9f22cf96488c0b506f8f58a7491c66..c80b5c429b616bdd5a8be5e1ad9bb6c7e835e3c1 100644 (file)
@@ -8,7 +8,7 @@
  * Portions Copyright (c) 1994, Regents of the University of California
  *
  * IDENTIFICATION
- *   $Header: /cvsroot/pgsql/src/backend/utils/adt/format_type.c,v 1.15 2001/09/21 15:27:38 tgl Exp $
+ *   $Header: /cvsroot/pgsql/src/backend/utils/adt/format_type.c,v 1.16 2001/09/28 08:09:10 thomas Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -205,6 +205,10 @@ format_type_internal(Oid type_oid, int32 typemod, bool allow_invalid)
            break;
 
        case TIMESTAMPOID:
+           buf = pstrdup("timestamp without time zone");
+           break;
+
+       case TIMESTAMPTZOID:
            buf = pstrdup("timestamp with time zone");
            break;
 
index 532f3eb1d49513cad24bd9beef486677e5a7082b..d517eb68183f058ee89bbe71c65ecd0553ad75a1 100644 (file)
@@ -1,7 +1,7 @@
 /* -----------------------------------------------------------------------
  * formatting.c
  *
- * $Header: /cvsroot/pgsql/src/backend/utils/adt/formatting.c,v 1.40 2001/09/12 04:01:57 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/utils/adt/formatting.c,v 1.41 2001/09/28 08:09:11 thomas Exp $
  *
  *
  *  Portions Copyright (c) 1999-2000, PostgreSQL Global Development Group
@@ -2753,6 +2753,30 @@ timestamp_to_char(PG_FUNCTION_ARGS)
    Timestamp dt = PG_GETARG_TIMESTAMP(0);
    text *fmt = PG_GETARG_TEXT_P(1), *res;
    TmToChar tmtc;
+   int r = 0;
+
+   if ((VARSIZE(fmt) - VARHDRSZ) <=0 || TIMESTAMP_NOT_FINITE(dt))
+       PG_RETURN_NULL();
+
+   ZERO_tmtc(&tmtc);
+
+   r = timestamp2tm(dt, NULL, tmtcTm(&tmtc), &tmtcFsec(&tmtc), NULL);
+
+   if (r != 0)
+       elog(ERROR, "to_char(): Unable to convert timestamp to tm");
+
+   if (!(res=datetime_to_char_body(&tmtc, fmt)))
+       PG_RETURN_NULL();
+
+   PG_RETURN_TEXT_P(res);
+}
+
+Datum
+timestamptz_to_char(PG_FUNCTION_ARGS)
+{
+   TimestampTz dt = PG_GETARG_TIMESTAMP(0);
+   text *fmt = PG_GETARG_TEXT_P(1), *res;
+   TmToChar tmtc;
    int tz, r = 0;
 
    if ((VARSIZE(fmt) - VARHDRSZ) <=0 || TIMESTAMP_NOT_FINITE(dt))
@@ -2760,12 +2784,7 @@ timestamp_to_char(PG_FUNCTION_ARGS)
 
    ZERO_tmtc(&tmtc);
 
-   if (TIMESTAMP_IS_EPOCH(dt))
-       r = timestamp2tm(SetTimestamp(dt), NULL, tmtcTm(&tmtc), &tmtcFsec(&tmtc), NULL);
-   else if (TIMESTAMP_IS_CURRENT(dt))
-       r = timestamp2tm(SetTimestamp(dt), &tz, tmtcTm(&tmtc), &tmtcFsec(&tmtc), &tmtcTzn(&tmtc));
-   else
-       r = timestamp2tm(dt, &tz, tmtcTm(&tmtc), &tmtcFsec(&tmtc), &tmtcTzn(&tmtc));
+   r = timestamp2tm(dt, &tz, tmtcTm(&tmtc), &tmtcFsec(&tmtc), &tmtcTzn(&tmtc));
 
    if (r != 0)
        elog(ERROR, "to_char(): Unable to convert timestamp to tm");
@@ -2805,7 +2824,7 @@ interval_to_char(PG_FUNCTION_ARGS)
 /* ---------------------
  * TO_TIMESTAMP()
  *
- * Make Timestamp from date_str which is formated at argument 'fmt'
+ * Make Timestamp from date_str which is formatted at argument 'fmt'
  * ( to_timestamp is reverse to_char() )
  * ---------------------
  */
index 0f8ed87e5ba31d40f2d1956e0a081ee5292932c4..ca8d728454ba4f66262101f9155c9cb1bb297bb6 100644 (file)
@@ -9,7 +9,7 @@
  *
  *
  * IDENTIFICATION
- *   $Header: /cvsroot/pgsql/src/backend/utils/adt/nabstime.c,v 1.85 2001/05/03 19:00:36 tgl Exp $
+ *   $Header: /cvsroot/pgsql/src/backend/utils/adt/nabstime.c,v 1.86 2001/09/28 08:09:11 thomas Exp $
  *
  * NOTES
  *
@@ -179,6 +179,84 @@ GetCurrentAbsoluteTime(void)
 }  /* GetCurrentAbsoluteTime() */
 
 
+/* GetCurrentAbsoluteTime()
+ * Get the current system time. Set timezone parameters if not specified elsewhere.
+ * Define HasTZSet to allow clients to specify the default timezone.
+ *
+ * Returns the number of seconds since epoch (January 1 1970 GMT)
+ */
+AbsoluteTime
+GetCurrentAbsoluteTimeUsec(int *usec)
+{
+   time_t now;
+   struct timeval tp;
+// struct timezone tpz;
+#if defined(HAVE_TM_ZONE) || defined(HAVE_INT_TIMEZONE)
+   struct tm  *tm;
+#else
+   struct timeb tb;            /* the old V7-ism */
+#endif
+
+   gettimeofday(&tp, NULL);
+
+   now = tp.tv_sec;
+   *usec = tp.tv_usec;
+
+#ifdef NOT_USED
+#if defined(HAVE_TM_ZONE) || defined(HAVE_INT_TIMEZONE)
+   now = time(NULL);
+#else
+   ftime(&tb);
+   now = tb.time;
+#endif
+#endif
+
+   if (!HasCTZSet)
+   {
+#if defined(HAVE_TM_ZONE)
+       tm = localtime(&now);
+
+       CTimeZone = -tm->tm_gmtoff;     /* tm_gmtoff is Sun/DEC-ism */
+       CDayLight = (tm->tm_isdst > 0);
+
+#ifdef NOT_USED
+
+       /*
+        * XXX is there a better way to get local timezone string w/o
+        * tzname? - tgl 97/03/18
+        */
+       strftime(CTZName, MAXTZLEN, "%Z", tm);
+#endif
+
+       /*
+        * XXX FreeBSD man pages indicate that this should work - thomas
+        * 1998-12-12
+        */
+       strcpy(CTZName, tm->tm_zone);
+
+#elif defined(HAVE_INT_TIMEZONE)
+       tm = localtime(&now);
+
+       CDayLight = tm->tm_isdst;
+       CTimeZone = ((tm->tm_isdst > 0) ? (TIMEZONE_GLOBAL - 3600) : TIMEZONE_GLOBAL);
+       strcpy(CTZName, tzname[tm->tm_isdst]);
+#else                          /* neither HAVE_TM_ZONE nor
+                                * HAVE_INT_TIMEZONE */
+       CTimeZone = tb.timezone * 60;
+       CDayLight = (tb.dstflag != 0);
+
+       /*
+        * XXX does this work to get the local timezone string in V7? -
+        * tgl 97/03/18
+        */
+       strftime(CTZName, MAXTZLEN, "%Z", localtime(&now));
+#endif
+   };
+
+   return (AbsoluteTime) now;
+}  /* GetCurrentAbsoluteTime() */
+
+
 void
 GetCurrentTime(struct tm * tm)
 {
@@ -190,6 +268,19 @@ GetCurrentTime(struct tm * tm)
 }  /* GetCurrentTime() */
 
 
+void
+GetCurrentTimeUsec(struct tm *tm, double *fsec)
+{
+   int         tz;
+   int         usec;
+
+   abstime2tm(GetCurrentTransactionStartTimeUsec(&usec), &tz, tm, NULL);
+   *fsec = usec * 1.0e-6;
+
+   return;
+}  /* GetCurrentTimeUsec() */
+
+
 void
 abstime2tm(AbsoluteTime _time, int *tzp, struct tm * tm, char *tzn)
 {
@@ -357,11 +448,9 @@ nabstimein(PG_FUNCTION_ARGS)
            break;
 
        case DTK_EPOCH:
-           result = EPOCH_ABSTIME;
-           break;
-
-       case DTK_CURRENT:
-           result = CURRENT_ABSTIME;
+           /* Don't bother retaining this as a reserved value,
+            * but instead just set to the actual epoch time (1970-01-01) */
+           result = 0;
            break;
 
        case DTK_LATE:
@@ -404,15 +493,12 @@ nabstimeout(PG_FUNCTION_ARGS)
 
    switch (time)
    {
-       case EPOCH_ABSTIME:
-           strcpy(buf, EPOCH);
-           break;
+       /* Note that timestamp no longer supports 'invalid'.
+        * Retain 'invalid' for abstime for now, but dump it someday.
+        */
        case INVALID_ABSTIME:
            strcpy(buf, INVALID);
            break;
-       case CURRENT_ABSTIME:
-           strcpy(buf, DCURRENT);
-           break;
        case NOEND_ABSTIME:
            strcpy(buf, LATE);
            break;
@@ -449,37 +535,37 @@ abstime_finite(PG_FUNCTION_ARGS)
 static int
 abstime_cmp_internal(AbsoluteTime a, AbsoluteTime b)
 {
-   /*
   * We consider all INVALIDs to be equal and larger than any non-INVALID.
   * This is somewhat arbitrary; the important thing is to have a
   * consistent sort order.
   */
+/*
+ * We consider all INVALIDs to be equal and larger than any non-INVALID.
+ * This is somewhat arbitrary; the important thing is to have a
+ * consistent sort order.
+ */
    if (a == INVALID_ABSTIME)
    {
-       if (b == INVALID_ABSTIME)
-           return 0;           /* INVALID = INVALID */
-       else
-           return 1;           /* INVALID > non-INVALID */
-   }
-   else if (b == INVALID_ABSTIME)
-   {
-       return -1;              /* non-INVALID < INVALID */
+        if (b == INVALID_ABSTIME)
+           return 0;   /* INVALID = INVALID */
+        else
+           return 1;   /* INVALID > non-INVALID */
    }
+
+   if (b == INVALID_ABSTIME)
+        return -1;     /* non-INVALID < INVALID */
+
+#if 0
+/* CURRENT is no longer stored internally... */
+   /* XXX this is broken, should go away: */
+   if (a == CURRENT_ABSTIME)
+       a = GetCurrentTransactionStartTime();
+   if (b == CURRENT_ABSTIME)
+       b = GetCurrentTransactionStartTime();
+#endif
+
+   if (a > b)
+       return 1;
+   else if (a == b)
+       return 0;
    else
-   {
-       /* XXX this is broken, should go away: */
-       if (a == CURRENT_ABSTIME)
-           a = GetCurrentTransactionStartTime();
-       if (b == CURRENT_ABSTIME)
-           b = GetCurrentTransactionStartTime();
-
-       if (a > b)
-           return 1;
-       else if (a == b)
-           return 0;
-       else
-           return -1;
-   }
+       return -1;
 }
 
 Datum
@@ -546,7 +632,7 @@ btabstimecmp(PG_FUNCTION_ARGS)
 }
 
 
-/* datetime_abstime()
+/* timestamp_abstime()
  * Convert timestamp to abstime.
  */
 Datum
@@ -555,26 +641,23 @@ timestamp_abstime(PG_FUNCTION_ARGS)
    Timestamp   timestamp = PG_GETARG_TIMESTAMP(0);
    AbsoluteTime result;
    double      fsec;
+   int         tz;
    struct tm   tt,
               *tm = &tt;
 
-   if (TIMESTAMP_IS_INVALID(timestamp))
-       result = INVALID_ABSTIME;
-   else if (TIMESTAMP_IS_NOBEGIN(timestamp))
+   if (TIMESTAMP_IS_NOBEGIN(timestamp))
        result = NOSTART_ABSTIME;
    else if (TIMESTAMP_IS_NOEND(timestamp))
        result = NOEND_ABSTIME;
+   else if (timestamp2tm(timestamp, NULL, tm, &fsec, NULL) == 0)
+   {
+       tz = DetermineLocalTimeZone(tm);
+       result = tm2abstime(tm, tz);
+   }
    else
    {
-       if (TIMESTAMP_IS_RELATIVE(timestamp))
-       {
-           timestamp2tm(SetTimestamp(timestamp), NULL, tm, &fsec, NULL);
-           result = tm2abstime(tm, 0);
-       }
-       else if (timestamp2tm(timestamp, NULL, tm, &fsec, NULL) == 0)
-           result = tm2abstime(tm, 0);
-       else
-           result = INVALID_ABSTIME;
+       elog(ERROR, "Unable to convert timestamp to abstime");
+       result = INVALID_ABSTIME;
    }
 
    PG_RETURN_ABSOLUTETIME(result);
@@ -588,11 +671,16 @@ abstime_timestamp(PG_FUNCTION_ARGS)
 {
    AbsoluteTime abstime = PG_GETARG_ABSOLUTETIME(0);
    Timestamp   result;
+   struct tm   tt,
+              *tm = &tt;
+   int         tz;
+   char        tzn[MAXTZLEN];
 
    switch (abstime)
    {
        case INVALID_ABSTIME:
-           TIMESTAMP_INVALID(result);
+           elog(ERROR, "Unable to convert abstime 'invalid' to timestamp");
+           TIMESTAMP_NOBEGIN(result);
            break;
 
        case NOSTART_ABSTIME:
@@ -603,12 +691,65 @@ abstime_timestamp(PG_FUNCTION_ARGS)
            TIMESTAMP_NOEND(result);
            break;
 
-       case EPOCH_ABSTIME:
-           TIMESTAMP_EPOCH(result);
+       default:
+           abstime2tm(abstime, &tz, tm, tzn);
+           result = abstime + ((date2j(1970, 1, 1) - date2j(2000, 1, 1)) * 86400) + tz;
            break;
+   };
+
+   PG_RETURN_TIMESTAMP(result);
+}
+
+
+/* timestamptz_abstime()
+ * Convert timestamp with time zone to abstime.
+ */
+Datum
+timestamptz_abstime(PG_FUNCTION_ARGS)
+{
+   TimestampTz timestamp = PG_GETARG_TIMESTAMP(0);
+   AbsoluteTime result;
+   double      fsec;
+   struct tm   tt,
+              *tm = &tt;
 
-       case CURRENT_ABSTIME:
-           TIMESTAMP_CURRENT(result);
+   if (TIMESTAMP_IS_NOBEGIN(timestamp))
+       result = NOSTART_ABSTIME;
+   else if (TIMESTAMP_IS_NOEND(timestamp))
+       result = NOEND_ABSTIME;
+   else if (timestamp2tm(timestamp, NULL, tm, &fsec, NULL) == 0)
+       result = tm2abstime(tm, 0);
+   else
+   {
+       elog(ERROR, "Unable to convert timestamp to abstime");
+       result = INVALID_ABSTIME;
+   }
+
+   PG_RETURN_ABSOLUTETIME(result);
+}
+
+/* abstime_timestamptz()
+ * Convert abstime to timestamp.
+ */
+Datum
+abstime_timestamptz(PG_FUNCTION_ARGS)
+{
+   AbsoluteTime abstime = PG_GETARG_ABSOLUTETIME(0);
+   TimestampTz result;
+
+   switch (abstime)
+   {
+       case INVALID_ABSTIME:
+           elog(ERROR, "Unable to convert abstime 'invalid' to timestamptz");
+           TIMESTAMP_NOBEGIN(result);
+           break;
+
+       case NOSTART_ABSTIME:
+           TIMESTAMP_NOBEGIN(result);
+           break;
+
+       case NOEND_ABSTIME:
+           TIMESTAMP_NOEND(result);
            break;
 
        default:
@@ -653,14 +794,15 @@ reltimein(PG_FUNCTION_ARGS)
        case DTK_DELTA:
            result = ((((tm->tm_hour * 60) + tm->tm_min) * 60) + tm->tm_sec);
            result += (((tm->tm_year * 365) + (tm->tm_mon * 30) + tm->tm_mday) * (24 * 60 * 60));
-           PG_RETURN_RELATIVETIME(result);
+           break;
 
        default:
-           PG_RETURN_RELATIVETIME(INVALID_RELTIME);
+           elog(ERROR, "Bad reltime (internal coding error) '%s'", str);
+           result = INVALID_RELTIME;
+           break;
    }
 
-   elog(ERROR, "Bad reltime (internal coding error) '%s'", str);
-   PG_RETURN_RELATIVETIME(INVALID_RELTIME);
+   PG_RETURN_RELATIVETIME(result);
 }
 
 
@@ -676,13 +818,8 @@ reltimeout(PG_FUNCTION_ARGS)
               *tm = &tt;
    char        buf[MAXDATELEN + 1];
 
-   if (time == INVALID_RELTIME)
-       strcpy(buf, INVALID_RELTIME_STR);
-   else
-   {
-       reltime2tm(time, tm);
-       EncodeTimeSpan(tm, 0, DateStyle, buf);
-   }
+   reltime2tm(time, tm);
+   EncodeTimeSpan(tm, 0, DateStyle, buf);
 
    result = pstrdup(buf);
    PG_RETURN_CSTRING(result);
@@ -702,44 +839,6 @@ reltime2tm(RelativeTime time, struct tm * tm)
    return;
 }  /* reltime2tm() */
 
-#ifdef NOT_USED
-int
-dummyfunc()
-{
-   char       *timestring;
-   long        quantity;
-   int         i;
-   int         unitnr;
-
-   timestring = (char *) palloc(Max(strlen(INVALID_RELTIME_STR),
-                                    UNITMAXLEN) + 1);
-   if (timevalue == INVALID_RELTIME)
-   {
-       strcpy(timestring, INVALID_RELTIME_STR);
-       return timestring;
-   }
-
-   if (timevalue == 0)
-       i = 1;                  /* unit = 'seconds' */
-   else
-       for (i = 12; i >= 0; i = i - 2)
-           if ((timevalue % sec_tab[i]) == 0)
-               break;          /* appropriate unit found */
-   unitnr = i;
-   quantity = (timevalue / sec_tab[unitnr]);
-   if (quantity > 1 || quantity < -1)
-       unitnr++;               /* adjust index for PLURAL of unit */
-   if (quantity >= 0)
-       sprintf(timestring, "%c %lu %s", RELTIME_LABEL,
-               quantity, unit_tab[unitnr]);
-   else
-       sprintf(timestring, "%c %lu %s %s", RELTIME_LABEL,
-               (quantity * -1), unit_tab[unitnr], RELTIME_PAST);
-   return timestring;
-}
-
-#endif
-
 
 /*
  *     tintervalin     - converts an interval string to internal format
@@ -749,26 +848,25 @@ tintervalin(PG_FUNCTION_ARGS)
 {
    char       *intervalstr = PG_GETARG_CSTRING(0);
    TimeInterval interval;
-   int         error;
    AbsoluteTime i_start,
                i_end,
                t1,
                t2;
 
    interval = (TimeInterval) palloc(sizeof(TimeIntervalData));
-   error = istinterval(intervalstr, &t1, &t2);
-   if (error == 0)
-       interval->status = T_INTERVAL_INVAL;
+   if (istinterval(intervalstr, &t1, &t2) == 0)
+       elog(ERROR, "Unable to decode tinterval '%s'", intervalstr);
+
    if (t1 == INVALID_ABSTIME || t2 == INVALID_ABSTIME)
-       interval->status = T_INTERVAL_INVAL;    /* undefined  */
+        interval->status = T_INTERVAL_INVAL;    /* undefined  */
    else
-   {
-       i_start = ABSTIMEMIN(t1, t2);
-       i_end = ABSTIMEMAX(t1, t2);
-       interval->data[0] = i_start;
-       interval->data[1] = i_end;
        interval->status = T_INTERVAL_VALID;
-   }
+
+   i_start = ABSTIMEMIN(t1, t2);
+   i_end = ABSTIMEMAX(t1, t2);
+   interval->data[0] = i_start;
+   interval->data[1] = i_end;
+
    PG_RETURN_TIMEINTERVAL(interval);
 }
 
@@ -818,30 +916,28 @@ interval_reltime(PG_FUNCTION_ARGS)
                month;
    double      span;
 
-   if (INTERVAL_IS_INVALID(*interval))
-       time = INVALID_RELTIME;
+   if (interval->month == 0)
+   {
+       year = 0;
+       month = 0;
+   }
+   else if (abs(interval->month) >= 12)
+   {
+       year = (interval->month / 12);
+       month = (interval->month % 12);
+   }
    else
    {
-       if (interval->month == 0)
-       {
-           year = 0;
-           month = 0;
-       }
-       else if (abs(interval->month) >= 12)
-       {
-           year = (interval->month / 12);
-           month = (interval->month % 12);
-       }
-       else
-       {
-           year = 0;
-           month = interval->month;
-       }
+       year = 0;
+       month = interval->month;
+   }
 
-       span = (((((double) 365 * year) + ((double) 30 * month)) * 86400) + interval->time);
+   span = (((((double) 365 * year) + ((double) 30 * month)) * 86400) + interval->time);
 
-       time = (((span > INT_MIN) && (span < INT_MAX)) ? span : INVALID_RELTIME);
-   }
+   if ((span < INT_MIN) || (span > INT_MAX))
+       time = INVALID_RELTIME;
+   else
+       time = span;
 
    PG_RETURN_RELATIVETIME(time);
 }
@@ -860,7 +956,9 @@ reltime_interval(PG_FUNCTION_ARGS)
    switch (reltime)
    {
        case INVALID_RELTIME:
-           INTERVAL_INVALID(*result);
+           elog(ERROR, "Unable to convert reltime 'invalid' to interval");
+           result->time = 0;
+           result->month = 0;
            break;
 
        default:
@@ -884,11 +982,12 @@ mktinterval(PG_FUNCTION_ARGS)
 {
    AbsoluteTime t1 = PG_GETARG_ABSOLUTETIME(0);
    AbsoluteTime t2 = PG_GETARG_ABSOLUTETIME(1);
-   AbsoluteTime tstart = ABSTIMEMIN(t1, t2),
-               tend = ABSTIMEMAX(t1, t2);
+   AbsoluteTime tstart = ABSTIMEMIN(t1, t2);
+   AbsoluteTime tend = ABSTIMEMAX(t1, t2);
    TimeInterval interval;
 
    interval = (TimeInterval) palloc(sizeof(TimeIntervalData));
+
    if (t1 == INVALID_ABSTIME || t2 == INVALID_ABSTIME)
        interval->status = T_INTERVAL_INVAL;
    else
@@ -909,7 +1008,7 @@ mktinterval(PG_FUNCTION_ARGS)
  */
 
 /*
- *     timepl          - returns the value of (abstime t1 + relime t2)
+ *     timepl          - returns the value of (abstime t1 + reltime t2)
  */
 Datum
 timepl(PG_FUNCTION_ARGS)
@@ -917,8 +1016,10 @@ timepl(PG_FUNCTION_ARGS)
    AbsoluteTime t1 = PG_GETARG_ABSOLUTETIME(0);
    RelativeTime t2 = PG_GETARG_RELATIVETIME(1);
 
+#if 0
    if (t1 == CURRENT_ABSTIME)
        t1 = GetCurrentTransactionStartTime();
+#endif
 
    if (AbsoluteTimeIsReal(t1) &&
        RelativeTimeIsValid(t2) &&
@@ -939,8 +1040,10 @@ timemi(PG_FUNCTION_ARGS)
    AbsoluteTime t1 = PG_GETARG_ABSOLUTETIME(0);
    RelativeTime t2 = PG_GETARG_RELATIVETIME(1);
 
+#if 0
    if (t1 == CURRENT_ABSTIME)
        t1 = GetCurrentTransactionStartTime();
+#endif
 
    if (AbsoluteTimeIsReal(t1) &&
        RelativeTimeIsValid(t2) &&
@@ -952,27 +1055,6 @@ timemi(PG_FUNCTION_ARGS)
 }
 
 
-/*
- *     abstimemi       - returns the value of (abstime t1 - abstime t2)
- *
- * This is not exported, so it's not been made fmgr-compatible.
- */
-static RelativeTime
-abstimemi(AbsoluteTime t1, AbsoluteTime t2)
-{
-   if (t1 == CURRENT_ABSTIME)
-       t1 = GetCurrentTransactionStartTime();
-   if (t2 == CURRENT_ABSTIME)
-       t2 = GetCurrentTransactionStartTime();
-
-   if (AbsoluteTimeIsReal(t1) &&
-       AbsoluteTimeIsReal(t2))
-       return t1 - t2;
-
-   return INVALID_RELTIME;
-}
-
-
 /*
  *     intinterval     - returns true iff absolute date is in the interval
  */
@@ -1002,13 +1084,20 @@ Datum
 tintervalrel(PG_FUNCTION_ARGS)
 {
    TimeInterval interval = PG_GETARG_TIMEINTERVAL(0);
+   AbsoluteTime t1 = interval->data[0];
+   AbsoluteTime t2 = interval->data[1];
 
    if (interval->status != T_INTERVAL_VALID)
        PG_RETURN_RELATIVETIME(INVALID_RELTIME);
 
-   PG_RETURN_RELATIVETIME(abstimemi(interval->data[1], interval->data[0]));
+   if (AbsoluteTimeIsReal(t1) &&
+       AbsoluteTimeIsReal(t2))
+       PG_RETURN_RELATIVETIME(t2 - t1);
+
+   PG_RETURN_RELATIVETIME(INVALID_RELTIME);
 }
 
+
 /*
  *     timenow         - returns  time "now", internal format
  *
@@ -1021,6 +1110,7 @@ timenow(PG_FUNCTION_ARGS)
 
    if (time(&sec) < 0)
        PG_RETURN_ABSOLUTETIME(INVALID_ABSTIME);
+
    PG_RETURN_ABSOLUTETIME((AbsoluteTime) sec);
 }
 
@@ -1113,11 +1203,11 @@ tintervalsame(PG_FUNCTION_ARGS)
        PG_RETURN_BOOL(false);
 
    if (DatumGetBool(DirectFunctionCall2(abstimeeq,
-                                      AbsoluteTimeGetDatum(i1->data[0]),
-                                  AbsoluteTimeGetDatum(i2->data[0]))) &&
+                                        AbsoluteTimeGetDatum(i1->data[0]),
+                                        AbsoluteTimeGetDatum(i2->data[0]))) &&
        DatumGetBool(DirectFunctionCall2(abstimeeq,
-                                      AbsoluteTimeGetDatum(i1->data[1]),
-                                    AbsoluteTimeGetDatum(i2->data[1]))))
+                                        AbsoluteTimeGetDatum(i1->data[1]),
+                                        AbsoluteTimeGetDatum(i2->data[1]))))
        PG_RETURN_BOOL(true);
    PG_RETURN_BOOL(false);
 }
@@ -1133,9 +1223,9 @@ tintervaleq(PG_FUNCTION_ARGS)
    TimeInterval i1 = PG_GETARG_TIMEINTERVAL(0);
    TimeInterval i2 = PG_GETARG_TIMEINTERVAL(1);
    AbsoluteTime t10,
-               t11,
-               t20,
-               t21;
+                t11,
+                t20,
+                t21;
 
    if (i1->status == T_INTERVAL_INVAL || i2->status == T_INTERVAL_INVAL)
        PG_RETURN_BOOL(false);
@@ -1145,19 +1235,10 @@ tintervaleq(PG_FUNCTION_ARGS)
    t20 = i2->data[0];
    t21 = i2->data[1];
 
-   if ((t10 == INVALID_ABSTIME) || (t20 == INVALID_ABSTIME)
+   if ((t10 == INVALID_ABSTIME) || (t11 == INVALID_ABSTIME)
        || (t20 == INVALID_ABSTIME) || (t21 == INVALID_ABSTIME))
        PG_RETURN_BOOL(false);
 
-   if (t10 == CURRENT_ABSTIME)
-       t10 = GetCurrentTransactionStartTime();
-   if (t11 == CURRENT_ABSTIME)
-       t11 = GetCurrentTransactionStartTime();
-   if (t20 == CURRENT_ABSTIME)
-       t20 = GetCurrentTransactionStartTime();
-   if (t21 == CURRENT_ABSTIME)
-       t21 = GetCurrentTransactionStartTime();
-
    PG_RETURN_BOOL((t11 - t10) == (t21 - t20));
 }
 
@@ -1167,9 +1248,9 @@ tintervalne(PG_FUNCTION_ARGS)
    TimeInterval i1 = PG_GETARG_TIMEINTERVAL(0);
    TimeInterval i2 = PG_GETARG_TIMEINTERVAL(1);
    AbsoluteTime t10,
-               t11,
-               t20,
-               t21;
+                t11,
+                t20,
+                t21;
 
    if (i1->status == T_INTERVAL_INVAL || i2->status == T_INTERVAL_INVAL)
        PG_RETURN_BOOL(false);
@@ -1179,19 +1260,10 @@ tintervalne(PG_FUNCTION_ARGS)
    t20 = i2->data[0];
    t21 = i2->data[1];
 
-   if ((t10 == INVALID_ABSTIME) || (t20 == INVALID_ABSTIME)
+   if ((t10 == INVALID_ABSTIME) || (t11 == INVALID_ABSTIME)
        || (t20 == INVALID_ABSTIME) || (t21 == INVALID_ABSTIME))
        PG_RETURN_BOOL(false);
 
-   if (t10 == CURRENT_ABSTIME)
-       t10 = GetCurrentTransactionStartTime();
-   if (t11 == CURRENT_ABSTIME)
-       t11 = GetCurrentTransactionStartTime();
-   if (t20 == CURRENT_ABSTIME)
-       t20 = GetCurrentTransactionStartTime();
-   if (t21 == CURRENT_ABSTIME)
-       t21 = GetCurrentTransactionStartTime();
-
    PG_RETURN_BOOL((t11 - t10) != (t21 - t20));
 }
 
@@ -1201,9 +1273,9 @@ tintervallt(PG_FUNCTION_ARGS)
    TimeInterval i1 = PG_GETARG_TIMEINTERVAL(0);
    TimeInterval i2 = PG_GETARG_TIMEINTERVAL(1);
    AbsoluteTime t10,
-               t11,
-               t20,
-               t21;
+                t11,
+                t20,
+                t21;
 
    if (i1->status == T_INTERVAL_INVAL || i2->status == T_INTERVAL_INVAL)
        PG_RETURN_BOOL(false);
@@ -1213,19 +1285,10 @@ tintervallt(PG_FUNCTION_ARGS)
    t20 = i2->data[0];
    t21 = i2->data[1];
 
-   if ((t10 == INVALID_ABSTIME) || (t20 == INVALID_ABSTIME)
+   if ((t10 == INVALID_ABSTIME) || (t11 == INVALID_ABSTIME)
        || (t20 == INVALID_ABSTIME) || (t21 == INVALID_ABSTIME))
        PG_RETURN_BOOL(false);
 
-   if (t10 == CURRENT_ABSTIME)
-       t10 = GetCurrentTransactionStartTime();
-   if (t11 == CURRENT_ABSTIME)
-       t11 = GetCurrentTransactionStartTime();
-   if (t20 == CURRENT_ABSTIME)
-       t20 = GetCurrentTransactionStartTime();
-   if (t21 == CURRENT_ABSTIME)
-       t21 = GetCurrentTransactionStartTime();
-
    PG_RETURN_BOOL((t11 - t10) < (t21 - t20));
 }
 
@@ -1235,9 +1298,9 @@ tintervalle(PG_FUNCTION_ARGS)
    TimeInterval i1 = PG_GETARG_TIMEINTERVAL(0);
    TimeInterval i2 = PG_GETARG_TIMEINTERVAL(1);
    AbsoluteTime t10,
-               t11,
-               t20,
-               t21;
+                t11,
+                t20,
+                t21;
 
    if (i1->status == T_INTERVAL_INVAL || i2->status == T_INTERVAL_INVAL)
        PG_RETURN_BOOL(false);
@@ -1247,19 +1310,10 @@ tintervalle(PG_FUNCTION_ARGS)
    t20 = i2->data[0];
    t21 = i2->data[1];
 
-   if ((t10 == INVALID_ABSTIME) || (t20 == INVALID_ABSTIME)
+   if ((t10 == INVALID_ABSTIME) || (t11 == INVALID_ABSTIME)
        || (t20 == INVALID_ABSTIME) || (t21 == INVALID_ABSTIME))
        PG_RETURN_BOOL(false);
 
-   if (t10 == CURRENT_ABSTIME)
-       t10 = GetCurrentTransactionStartTime();
-   if (t11 == CURRENT_ABSTIME)
-       t11 = GetCurrentTransactionStartTime();
-   if (t20 == CURRENT_ABSTIME)
-       t20 = GetCurrentTransactionStartTime();
-   if (t21 == CURRENT_ABSTIME)
-       t21 = GetCurrentTransactionStartTime();
-
    PG_RETURN_BOOL((t11 - t10) <= (t21 - t20));
 }
 
@@ -1281,19 +1335,10 @@ tintervalgt(PG_FUNCTION_ARGS)
    t20 = i2->data[0];
    t21 = i2->data[1];
 
-   if ((t10 == INVALID_ABSTIME) || (t20 == INVALID_ABSTIME)
+   if ((t10 == INVALID_ABSTIME) || (t11 == INVALID_ABSTIME)
        || (t20 == INVALID_ABSTIME) || (t21 == INVALID_ABSTIME))
        PG_RETURN_BOOL(false);
 
-   if (t10 == CURRENT_ABSTIME)
-       t10 = GetCurrentTransactionStartTime();
-   if (t11 == CURRENT_ABSTIME)
-       t11 = GetCurrentTransactionStartTime();
-   if (t20 == CURRENT_ABSTIME)
-       t20 = GetCurrentTransactionStartTime();
-   if (t21 == CURRENT_ABSTIME)
-       t21 = GetCurrentTransactionStartTime();
-
    PG_RETURN_BOOL((t11 - t10) > (t21 - t20));
 }
 
@@ -1315,19 +1360,10 @@ tintervalge(PG_FUNCTION_ARGS)
    t20 = i2->data[0];
    t21 = i2->data[1];
 
-   if ((t10 == INVALID_ABSTIME) || (t20 == INVALID_ABSTIME)
+   if ((t10 == INVALID_ABSTIME) || (t11 == INVALID_ABSTIME)
        || (t20 == INVALID_ABSTIME) || (t21 == INVALID_ABSTIME))
        PG_RETURN_BOOL(false);
 
-   if (t10 == CURRENT_ABSTIME)
-       t10 = GetCurrentTransactionStartTime();
-   if (t11 == CURRENT_ABSTIME)
-       t11 = GetCurrentTransactionStartTime();
-   if (t20 == CURRENT_ABSTIME)
-       t20 = GetCurrentTransactionStartTime();
-   if (t21 == CURRENT_ABSTIME)
-       t21 = GetCurrentTransactionStartTime();
-
    PG_RETURN_BOOL((t11 - t10) >= (t21 - t20));
 }
 
@@ -1356,8 +1392,8 @@ tintervalleneq(PG_FUNCTION_ARGS)
    if (i->status == T_INTERVAL_INVAL || t == INVALID_RELTIME)
        PG_RETURN_BOOL(false);
    rt = DatumGetRelativeTime(DirectFunctionCall1(tintervalrel,
-                                              TimeIntervalGetDatum(i)));
-   PG_RETURN_BOOL(rt != INVALID_RELTIME && rt == t);
+                                                 TimeIntervalGetDatum(i)));
+   PG_RETURN_BOOL((rt != INVALID_RELTIME) && (rt == t));
 }
 
 Datum
@@ -1371,7 +1407,7 @@ tintervallenne(PG_FUNCTION_ARGS)
        PG_RETURN_BOOL(false);
    rt = DatumGetRelativeTime(DirectFunctionCall1(tintervalrel,
                                               TimeIntervalGetDatum(i)));
-   PG_RETURN_BOOL(rt != INVALID_RELTIME && rt != t);
+   PG_RETURN_BOOL((rt != INVALID_RELTIME) && (rt != t));
 }
 
 Datum
@@ -1385,7 +1421,7 @@ tintervallenlt(PG_FUNCTION_ARGS)
        PG_RETURN_BOOL(false);
    rt = DatumGetRelativeTime(DirectFunctionCall1(tintervalrel,
                                               TimeIntervalGetDatum(i)));
-   PG_RETURN_BOOL(rt != INVALID_RELTIME && rt < t);
+   PG_RETURN_BOOL((rt != INVALID_RELTIME) && (rt < t));
 }
 
 Datum
@@ -1399,7 +1435,7 @@ tintervallengt(PG_FUNCTION_ARGS)
        PG_RETURN_BOOL(false);
    rt = DatumGetRelativeTime(DirectFunctionCall1(tintervalrel,
                                               TimeIntervalGetDatum(i)));
-   PG_RETURN_BOOL(rt != INVALID_RELTIME && rt > t);
+   PG_RETURN_BOOL((rt != INVALID_RELTIME) && (rt > t));
 }
 
 Datum
@@ -1413,7 +1449,7 @@ tintervallenle(PG_FUNCTION_ARGS)
        PG_RETURN_BOOL(false);
    rt = DatumGetRelativeTime(DirectFunctionCall1(tintervalrel,
                                               TimeIntervalGetDatum(i)));
-   PG_RETURN_BOOL(rt != INVALID_RELTIME && rt <= t);
+   PG_RETURN_BOOL((rt != INVALID_RELTIME) && (rt <= t));
 }
 
 Datum
@@ -1427,7 +1463,7 @@ tintervallenge(PG_FUNCTION_ARGS)
        PG_RETURN_BOOL(false);
    rt = DatumGetRelativeTime(DirectFunctionCall1(tintervalrel,
                                               TimeIntervalGetDatum(i)));
-   PG_RETURN_BOOL(rt != INVALID_RELTIME && rt >= t);
+   PG_RETURN_BOOL((rt != INVALID_RELTIME) && (rt >= t));
 }
 
 /*
@@ -1463,11 +1499,11 @@ tintervalov(PG_FUNCTION_ARGS)
    if (i1->status == T_INTERVAL_INVAL || i2->status == T_INTERVAL_INVAL)
        PG_RETURN_BOOL(false);
    if (DatumGetBool(DirectFunctionCall2(abstimelt,
-                                      AbsoluteTimeGetDatum(i1->data[1]),
-                                  AbsoluteTimeGetDatum(i2->data[0]))) ||
+                                        AbsoluteTimeGetDatum(i1->data[1]),
+                                        AbsoluteTimeGetDatum(i2->data[0]))) ||
        DatumGetBool(DirectFunctionCall2(abstimegt,
-                                      AbsoluteTimeGetDatum(i1->data[0]),
-                                    AbsoluteTimeGetDatum(i2->data[1]))))
+                                        AbsoluteTimeGetDatum(i1->data[0]),
+                                        AbsoluteTimeGetDatum(i2->data[1]))))
        PG_RETURN_BOOL(false);
    PG_RETURN_BOOL(true);
 }
@@ -1503,222 +1539,6 @@ tintervalend(PG_FUNCTION_ARGS)
  *  PRIVATE ROUTINES                                                        *
  *****************************************************************************/
 
-#ifdef NOT_USED
-/*
- *     isreltime       - returns 1, iff datestring is of type reltime
- *                               2, iff datestring is 'invalid time' identifier
- *                               0, iff datestring contains a syntax error
- *     VALID time  less or equal +/-  `@ 68 years'
- *
- */
-int
-isreltime(char *str)
-{
-   struct tm   tt,
-              *tm = &tt;
-   double      fsec;
-   int         dtype;
-   char       *field[MAXDATEFIELDS];
-   int         nf,
-               ftype[MAXDATEFIELDS];
-   char        lowstr[MAXDATELEN + 1];
-
-   if (!PointerIsValid(str))
-       return 0;
-
-   if (strlen(str) > MAXDATELEN)
-       return 0;
-
-   if ((ParseDateTime(str, lowstr, field, ftype, MAXDATEFIELDS, &nf) != 0)
-       || (DecodeDateDelta(field, ftype, nf, &dtype, tm, &fsec) != 0))
-       return 0;
-
-   switch (dtype)
-   {
-       case (DTK_DELTA):
-           return (abs(tm->tm_year) <= 68) ? 1 : 0;
-           break;
-
-       case (DTK_INVALID):
-           return 2;
-           break;
-
-       default:
-           return 0;
-           break;
-   }
-
-   return 0;
-}  /* isreltime() */
-
-#endif
-
-#ifdef NOT_USED
-int
-dummyfunc()
-{
-   char       *p;
-   char        c;
-   int         i;
-   char        unit[UNITMAXLEN];
-   char        direction[DIRMAXLEN];
-   int         localSign;
-   int         localUnitNumber;
-   long        localQuantity;
-
-   if (!PointerIsValid(sign))
-       sign = &localSign;
-
-   if (!PointerIsValid(unitnr))
-       unitnr = &localUnitNumber;
-
-   if (!PointerIsValid(quantity))
-       quantity = &localQuantity;
-
-   unit[0] = '\0';
-   direction[0] = '\0';
-   p = timestring;
-   /* skip leading blanks */
-   while ((c = *p) != '\0')
-   {
-       if (c != ' ')
-           break;
-       p++;
-   }
-
-   /* Test whether 'invalid time' identifier or not */
-   if (!strncmp(INVALID_RELTIME_STR, p, strlen(INVALID_RELTIME_STR) + 1))
-       return 2;               /* correct 'invalid time' identifier found */
-
-   /* handle label of relative time */
-   if (c != RELTIME_LABEL)
-       return 0;               /* syntax error */
-   c = *++p;
-   if (c != ' ')
-       return 0;               /* syntax error */
-   p++;
-   /* handle the quantity */
-   *quantity = 0;
-   for (;;)
-   {
-       c = *p;
-       if (isdigit((unsigned char) c))
-       {
-           *quantity = *quantity * 10 + (c - '0');
-           p++;
-       }
-       else
-       {
-           if (c == ' ')
-               break;          /* correct quantity found */
-           else
-               return 0;       /* syntax error */
-       }
-   }
-
-   /* handle unit */
-   p++;
-   i = 0;
-   for (;;)
-   {
-       c = *p;
-       if (c >= 'a' && c <= 'z' && i <= (UNITMAXLEN - 1))
-       {
-           unit[i] = c;
-           p++;
-           i++;
-       }
-       else
-       {
-           if ((c == ' ' || c == '\0')
-               && correct_unit(unit, unitnr))
-               break;          /* correct unit found */
-           else
-               return 0;       /* syntax error */
-       }
-   }
-
-   /* handle optional direction */
-   if (c == ' ')
-       p++;
-   i = 0;
-   *sign = 1;
-   for (;;)
-   {
-       c = *p;
-       if (c >= 'a' && c <= 'z' && i <= (DIRMAXLEN - 1))
-       {
-           direction[i] = c;
-           p++;
-           i++;
-       }
-       else
-       {
-           if ((c == ' ' || c == '\0') && i == 0)
-           {
-               *sign = 1;
-               break;          /* no direction specified */
-           }
-           if ((c == ' ' || c == '\0') && i != 0)
-           {
-               direction[i] = '\0';
-               correct_dir(direction, sign);
-               break;          /* correct direction found */
-           }
-           else
-               return 0;       /* syntax error */
-       }
-   }
-
-   return 1;
-}
-
-/*
- *     correct_unit    - returns 1, iff unit is a correct unit description
- *
- *     output parameter:
- *             unptr: points to an integer which is the appropriate unit number
- *                    (see function isreltime())
- */
-static int
-correct_unit(char *unit, int *unptr)
-{
-   int         j = 0;
-
-   while (j < NUNITS)
-   {
-       if (strncmp(unit, unit_tab[j], strlen(unit_tab[j])) == 0)
-       {
-           *unptr = j;
-           return 1;
-       }
-       j++;
-   }
-   return 0;                   /* invalid unit descriptor */
-}
-
-/*
- *     correct_dir     - returns 1, iff direction is a correct identifier
- *
- *     output parameter:
- *             signptr: points to -1 if dir corresponds to past tense
- *                      else  to 1
- */
-static int
-correct_dir(char *direction, int *signptr)
-{
-   *signptr = 1;
-   if (strncmp(RELTIME_PAST, direction, strlen(RELTIME_PAST) + 1) == 0)
-   {
-       *signptr = -1;
-       return 1;
-   }
-   else
-       return 0;               /* invalid direction descriptor */
-}
-
-#endif
-
 /*
  *     istinterval     - returns 1, iff i_string is a valid interval descr.
  *                               0, iff i_string is NOT a valid interval desc.
index 824faae152bf6e6a5e3f7054ebaa48097dd05b66..1bd42689659765e8085467e70dd75d9526683527 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *   $Header: /cvsroot/pgsql/src/backend/utils/adt/timestamp.c,v 1.50 2001/09/06 03:22:42 momjian Exp $
+ *   $Header: /cvsroot/pgsql/src/backend/utils/adt/timestamp.c,v 1.51 2001/09/28 08:09:11 thomas Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -32,7 +32,7 @@
 static double time2t(const int hour, const int min, const double sec);
 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);
+
 
 /*****************************************************************************
  *  USER I/O ROUTINES                                                       *
@@ -63,16 +63,12 @@ timestamp_in(PG_FUNCTION_ARGS)
    switch (dtype)
    {
        case DTK_DATE:
-           if (tm2timestamp(tm, fsec, &tz, &result) != 0)
+           if (tm2timestamp(tm, fsec, NULL, &result) != 0)
                elog(ERROR, "Timestamp out of range '%s'", str);
            break;
 
        case DTK_EPOCH:
-           TIMESTAMP_EPOCH(result);
-           break;
-
-       case DTK_CURRENT:
-           TIMESTAMP_CURRENT(result);
+           result = SetEpochTimestamp();
            break;
 
        case DTK_LATE:
@@ -84,12 +80,13 @@ timestamp_in(PG_FUNCTION_ARGS)
            break;
 
        case DTK_INVALID:
-           TIMESTAMP_INVALID(result);
+           elog(ERROR, "Timestamp '%s' no longer supported", str);
+           TIMESTAMP_NOEND(result);
            break;
 
        default:
-           elog(ERROR, "Internal coding error, can't input timestamp '%s'", str);
-           TIMESTAMP_INVALID(result);  /* keep compiler quiet */
+           elog(ERROR, "Timestamp '%s' not parsed; internal coding error", str);
+           TIMESTAMP_NOEND(result);
    }
 
    PG_RETURN_TIMESTAMP(result);
@@ -103,6 +100,86 @@ timestamp_out(PG_FUNCTION_ARGS)
 {
    Timestamp   dt = PG_GETARG_TIMESTAMP(0);
    char       *result;
+   struct tm   tt,
+              *tm = &tt;
+   double      fsec;
+   char       *tzn = NULL;
+   char        buf[MAXDATELEN + 1];
+
+   if (TIMESTAMP_NOT_FINITE(dt))
+       EncodeSpecialTimestamp(dt, buf);
+   else if (timestamp2tm(dt, NULL, tm, &fsec, NULL) == 0)
+       EncodeDateTime(tm, fsec, NULL, &tzn, DateStyle, buf);
+   else
+       elog(ERROR, "Unable to format timestamp; internal coding error");
+
+   result = pstrdup(buf);
+   PG_RETURN_CSTRING(result);
+}
+
+
+/* timestamptz_in()
+ * Convert a string to internal form.
+ */
+Datum
+timestamptz_in(PG_FUNCTION_ARGS)
+{
+   char       *str = PG_GETARG_CSTRING(0);
+   TimestampTz result;
+   double      fsec;
+   struct tm   tt,
+              *tm = &tt;
+   int         tz;
+   int         dtype;
+   int         nf;
+   char       *field[MAXDATEFIELDS];
+   int         ftype[MAXDATEFIELDS];
+   char        lowstr[MAXDATELEN + 1];
+
+   if ((ParseDateTime(str, lowstr, field, ftype, MAXDATEFIELDS, &nf) != 0)
+     || (DecodeDateTime(field, ftype, nf, &dtype, tm, &fsec, &tz) != 0))
+       elog(ERROR, "Bad timestamp external representation '%s'", str);
+
+   switch (dtype)
+   {
+       case DTK_DATE:
+           if (tm2timestamp(tm, fsec, &tz, &result) != 0)
+               elog(ERROR, "Timestamp out of range '%s'", str);
+           break;
+
+       case DTK_EPOCH:
+           result = SetEpochTimestamp();
+           break;
+
+       case DTK_LATE:
+           TIMESTAMP_NOEND(result);
+           break;
+
+       case DTK_EARLY:
+           TIMESTAMP_NOBEGIN(result);
+           break;
+
+       case DTK_INVALID:
+           elog(ERROR, "Timestamp with time zone '%s' no longer supported", str);
+           TIMESTAMP_NOEND(result);
+           break;
+
+       default:
+           elog(ERROR, "Timestamp with time zone '%s' not parsed; internal coding error", str);
+           TIMESTAMP_NOEND(result);
+   }
+
+   PG_RETURN_TIMESTAMPTZ(result);
+}
+
+/* timestamptz_out()
+ * Convert a timestamp to external form.
+ */
+Datum
+timestamptz_out(PG_FUNCTION_ARGS)
+{
+   TimestampTz dt = PG_GETARG_TIMESTAMP(0);
+   char       *result;
    int         tz;
    struct tm   tt,
               *tm = &tt;
@@ -110,12 +187,12 @@ timestamp_out(PG_FUNCTION_ARGS)
    char       *tzn;
    char        buf[MAXDATELEN + 1];
 
-   if (TIMESTAMP_IS_RESERVED(dt))
+   if (TIMESTAMP_NOT_FINITE(dt))
        EncodeSpecialTimestamp(dt, buf);
    else if (timestamp2tm(dt, &tz, tm, &fsec, &tzn) == 0)
        EncodeDateTime(tm, fsec, &tz, &tzn, DateStyle, buf);
    else
-       EncodeSpecialTimestamp(DT_INVALID, buf);
+       elog(ERROR, "Unable to format timestamp with time zone; internal coding error");
 
    result = pstrdup(buf);
    PG_RETURN_CSTRING(result);
@@ -132,7 +209,7 @@ Datum
 interval_in(PG_FUNCTION_ARGS)
 {
    char       *str = PG_GETARG_CSTRING(0);
-   Interval   *span;
+   Interval   *result;
    double      fsec;
    struct tm   tt,
               *tm = &tt;
@@ -154,25 +231,24 @@ interval_in(PG_FUNCTION_ARGS)
        || (DecodeDateDelta(field, ftype, nf, &dtype, tm, &fsec) != 0))
        elog(ERROR, "Bad interval external representation '%s'", str);
 
-   span = (Interval *) palloc(sizeof(Interval));
+   result = (Interval *) palloc(sizeof(Interval));
 
    switch (dtype)
    {
        case DTK_DELTA:
-           if (tm2interval(tm, fsec, span) != 0)
-           {
-#if NOT_USED
-               INTERVAL_INVALID(span);
-#endif
+           if (tm2interval(tm, fsec, result) != 0)
                elog(ERROR, "Bad interval external representation '%s'", str);
-           }
+           break;
+
+       case DTK_INVALID:
+           elog(ERROR, "Interval '%s' no longer supported", str);
            break;
 
        default:
-           elog(ERROR, "Internal coding error, can't input interval '%s'", str);
+           elog(ERROR, "Interval '%s' not parsed; internal coding error", str);
    }
 
-   PG_RETURN_INTERVAL_P(span);
+   PG_RETURN_INTERVAL_P(result);
 }
 
 /* interval_out()
@@ -189,10 +265,10 @@ interval_out(PG_FUNCTION_ARGS)
    char        buf[MAXDATELEN + 1];
 
    if (interval2tm(*span, tm, &fsec) != 0)
-       PG_RETURN_NULL();
+       elog(ERROR, "Unable to encode interval; internal coding error");
 
    if (EncodeTimeSpan(tm, fsec, DateStyle, buf) != 0)
-       elog(ERROR, "Unable to format interval");
+       elog(ERROR, "Unable to format interval; internal coding error");
 
    result = pstrdup(buf);
    PG_RETURN_CSTRING(result);
@@ -205,40 +281,31 @@ interval_out(PG_FUNCTION_ARGS)
 static int
 EncodeSpecialTimestamp(Timestamp dt, char *str)
 {
-   if (TIMESTAMP_IS_RESERVED(dt))
-   {
-       if (TIMESTAMP_IS_INVALID(dt))
-           strcpy(str, INVALID);
-       else if (TIMESTAMP_IS_NOBEGIN(dt))
-           strcpy(str, EARLY);
-       else if (TIMESTAMP_IS_NOEND(dt))
-           strcpy(str, LATE);
-       else if (TIMESTAMP_IS_CURRENT(dt))
-           strcpy(str, DCURRENT);
-       else if (TIMESTAMP_IS_EPOCH(dt))
-           strcpy(str, EPOCH);
-       else
-           strcpy(str, INVALID);
-       return TRUE;
-   }
+   if (TIMESTAMP_IS_NOBEGIN(dt))
+       strcpy(str, EARLY);
+   else if (TIMESTAMP_IS_NOEND(dt))
+       strcpy(str, LATE);
+   else
+       return FALSE;
 
-   return FALSE;
+   return TRUE;
 }  /* EncodeSpecialTimestamp() */
 
 Datum
 now(PG_FUNCTION_ARGS)
 {
-   Timestamp   result;
+   TimestampTz result;
    AbsoluteTime sec;
+   int         usec;
 
-   sec = GetCurrentTransactionStartTime();
+   sec = GetCurrentTransactionStartTimeUsec(&usec);
 
-   result = (sec - ((date2j(2000, 1, 1) - date2j(1970, 1, 1)) * 86400));
+   result = (sec + (usec * 1.0e-6) - ((date2j(2000, 1, 1) - date2j(1970, 1, 1)) * 86400));
 
-   PG_RETURN_TIMESTAMP(result);
+   PG_RETURN_TIMESTAMPTZ(result);
 }
 
-static void
+void
 dt2time(Timestamp jd, int *hour, int *min, double *sec)
 {
    double      time;
@@ -485,9 +552,7 @@ timestamp_finite(PG_FUNCTION_ARGS)
 Datum
 interval_finite(PG_FUNCTION_ARGS)
 {
-   Interval   *interval = PG_GETARG_INTERVAL_P(0);
-
-   PG_RETURN_BOOL(!INTERVAL_NOT_FINITE(*interval));
+   PG_RETURN_BOOL(true);
 }
 
 
@@ -495,7 +560,7 @@ interval_finite(PG_FUNCTION_ARGS)
  * Relational operators for timestamp.
  *---------------------------------------------------------*/
 
-static void
+void
 GetEpochTime(struct tm * tm)
 {
    struct tm  *t0;
@@ -518,24 +583,17 @@ GetEpochTime(struct tm * tm)
 }  /* GetEpochTime() */
 
 Timestamp
-SetTimestamp(Timestamp dt)
+SetEpochTimestamp(void)
 {
-   struct tm   tt;
+   Timestamp   dt;
+   struct tm   tt,
+              *tm = &tt;
 
-   if (TIMESTAMP_IS_CURRENT(dt))
-   {
-       GetCurrentTime(&tt);
-       tm2timestamp(&tt, 0, NULL, &dt);
-       dt = dt2local(dt, -CTimeZone);
-   }
-   else
-   {                           /* if (TIMESTAMP_IS_EPOCH(dt1)) */
-       GetEpochTime(&tt);
-       tm2timestamp(&tt, 0, NULL, &dt);
-   }
+   GetEpochTime(tm);
+   tm2timestamp(tm, 0, NULL, &dt);
 
    return dt;
-}  /* SetTimestamp() */
+}  /* SetEpochTimestamp() */
 
 /*
  *     timestamp_relop - is timestamp1 relop timestamp2
@@ -545,19 +603,7 @@ SetTimestamp(Timestamp dt)
 static int
 timestamp_cmp_internal(Timestamp dt1, Timestamp dt2)
 {
-   if (TIMESTAMP_IS_INVALID(dt1))
-       return (TIMESTAMP_IS_INVALID(dt2) ? 0 : 1);
-   else if (TIMESTAMP_IS_INVALID(dt2))
-       return -1;
-   else
-   {
-       if (TIMESTAMP_IS_RELATIVE(dt1))
-           dt1 = SetTimestamp(dt1);
-       if (TIMESTAMP_IS_RELATIVE(dt2))
-           dt2 = SetTimestamp(dt2);
-
-       return ((dt1 < dt2) ? -1 : ((dt1 > dt2) ? 1 : 0));
-   }
+   return ((dt1 < dt2) ? -1 : ((dt1 > dt2) ? 1 : 0));
 }
 
 Datum
@@ -632,24 +678,17 @@ timestamp_cmp(PG_FUNCTION_ARGS)
 static int
 interval_cmp_internal(Interval *interval1, Interval *interval2)
 {
-   if (INTERVAL_IS_INVALID(*interval1))
-       return (INTERVAL_IS_INVALID(*interval2) ? 0 : 1);
-   else if (INTERVAL_IS_INVALID(*interval2))
-       return -1;
-   else
-   {
-       double      span1,
-                   span2;
+   double      span1,
+               span2;
 
-       span1 = interval1->time;
-       if (interval1->month != 0)
-           span1 += (interval1->month * (30.0 * 86400));
-       span2 = interval2->time;
-       if (interval2->month != 0)
-           span2 += (interval2->month * (30.0 * 86400));
+   span1 = interval1->time;
+   if (interval1->month != 0)
+       span1 += (interval1->month * (30.0 * 86400));
+   span2 = interval2->time;
+   if (interval2->month != 0)
+       span2 += (interval2->month * (30.0 * 86400));
 
-       return ((span1 < span2) ? -1 : (span1 > span2) ? 1 : 0);
-   }
+   return ((span1 < span2) ? -1 : (span1 > span2) ? 1 : 0);
 }
 
 Datum
@@ -866,6 +905,9 @@ overlaps_timestamp(PG_FUNCTION_ARGS)
  * "Arithmetic" operators on date/times.
  *---------------------------------------------------------*/
 
+/* We are currently sharing some code between timestamp and timestamptz.
+ * The comparison functions are among them. - thomas 2001-09-25
+ */
 Datum
 timestamp_smaller(PG_FUNCTION_ARGS)
 {
@@ -873,17 +915,7 @@ timestamp_smaller(PG_FUNCTION_ARGS)
    Timestamp   dt2 = PG_GETARG_TIMESTAMP(1);
    Timestamp   result;
 
-   if (TIMESTAMP_IS_RELATIVE(dt1))
-       dt1 = SetTimestamp(dt1);
-   if (TIMESTAMP_IS_RELATIVE(dt2))
-       dt2 = SetTimestamp(dt2);
-
-   if (TIMESTAMP_IS_INVALID(dt1))
-       result = dt2;
-   else if (TIMESTAMP_IS_INVALID(dt2))
-       result = dt1;
-   else
-       result = ((dt2 < dt1) ? dt2 : dt1);
+   result = ((dt2 < dt1) ? dt2 : dt1);
 
    PG_RETURN_TIMESTAMP(result);
 }
@@ -895,17 +927,7 @@ timestamp_larger(PG_FUNCTION_ARGS)
    Timestamp   dt2 = PG_GETARG_TIMESTAMP(1);
    Timestamp   result;
 
-   if (TIMESTAMP_IS_RELATIVE(dt1))
-       dt1 = SetTimestamp(dt1);
-   if (TIMESTAMP_IS_RELATIVE(dt2))
-       dt2 = SetTimestamp(dt2);
-
-   if (TIMESTAMP_IS_INVALID(dt1))
-       result = dt2;
-   else if (TIMESTAMP_IS_INVALID(dt2))
-       result = dt1;
-   else
-       result = ((dt2 > dt1) ? dt2 : dt1);
+   result = ((dt2 > dt1) ? dt2 : dt1);
 
    PG_RETURN_TIMESTAMP(result);
 }
@@ -920,16 +942,14 @@ timestamp_mi(PG_FUNCTION_ARGS)
 
    result = (Interval *) palloc(sizeof(Interval));
 
-   if (TIMESTAMP_IS_RELATIVE(dt1))
-       dt1 = SetTimestamp(dt1);
-   if (TIMESTAMP_IS_RELATIVE(dt2))
-       dt2 = SetTimestamp(dt2);
-
-   if (TIMESTAMP_IS_INVALID(dt1)
-       || TIMESTAMP_IS_INVALID(dt2))
-       TIMESTAMP_INVALID(result->time);
+   if (TIMESTAMP_NOT_FINITE(dt1) || TIMESTAMP_NOT_FINITE(dt2))
+   {
+       elog(ERROR, "Unable to subtract non-finite timestamps");
+       result->time = 0;
+   }
    else
        result->time = JROUND(dt1 - dt2);
+
    result->month = 0;
 
    PG_RETURN_INTERVAL_P(result);
@@ -951,25 +971,111 @@ timestamp_pl_span(PG_FUNCTION_ARGS)
    Timestamp   timestamp = PG_GETARG_TIMESTAMP(0);
    Interval   *span = PG_GETARG_INTERVAL_P(1);
    Timestamp   result;
-   Timestamp   dt;
+
+   if (TIMESTAMP_NOT_FINITE(timestamp))
+   {
+       result = timestamp;
+   }
+   else
+   {
+       if (span->month != 0)
+       {
+           struct tm   tt,
+                      *tm = &tt;
+           double      fsec;
+
+           if (timestamp2tm(timestamp, NULL, tm, &fsec, NULL) == 0)
+           {
+               tm->tm_mon += span->month;
+               if (tm->tm_mon > 12)
+               {
+                   tm->tm_year += ((tm->tm_mon - 1) / 12);
+                   tm->tm_mon = (((tm->tm_mon - 1) % 12) + 1);
+               }
+               else if (tm->tm_mon < 1)
+               {
+                   tm->tm_year += ((tm->tm_mon / 12) - 1);
+                   tm->tm_mon = ((tm->tm_mon % 12) + 12);
+               }
+
+               /* adjust for end of month boundary problems... */
+               if (tm->tm_mday > day_tab[isleap(tm->tm_year)][tm->tm_mon - 1])
+                   tm->tm_mday = (day_tab[isleap(tm->tm_year)][tm->tm_mon - 1]);
+
+               if (tm2timestamp(tm, fsec, NULL, ×tamp) != 0)
+               {
+                   elog(ERROR, "Unable to add timestamp and interval"
+                        "\n\ttimestamp_pl_span() internal error encoding timestamp");
+                   PG_RETURN_NULL();
+               }
+           }
+           else
+           {
+               elog(ERROR, "Unable to add timestamp and interval"
+                    "\n\ttimestamp_pl_span() internal error decoding timestamp");
+               PG_RETURN_NULL();
+           }
+       }
+
+#ifdef ROUND_ALL
+       timestamp = JROUND(timestamp + span->time);
+#else
+       timestamp += span->time;
+#endif
+
+       result = timestamp;
+   }
+
+   PG_RETURN_TIMESTAMP(result);
+}
+
+Datum
+timestamp_mi_span(PG_FUNCTION_ARGS)
+{
+   Timestamp   timestamp = PG_GETARG_TIMESTAMP(0);
+   Interval   *span = PG_GETARG_INTERVAL_P(1);
+   Interval    tspan;
+
+   tspan.month = -span->month;
+   tspan.time = -span->time;
+
+   return DirectFunctionCall2(timestamp_pl_span,
+                              TimestampGetDatum(timestamp),
+                              PointerGetDatum(&tspan));
+}
+
+
+/* timestamp_pl_span()
+ * Add a interval to a timestamp with time zone data type.
+ * Note that interval has provisions for qualitative year/month
+ * units, so try to do the right thing with them.
+ * To add a month, increment the month, and use the same day of month.
+ * Then, if the next month has fewer days, set the day of month
+ * to the last day of month.
+ * Lastly, add in the "quantitative time".
+ */
+Datum
+timestamptz_pl_span(PG_FUNCTION_ARGS)
+{
+   TimestampTz timestamp = PG_GETARG_TIMESTAMP(0);
+   Interval   *span = PG_GETARG_INTERVAL_P(1);
+   TimestampTz result;
    int         tz;
    char       *tzn;
 
    if (TIMESTAMP_NOT_FINITE(timestamp))
+   {
        result = timestamp;
-   else if (INTERVAL_IS_INVALID(*span))
-       TIMESTAMP_INVALID(result);
+   }
    else
    {
-       dt = (TIMESTAMP_IS_RELATIVE(timestamp) ? SetTimestamp(timestamp) : timestamp);
-
        if (span->month != 0)
        {
            struct tm   tt,
                       *tm = &tt;
            double      fsec;
 
-           if (timestamp2tm(dt, &tz, tm, &fsec, &tzn) == 0)
+           if (timestamp2tm(timestamp, &tz, tm, &fsec, &tzn) == 0)
            {
                tm->tm_mon += span->month;
                if (tm->tm_mon > 12)
@@ -989,30 +1095,33 @@ timestamp_pl_span(PG_FUNCTION_ARGS)
 
                tz = DetermineLocalTimeZone(tm);
 
-               if (tm2timestamp(tm, fsec, &tz, &dt) != 0)
-                   elog(ERROR, "Unable to add timestamp and interval");
-
+               if (tm2timestamp(tm, fsec, &tz, &timestamp) != 0)
+                   elog(ERROR, "Unable to add timestamp and interval"
+                       "\n\ttimestamptz_pl_span() internal error encoding timestamp");
            }
            else
-               TIMESTAMP_INVALID(dt);
+           {
+               elog(ERROR, "Unable to add timestamp and interval"
+                    "\n\ttimestamptz_pl_span() internal error decoding timestamp");
+           }
        }
 
 #ifdef ROUND_ALL
-       dt = JROUND(dt + span->time);
+       timestamp = JROUND(timestamp + span->time);
 #else
-       dt += span->time;
+       timestamp += span->time;
 #endif
 
-       result = dt;
+       result = timestamp;
    }
 
    PG_RETURN_TIMESTAMP(result);
 }
 
 Datum
-timestamp_mi_span(PG_FUNCTION_ARGS)
+timestamptz_mi_span(PG_FUNCTION_ARGS)
 {
-   Timestamp   timestamp = PG_GETARG_TIMESTAMP(0);
+   TimestampTz timestamp = PG_GETARG_TIMESTAMP(0);
    Interval   *span = PG_GETARG_INTERVAL_P(1);
    Interval    tspan;
 
@@ -1051,36 +1160,23 @@ interval_smaller(PG_FUNCTION_ARGS)
 
    result = (Interval *) palloc(sizeof(Interval));
 
-   if (INTERVAL_IS_INVALID(*interval1))
+   span1 = interval1->time;
+   if (interval1->month != 0)
+       span1 += (interval1->month * (30.0 * 86400));
+   span2 = interval2->time;
+   if (interval2->month != 0)
+       span2 += (interval2->month * (30.0 * 86400));
+
+   if (span2 < span1)
    {
        result->time = interval2->time;
        result->month = interval2->month;
    }
-   else if (INTERVAL_IS_INVALID(*interval2))
+   else
    {
        result->time = interval1->time;
        result->month = interval1->month;
    }
-   else
-   {
-       span1 = interval1->time;
-       if (interval1->month != 0)
-           span1 += (interval1->month * (30.0 * 86400));
-       span2 = interval2->time;
-       if (interval2->month != 0)
-           span2 += (interval2->month * (30.0 * 86400));
-
-       if (span2 < span1)
-       {
-           result->time = interval2->time;
-           result->month = interval2->month;
-       }
-       else
-       {
-           result->time = interval1->time;
-           result->month = interval1->month;
-       }
-   }
 
    PG_RETURN_INTERVAL_P(result);
 }
@@ -1096,36 +1192,23 @@ interval_larger(PG_FUNCTION_ARGS)
 
    result = (Interval *) palloc(sizeof(Interval));
 
-   if (INTERVAL_IS_INVALID(*interval1))
+   span1 = interval1->time;
+   if (interval1->month != 0)
+       span1 += (interval1->month * (30.0 * 86400));
+   span2 = interval2->time;
+   if (interval2->month != 0)
+       span2 += (interval2->month * (30.0 * 86400));
+
+   if (span2 > span1)
    {
        result->time = interval2->time;
        result->month = interval2->month;
    }
-   else if (INTERVAL_IS_INVALID(*interval2))
+   else
    {
        result->time = interval1->time;
        result->month = interval1->month;
    }
-   else
-   {
-       span1 = interval1->time;
-       if (interval1->month != 0)
-           span1 += (interval1->month * (30.0 * 86400));
-       span2 = interval2->time;
-       if (interval2->month != 0)
-           span2 += (interval2->month * (30.0 * 86400));
-
-       if (span2 > span1)
-       {
-           result->time = interval2->time;
-           result->month = interval2->month;
-       }
-       else
-       {
-           result->time = interval1->time;
-           result->month = interval1->month;
-       }
-   }
 
    PG_RETURN_INTERVAL_P(result);
 }
@@ -1200,7 +1283,7 @@ interval_div(PG_FUNCTION_ARGS)
    result = (Interval *) palloc(sizeof(Interval));
 
    if (factor == 0.0)
-       elog(ERROR, "interval_div:  divide by 0.0 error");
+       elog(ERROR, "interval_div: divide by 0.0 error");
 
    months = (span1->month / factor);
    result->month = rint(months);
@@ -1321,16 +1404,8 @@ timestamp_age(PG_FUNCTION_ARGS)
 
    result = (Interval *) palloc(sizeof(Interval));
 
-   if (TIMESTAMP_IS_RELATIVE(dt1))
-       dt1 = SetTimestamp(dt1);
-   if (TIMESTAMP_IS_RELATIVE(dt2))
-       dt2 = SetTimestamp(dt2);
-
-   if (TIMESTAMP_IS_INVALID(dt1)
-       || TIMESTAMP_IS_INVALID(dt2))
-       TIMESTAMP_INVALID(result->time);
-   else if ((timestamp2tm(dt1, NULL, tm1, &fsec1, NULL) == 0)
-            && (timestamp2tm(dt2, NULL, tm2, &fsec2, NULL) == 0))
+   if ((timestamp2tm(dt1, NULL, tm1, &fsec1, NULL) == 0)
+       && (timestamp2tm(dt2, NULL, tm2, &fsec2, NULL) == 0))
    {
        fsec = (fsec1 - fsec2);
        tm->tm_sec = (tm1->tm_sec - tm2->tm_sec);
@@ -1403,31 +1478,140 @@ timestamp_age(PG_FUNCTION_ARGS)
        }
 
        if (tm2interval(tm, fsec, result) != 0)
-           elog(ERROR, "Unable to decode timestamp");
+           elog(ERROR, "Unable to encode interval"
+                "\n\ttimestamp_age() internal coding error");
    }
    else
-       elog(ERROR, "Unable to decode timestamp");
+       elog(ERROR, "Unable to decode timestamp"
+            "\n\ttimestamp_age() internal coding error");
 
    PG_RETURN_INTERVAL_P(result);
 }
 
 
-/*----------------------------------------------------------
- * Conversion operators.
- *---------------------------------------------------------*/
-
-
-/* timestamp_text()
- * Convert timestamp to text data type.
+/* timestamptz_age()
+ * Calculate time difference while retaining year/month fields.
+ * Note that this does not result in an accurate absolute time span
+ * since year and month are out of context once the arithmetic
+ * is done.
  */
 Datum
-timestamp_text(PG_FUNCTION_ARGS)
+timestamptz_age(PG_FUNCTION_ARGS)
 {
-   /* Input is a Timestamp, but may as well leave it in Datum form */
-   Datum       timestamp = PG_GETARG_DATUM(0);
-   text       *result;
-   char       *str;
-   int         len;
+   TimestampTz dt1 = PG_GETARG_TIMESTAMP(0);
+   TimestampTz dt2 = PG_GETARG_TIMESTAMP(1);
+   Interval   *result;
+   double      fsec,
+               fsec1,
+               fsec2;
+   struct tm   tt,
+              *tm = &tt;
+   struct tm   tt1,
+              *tm1 = &tt1;
+   struct tm   tt2,
+              *tm2 = &tt2;
+
+   result = (Interval *) palloc(sizeof(Interval));
+
+   if ((timestamp2tm(dt1, NULL, tm1, &fsec1, NULL) == 0)
+       && (timestamp2tm(dt2, NULL, tm2, &fsec2, NULL) == 0))
+   {
+       fsec = (fsec1 - fsec2);
+       tm->tm_sec = (tm1->tm_sec - tm2->tm_sec);
+       tm->tm_min = (tm1->tm_min - tm2->tm_min);
+       tm->tm_hour = (tm1->tm_hour - tm2->tm_hour);
+       tm->tm_mday = (tm1->tm_mday - tm2->tm_mday);
+       tm->tm_mon = (tm1->tm_mon - tm2->tm_mon);
+       tm->tm_year = (tm1->tm_year - tm2->tm_year);
+
+       /* flip sign if necessary... */
+       if (dt1 < dt2)
+       {
+           fsec = -fsec;
+           tm->tm_sec = -tm->tm_sec;
+           tm->tm_min = -tm->tm_min;
+           tm->tm_hour = -tm->tm_hour;
+           tm->tm_mday = -tm->tm_mday;
+           tm->tm_mon = -tm->tm_mon;
+           tm->tm_year = -tm->tm_year;
+       }
+
+       if (tm->tm_sec < 0)
+       {
+           tm->tm_sec += 60;
+           tm->tm_min--;
+       }
+
+       if (tm->tm_min < 0)
+       {
+           tm->tm_min += 60;
+           tm->tm_hour--;
+       }
+
+       if (tm->tm_hour < 0)
+       {
+           tm->tm_hour += 24;
+           tm->tm_mday--;
+       }
+
+       if (tm->tm_mday < 0)
+       {
+           if (dt1 < dt2)
+           {
+               tm->tm_mday += day_tab[isleap(tm1->tm_year)][tm1->tm_mon - 1];
+               tm->tm_mon--;
+           }
+           else
+           {
+               tm->tm_mday += day_tab[isleap(tm2->tm_year)][tm2->tm_mon - 1];
+               tm->tm_mon--;
+           }
+       }
+
+       if (tm->tm_mon < 0)
+       {
+           tm->tm_mon += 12;
+           tm->tm_year--;
+       }
+
+       /* recover sign if necessary... */
+       if (dt1 < dt2)
+       {
+           fsec = -fsec;
+           tm->tm_sec = -tm->tm_sec;
+           tm->tm_min = -tm->tm_min;
+           tm->tm_hour = -tm->tm_hour;
+           tm->tm_mday = -tm->tm_mday;
+           tm->tm_mon = -tm->tm_mon;
+           tm->tm_year = -tm->tm_year;
+       }
+
+       if (tm2interval(tm, fsec, result) != 0)
+           elog(ERROR, "Unable to decode timestamp");
+   }
+   else
+       elog(ERROR, "Unable to decode timestamp");
+
+   PG_RETURN_INTERVAL_P(result);
+}
+
+
+/*----------------------------------------------------------
+ * Conversion operators.
+ *---------------------------------------------------------*/
+
+
+/* timestamp_text()
+ * Convert timestamp to text data type.
+ */
+Datum
+timestamp_text(PG_FUNCTION_ARGS)
+{
+   /* Input is a Timestamp, but may as well leave it in Datum form */
+   Datum       timestamp = PG_GETARG_DATUM(0);
+   text       *result;
+   char       *str;
+   int         len;
 
    str = DatumGetCString(DirectFunctionCall1(timestamp_out, timestamp));
 
@@ -1472,6 +1656,60 @@ text_timestamp(PG_FUNCTION_ARGS)
 }
 
 
+/* timestamptz_text()
+ * Convert timestamp with time zone to text data type.
+ */
+Datum
+timestamptz_text(PG_FUNCTION_ARGS)
+{
+   /* Input is a Timestamp, but may as well leave it in Datum form */
+   Datum       timestamp = PG_GETARG_DATUM(0);
+   text       *result;
+   char       *str;
+   int         len;
+
+   str = DatumGetCString(DirectFunctionCall1(timestamptz_out, timestamp));
+
+   len = (strlen(str) + VARHDRSZ);
+
+   result = palloc(len);
+
+   VARATT_SIZEP(result) = len;
+   memmove(VARDATA(result), str, (len - VARHDRSZ));
+
+   pfree(str);
+
+   PG_RETURN_TEXT_P(result);
+}
+
+/* text_timestamptz()
+ * Convert text string to timestamp with time zone.
+ * Text type is not null terminated, so use temporary string
+ * then call the standard input routine.
+ */
+Datum
+text_timestamptz(PG_FUNCTION_ARGS)
+{
+   text       *str = PG_GETARG_TEXT_P(0);
+   int         i;
+   char       *sp,
+              *dp,
+               dstr[MAXDATELEN + 1];
+
+   if (VARSIZE(str) - VARHDRSZ > MAXDATELEN)
+       elog(ERROR, "Bad timestamp with time zone external representation (too long)");
+
+   sp = VARDATA(str);
+   dp = dstr;
+   for (i = 0; i < (VARSIZE(str) - VARHDRSZ); i++)
+       *dp++ = *sp++;
+   *dp = '\0';
+
+   return DirectFunctionCall1(timestamptz_in,
+                              CStringGetDatum(dstr));
+}
+
+
 /* interval_text()
  * Convert interval to text data type.
  */
@@ -1484,7 +1722,7 @@ interval_text(PG_FUNCTION_ARGS)
    int         len;
 
    str = DatumGetCString(DirectFunctionCall1(interval_out,
-                                          IntervalPGetDatum(interval)));
+                                             IntervalPGetDatum(interval)));
 
    len = (strlen(str) + VARHDRSZ);
 
@@ -1525,7 +1763,7 @@ text_interval(PG_FUNCTION_ARGS)
 }
 
 /* timestamp_trunc()
- * Extract specified field from timestamp.
+ * Truncate timestamp to specified units.
  */
 Datum
 timestamp_trunc(PG_FUNCTION_ARGS)
@@ -1533,8 +1771,6 @@ timestamp_trunc(PG_FUNCTION_ARGS)
    text       *units = PG_GETARG_TEXT_P(0);
    Timestamp   timestamp = PG_GETARG_TIMESTAMP(1);
    Timestamp   result;
-   Timestamp   dt;
-   int         tz;
    int         type,
                val;
    int         i;
@@ -1542,7 +1778,6 @@ timestamp_trunc(PG_FUNCTION_ARGS)
               *lp,
                lowunits[MAXDATELEN + 1];
    double      fsec;
-   char       *tzn;
    struct tm   tt,
               *tm = &tt;
 
@@ -1559,70 +1794,146 @@ timestamp_trunc(PG_FUNCTION_ARGS)
    type = DecodeUnits(0, lowunits, &val);
 
    if (TIMESTAMP_NOT_FINITE(timestamp))
-       PG_RETURN_NULL();
+       PG_RETURN_TIMESTAMP(timestamp);
+
+   if ((type == UNITS) && (timestamp2tm(timestamp, NULL, tm, &fsec, NULL) == 0))
+   {
+       switch (val)
+       {
+           case DTK_MILLENNIUM:
+               tm->tm_year = (tm->tm_year / 1000) * 1000;
+           case DTK_CENTURY:
+               tm->tm_year = (tm->tm_year / 100) * 100;
+           case DTK_DECADE:
+               tm->tm_year = (tm->tm_year / 10) * 10;
+           case DTK_YEAR:
+               tm->tm_mon = 1;
+           case DTK_QUARTER:
+               tm->tm_mon = (3 * (tm->tm_mon / 4)) + 1;
+           case DTK_MONTH:
+               tm->tm_mday = 1;
+           case DTK_DAY:
+               tm->tm_hour = 0;
+           case DTK_HOUR:
+               tm->tm_min = 0;
+           case DTK_MINUTE:
+               tm->tm_sec = 0;
+           case DTK_SECOND:
+               fsec = 0;
+               break;
+
+           case DTK_MILLISEC:
+               fsec = rint(fsec * 1000) / 1000;
+               break;
+
+           case DTK_MICROSEC:
+               fsec = rint(fsec * 1000000) / 1000000;
+               break;
+
+           default:
+               elog(ERROR, "Timestamp units '%s' not supported", lowunits);
+               result = 0;
+       }
+
+       if (tm2timestamp(tm, fsec, NULL, &result) != 0)
+           elog(ERROR, "Unable to truncate timestamp to '%s'", lowunits);
+   }
    else
    {
-       dt = (TIMESTAMP_IS_RELATIVE(timestamp) ? SetTimestamp(timestamp) : timestamp);
+       elog(ERROR, "Timestamp units '%s' not recognized", lowunits);
+       result = 0;
+   }
 
-       if ((type == UNITS) && (timestamp2tm(dt, &tz, tm, &fsec, &tzn) == 0))
-       {
-           switch (val)
-           {
-               case DTK_MILLENNIUM:
-                   tm->tm_year = (tm->tm_year / 1000) * 1000;
-               case DTK_CENTURY:
-                   tm->tm_year = (tm->tm_year / 100) * 100;
-               case DTK_DECADE:
-                   tm->tm_year = (tm->tm_year / 10) * 10;
-               case DTK_YEAR:
-                   tm->tm_mon = 1;
-               case DTK_QUARTER:
-                   tm->tm_mon = (3 * (tm->tm_mon / 4)) + 1;
-               case DTK_MONTH:
-                   tm->tm_mday = 1;
-               case DTK_DAY:
-                   tm->tm_hour = 0;
-               case DTK_HOUR:
-                   tm->tm_min = 0;
-               case DTK_MINUTE:
-                   tm->tm_sec = 0;
-               case DTK_SECOND:
-                   fsec = 0;
-                   break;
+   PG_RETURN_TIMESTAMP(result);
+}
 
-               case DTK_MILLISEC:
-                   fsec = rint(fsec * 1000) / 1000;
-                   break;
+/* timestamptz_trunc()
+ * Truncate timestamp to specified units.
+ */
+Datum
+timestamptz_trunc(PG_FUNCTION_ARGS)
+{
+   text       *units = PG_GETARG_TEXT_P(0);
+   TimestampTz timestamp = PG_GETARG_TIMESTAMP(1);
+   TimestampTz result;
+   int         tz;
+   int         type,
+               val;
+   int         i;
+   char       *up,
+              *lp,
+               lowunits[MAXDATELEN + 1];
+   double      fsec;
+   char       *tzn;
+   struct tm   tt,
+              *tm = &tt;
 
-               case DTK_MICROSEC:
-                   fsec = rint(fsec * 1000000) / 1000000;
-                   break;
+   if (VARSIZE(units) - VARHDRSZ > MAXDATELEN)
+       elog(ERROR, "Interval units '%s' not recognized",
+            DatumGetCString(DirectFunctionCall1(textout,
+                                              PointerGetDatum(units))));
+   up = VARDATA(units);
+   lp = lowunits;
+   for (i = 0; i < (VARSIZE(units) - VARHDRSZ); i++)
+       *lp++ = tolower((unsigned char) *up++);
+   *lp = '\0';
 
-               default:
-                   elog(ERROR, "Timestamp units '%s' not supported", lowunits);
-                   result = 0;
-           }
+   type = DecodeUnits(0, lowunits, &val);
 
-           tz = DetermineLocalTimeZone(tm);
+   if (TIMESTAMP_NOT_FINITE(timestamp))
+       PG_RETURN_TIMESTAMPTZ(timestamp);
 
-           if (tm2timestamp(tm, fsec, &tz, &result) != 0)
-               elog(ERROR, "Unable to truncate timestamp to '%s'", lowunits);
-       }
-#if NOT_USED
-       else if ((type == RESERV) && (val == DTK_EPOCH))
-       {
-           TIMESTAMP_EPOCH(result);
-           result = dt - SetTimestamp(result);
-       }
-#endif
-       else
+   if ((type == UNITS) && (timestamp2tm(timestamp, &tz, tm, &fsec, &tzn) == 0))
+   {
+       switch (val)
        {
-           elog(ERROR, "Timestamp units '%s' not recognized", lowunits);
-           result = 0;
+           case DTK_MILLENNIUM:
+               tm->tm_year = (tm->tm_year / 1000) * 1000;
+           case DTK_CENTURY:
+               tm->tm_year = (tm->tm_year / 100) * 100;
+           case DTK_DECADE:
+               tm->tm_year = (tm->tm_year / 10) * 10;
+           case DTK_YEAR:
+               tm->tm_mon = 1;
+           case DTK_QUARTER:
+               tm->tm_mon = (3 * (tm->tm_mon / 4)) + 1;
+           case DTK_MONTH:
+               tm->tm_mday = 1;
+           case DTK_DAY:
+               tm->tm_hour = 0;
+           case DTK_HOUR:
+               tm->tm_min = 0;
+           case DTK_MINUTE:
+               tm->tm_sec = 0;
+           case DTK_SECOND:
+               fsec = 0;
+               break;
+
+           case DTK_MILLISEC:
+               fsec = rint(fsec * 1000) / 1000;
+               break;
+
+           case DTK_MICROSEC:
+               fsec = rint(fsec * 1000000) / 1000000;
+               break;
+
+           default:
+               elog(ERROR, "Timestamp units '%s' not supported", lowunits);
+               result = 0;
        }
+
+       tz = DetermineLocalTimeZone(tm);
+
+       if (tm2timestamp(tm, fsec, &tz, &result) != 0)
+           elog(ERROR, "Unable to truncate timestamp to '%s'", lowunits);
+   }
+   else
+   {
+       elog(ERROR, "Timestamp units '%s' not recognized", lowunits);
+       PG_RETURN_NULL();
    }
 
-   PG_RETURN_TIMESTAMP(result);
+   PG_RETURN_TIMESTAMPTZ(result);
 }
 
 /* interval_trunc()
@@ -1658,14 +1969,7 @@ interval_trunc(PG_FUNCTION_ARGS)
 
    type = DecodeUnits(0, lowunits, &val);
 
-   if (INTERVAL_IS_INVALID(*interval))
-   {
-#if NOT_USED
-       elog(ERROR, "Interval is not finite");
-#endif
-       PG_RETURN_NULL();
-   }
-   else if (type == UNITS)
+   if (type == UNITS)
    {
        if (interval2tm(*interval, tm, &fsec) == 0)
        {
@@ -1703,7 +2007,6 @@ interval_trunc(PG_FUNCTION_ARGS)
 
                default:
                    elog(ERROR, "Interval units '%s' not supported", lowunits);
-                   PG_RETURN_NULL();
            }
 
            if (tm2interval(tm, fsec, result) != 0)
@@ -1712,28 +2015,16 @@ interval_trunc(PG_FUNCTION_ARGS)
        }
        else
        {
-           elog(NOTICE, "Interval out of range");
-           PG_RETURN_NULL();
-       }
-
-   }
-#if NOT_USED
-   else if ((type == RESERV) && (val == DTK_EPOCH))
-   {
-       *result = interval->time;
-       if (interval->month != 0)
-       {
-           *result += ((365.25 * 86400) * (interval->month / 12));
-           *result += ((30 * 86400) * (interval->month % 12));
+           elog(NOTICE, "Unable to decode interval; internal coding error");
+           *result = *interval;
        }
    }
-#endif
    else
    {
        elog(ERROR, "Interval units '%s' not recognized",
             DatumGetCString(DirectFunctionCall1(textout,
-                                              PointerGetDatum(units))));
-       PG_RETURN_NULL();
+                                                PointerGetDatum(units))));
+       *result = *interval;
    }
 
    PG_RETURN_INTERVAL_P(result);
@@ -1828,7 +2119,6 @@ timestamp_part(PG_FUNCTION_ARGS)
    text       *units = PG_GETARG_TEXT_P(0);
    Timestamp   timestamp = PG_GETARG_TIMESTAMP(1);
    float8      result;
-   Timestamp   dt;
    int         tz;
    int         type,
                val;
@@ -1845,7 +2135,7 @@ timestamp_part(PG_FUNCTION_ARGS)
    if (VARSIZE(units) - VARHDRSZ > MAXDATELEN)
        elog(ERROR, "Interval units '%s' not recognized",
             DatumGetCString(DirectFunctionCall1(textout,
-                                              PointerGetDatum(units))));
+                                                PointerGetDatum(units))));
    up = VARDATA(units);
    lp = lowunits;
    for (i = 0; i < (VARSIZE(units) - VARHDRSZ); i++)
@@ -1857,123 +2147,276 @@ timestamp_part(PG_FUNCTION_ARGS)
        type = DecodeSpecial(0, lowunits, &val);
 
    if (TIMESTAMP_NOT_FINITE(timestamp))
-       PG_RETURN_NULL();
-   else
    {
-       dt = (TIMESTAMP_IS_RELATIVE(timestamp) ? SetTimestamp(timestamp) : timestamp);
+       result = 0;
+       PG_RETURN_FLOAT8(result);
+   }
 
-       if ((type == UNITS) && (timestamp2tm(dt, &tz, tm, &fsec, &tzn) == 0))
+   if ((type == UNITS) && (timestamp2tm(timestamp, &tz, tm, &fsec, &tzn) == 0))
+   {
+       switch (val)
        {
-           switch (val)
-           {
-               case DTK_TZ:
-                   result = tz;
-                   break;
-
-               case DTK_TZ_MINUTE:
-                   result = tz / 60;
-                   TMODULO(result, dummy, 60e0);
-                   break;
-
-               case DTK_TZ_HOUR:
-                   dummy = tz;
-                   TMODULO(dummy, result, 3600e0);
-                   break;
-
-               case DTK_MICROSEC:
-                   result = (fsec * 1000000);
-                   break;
-
-               case DTK_MILLISEC:
-                   result = (fsec * 1000);
-                   break;
+           case DTK_TZ:
+               result = tz;
+               break;
+
+           case DTK_TZ_MINUTE:
+               result = tz / 60;
+               TMODULO(result, dummy, 60e0);
+               break;
+
+           case DTK_TZ_HOUR:
+               dummy = tz;
+               TMODULO(dummy, result, 3600e0);
+               break;
+
+           case DTK_MICROSEC:
+               result = (fsec * 1000000);
+               break;
+
+           case DTK_MILLISEC:
+               result = (fsec * 1000);
+               break;
+
+           case DTK_SECOND:
+               result = (tm->tm_sec + fsec);
+               break;
+
+           case DTK_MINUTE:
+               result = tm->tm_min;
+               break;
+
+           case DTK_HOUR:
+               result = tm->tm_hour;
+               break;
+
+           case DTK_DAY:
+               result = tm->tm_mday;
+               break;
+
+           case DTK_MONTH:
+               result = tm->tm_mon;
+               break;
+
+           case DTK_QUARTER:
+               result = ((tm->tm_mon - 1) / 3) + 1;
+               break;
+
+           case DTK_WEEK:
+               result = (float8) date2isoweek(tm->tm_year, tm->tm_mon, tm->tm_mday);
+               break;
+
+           case DTK_YEAR:
+               result = tm->tm_year;
+               break;
+
+           case DTK_DECADE:
+               result = (tm->tm_year / 10);
+               break;
+
+           case DTK_CENTURY:
+               result = (tm->tm_year / 100);
+               break;
+
+           case DTK_MILLENNIUM:
+               result = (tm->tm_year / 1000);
+               break;
+
+           default:
+               elog(ERROR, "Timestamp units '%s' not supported", lowunits);
+               result = 0;
+       }
 
-               case DTK_SECOND:
-                   result = (tm->tm_sec + fsec);
-                   break;
+   }
+   else if (type == RESERV)
+   {
+       switch (val)
+       {
+           case DTK_EPOCH:
+               result = timestamp - SetEpochTimestamp();
+               break;
 
-               case DTK_MINUTE:
-                   result = tm->tm_min;
-                   break;
+           case DTK_DOW:
+               if (timestamp2tm(timestamp, &tz, tm, &fsec, &tzn) != 0)
+                   elog(ERROR, "Unable to encode timestamp");
 
-               case DTK_HOUR:
-                   result = tm->tm_hour;
-                   break;
+               result = j2day(date2j(tm->tm_year, tm->tm_mon, tm->tm_mday));
+               break;
 
-               case DTK_DAY:
-                   result = tm->tm_mday;
-                   break;
+           case DTK_DOY:
+               if (timestamp2tm(timestamp, &tz, tm, &fsec, &tzn) != 0)
+                   elog(ERROR, "Unable to encode timestamp");
 
-               case DTK_MONTH:
-                   result = tm->tm_mon;
-                   break;
+               result = (date2j(tm->tm_year, tm->tm_mon, tm->tm_mday)
+                         - date2j(tm->tm_year, 1, 1) + 1);
+               break;
 
-               case DTK_QUARTER:
-                   result = ((tm->tm_mon - 1) / 3) + 1;
-                   break;
+           default:
+               elog(ERROR, "Timestamp units '%s' not supported", lowunits);
+               result = 0;
+       }
 
-               case DTK_WEEK:
-                   result = (float8) date2isoweek(tm->tm_year, tm->tm_mon, tm->tm_mday);
-                   break;
+   }
+   else
+   {
+       elog(ERROR, "Timestamp units '%s' not recognized", lowunits);
+       result = 0;
+   }
 
-               case DTK_YEAR:
-                   result = tm->tm_year;
-                   break;
+   PG_RETURN_FLOAT8(result);
+}
 
-               case DTK_DECADE:
-                   result = (tm->tm_year / 10);
-                   break;
+/* timestamptz_part()
+ * Extract specified field from timestamp with time zone.
+ */
+Datum
+timestamptz_part(PG_FUNCTION_ARGS)
+{
+   text       *units = PG_GETARG_TEXT_P(0);
+   TimestampTz timestamp = PG_GETARG_TIMESTAMP(1);
+   float8      result;
+   int         tz;
+   int         type,
+               val;
+   int         i;
+   char       *up,
+              *lp,
+               lowunits[MAXDATELEN + 1];
+   double      dummy;
+   double      fsec;
+   char       *tzn;
+   struct tm   tt,
+              *tm = &tt;
 
-               case DTK_CENTURY:
-                   result = (tm->tm_year / 100);
-                   break;
+   if (VARSIZE(units) - VARHDRSZ > MAXDATELEN)
+       elog(ERROR, "Interval units '%s' not recognized",
+            DatumGetCString(DirectFunctionCall1(textout,
+                                              PointerGetDatum(units))));
+   up = VARDATA(units);
+   lp = lowunits;
+   for (i = 0; i < (VARSIZE(units) - VARHDRSZ); i++)
+       *lp++ = tolower((unsigned char) *up++);
+   *lp = '\0';
 
-               case DTK_MILLENNIUM:
-                   result = (tm->tm_year / 1000);
-                   break;
+   type = DecodeUnits(0, lowunits, &val);
+   if (type == IGNORE)
+       type = DecodeSpecial(0, lowunits, &val);
 
-               default:
-                   elog(ERROR, "Timestamp units '%s' not supported", lowunits);
-                   result = 0;
-           }
+   if (TIMESTAMP_NOT_FINITE(timestamp))
+   {
+       result = 0;
+       PG_RETURN_FLOAT8(result);
+   }
 
-       }
-       else if (type == RESERV)
+   if ((type == UNITS) && (timestamp2tm(timestamp, &tz, tm, &fsec, &tzn) == 0))
+   {
+       switch (val)
        {
-           switch (val)
-           {
-               case DTK_EPOCH:
-                   TIMESTAMP_EPOCH(result);
-                   result = dt - SetTimestamp(result);
-                   break;
+           case DTK_TZ:
+               result = tz;
+               break;
+
+           case DTK_TZ_MINUTE:
+               result = tz / 60;
+               TMODULO(result, dummy, 60e0);
+               break;
+
+           case DTK_TZ_HOUR:
+               dummy = tz;
+               TMODULO(dummy, result, 3600e0);
+               break;
+
+           case DTK_MICROSEC:
+               result = (fsec * 1000000);
+               break;
+
+           case DTK_MILLISEC:
+               result = (fsec * 1000);
+               break;
+
+           case DTK_SECOND:
+               result = (tm->tm_sec + fsec);
+               break;
+
+           case DTK_MINUTE:
+               result = tm->tm_min;
+               break;
+
+           case DTK_HOUR:
+               result = tm->tm_hour;
+               break;
+
+           case DTK_DAY:
+               result = tm->tm_mday;
+               break;
+
+           case DTK_MONTH:
+               result = tm->tm_mon;
+               break;
+
+           case DTK_QUARTER:
+               result = ((tm->tm_mon - 1) / 3) + 1;
+               break;
+
+           case DTK_WEEK:
+               result = (float8) date2isoweek(tm->tm_year, tm->tm_mon, tm->tm_mday);
+               break;
+
+           case DTK_YEAR:
+               result = tm->tm_year;
+               break;
+
+           case DTK_DECADE:
+               result = (tm->tm_year / 10);
+               break;
+
+           case DTK_CENTURY:
+               result = (tm->tm_year / 100);
+               break;
+
+           case DTK_MILLENNIUM:
+               result = (tm->tm_year / 1000);
+               break;
+
+           default:
+               elog(ERROR, "Timestamp with time zone units '%s' not supported", lowunits);
+               result = 0;
+       }
 
-               case DTK_DOW:
-                   if (timestamp2tm(dt, &tz, tm, &fsec, &tzn) != 0)
-                       elog(ERROR, "Unable to encode timestamp");
+   }
+   else if (type == RESERV)
+   {
+       switch (val)
+       {
+           case DTK_EPOCH:
+               result = timestamp - SetEpochTimestamp();
+               break;
 
-                   result = j2day(date2j(tm->tm_year, tm->tm_mon, tm->tm_mday));
-                   break;
+           case DTK_DOW:
+               if (timestamp2tm(timestamp, &tz, tm, &fsec, &tzn) != 0)
+                   elog(ERROR, "Unable to encode timestamp with time zone");
 
-               case DTK_DOY:
-                   if (timestamp2tm(dt, &tz, tm, &fsec, &tzn) != 0)
-                       elog(ERROR, "Unable to encode timestamp");
+               result = j2day(date2j(tm->tm_year, tm->tm_mon, tm->tm_mday));
+               break;
 
-                   result = (date2j(tm->tm_year, tm->tm_mon, tm->tm_mday)
-                             - date2j(tm->tm_year, 1, 1) + 1);
-                   break;
+           case DTK_DOY:
+               if (timestamp2tm(timestamp, &tz, tm, &fsec, &tzn) != 0)
+                   elog(ERROR, "Unable to encode timestamp with time zone");
 
-               default:
-                   elog(ERROR, "Timestamp units '%s' not supported", lowunits);
-                   result = 0;
-           }
+               result = (date2j(tm->tm_year, tm->tm_mon, tm->tm_mday)
+                         - date2j(tm->tm_year, 1, 1) + 1);
+               break;
 
-       }
-       else
-       {
-           elog(ERROR, "Timestamp units '%s' not recognized", lowunits);
-           result = 0;
+           default:
+               elog(ERROR, "Timestamp with time zone units '%s' not supported", lowunits);
+               result = 0;
        }
    }
+   else
+   {
+       elog(ERROR, "Timestamp with time zone units '%s' not recognized", lowunits);
+       result = 0;
+   }
 
    PG_RETURN_FLOAT8(result);
 }
@@ -2012,14 +2455,7 @@ interval_part(PG_FUNCTION_ARGS)
    if (type == IGNORE)
        type = DecodeSpecial(0, lowunits, &val);
 
-   if (INTERVAL_IS_INVALID(*interval))
-   {
-#if NOT_USED
-       elog(ERROR, "Interval is not finite");
-#endif
-       result = 0;
-   }
-   else if (type == UNITS)
+   if (type == UNITS)
    {
        if (interval2tm(*interval, tm, &fsec) == 0)
        {
@@ -2074,7 +2510,7 @@ interval_part(PG_FUNCTION_ARGS)
                    break;
 
                default:
-                   elog(ERROR, "Interval units '%s' not yet supported",
+                   elog(ERROR, "Interval units '%s' not supported",
                         DatumGetCString(DirectFunctionCall1(textout,
                                               PointerGetDatum(units))));
                    result = 0;
@@ -2083,7 +2519,8 @@ interval_part(PG_FUNCTION_ARGS)
        }
        else
        {
-           elog(NOTICE, "Interval out of range");
+           elog(NOTICE, "Unable to decode interval"
+                "\n\tinterval_part() internal coding error");
            result = 0;
        }
    }
@@ -2116,8 +2553,142 @@ timestamp_zone(PG_FUNCTION_ARGS)
 {
    text       *zone = PG_GETARG_TEXT_P(0);
    Timestamp   timestamp = PG_GETARG_TIMESTAMP(1);
+   TimestampTz result;
+   int         tz;
+   int         type,
+               val;
+   int         i;
+   char       *up,
+              *lp,
+               lowzone[MAXDATELEN + 1];
+
+   if (VARSIZE(zone) - VARHDRSZ > MAXDATELEN)
+       elog(ERROR, "Time zone '%s' not recognized",
+            DatumGetCString(DirectFunctionCall1(textout,
+                                                PointerGetDatum(zone))));
+
+   if (TIMESTAMP_NOT_FINITE(timestamp))
+       PG_RETURN_TIMESTAMPTZ(timestamp);
+
+   up = VARDATA(zone);
+   lp = lowzone;
+   for (i = 0; i < (VARSIZE(zone) - VARHDRSZ); i++)
+       *lp++ = tolower((unsigned char) *up++);
+   *lp = '\0';
+
+   type = DecodeSpecial(0, lowzone, &val);
+
+   if ((type == TZ) || (type == DTZ))
+   {
+       tz = val * 60;
+       result = timestamp - tz;
+   }
+   else
+   {
+       elog(ERROR, "Time zone '%s' not recognized", lowzone);
+       PG_RETURN_NULL();
+   }
+
+   PG_RETURN_TIMESTAMPTZ(result);
+}  /* timestamp_zone() */
+
+/* timestamp_izone()
+ * Encode timestamp type with specified time interval as time zone.
+ * Require ISO-formatted result, since character-string time zone is not available.
+ */
+Datum
+timestamp_izone(PG_FUNCTION_ARGS)
+{
+   Interval   *zone = PG_GETARG_INTERVAL_P(0);
+   Timestamp   timestamp = PG_GETARG_TIMESTAMP(1);
+   TimestampTz result;
+   int         tz;
+
+   if (TIMESTAMP_NOT_FINITE(timestamp))
+       PG_RETURN_TIMESTAMPTZ(timestamp);
+
+   if (zone->month != 0)
+       elog(ERROR, "INTERVAL time zone '%s' not legal (month specified)",
+            DatumGetCString(DirectFunctionCall1(interval_out,
+                                                PointerGetDatum(zone))));
+
+   tz = -(zone->time);
+   result = timestamp - tz;
+
+   PG_RETURN_TIMESTAMPTZ(result);
+}  /* timestamp_izone() */
+
+/* timestamp_timestamptz()
+ * Convert local timestamp to timestamp at GMT
+ */
+Datum
+timestamp_timestamptz(PG_FUNCTION_ARGS)
+{
+   Timestamp   timestamp = PG_GETARG_TIMESTAMP(0);
+   TimestampTz result;
+   struct tm   tt,
+              *tm = &tt;
+   double      fsec;
+   int         tz;
+
+   if (TIMESTAMP_NOT_FINITE(timestamp))
+   {
+       result = timestamp;
+   }
+   else
+   {
+       if (timestamp2tm(timestamp, NULL, tm, &fsec, NULL) != 0)
+           elog(ERROR, "Unable to convert timestamp to timestamp with time zone (tm)");
+
+       tz = DetermineLocalTimeZone(tm);
+
+       if (tm2timestamp(tm, fsec, &tz, &result) != 0)
+           elog(ERROR, "Unable to convert timestamp to timestamp with time zone");
+   }
+
+   PG_RETURN_TIMESTAMPTZ(result);
+}
+
+/* timestamptz_timestamp()
+ * Convert timestamp at GMT to local timestamp
+ */
+Datum
+timestamptz_timestamp(PG_FUNCTION_ARGS)
+{
+   TimestampTz timestamp = PG_GETARG_TIMESTAMP(0);
+   Timestamp   result;
+   struct tm   tt,
+              *tm = &tt;
+   double      fsec;
+   char       *tzn;
+   int         tz;
+
+   if (TIMESTAMP_NOT_FINITE(timestamp))
+   {
+       result = timestamp;
+   }
+   else
+   {
+       if (timestamp2tm(timestamp, &tz, tm, &fsec, &tzn) != 0)
+           elog(ERROR, "Unable to convert timestamp with time zone to timestamp (tm)");
+
+       if (tm2timestamp(tm, fsec, NULL, &result) != 0)
+           elog(ERROR, "Unable to convert timestamp with time zone to timestamp");
+   }
+
+   PG_RETURN_TIMESTAMP(result);
+}
+
+/* timestamptz_zone()
+ * Encode timestamp with time zone type with specified time zone.
+ */
+Datum
+timestamptz_zone(PG_FUNCTION_ARGS)
+{
+   text       *zone = PG_GETARG_TEXT_P(0);
+   TimestampTz timestamp = PG_GETARG_TIMESTAMP(1);
    text       *result;
-   Timestamp   dt;
+   TimestampTz dt;
    int         tz;
    int         type,
                val;
@@ -2146,17 +2717,18 @@ timestamp_zone(PG_FUNCTION_ARGS)
    type = DecodeSpecial(0, lowzone, &val);
 
    if (TIMESTAMP_NOT_FINITE(timestamp))
-       PG_RETURN_NULL();
-   else if ((type == TZ) || (type == DTZ))
+       PG_RETURN_TEXT_P(pstrdup(""));
+
+   if ((type == TZ) || (type == DTZ))
    {
        tm->tm_isdst = ((type == DTZ) ? 1 : 0);
        tz = val * 60;
 
-       dt = (TIMESTAMP_IS_RELATIVE(timestamp) ? SetTimestamp(timestamp) : timestamp);
-       dt = dt2local(dt, tz);
+       dt = dt2local(timestamp, tz);
 
        if (timestamp2tm(dt, NULL, tm, &fsec, NULL) != 0)
-           elog(ERROR, "Timestamp not legal");
+           elog(ERROR, "Unable to decode timestamp"
+                "\n\ttimestamp_zone() internal coding error");
 
        up = upzone;
        lp = lowzone;
@@ -2177,23 +2749,23 @@ timestamp_zone(PG_FUNCTION_ARGS)
    else
    {
        elog(ERROR, "Time zone '%s' not recognized", lowzone);
-       result = NULL;
+       PG_RETURN_TEXT_P(pstrdup(""));
    }
 
    PG_RETURN_TEXT_P(result);
-}  /* timestamp_zone() */
+}  /* timestamptz_zone() */
 
-/* timestamp_izone()
- * Encode timestamp type with specified time interval as time zone.
+/* timestamptz_izone()
+ * Encode timestamp with time zone type with specified time interval as time zone.
  * Require ISO-formatted result, since character-string time zone is not available.
  */
 Datum
-timestamp_izone(PG_FUNCTION_ARGS)
+timestamptz_izone(PG_FUNCTION_ARGS)
 {
    Interval   *zone = PG_GETARG_INTERVAL_P(0);
-   Timestamp   timestamp = PG_GETARG_TIMESTAMP(1);
+   TimestampTz timestamp = PG_GETARG_TIMESTAMP(1);
    text       *result;
-   Timestamp   dt;
+   TimestampTz dt;
    int         tz;
    char       *tzn = "";
    double      fsec;
@@ -2203,19 +2775,21 @@ timestamp_izone(PG_FUNCTION_ARGS)
    int         len;
 
    if (TIMESTAMP_NOT_FINITE(timestamp))
-       PG_RETURN_NULL();
+       PG_RETURN_TEXT_P(pstrdup(""));
 
    if (zone->month != 0)
-       elog(ERROR, "INTERVAL time zone not legal (month specified)");
+       elog(ERROR, "INTERVAL time zone '%s' not legal (month specified)",
+            DatumGetCString(DirectFunctionCall1(interval_out,
+                                                PointerGetDatum(zone))));
 
    tm->tm_isdst = -1;
    tz = -(zone->time);
 
-   dt = (TIMESTAMP_IS_RELATIVE(timestamp) ? SetTimestamp(timestamp) : timestamp);
-   dt = dt2local(dt, tz);
+   dt = dt2local(timestamp, tz);
 
    if (timestamp2tm(dt, NULL, tm, &fsec, NULL) != 0)
-       elog(ERROR, "Timestamp not legal");
+       elog(ERROR, "Unable to decode timestamp"
+           "\n\ttimestamp_izone() internal coding error");
 
    EncodeDateTime(tm, fsec, &tz, &tzn, USE_ISO_DATES, buf);
    len = (strlen(buf) + VARHDRSZ);
@@ -2225,4 +2799,4 @@ timestamp_izone(PG_FUNCTION_ARGS)
    memmove(VARDATA(result), buf, (len - VARHDRSZ));
 
    PG_RETURN_TEXT_P(result);
-}  /* timestamp_izone() */
+}  /* timestamptz_izone() */
index 55c043511778e8edaa455808baa430c2fbb05f28..be5e9db665bfeaf762c75cdd1c8bc1af674d0741 100644 (file)
@@ -7,7 +7,7 @@
  * Portions Copyright (c) 1996-2001, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $Id: xact.h,v 1.36 2001/08/26 16:56:00 tgl Exp $
+ * $Id: xact.h,v 1.37 2001/09/28 08:09:12 thomas Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -17,6 +17,7 @@
 #include "access/transam.h"
 #include "access/xlog.h"
 #include "utils/nabstime.h"
+#include "utils/timestamp.h"
 
 /*
  * Xact isolation levels
@@ -39,6 +40,7 @@ typedef struct TransactionStateData
    CommandId   commandId;
    CommandId   scanCommandId;
    AbsoluteTime startTime;
+   int         startTimeMsec;
    int         state;
    int         blockState;
 } TransactionStateData;
@@ -104,6 +106,7 @@ extern CommandId GetCurrentCommandId(void);
 extern CommandId GetScanCommandId(void);
 extern void SetScanCommandId(CommandId);
 extern AbsoluteTime GetCurrentTransactionStartTime(void);
+extern AbsoluteTime GetCurrentTransactionStartTimeUsec(int *usec);
 extern bool TransactionIdIsCurrentTransactionId(TransactionId xid);
 extern bool CommandIdIsCurrentCommandId(CommandId cid);
 extern bool CommandIdGEScanCommandId(CommandId cid);
index 5008df24716e68893fa769d6fd334d1894016f81..b7c4b3fb8adb5b36a7c5843a35295d165ccc4a77 100644 (file)
@@ -37,7 +37,7 @@
  * Portions Copyright (c) 1996-2001, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $Id: catversion.h,v 1.95 2001/09/14 17:46:40 momjian Exp $
+ * $Id: catversion.h,v 1.96 2001/09/28 08:09:13 thomas Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -53,6 +53,6 @@
  */
 
 /*                         yyyymmddN */
-#define CATALOG_VERSION_NO 200109101
+#define CATALOG_VERSION_NO 200109261
 
 #endif
index 7d5cd2eafdc9b2b97db6c2609ebceab189c2cbcd..9f7845c698d978585b3e21fc19827a30b303c745 100755 (executable)
@@ -8,10 +8,21 @@
 # no multibytes files
 FILES=`ls pg_*.h |grep -v '_mb.h'`
 
+#
+# The previous version did not use the -d option on uniq
+# so check here that it is supported.
+# Otherwise, use the old algorithm
+#
+
+if [ `uniq -d < /dev/null > /dev/null 2>&1` ]; then
+  echo "uniq -d is not supported on your platform."
+  echo "Please report this to [email protected]"
+
 egrep '^DATA' $FILES | \
    sed -e 's/^.*OID[^=]*=[^0-9]*//' -e 's/[^0-9].*$//' | \
    sort -n >/tmp/alloids.$$
 uniq /tmp/alloids.$$ >/tmp/uniqoids.$$
+
 diff -u /tmp/alloids.$$ /tmp/uniqoids.$$ | \
    grep -v '/tmp/' | \
    grep '^-' | \
@@ -21,3 +32,16 @@ diff -u /tmp/alloids.$$ /tmp/uniqoids.$$ | \
 rm /tmp/alloids.$$
 rm /tmp/uniqoids.$$
 
+else
+
+#  echo "uniq -d is supported on this platform."
+#  echo "Will omit the use of temporary files."
+
+egrep '^DATA' $FILES | \
+   sed -e 's/^.*OID[^=]*=[^0-9]*//' -e 's/[^0-9].*$//' | \
+   sort -n | uniq -d | \
+   egrep -v '^[0]*$'
+
+fi
+
+exit
index ccb70eb7faf932287dd7918e22ebabff3682f62b..cc0edd22fca391273f7e0629c8cae7685af0973c 100644 (file)
@@ -8,7 +8,7 @@
  * Portions Copyright (c) 1996-2001, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $Id: pg_aggregate.h,v 1.31 2001/08/14 22:21:58 tgl Exp $
+ * $Id: pg_aggregate.h,v 1.32 2001/09/28 08:09:13 thomas Exp $
  *
  * NOTES
  *   the genbki.sh script reads this file and generates .bki
@@ -109,7 +109,8 @@ DATA(insert OID = 0 ( max   PGUID date_larger       - 1082 1082 1082 _null_ ));
 DATA(insert OID = 0 ( max  PGUID time_larger       - 1083 1083 1083 _null_ ));
 DATA(insert OID = 0 ( max  PGUID timetz_larger     - 1266 1266 1266 _null_ ));
 DATA(insert OID = 0 ( max  PGUID cashlarger        -  790  790  790 _null_ ));
-DATA(insert OID = 0 ( max  PGUID timestamp_larger  - 1184 1184 1184 _null_ ));
+DATA(insert OID = 0 ( max  PGUID timestamp_larger  - 1114 1114 1114 _null_ ));
+DATA(insert OID = 0 ( max  PGUID timestamptz_larger - 1184 1184 1184 _null_ ));
 DATA(insert OID = 0 ( max  PGUID interval_larger   - 1186 1186 1186 _null_ ));
 DATA(insert OID = 0 ( max  PGUID text_larger       -   25   25   25 _null_ ));
 DATA(insert OID = 0 ( max  PGUID numeric_larger    - 1700 1700 1700 _null_ ));
@@ -125,7 +126,8 @@ DATA(insert OID = 0 ( min   PGUID date_smaller      - 1082 1082 1082 _null_ ));
 DATA(insert OID = 0 ( min  PGUID time_smaller      - 1083 1083 1083 _null_ ));
 DATA(insert OID = 0 ( min  PGUID timetz_smaller    - 1266 1266 1266 _null_ ));
 DATA(insert OID = 0 ( min  PGUID cashsmaller       -  790  790  790 _null_ ));
-DATA(insert OID = 0 ( min  PGUID timestamp_smaller - 1184 1184 1184 _null_ ));
+DATA(insert OID = 0 ( min  PGUID timestamp_smaller - 1114 1114 1114 _null_ ));
+DATA(insert OID = 0 ( min  PGUID timestamptz_smaller - 1184 1184 1184 _null_ ));
 DATA(insert OID = 0 ( min  PGUID interval_smaller  - 1186 1186 1186 _null_ ));
 DATA(insert OID = 0 ( min  PGUID text_smaller      -   25   25   25 _null_ ));
 DATA(insert OID = 0 ( min  PGUID numeric_smaller   - 1700 1700 1700 _null_ ));
index b630c824eb0b0adbc4ea667c9e921d17f1fd3dc9..e5a6fb872cbef74e579005f971baab8514d79536 100644 (file)
@@ -16,7 +16,7 @@
  * Portions Copyright (c) 1996-2001, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $Id: pg_amop.h,v 1.41 2001/08/21 16:36:05 tgl Exp $
+ * $Id: pg_amop.h,v 1.42 2001/09/28 08:09:13 thomas Exp $
  *
  * NOTES
  *  the genbki.sh script reads this file and generates .bki
@@ -282,6 +282,16 @@ DATA(insert (  2000 5 f 1554 ));
  * btree timestamp_ops
  */
 
+DATA(insert (  2039 1 f 2062 ));
+DATA(insert (  2039 2 f 2063 ));
+DATA(insert (  2039 3 f 2060 ));
+DATA(insert (  2039 4 f 2065 ));
+DATA(insert (  2039 5 f 2064 ));
+
+/*
+ * btree timestamptz_ops
+ */
+
 DATA(insert (  1998 1 f 1322 ));
 DATA(insert (  1998 2 f 1323 ));
 DATA(insert (  1998 3 f 1320 ));
@@ -407,11 +417,13 @@ DATA(insert ( 1992 1 f  649 ));
 DATA(insert (  1995 1 f   98 ));
 /* time_ops */
 DATA(insert (  1997 1 f 1108 ));
-/* timestamp_ops */
+/* timestamptz_ops */
 DATA(insert (  1999 1 f 1320 ));
 /* timetz_ops */
 DATA(insert (  2001 1 f 1550 ));
 /* varchar_ops */
 DATA(insert (  2004 1 f 1062 ));
+/* timestamp_ops */
+DATA(insert (  2040 1 f 2060 ));
 
 #endif  /* PG_AMOP_H */
index e802c6fd107ac9107f2b45640277e7913daeb027..520bf821bb6224f5b9ec1cc40ed80ba7da1d3781 100644 (file)
@@ -14,7 +14,7 @@
  * Portions Copyright (c) 1996-2001, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $Id: pg_amproc.h,v 1.30 2001/08/21 16:36:05 tgl Exp $
+ * $Id: pg_amproc.h,v 1.31 2001/09/28 08:09:13 thomas Exp $
  *
  * NOTES
  *   the genbki.sh script reads this file and generates .bki
@@ -104,6 +104,7 @@ DATA(insert (   1998 1 1314 ));
 DATA(insert (  2000 1 1358 ));
 DATA(insert (  2002 1 1672 ));
 DATA(insert (  2003 1 1079 ));
+DATA(insert (  2039 1 1314 ));
 
 
 /* hash */
@@ -127,5 +128,6 @@ DATA(insert (   1997 1  452 ));
 DATA(insert (  1999 1  452 ));
 DATA(insert (  2001 1 1696 ));
 DATA(insert (  2004 1  456 ));
+DATA(insert (  2040 1  452 ));
 
 #endif  /* PG_AMPROC_H */
index 0b3b91758c3f3923f85b850ff2c1f2b42f6227a9..4b07349c0fdd2925b88cd7db935e3dbdb7925032 100644 (file)
@@ -26,7 +26,7 @@
  * Portions Copyright (c) 1996-2001, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $Id: pg_opclass.h,v 1.39 2001/08/21 16:36:05 tgl Exp $
+ * $Id: pg_opclass.h,v 1.40 2001/09/28 08:09:13 thomas Exp $
  *
  * NOTES
  *   the genbki.sh script reads this file and generates .bki
@@ -127,12 +127,14 @@ DATA(insert OID = 1994 (  403     text_ops          25    t   0 ));
 DATA(insert OID = 1995 (   405     text_ops          25    t   0 ));
 DATA(insert OID = 1996 (   403     time_ops        1083    t   0 ));
 DATA(insert OID = 1997 (   405     time_ops        1083    t   0 ));
-DATA(insert OID = 1998 (   403     timestamp_ops   1184    t   0 ));
-DATA(insert OID = 1999 (   405     timestamp_ops   1184    t   0 ));
+DATA(insert OID = 1998 (   403     timestamptz_ops 1184    t   0 ));
+DATA(insert OID = 1999 (   405     timestamptz_ops 1184    t   0 ));
 DATA(insert OID = 2000 (   403     timetz_ops      1266    t   0 ));
 DATA(insert OID = 2001 (   405     timetz_ops      1266    t   0 ));
 DATA(insert OID = 2002 (   403     varbit_ops      1562    t   0 ));
 DATA(insert OID = 2003 (   403     varchar_ops     1043    t   0 ));
 DATA(insert OID = 2004 (   405     varchar_ops     1043    t   0 ));
+DATA(insert OID = 2039 (   403     timestamp_ops   1114    t   0 ));
+DATA(insert OID = 2040 (   405     timestamp_ops   1114    t   0 ));
 
 #endif  /* PG_OPCLASS_H */
index 4919e3e37b1fdaa580d4358215cc17dc9776835f..e5afc73ea4aaa8e7766a1ad06b05a8d63c5414c8 100644 (file)
@@ -8,7 +8,7 @@
  * Portions Copyright (c) 1996-2001, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $Id: pg_operator.h,v 1.93 2001/09/14 17:46:40 momjian Exp $
+ * $Id: pg_operator.h,v 1.94 2001/09/28 08:09:13 thomas Exp $
  *
  * NOTES
  *   the genbki.sh script reads this file and generates .bki
@@ -483,14 +483,16 @@ DATA(insert OID = 1110 ( "<"     PGUID 0 b t f  1083  1083  16 1112 1113  0 0 time_
 DATA(insert OID = 1111 ( "<="     PGUID 0 b t f  1083  1083  16 1113 1112  0 0 time_le scalarltsel scalarltjoinsel ));
 DATA(insert OID = 1112 ( ">"      PGUID 0 b t f  1083  1083  16 1110 1111  0 0 time_gt scalargtsel scalargtjoinsel ));
 DATA(insert OID = 1113 ( ">="     PGUID 0 b t f  1083  1083  16 1111 1110  0 0 time_ge scalargtsel scalargtjoinsel ));
+DATA(insert OID = 1269 (  "-"     PGUID 0 b t f  1186 1083 1083 0 0 0 0 interval_mi_time - - ));
 
 /* timetz operators */
-DATA(insert OID = 1550 ( "="      PGUID 0 b t f  1266  1266  16 1550 1551 1552 1552 timetz_eq eqsel eqjoinsel ));
-DATA(insert OID = 1551 ( "<>"     PGUID 0 b t f  1266  1266  16 1551 1550  0 0 timetz_ne neqsel neqjoinsel ));
-DATA(insert OID = 1552 ( "<"      PGUID 0 b t f  1266  1266  16 1554 1555  0 0 timetz_lt scalarltsel scalarltjoinsel ));
-DATA(insert OID = 1553 ( "<="     PGUID 0 b t f  1266  1266  16 1555 1554  0 0 timetz_le scalarltsel scalarltjoinsel ));
-DATA(insert OID = 1554 ( ">"      PGUID 0 b t f  1266  1266  16 1552 1553  0 0 timetz_gt scalargtsel scalargtjoinsel ));
-DATA(insert OID = 1555 ( ">="     PGUID 0 b t f  1266  1266  16 1553 1552  0 0 timetz_ge scalargtsel scalargtjoinsel ));
+DATA(insert OID = 1295 (  "-"     PGUID 0 b t f  1186 1266 1266 0 0 0 0 interval_mi_timetz - - ));
+DATA(insert OID = 1550 ( "="      PGUID 0 b t f  1266 1266   16 1550 1551 1552 1552 timetz_eq eqsel eqjoinsel ));
+DATA(insert OID = 1551 ( "<>"     PGUID 0 b t f  1266 1266   16 1551 1550  0 0 timetz_ne neqsel neqjoinsel ));
+DATA(insert OID = 1552 ( "<"      PGUID 0 b t f  1266 1266   16 1554 1555  0 0 timetz_lt scalarltsel scalarltjoinsel ));
+DATA(insert OID = 1553 ( "<="     PGUID 0 b t f  1266 1266   16 1555 1554  0 0 timetz_le scalarltsel scalarltjoinsel ));
+DATA(insert OID = 1554 ( ">"      PGUID 0 b t f  1266 1266   16 1552 1553  0 0 timetz_gt scalargtsel scalargtjoinsel ));
+DATA(insert OID = 1555 ( ">="     PGUID 0 b t f  1266 1266   16 1553 1552  0 0 timetz_ge scalargtsel scalargtjoinsel ));
 
 /* float48 operators */
 DATA(insert OID = 1116 (  "+"      PGUID 0 b t f 700 701 701 1126   0   0   0 float48pl - - ));
@@ -551,7 +553,7 @@ 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 icregexnesel icregexnejoinsel ));
 
-/* timestamp operators */
+/* timestamptz 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 timestamp_eq eqsel eqjoinsel ));
 DATA(insert OID = 1321 (  "<>"    PGUID 0 b t f 1184 1184   16 1321 1320 0 0 timestamp_ne neqsel neqjoinsel ));
@@ -559,9 +561,9 @@ DATA(insert OID = 1322 (  "<"      PGUID 0 b t f 1184 1184   16 1324 1325 0 0 times
 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 - - ));
+DATA(insert OID = 1327 (  "+"     PGUID 0 b t f 1184 1186 1184    0    0 0 0 timestamptz_pl_span - - ));
+DATA(insert OID = 1328 (  "-"     PGUID 0 b t f 1184 1184 1186    0    0 0 0 timestamptz_mi - - ));
+DATA(insert OID = 1329 (  "-"     PGUID 0 b t f 1184 1186 1184    0    0 0 0 timestamptz_mi_span - - ));
 
 /* interval operators */
 DATA(insert OID = 1330 (  "="     PGUID 0 b t f 1186 1186   16 1330 1331 1332 1332 interval_eq eqsel eqjoinsel ));
@@ -575,11 +577,13 @@ DATA(insert OID = 1336 (  "-"    PGUID 0 l t f    0 1186 1186    0    0 0 0 interval_u
 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 - - ));
 
-DATA(insert OID = 1360 (  "+"     PGUID 0 b t f 1082 1083 1184    0    0 0 0 datetime_pl - - ));
+DATA(insert OID = 1360 (  "+"     PGUID 0 b t f 1082 1083 1114    0    0 0 0 datetime_pl - - ));
 DATA(insert OID = 1361 (  "+"     PGUID 0 b t f 1082 1266 1184    0    0 0 0 datetimetz_pl - - ));
-DATA(insert OID = 1363 (  "+"     PGUID 0 b t f 1083 1082 1184    0    0 0 0 timedate_pl - - ));
+DATA(insert OID = 1363 (  "+"     PGUID 0 b t f 1083 1082 1114    0    0 0 0 timedate_pl - - ));
 DATA(insert OID = 1366 (  "+"     PGUID 0 b t f 1266 1082 1184    0    0 0 0 timetzdate_pl - - ));
 
+DATA(insert OID = 1399 (  "-"     PGUID 0 b t f 1083 1083 1186    0    0 0 0 time_mi_time - - ));
+
 /* 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 - - ));
 DATA(insert OID = 1500 (  "="    PGUID 0 b t f  718  718   16 1500 1501 1502 1502 circle_eq eqsel eqjoinsel ));
@@ -821,6 +825,19 @@ DATA(insert OID = 2016 (  "~~"    PGUID 0 b t f 17 17  16 0    2017 0    0 bytea
 DATA(insert OID = 2017 (  "!~~"       PGUID 0 b t f 17 17  16 0    2016 0    0 byteanlike nlikesel nlikejoinsel ));
 DATA(insert OID = 2018 (  "||"    PGUID 0 b t f 17 17  17 0    0    0    0 byteacat - - ));
 
+/* timestamp operators */
+/* name, owner, prec, kind, isleft, canhash, left, right, result, com, negate, lsortop, rsortop, oprcode, operrest, oprjoin */
+DATA(insert OID = 2060 (  "="     PGUID 0 b t f 1114 1114   16 2060 2061 2062 2062 timestamp_eq eqsel eqjoinsel ));
+DATA(insert OID = 2061 (  "<>"    PGUID 0 b t f 1114 1114   16 2061 2060 0 0 timestamp_ne neqsel neqjoinsel ));
+DATA(insert OID = 2062 (  "<"     PGUID 0 b t f 1114 1114   16 2064 2065 0 0 timestamp_lt scalarltsel scalarltjoinsel ));
+DATA(insert OID = 2063 (  "<="    PGUID 0 b t f 1114 1114   16 2065 2064 0 0 timestamp_le scalarltsel scalarltjoinsel ));
+DATA(insert OID = 2064 (  ">"     PGUID 0 b t f 1114 1114   16 2062 2063 0 0 timestamp_gt scalargtsel scalargtjoinsel ));
+DATA(insert OID = 2065 (  ">="    PGUID 0 b t f 1114 1114   16 2063 2062 0 0 timestamp_ge scalargtsel scalargtjoinsel ));
+DATA(insert OID = 2066 (  "+"     PGUID 0 b t f 1114 1186 1114    0    0 0 0 timestamp_pl_span - - ));
+DATA(insert OID = 2067 (  "-"     PGUID 0 b t f 1114 1114 1186    0    0 0 0 timestamp_mi - - ));
+DATA(insert OID = 2068 (  "-"     PGUID 0 b t f 1114 1186 1114    0    0 0 0 timestamp_mi_span - - ));
+
+
 /*
  * function prototypes
  */
index 90718bc10adc59b80db72c2a7c1f7d4ed29aa953..e4c8faa2b079747fa22aa0fd76955b536eb75c1b 100644 (file)
@@ -7,7 +7,7 @@
  * Portions Copyright (c) 1996-2001, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $Id: pg_proc.h,v 1.211 2001/09/14 17:46:40 momjian Exp $
+ * $Id: pg_proc.h,v 1.212 2001/09/28 08:09:13 thomas Exp $
  *
  * NOTES
  *   The script catalog/genbki.sh reads this file and generates .bki
@@ -99,113 +99,113 @@ typedef FormData_pg_proc *Form_pg_proc;
 
 DATA(insert OID = 1242 (  boolin          PGUID 12 f t t t 1 f 16 "0" 100 0 0  100  boolin - ));
 DESCR("(internal)");
-DATA(insert OID = 1243 (  boolout         PGUID 12 f t t t 1 f 23 "0" 100 0 0 100  boolout - ));
+DATA(insert OID = 1243 (  boolout         PGUID 12 f t t t 1 f 23 "0" 100 0 0 100  boolout - ));
 DESCR("(internal)");
-DATA(insert OID = 1244 (  byteain         PGUID 12 f t t t 1 f 17 "0" 100 0 0 100  byteain - ));
+DATA(insert OID = 1244 (  byteain         PGUID 12 f t t t 1 f 17 "0" 100 0 0 100  byteain - ));
 DESCR("(internal)");
-DATA(insert OID =  31 (  byteaout         PGUID 12 f t t t 1 f 23 "0" 100 0 0 100  byteaout - ));
+DATA(insert OID =  31 (  byteaout         PGUID 12 f t t t 1 f 23 "0" 100 0 0 100  byteaout - ));
 DESCR("(internal)");
-DATA(insert OID = 1245 (  charin          PGUID 12 f t t t 1 f 18 "0" 100 0 0 100  charin - ));
+DATA(insert OID = 1245 (  charin          PGUID 12 f t t t 1 f 18 "0" 100 0 0 100  charin - ));
 DESCR("(internal)");
-DATA(insert OID =  33 (  charout          PGUID 12 f t t t 1 f 23 "0" 100 0 0 100  charout - ));
+DATA(insert OID =  33 (  charout          PGUID 12 f t t t 1 f 23 "0" 100 0 0 100  charout - ));
 DESCR("(internal)");
-DATA(insert OID =  34 (  namein               PGUID 12 f t t t 1 f 19 "0" 100 0 0 100  namein - ));
+DATA(insert OID =  34 (  namein               PGUID 12 f t t t 1 f 19 "0" 100 0 0 100  namein - ));
 DESCR("(internal)");
-DATA(insert OID =  35 (  nameout          PGUID 12 f t t t 1 f 23 "0" 100 0 0 100  nameout - ));
+DATA(insert OID =  35 (  nameout          PGUID 12 f t t t 1 f 23 "0" 100 0 0 100  nameout - ));
 DESCR("(internal)");
-DATA(insert OID =  38 (  int2in               PGUID 12 f t t t 1 f 21 "0" 100 0 0 100  int2in - ));
+DATA(insert OID =  38 (  int2in               PGUID 12 f t t t 1 f 21 "0" 100 0 0 100  int2in - ));
 DESCR("(internal)");
-DATA(insert OID =  39 (  int2out          PGUID 12 f t t t 1 f 23 "0" 100 0 0 100  int2out - ));
+DATA(insert OID =  39 (  int2out          PGUID 12 f t t t 1 f 23 "0" 100 0 0 100  int2out - ));
 DESCR("(internal)");
-DATA(insert OID =  40 (  int2vectorin     PGUID 12 f t t t 1 f 22 "0" 100 0 0 100  int2vectorin - ));
+DATA(insert OID =  40 (  int2vectorin     PGUID 12 f t t t 1 f 22 "0" 100 0 0 100  int2vectorin - ));
 DESCR("(internal)");
-DATA(insert OID =  41 (  int2vectorout    PGUID 12 f t t t 1 f 23 "0" 100 0 0 100  int2vectorout - ));
+DATA(insert OID =  41 (  int2vectorout    PGUID 12 f t t t 1 f 23 "0" 100 0 0 100  int2vectorout - ));
 DESCR("(internal)");
-DATA(insert OID =  42 (  int4in               PGUID 12 f t t t 1 f 23 "0" 100 0 0 100  int4in - ));
+DATA(insert OID =  42 (  int4in               PGUID 12 f t t t 1 f 23 "0" 100 0 0 100  int4in - ));
 DESCR("(internal)");
-DATA(insert OID =  43 (  int4out          PGUID 12 f t t t 1 f 23 "0" 100 0 0 100  int4out - ));
+DATA(insert OID =  43 (  int4out          PGUID 12 f t t t 1 f 23 "0" 100 0 0 100  int4out - ));
 DESCR("(internal)");
-DATA(insert OID =  44 (  regprocin        PGUID 12 f t f t 1 f 24 "0" 100 0 0 100  regprocin - ));
+DATA(insert OID =  44 (  regprocin        PGUID 12 f t f t 1 f 24 "0" 100 0 0 100  regprocin - ));
 DESCR("(internal)");
-DATA(insert OID =  45 (  regprocout           PGUID 12 f t f t 1 f 23 "0" 100 0 0 100  regprocout - ));
+DATA(insert OID =  45 (  regprocout           PGUID 12 f t f t 1 f 23 "0" 100 0 0 100  regprocout - ));
 DESCR("(internal)");
-DATA(insert OID =  46 (  textin               PGUID 12 f t t t 1 f 25 "0" 100 0 0 100  textin - ));
+DATA(insert OID =  46 (  textin               PGUID 12 f t t t 1 f 25 "0" 100 0 0 100  textin - ));
 DESCR("(internal)");
-DATA(insert OID =  47 (  textout          PGUID 12 f t t t 1 f 23 "0" 100 0 0 100  textout - ));
+DATA(insert OID =  47 (  textout          PGUID 12 f t t t 1 f 23 "0" 100 0 0 100  textout - ));
 DESCR("(internal)");
-DATA(insert OID =  48 (  tidin            PGUID 12 f t t t 1 f 27 "0" 100 0 0 100  tidin - ));
+DATA(insert OID =  48 (  tidin            PGUID 12 f t t t 1 f 27 "0" 100 0 0 100  tidin - ));
 DESCR("(internal)");
-DATA(insert OID =  49 (  tidout               PGUID 12 f t t t 1 f 23 "0" 100 0 0 100  tidout - ));
+DATA(insert OID =  49 (  tidout               PGUID 12 f t t t 1 f 23 "0" 100 0 0 100  tidout - ));
 DESCR("(internal)");
-DATA(insert OID =  50 (  xidin            PGUID 12 f t t t 1 f 28 "0" 100 0 0 100  xidin - ));
+DATA(insert OID =  50 (  xidin            PGUID 12 f t t t 1 f 28 "0" 100 0 0 100  xidin - ));
 DESCR("(internal)");
-DATA(insert OID =  51 (  xidout               PGUID 12 f t t t 1 f 23 "0" 100 0 0 100  xidout - ));
+DATA(insert OID =  51 (  xidout               PGUID 12 f t t t 1 f 23 "0" 100 0 0 100  xidout - ));
 DESCR("(internal)");
-DATA(insert OID =  52 (  cidin            PGUID 12 f t t t 1 f 29 "0" 100 0 0 100  cidin - ));
+DATA(insert OID =  52 (  cidin            PGUID 12 f t t t 1 f 29 "0" 100 0 0 100  cidin - ));
 DESCR("(internal)");
-DATA(insert OID =  53 (  cidout               PGUID 12 f t t t 1 f 23 "0" 100 0 0 100  cidout - ));
+DATA(insert OID =  53 (  cidout               PGUID 12 f t t t 1 f 23 "0" 100 0 0 100  cidout - ));
 DESCR("(internal)");
-DATA(insert OID =  54 (  oidvectorin      PGUID 12 f t t t 1 f 30 "0" 100 0 0 100  oidvectorin - ));
+DATA(insert OID =  54 (  oidvectorin      PGUID 12 f t t t 1 f 30 "0" 100 0 0 100  oidvectorin - ));
 DESCR("(internal)");
-DATA(insert OID =  55 (  oidvectorout     PGUID 12 f t t t 1 f 23 "0" 100 0 0 100  oidvectorout - ));
+DATA(insert OID =  55 (  oidvectorout     PGUID 12 f t t t 1 f 23 "0" 100 0 0 100  oidvectorout - ));
 DESCR("(internal)");
-DATA(insert OID =  56 (  boollt               PGUID 12 f t t t 2 f 16 "16 16" 100 0 0 100  boollt - ));
+DATA(insert OID =  56 (  boollt               PGUID 12 f t t t 2 f 16 "16 16" 100 0 0 100  boollt - ));
 DESCR("less-than");
-DATA(insert OID =  57 (  boolgt               PGUID 12 f t t t 2 f 16 "16 16" 100 0 0 100  boolgt - ));
+DATA(insert OID =  57 (  boolgt               PGUID 12 f t t t 2 f 16 "16 16" 100 0 0 100  boolgt - ));
 DESCR("greater-than");
-DATA(insert OID =  60 (  booleq               PGUID 12 f t t t 2 f 16 "16 16" 100 0 0 100  booleq - ));
+DATA(insert OID =  60 (  booleq               PGUID 12 f t t t 2 f 16 "16 16" 100 0 0 100  booleq - ));
 DESCR("equal");
-DATA(insert OID =  61 (  chareq               PGUID 12 f t t t 2 f 16 "18 18" 100 0 0 100  chareq - ));
+DATA(insert OID =  61 (  chareq               PGUID 12 f t t t 2 f 16 "18 18" 100 0 0 100  chareq - ));
 DESCR("equal");
-DATA(insert OID =  62 (  nameeq               PGUID 12 f t t t 2 f 16 "19 19" 100 0 0 100  nameeq - ));
+DATA(insert OID =  62 (  nameeq               PGUID 12 f t t t 2 f 16 "19 19" 100 0 0 100  nameeq - ));
 DESCR("equal");
-DATA(insert OID =  63 (  int2eq               PGUID 12 f t t t 2 f 16 "21 21" 100 0 0 100  int2eq - ));
+DATA(insert OID =  63 (  int2eq               PGUID 12 f t t t 2 f 16 "21 21" 100 0 0 100  int2eq - ));
 DESCR("equal");
-DATA(insert OID =  64 (  int2lt               PGUID 12 f t t t 2 f 16 "21 21" 100 0 0 100  int2lt - ));
+DATA(insert OID =  64 (  int2lt               PGUID 12 f t t t 2 f 16 "21 21" 100 0 0 100  int2lt - ));
 DESCR("less-than");
-DATA(insert OID =  65 (  int4eq               PGUID 12 f t t t 2 f 16 "23 23" 100 0 0 100  int4eq - ));
+DATA(insert OID =  65 (  int4eq               PGUID 12 f t t t 2 f 16 "23 23" 100 0 0 100  int4eq - ));
 DESCR("equal");
-DATA(insert OID =  66 (  int4lt               PGUID 12 f t t t 2 f 16 "23 23" 100 0 0 100  int4lt - ));
+DATA(insert OID =  66 (  int4lt               PGUID 12 f t t t 2 f 16 "23 23" 100 0 0 100  int4lt - ));
 DESCR("less-than");
-DATA(insert OID =  67 (  texteq               PGUID 12 f t t t 2 f 16 "25 25" 100 0 0 100  texteq - ));
+DATA(insert OID =  67 (  texteq               PGUID 12 f t t t 2 f 16 "25 25" 100 0 0 100  texteq - ));
 DESCR("equal");
-DATA(insert OID =  68 (  xideq            PGUID 12 f t t t 2 f 16 "28 28" 100 0 0 100  xideq - ));
+DATA(insert OID =  68 (  xideq            PGUID 12 f t t t 2 f 16 "28 28" 100 0 0 100  xideq - ));
 DESCR("equal");
-DATA(insert OID =  69 (  cideq            PGUID 12 f t t t 2 f 16 "29 29" 100 0 0 100  cideq - ));
+DATA(insert OID =  69 (  cideq            PGUID 12 f t t t 2 f 16 "29 29" 100 0 0 100  cideq - ));
 DESCR("equal");
-DATA(insert OID =  70 (  charne               PGUID 12 f t t t 2 f 16 "18 18" 100 0 0 100  charne - ));
+DATA(insert OID =  70 (  charne               PGUID 12 f t t t 2 f 16 "18 18" 100 0 0 100  charne - ));
 DESCR("not equal");
-DATA(insert OID = 1246 (  charlt          PGUID 12 f t t t 2 f 16 "18 18" 100 0 0 100  charlt - ));
+DATA(insert OID = 1246 (  charlt          PGUID 12 f t t t 2 f 16 "18 18" 100 0 0 100  charlt - ));
 DESCR("less-than");
-DATA(insert OID =  72 (  charle               PGUID 12 f t t t 2 f 16 "18 18" 100 0 0 100  charle - ));
+DATA(insert OID =  72 (  charle               PGUID 12 f t t t 2 f 16 "18 18" 100 0 0 100  charle - ));
 DESCR("less-than-or-equal");
-DATA(insert OID =  73 (  chargt               PGUID 12 f t t t 2 f 16 "18 18" 100 0 0 100  chargt - ));
+DATA(insert OID =  73 (  chargt               PGUID 12 f t t t 2 f 16 "18 18" 100 0 0 100  chargt - ));
 DESCR("greater-than");
-DATA(insert OID =  74 (  charge               PGUID 12 f t t t 2 f 16 "18 18" 100 0 0 100  charge - ));
+DATA(insert OID =  74 (  charge               PGUID 12 f t t t 2 f 16 "18 18" 100 0 0 100  charge - ));
 DESCR("greater-than-or-equal");
-DATA(insert OID = 1248 (  charpl          PGUID 12 f t t t 2 f 18 "18 18" 100 0 0 100  charpl - ));
+DATA(insert OID = 1248 (  charpl          PGUID 12 f t t t 2 f 18 "18 18" 100 0 0 100  charpl - ));
 DESCR("add");
-DATA(insert OID = 1250 (  charmi          PGUID 12 f t t t 2 f 18 "18 18" 100 0 0 100  charmi - ));
+DATA(insert OID = 1250 (  charmi          PGUID 12 f t t t 2 f 18 "18 18" 100 0 0 100  charmi - ));
 DESCR("subtract");
-DATA(insert OID =  77 (  charmul          PGUID 12 f t t t 2 f 18 "18 18" 100 0 0 100  charmul - ));
+DATA(insert OID =  77 (  charmul          PGUID 12 f t t t 2 f 18 "18 18" 100 0 0 100  charmul - ));
 DESCR("multiply");
-DATA(insert OID =  78 (  chardiv          PGUID 12 f t t t 2 f 18 "18 18" 100 0 0 100  chardiv - ));
+DATA(insert OID =  78 (  chardiv          PGUID 12 f t t t 2 f 18 "18 18" 100 0 0 100  chardiv - ));
 DESCR("divide");
 
-DATA(insert OID =  79 (  nameregexeq      PGUID 12 f t t t 2 f 16 "19 25" 100 0 0 100  nameregexeq - ));
+DATA(insert OID =  79 (  nameregexeq      PGUID 12 f t t t 2 f 16 "19 25" 100 0 0 100  nameregexeq - ));
 DESCR("matches regex., case-sensitive");
-DATA(insert OID = 1252 (  nameregexne     PGUID 12 f t t t 2 f 16 "19 25" 100 0 0 100  nameregexne - ));
+DATA(insert OID = 1252 (  nameregexne     PGUID 12 f t t t 2 f 16 "19 25" 100 0 0 100  nameregexne - ));
 DESCR("does not match regex., case-sensitive");
-DATA(insert OID = 1254 (  textregexeq     PGUID 12 f t t t 2 f 16 "25 25" 100 0 0 100  textregexeq - ));
+DATA(insert OID = 1254 (  textregexeq     PGUID 12 f t t t 2 f 16 "25 25" 100 0 0 100  textregexeq - ));
 DESCR("matches regex., case-sensitive");
-DATA(insert OID = 1256 (  textregexne     PGUID 12 f t t t 2 f 16 "25 25" 100 0 0 100  textregexne - ));
+DATA(insert OID = 1256 (  textregexne     PGUID 12 f t t t 2 f 16 "25 25" 100 0 0 100  textregexne - ));
 DESCR("does not match regex., case-sensitive");
 DATA(insert OID = 1257 (  textlen         PGUID 12 f t t t 1 f 23 "25" 100 0 0 100  textlen - ));
 DESCR("length");
-DATA(insert OID = 1258 (  textcat         PGUID 12 f t t t 2 f 25 "25 25" 100 0 0 100  textcat - ));
+DATA(insert OID = 1258 (  textcat         PGUID 12 f t t t 2 f 25 "25 25" 100 0 0 100  textcat - ));
 DESCR("concatenate");
 
-DATA(insert OID =  84 (  boolne               PGUID 12 f t t t 2 f 16 "16 16" 100 0 0 100  boolne - ));
+DATA(insert OID =  84 (  boolne               PGUID 12 f t t t 2 f 16 "16 16" 100 0 0 100  boolne - ));
 DESCR("not equal");
 DATA(insert OID =  89 (  version          PGUID 12 f t f t 0 f 25 "" 100 0 0 100 pgsql_version - ));
 DESCR("PostgreSQL version string");
@@ -222,20 +222,20 @@ DATA(insert OID = 103 (  scalarltsel     PGUID 12 f t f t 4 f 701 "0 26 0 23" 100
 DESCR("restriction selectivity of < and related operators on scalar datatypes");
 DATA(insert OID = 104 (  scalargtsel      PGUID 12 f t f t 4 f 701 "0 26 0 23" 100 0 0 100  scalargtsel - ));
 DESCR("restriction selectivity of > and related operators on scalar datatypes");
-DATA(insert OID = 105 (  eqjoinsel        PGUID 12 f t f t 3 f 701 "0 26 0" 100 0 0 100    eqjoinsel - ));
+DATA(insert OID = 105 (  eqjoinsel        PGUID 12 f t f t 3 f 701 "0 26 0" 100 0 0 100  eqjoinsel - ));
 DESCR("join selectivity of = and related operators");
-DATA(insert OID = 106 (  neqjoinsel           PGUID 12 f t f t 3 f 701 "0 26 0" 100 0 0 100    neqjoinsel - ));
+DATA(insert OID = 106 (  neqjoinsel           PGUID 12 f t f t 3 f 701 "0 26 0" 100 0 0 100  neqjoinsel - ));
 DESCR("join selectivity of <> and related operators");
-DATA(insert OID = 107 (  scalarltjoinsel   PGUID 12 f t f t 3 f 701 "0 26 0" 100 0 0 100   scalarltjoinsel - ));
+DATA(insert OID = 107 (  scalarltjoinsel   PGUID 12 f t f t 3 f 701 "0 26 0" 100 0 0 100  scalarltjoinsel - ));
 DESCR("join selectivity of < and related operators on scalar datatypes");
-DATA(insert OID = 108 (  scalargtjoinsel   PGUID 12 f t f t 3 f 701 "0 26 0" 100 0 0 100   scalargtjoinsel - ));
+DATA(insert OID = 108 (  scalargtjoinsel   PGUID 12 f t f t 3 f 701 "0 26 0" 100 0 0 100  scalargtjoinsel - ));
 DESCR("join selectivity of > and related operators on scalar datatypes");
 
-DATA(insert OID = 112 (  text             PGUID 12 f t t t 1 f  25 "23" 100 0 0 100    int4_text - ));
+DATA(insert OID = 112 (  text             PGUID 12 f t t t 1 f  25 "23" 100 0 0 100  int4_text - ));
 DESCR("convert int4 to text");
-DATA(insert OID = 113 (  text             PGUID 12 f t t t 1 f  25 "21" 100 0 0 100    int2_text - ));
+DATA(insert OID = 113 (  text             PGUID 12 f t t t 1 f  25 "21" 100 0 0 100  int2_text - ));
 DESCR("convert int2 to text");
-DATA(insert OID = 114 (  text             PGUID 12 f t t t 1 f  25 "26" 100 0 0 100    oid_text - ));
+DATA(insert OID = 114 (  text             PGUID 12 f t t t 1 f  25 "26" 100 0 0 100  oid_text - ));
 DESCR("convert oid to text");
 
 DATA(insert OID = 115 (  box_above        PGUID 12 f t t t 2 f  16 "603 603" 100 0 0 100  box_above - ));
@@ -259,29 +259,29 @@ DATA(insert OID = 123 (  box_in              PGUID 12 f t t t 1 f 603 "0" 100 0 0 100  b
 DESCR("(internal)");
 DATA(insert OID = 124 (  box_out          PGUID 12 f t t t 1 f 23  "0" 100 0 0 100  box_out - ));
 DESCR("(internal)");
-DATA(insert OID = 125 (  box_overlap      PGUID 12 f t t t 2 f 16 "603 603" 100 0 0 100    box_overlap - ));
+DATA(insert OID = 125 (  box_overlap      PGUID 12 f t t t 2 f 16 "603 603" 100 0 0 100  box_overlap - ));
 DESCR("overlaps");
-DATA(insert OID = 126 (  box_ge               PGUID 12 f t t t 2 f 16 "603 603" 100 0 0 100    box_ge - ));
+DATA(insert OID = 126 (  box_ge               PGUID 12 f t t t 2 f 16 "603 603" 100 0 0 100  box_ge - ));
 DESCR("greater-than-or-equal by area");
-DATA(insert OID = 127 (  box_gt               PGUID 12 f t t t 2 f 16 "603 603" 100 0 0 100    box_gt - ));
+DATA(insert OID = 127 (  box_gt               PGUID 12 f t t t 2 f 16 "603 603" 100 0 0 100  box_gt - ));
 DESCR("greater-than by area");
-DATA(insert OID = 128 (  box_eq               PGUID 12 f t t t 2 f 16 "603 603" 100 0 0 100    box_eq - ));
+DATA(insert OID = 128 (  box_eq               PGUID 12 f t t t 2 f 16 "603 603" 100 0 0 100  box_eq - ));
 DESCR("equal by area");
-DATA(insert OID = 129 (  box_lt               PGUID 12 f t t t 2 f 16 "603 603" 100 0 0 100    box_lt - ));
+DATA(insert OID = 129 (  box_lt               PGUID 12 f t t t 2 f 16 "603 603" 100 0 0 100  box_lt - ));
 DESCR("less-than by area");
-DATA(insert OID = 130 (  box_le               PGUID 12 f t t t 2 f 16 "603 603" 100 0 0 100    box_le - ));
+DATA(insert OID = 130 (  box_le               PGUID 12 f t t t 2 f 16 "603 603" 100 0 0 100  box_le - ));
 DESCR("less-than-or-equal by area");
-DATA(insert OID = 131 (  point_above      PGUID 12 f t t t 2 f 16 "600 600" 100 0 0 100    point_above - ));
+DATA(insert OID = 131 (  point_above      PGUID 12 f t t t 2 f 16 "600 600" 100 0 0 100  point_above - ));
 DESCR("is above");
-DATA(insert OID = 132 (  point_left           PGUID 12 f t t t 2 f 16 "600 600" 100 0 0 100    point_left - ));
+DATA(insert OID = 132 (  point_left           PGUID 12 f t t t 2 f 16 "600 600" 100 0 0 100  point_left - ));
 DESCR("is left of");
-DATA(insert OID = 133 (  point_right      PGUID 12 f t t t 2 f 16 "600 600" 100 0 0 100    point_right - ));
+DATA(insert OID = 133 (  point_right      PGUID 12 f t t t 2 f 16 "600 600" 100 0 0 100  point_right - ));
 DESCR("is right of");
-DATA(insert OID = 134 (  point_below      PGUID 12 f t t t 2 f 16 "600 600" 100 0 0 100    point_below - ));
+DATA(insert OID = 134 (  point_below      PGUID 12 f t t t 2 f 16 "600 600" 100 0 0 100  point_below - ));
 DESCR("is below");
-DATA(insert OID = 135 (  point_eq         PGUID 12 f t t t 2 f 16 "600 600" 100 0 0 100    point_eq - ));
+DATA(insert OID = 135 (  point_eq         PGUID 12 f t t t 2 f 16 "600 600" 100 0 0 100  point_eq - ));
 DESCR("same as");
-DATA(insert OID = 136 (  on_pb            PGUID 12 f t t t 2 f 16 "600 603" 100 0 0 100    on_pb - ));
+DATA(insert OID = 136 (  on_pb            PGUID 12 f t t t 2 f 16 "600 603" 100 0 0 100  on_pb - ));
 DESCR("point is inside");
 DATA(insert OID = 137 (  on_ppath         PGUID 12 f t t t 2 f 16 "600 602" 100 0 0 100  on_ppath - ));
 DESCR("contained in");
@@ -289,109 +289,109 @@ DATA(insert OID = 138 (  box_center        PGUID 12 f t t t 1 f 600 "603" 100 0 0 1
 DESCR("center of");
 DATA(insert OID = 139 (  areasel          PGUID 12 f t f t 4 f 701 "0 26 0 23" 100 0 0 100  areasel - ));
 DESCR("restriction selectivity for area-comparison operators");
-DATA(insert OID = 140 (  areajoinsel      PGUID 12 f t f t 3 f 701 "0 26 0" 100 0 0 100    areajoinsel - ));
+DATA(insert OID = 140 (  areajoinsel      PGUID 12 f t f t 3 f 701 "0 26 0" 100 0 0 100  areajoinsel - ));
 DESCR("join selectivity for area-comparison operators");
-DATA(insert OID = 141 (  int4mul          PGUID 12 f t t t 2 f 23 "23 23" 100 0 0 100  int4mul - ));
+DATA(insert OID = 141 (  int4mul          PGUID 12 f t t t 2 f 23 "23 23" 100 0 0 100  int4mul - ));
 DESCR("multiply");
 DATA(insert OID = 142 (  int4fac          PGUID 12 f t t t 1 f 23 "23" 100 0 0 100  int4fac - ));
 DESCR("factorial");
-DATA(insert OID = 144 (  int4ne               PGUID 12 f t t t 2 f 16 "23 23" 100 0 0 100  int4ne - ));
+DATA(insert OID = 144 (  int4ne               PGUID 12 f t t t 2 f 16 "23 23" 100 0 0 100  int4ne - ));
 DESCR("not equal");
-DATA(insert OID = 145 (  int2ne               PGUID 12 f t t t 2 f 16 "21 21" 100 0 0 100  int2ne - ));
+DATA(insert OID = 145 (  int2ne               PGUID 12 f t t t 2 f 16 "21 21" 100 0 0 100  int2ne - ));
 DESCR("not equal");
-DATA(insert OID = 146 (  int2gt               PGUID 12 f t t t 2 f 16 "21 21" 100 0 0 100  int2gt - ));
+DATA(insert OID = 146 (  int2gt               PGUID 12 f t t t 2 f 16 "21 21" 100 0 0 100  int2gt - ));
 DESCR("greater-than");
-DATA(insert OID = 147 (  int4gt               PGUID 12 f t t t 2 f 16 "23 23" 100 0 0 100  int4gt - ));
+DATA(insert OID = 147 (  int4gt               PGUID 12 f t t t 2 f 16 "23 23" 100 0 0 100  int4gt - ));
 DESCR("greater-than");
-DATA(insert OID = 148 (  int2le               PGUID 12 f t t t 2 f 16 "21 21" 100 0 0 100  int2le - ));
+DATA(insert OID = 148 (  int2le               PGUID 12 f t t t 2 f 16 "21 21" 100 0 0 100  int2le - ));
 DESCR("less-than-or-equal");
-DATA(insert OID = 149 (  int4le               PGUID 12 f t t t 2 f 16 "23 23" 100 0 0 100  int4le - ));
+DATA(insert OID = 149 (  int4le               PGUID 12 f t t t 2 f 16 "23 23" 100 0 0 100  int4le - ));
 DESCR("less-than-or-equal");
-DATA(insert OID = 150 (  int4ge               PGUID 12 f t t t 2 f 16 "23 23" 100 0 0 100  int4ge - ));
+DATA(insert OID = 150 (  int4ge               PGUID 12 f t t t 2 f 16 "23 23" 100 0 0 100  int4ge - ));
 DESCR("greater-than-or-equal");
-DATA(insert OID = 151 (  int2ge               PGUID 12 f t t t 2 f 16 "21 21" 100 0 0 100  int2ge - ));
+DATA(insert OID = 151 (  int2ge               PGUID 12 f t t t 2 f 16 "21 21" 100 0 0 100  int2ge - ));
 DESCR("greater-than-or-equal");
-DATA(insert OID = 152 (  int2mul          PGUID 12 f t t t 2 f 21 "21 21" 100 0 0 100  int2mul - ));
+DATA(insert OID = 152 (  int2mul          PGUID 12 f t t t 2 f 21 "21 21" 100 0 0 100  int2mul - ));
 DESCR("multiply");
-DATA(insert OID = 153 (  int2div          PGUID 12 f t t t 2 f 21 "21 21" 100 0 0 100  int2div - ));
+DATA(insert OID = 153 (  int2div          PGUID 12 f t t t 2 f 21 "21 21" 100 0 0 100  int2div - ));
 DESCR("divide");
-DATA(insert OID = 154 (  int4div          PGUID 12 f t t t 2 f 23 "23 23" 100 0 0 100  int4div - ));
+DATA(insert OID = 154 (  int4div          PGUID 12 f t t t 2 f 23 "23 23" 100 0 0 100  int4div - ));
 DESCR("divide");
-DATA(insert OID = 155 (  int2mod          PGUID 12 f t t t 2 f 21 "21 21" 100 0 0 100  int2mod - ));
+DATA(insert OID = 155 (  int2mod          PGUID 12 f t t t 2 f 21 "21 21" 100 0 0 100  int2mod - ));
 DESCR("modulus");
-DATA(insert OID = 156 (  int4mod          PGUID 12 f t t t 2 f 23 "23 23" 100 0 0 100  int4mod - ));
+DATA(insert OID = 156 (  int4mod          PGUID 12 f t t t 2 f 23 "23 23" 100 0 0 100  int4mod - ));
 DESCR("modulus");
-DATA(insert OID = 157 (  textne               PGUID 12 f t t t 2 f 16 "25 25" 100 0 0 100  textne - ));
+DATA(insert OID = 157 (  textne               PGUID 12 f t t t 2 f 16 "25 25" 100 0 0 100  textne - ));
 DESCR("not equal");
-DATA(insert OID = 158 (  int24eq          PGUID 12 f t t t 2 f 16 "21 23" 100 0 0 100  int24eq - ));
+DATA(insert OID = 158 (  int24eq          PGUID 12 f t t t 2 f 16 "21 23" 100 0 0 100  int24eq - ));
 DESCR("equal");
-DATA(insert OID = 159 (  int42eq          PGUID 12 f t t t 2 f 16 "23 21" 100 0 0 100  int42eq - ));
+DATA(insert OID = 159 (  int42eq          PGUID 12 f t t t 2 f 16 "23 21" 100 0 0 100  int42eq - ));
 DESCR("equal");
-DATA(insert OID = 160 (  int24lt          PGUID 12 f t t t 2 f 16 "21 23" 100 0 0 100  int24lt - ));
+DATA(insert OID = 160 (  int24lt          PGUID 12 f t t t 2 f 16 "21 23" 100 0 0 100  int24lt - ));
 DESCR("less-than");
-DATA(insert OID = 161 (  int42lt          PGUID 12 f t t t 2 f 16 "23 21" 100 0 0 100  int42lt - ));
+DATA(insert OID = 161 (  int42lt          PGUID 12 f t t t 2 f 16 "23 21" 100 0 0 100  int42lt - ));
 DESCR("less-than");
-DATA(insert OID = 162 (  int24gt          PGUID 12 f t t t 2 f 16 "21 23" 100 0 0 100  int24gt - ));
+DATA(insert OID = 162 (  int24gt          PGUID 12 f t t t 2 f 16 "21 23" 100 0 0 100  int24gt - ));
 DESCR("greater-than");
-DATA(insert OID = 163 (  int42gt          PGUID 12 f t t t 2 f 16 "23 21" 100 0 0 100  int42gt - ));
+DATA(insert OID = 163 (  int42gt          PGUID 12 f t t t 2 f 16 "23 21" 100 0 0 100  int42gt - ));
 DESCR("greater-than");
-DATA(insert OID = 164 (  int24ne          PGUID 12 f t t t 2 f 16 "21 23" 100 0 0 100  int24ne - ));
+DATA(insert OID = 164 (  int24ne          PGUID 12 f t t t 2 f 16 "21 23" 100 0 0 100  int24ne - ));
 DESCR("not equal");
-DATA(insert OID = 165 (  int42ne          PGUID 12 f t t t 2 f 16 "23 21" 100 0 0 100  int42ne - ));
+DATA(insert OID = 165 (  int42ne          PGUID 12 f t t t 2 f 16 "23 21" 100 0 0 100  int42ne - ));
 DESCR("not equal");
-DATA(insert OID = 166 (  int24le          PGUID 12 f t t t 2 f 16 "21 23" 100 0 0 100  int24le - ));
+DATA(insert OID = 166 (  int24le          PGUID 12 f t t t 2 f 16 "21 23" 100 0 0 100  int24le - ));
 DESCR("less-than-or-equal");
-DATA(insert OID = 167 (  int42le          PGUID 12 f t t t 2 f 16 "23 21" 100 0 0 100  int42le - ));
+DATA(insert OID = 167 (  int42le          PGUID 12 f t t t 2 f 16 "23 21" 100 0 0 100  int42le - ));
 DESCR("less-than-or-equal");
-DATA(insert OID = 168 (  int24ge          PGUID 12 f t t t 2 f 16 "21 23" 100 0 0 100  int24ge - ));
+DATA(insert OID = 168 (  int24ge          PGUID 12 f t t t 2 f 16 "21 23" 100 0 0 100  int24ge - ));
 DESCR("greater-than-or-equal");
-DATA(insert OID = 169 (  int42ge          PGUID 12 f t t t 2 f 16 "23 21" 100 0 0 100  int42ge - ));
+DATA(insert OID = 169 (  int42ge          PGUID 12 f t t t 2 f 16 "23 21" 100 0 0 100  int42ge - ));
 DESCR("greater-than-or-equal");
-DATA(insert OID = 170 (  int24mul         PGUID 12 f t t t 2 f 23 "21 23" 100 0 0 100  int24mul - ));
+DATA(insert OID = 170 (  int24mul         PGUID 12 f t t t 2 f 23 "21 23" 100 0 0 100  int24mul - ));
 DESCR("multiply");
-DATA(insert OID = 171 (  int42mul         PGUID 12 f t t t 2 f 23 "23 21" 100 0 0 100  int42mul - ));
+DATA(insert OID = 171 (  int42mul         PGUID 12 f t t t 2 f 23 "23 21" 100 0 0 100  int42mul - ));
 DESCR("multiply");
-DATA(insert OID = 172 (  int24div         PGUID 12 f t t t 2 f 23 "21 23" 100 0 0 100  int24div - ));
+DATA(insert OID = 172 (  int24div         PGUID 12 f t t t 2 f 23 "21 23" 100 0 0 100  int24div - ));
 DESCR("divide");
-DATA(insert OID = 173 (  int42div         PGUID 12 f t t t 2 f 23 "23 21" 100 0 0 100  int42div - ));
+DATA(insert OID = 173 (  int42div         PGUID 12 f t t t 2 f 23 "23 21" 100 0 0 100  int42div - ));
 DESCR("divide");
-DATA(insert OID = 174 (  int24mod         PGUID 12 f t t t 2 f 23 "21 23" 100 0 0 100  int24mod - ));
+DATA(insert OID = 174 (  int24mod         PGUID 12 f t t t 2 f 23 "21 23" 100 0 0 100  int24mod - ));
 DESCR("modulus");
-DATA(insert OID = 175 (  int42mod         PGUID 12 f t t t 2 f 23 "23 21" 100 0 0 100  int42mod - ));
+DATA(insert OID = 175 (  int42mod         PGUID 12 f t t t 2 f 23 "23 21" 100 0 0 100  int42mod - ));
 DESCR("modulus");
-DATA(insert OID = 176 (  int2pl               PGUID 12 f t t t 2 f 21 "21 21" 100 0 0 100  int2pl - ));
+DATA(insert OID = 176 (  int2pl               PGUID 12 f t t t 2 f 21 "21 21" 100 0 0 100  int2pl - ));
 DESCR("add");
-DATA(insert OID = 177 (  int4pl               PGUID 12 f t t t 2 f 23 "23 23" 100 0 0 100  int4pl - ));
+DATA(insert OID = 177 (  int4pl               PGUID 12 f t t t 2 f 23 "23 23" 100 0 0 100  int4pl - ));
 DESCR("add");
-DATA(insert OID = 178 (  int24pl          PGUID 12 f t t t 2 f 23 "21 23" 100 0 0 100  int24pl - ));
+DATA(insert OID = 178 (  int24pl          PGUID 12 f t t t 2 f 23 "21 23" 100 0 0 100  int24pl - ));
 DESCR("add");
-DATA(insert OID = 179 (  int42pl          PGUID 12 f t t t 2 f 23 "23 21" 100 0 0 100  int42pl - ));
+DATA(insert OID = 179 (  int42pl          PGUID 12 f t t t 2 f 23 "23 21" 100 0 0 100  int42pl - ));
 DESCR("add");
-DATA(insert OID = 180 (  int2mi               PGUID 12 f t t t 2 f 21 "21 21" 100 0 0 100  int2mi - ));
+DATA(insert OID = 180 (  int2mi               PGUID 12 f t t t 2 f 21 "21 21" 100 0 0 100  int2mi - ));
 DESCR("subtract");
-DATA(insert OID = 181 (  int4mi               PGUID 12 f t t t 2 f 23 "23 23" 100 0 0 100  int4mi - ));
+DATA(insert OID = 181 (  int4mi               PGUID 12 f t t t 2 f 23 "23 23" 100 0 0 100  int4mi - ));
 DESCR("subtract");
-DATA(insert OID = 182 (  int24mi          PGUID 12 f t t t 2 f 23 "21 23" 100 0 0 100  int24mi - ));
+DATA(insert OID = 182 (  int24mi          PGUID 12 f t t t 2 f 23 "21 23" 100 0 0 100  int24mi - ));
 DESCR("subtract");
-DATA(insert OID = 183 (  int42mi          PGUID 12 f t t t 2 f 23 "23 21" 100 0 0 100  int42mi - ));
+DATA(insert OID = 183 (  int42mi          PGUID 12 f t t t 2 f 23 "23 21" 100 0 0 100  int42mi - ));
 DESCR("subtract");
-DATA(insert OID = 184 (  oideq            PGUID 12 f t t t 2 f 16 "26 26" 100 0 0 100  oideq - ));
+DATA(insert OID = 184 (  oideq            PGUID 12 f t t t 2 f 16 "26 26" 100 0 0 100  oideq - ));
 DESCR("equal");
-DATA(insert OID = 185 (  oidne            PGUID 12 f t t t 2 f 16 "26 26" 100 0 0 100  oidne - ));
+DATA(insert OID = 185 (  oidne            PGUID 12 f t t t 2 f 16 "26 26" 100 0 0 100  oidne - ));
 DESCR("not equal");
-DATA(insert OID = 186 (  box_same         PGUID 12 f t t t 2 f 16 "603 603" 100 0 0 100    box_same - ));
+DATA(insert OID = 186 (  box_same         PGUID 12 f t t t 2 f 16 "603 603" 100 0 0 100  box_same - ));
 DESCR("same as");
-DATA(insert OID = 187 (  box_contain      PGUID 12 f t t t 2 f 16 "603 603" 100 0 0 100    box_contain - ));
+DATA(insert OID = 187 (  box_contain      PGUID 12 f t t t 2 f 16 "603 603" 100 0 0 100  box_contain - ));
 DESCR("contains");
-DATA(insert OID = 188 (  box_left         PGUID 12 f t t t 2 f 16 "603 603" 100 0 0 100    box_left - ));
+DATA(insert OID = 188 (  box_left         PGUID 12 f t t t 2 f 16 "603 603" 100 0 0 100  box_left - ));
 DESCR("is left of");
-DATA(insert OID = 189 (  box_overleft     PGUID 12 f t t t 2 f 16 "603 603" 100 0 0 100    box_overleft - ));
+DATA(insert OID = 189 (  box_overleft     PGUID 12 f t t t 2 f 16 "603 603" 100 0 0 100  box_overleft - ));
 DESCR("overlaps, but does not extend to right of");
-DATA(insert OID = 190 (  box_overright    PGUID 12 f t t t 2 f 16 "603 603" 100 0 0 100    box_overright - ));
+DATA(insert OID = 190 (  box_overright    PGUID 12 f t t t 2 f 16 "603 603" 100 0 0 100  box_overright - ));
 DESCR("overlaps, but does not extend to left of");
-DATA(insert OID = 191 (  box_right        PGUID 12 f t t t 2 f 16 "603 603" 100 0 0 100    box_right - ));
+DATA(insert OID = 191 (  box_right        PGUID 12 f t t t 2 f 16 "603 603" 100 0 0 100  box_right - ));
 DESCR("is right of");
-DATA(insert OID = 192 (  box_contained    PGUID 12 f t t t 2 f 16 "603 603" 100 0 0 100    box_contained - ));
+DATA(insert OID = 192 (  box_contained    PGUID 12 f t t t 2 f 16 "603 603" 100 0 0 100  box_contained - ));
 DESCR("contained in");
 DATA(insert OID = 193 (  rt_box_union     PGUID 12 f t t t 2 f 603 "603 603" 100 0 0 100  rt_box_union - ));
 DESCR("r-tree");
@@ -501,77 +501,77 @@ DATA(insert OID = 242 (  reltimein           PGUID 12 f t f t 1 f 703 "0" 100 0 0 100
 DESCR("(internal)");
 DATA(insert OID = 243 (  reltimeout           PGUID 12 f t f t 1 f 23  "0" 100 0 0 100  reltimeout - ));
 DESCR("(internal)");
-DATA(insert OID = 244 (  timepl               PGUID 12 f t f t 2 f 702 "702 703" 100 0 0 100  timepl - ));
+DATA(insert OID = 244 (  timepl               PGUID 12 f t t t 2 f 702 "702 703" 100 0 0 100  timepl - ));
 DESCR("add");
-DATA(insert OID = 245 (  timemi               PGUID 12 f t f t 2 f 702 "702 703" 100 0 0 100  timemi - ));
+DATA(insert OID = 245 (  timemi               PGUID 12 f t t t 2 f 702 "702 703" 100 0 0 100  timemi - ));
 DESCR("subtract");
 DATA(insert OID = 246 (  tintervalin      PGUID 12 f t f t 1 f 704 "0" 100 0 0 100  tintervalin - ));
 DESCR("(internal)");
 DATA(insert OID = 247 (  tintervalout     PGUID 12 f t f t 1 f 23  "0" 100 0 0 100  tintervalout - ));
 DESCR("(internal)");
-DATA(insert OID = 248 (  intinterval      PGUID 12 f t f t 2 f 16 "702 704" 100 0 0 100    intinterval - ));
+DATA(insert OID = 248 (  intinterval      PGUID 12 f t f t 2 f 16 "702 704" 100 0 0 100  intinterval - ));
 DESCR("abstime in tinterval");
 DATA(insert OID = 249 (  tintervalrel     PGUID 12 f t f t 1 f 703 "704" 100 0 0 100  tintervalrel - ));
 DESCR("");
 DATA(insert OID = 250 (  timenow          PGUID 12 f t f t 0 f 702 "0" 100 0 0 100  timenow - ));
 DESCR("Current date and time (abstime)");
-DATA(insert OID = 251 (  abstimeeq        PGUID 12 f t f t 2 f 16 "702 702" 100 0 0 100    abstimeeq - ));
+DATA(insert OID = 251 (  abstimeeq        PGUID 12 f t f t 2 f 16 "702 702" 100 0 0 100  abstimeeq - ));
 DESCR("equal");
-DATA(insert OID = 252 (  abstimene        PGUID 12 f t f t 2 f 16 "702 702" 100 0 0 100    abstimene - ));
+DATA(insert OID = 252 (  abstimene        PGUID 12 f t f t 2 f 16 "702 702" 100 0 0 100  abstimene - ));
 DESCR("not equal");
-DATA(insert OID = 253 (  abstimelt        PGUID 12 f t f t 2 f 16 "702 702" 100 0 0 100    abstimelt - ));
+DATA(insert OID = 253 (  abstimelt        PGUID 12 f t f t 2 f 16 "702 702" 100 0 0 100  abstimelt - ));
 DESCR("less-than");
-DATA(insert OID = 254 (  abstimegt        PGUID 12 f t f t 2 f 16 "702 702" 100 0 0 100    abstimegt - ));
+DATA(insert OID = 254 (  abstimegt        PGUID 12 f t f t 2 f 16 "702 702" 100 0 0 100  abstimegt - ));
 DESCR("greater-than");
-DATA(insert OID = 255 (  abstimele        PGUID 12 f t f t 2 f 16 "702 702" 100 0 0 100    abstimele - ));
+DATA(insert OID = 255 (  abstimele        PGUID 12 f t f t 2 f 16 "702 702" 100 0 0 100  abstimele - ));
 DESCR("less-than-or-equal");
-DATA(insert OID = 256 (  abstimege        PGUID 12 f t f t 2 f 16 "702 702" 100 0 0 100    abstimege - ));
+DATA(insert OID = 256 (  abstimege        PGUID 12 f t f t 2 f 16 "702 702" 100 0 0 100  abstimege - ));
 DESCR("greater-than-or-equal");
-DATA(insert OID = 257 (  reltimeeq        PGUID 12 f t t t 2 f 16 "703 703" 100 0 0 100    reltimeeq - ));
+DATA(insert OID = 257 (  reltimeeq        PGUID 12 f t t t 2 f 16 "703 703" 100 0 0 100  reltimeeq - ));
 DESCR("equal");
-DATA(insert OID = 258 (  reltimene        PGUID 12 f t t t 2 f 16 "703 703" 100 0 0 100    reltimene - ));
+DATA(insert OID = 258 (  reltimene        PGUID 12 f t t t 2 f 16 "703 703" 100 0 0 100  reltimene - ));
 DESCR("not equal");
-DATA(insert OID = 259 (  reltimelt        PGUID 12 f t t t 2 f 16 "703 703" 100 0 0 100    reltimelt - ));
+DATA(insert OID = 259 (  reltimelt        PGUID 12 f t t t 2 f 16 "703 703" 100 0 0 100  reltimelt - ));
 DESCR("less-than");
-DATA(insert OID = 260 (  reltimegt        PGUID 12 f t t t 2 f 16 "703 703" 100 0 0 100    reltimegt - ));
+DATA(insert OID = 260 (  reltimegt        PGUID 12 f t t t 2 f 16 "703 703" 100 0 0 100  reltimegt - ));
 DESCR("greater-than");
-DATA(insert OID = 261 (  reltimele        PGUID 12 f t t t 2 f 16 "703 703" 100 0 0 100    reltimele - ));
+DATA(insert OID = 261 (  reltimele        PGUID 12 f t t t 2 f 16 "703 703" 100 0 0 100  reltimele - ));
 DESCR("less-than-or-equal");
-DATA(insert OID = 262 (  reltimege        PGUID 12 f t t t 2 f 16 "703 703" 100 0 0 100    reltimege - ));
+DATA(insert OID = 262 (  reltimege        PGUID 12 f t t t 2 f 16 "703 703" 100 0 0 100  reltimege - ));
 DESCR("greater-than-or-equal");
-DATA(insert OID = 263 (  tintervalsame    PGUID 12 f t f t 2 f 16 "704 704" 100 0 0 100    tintervalsame - ));
+DATA(insert OID = 263 (  tintervalsame    PGUID 12 f t f t 2 f 16 "704 704" 100 0 0 100  tintervalsame - ));
 DESCR("same as");
-DATA(insert OID = 264 (  tintervalct      PGUID 12 f t f t 2 f 16 "704 704" 100 0 0 100    tintervalct - ));
+DATA(insert OID = 264 (  tintervalct      PGUID 12 f t f t 2 f 16 "704 704" 100 0 0 100  tintervalct - ));
 DESCR("less-than");
-DATA(insert OID = 265 (  tintervalov      PGUID 12 f t f t 2 f 16 "704 704" 100 0 0 100    tintervalov - ));
+DATA(insert OID = 265 (  tintervalov      PGUID 12 f t f t 2 f 16 "704 704" 100 0 0 100  tintervalov - ));
 DESCR("overlaps");
-DATA(insert OID = 266 (  tintervalleneq    PGUID 12 f t f t 2 f 16 "704 703" 100 0 0 100   tintervalleneq - ));
+DATA(insert OID = 266 (  tintervalleneq    PGUID 12 f t f t 2 f 16 "704 703" 100 0 0 100  tintervalleneq - ));
 DESCR("length equal");
-DATA(insert OID = 267 (  tintervallenne    PGUID 12 f t f t 2 f 16 "704 703" 100 0 0 100   tintervallenne - ));
+DATA(insert OID = 267 (  tintervallenne    PGUID 12 f t f t 2 f 16 "704 703" 100 0 0 100  tintervallenne - ));
 DESCR("length not equal to");
-DATA(insert OID = 268 (  tintervallenlt    PGUID 12 f t f t 2 f 16 "704 703" 100 0 0 100   tintervallenlt - ));
+DATA(insert OID = 268 (  tintervallenlt    PGUID 12 f t f t 2 f 16 "704 703" 100 0 0 100  tintervallenlt - ));
 DESCR("length less-than");
-DATA(insert OID = 269 (  tintervallengt    PGUID 12 f t f t 2 f 16 "704 703" 100 0 0 100   tintervallengt - ));
+DATA(insert OID = 269 (  tintervallengt    PGUID 12 f t f t 2 f 16 "704 703" 100 0 0 100  tintervallengt - ));
 DESCR("length greater-than");
-DATA(insert OID = 270 (  tintervallenle    PGUID 12 f t f t 2 f 16 "704 703" 100 0 0 100   tintervallenle - ));
+DATA(insert OID = 270 (  tintervallenle    PGUID 12 f t f t 2 f 16 "704 703" 100 0 0 100  tintervallenle - ));
 DESCR("length less-than-or-equal");
-DATA(insert OID = 271 (  tintervallenge    PGUID 12 f t f t 2 f 16 "704 703" 100 0 0 100   tintervallenge - ));
+DATA(insert OID = 271 (  tintervallenge    PGUID 12 f t f t 2 f 16 "704 703" 100 0 0 100  tintervallenge - ));
 DESCR("length greater-than-or-equal");
 DATA(insert OID = 272 (  tintervalstart    PGUID 12 f t f t 1 f 702 "704" 100 0 0 100  tintervalstart - ));
 DESCR("start of interval");
 DATA(insert OID = 273 (  tintervalend     PGUID 12 f t f t 1 f 702 "704" 100 0 0 100  tintervalend - ));
 DESCR("");
-DATA(insert OID = 274 (  timeofday        PGUID 12 f t f t 0 f 25 "0" 100 0 0 100  timeofday - ));
+DATA(insert OID = 274 (  timeofday        PGUID 12 f t f t 0 f 25 "0" 100 0 0 100  timeofday - ));
 DESCR("Current date and time with microseconds");
-DATA(insert OID = 275 (  isfinite         PGUID 12 f t f t 1 f 16 "702" 100 0 0 100    abstime_finite - ));
+DATA(insert OID = 275 (  isfinite         PGUID 12 f t f t 1 f 16 "702" 100 0 0 100  abstime_finite - ));
 DESCR("");
 
 DATA(insert OID = 276 (  int2fac          PGUID 12 f t t t 1 f 23 "21" 100 0 0 100  int2fac - ));
 DESCR("factorial");
 
-DATA(insert OID = 277 (  inter_sl         PGUID 12 f t t t 2 f 16 "601 628" 100 0 0 100    inter_sl - ));
+DATA(insert OID = 277 (  inter_sl         PGUID 12 f t t t 2 f 16 "601 628" 100 0 0 100  inter_sl - ));
 DESCR("");
-DATA(insert OID = 278 (  inter_lb         PGUID 12 f t t t 2 f 16 "628 603" 100 0 0 100    inter_lb - ));
+DATA(insert OID = 278 (  inter_lb         PGUID 12 f t t t 2 f 16 "628 603" 100 0 0 100  inter_lb - ));
 DESCR("");
 
 DATA(insert OID = 279 (  float48mul           PGUID 12 f t t t 2 f 701 "700 701" 100 0 0 100  float48mul - ));
@@ -591,58 +591,58 @@ DESCR("add");
 DATA(insert OID = 286 (  float84mi        PGUID 12 f t t t 2 f 701 "701 700" 100 0 0 100  float84mi - ));
 DESCR("subtract");
 
-DATA(insert OID = 287 (  float4eq         PGUID 12 f t t t 2 f 16 "700 700" 100 0 0 100    float4eq - ));
+DATA(insert OID = 287 (  float4eq         PGUID 12 f t t t 2 f 16 "700 700" 100 0 0 100  float4eq - ));
 DESCR("equal");
-DATA(insert OID = 288 (  float4ne         PGUID 12 f t t t 2 f 16 "700 700" 100 0 0 100    float4ne - ));
+DATA(insert OID = 288 (  float4ne         PGUID 12 f t t t 2 f 16 "700 700" 100 0 0 100  float4ne - ));
 DESCR("not equal");
-DATA(insert OID = 289 (  float4lt         PGUID 12 f t t t 2 f 16 "700 700" 100 0 0 100    float4lt - ));
+DATA(insert OID = 289 (  float4lt         PGUID 12 f t t t 2 f 16 "700 700" 100 0 0 100  float4lt - ));
 DESCR("less-than");
-DATA(insert OID = 290 (  float4le         PGUID 12 f t t t 2 f 16 "700 700" 100 0 0 100    float4le - ));
+DATA(insert OID = 290 (  float4le         PGUID 12 f t t t 2 f 16 "700 700" 100 0 0 100  float4le - ));
 DESCR("less-than-or-equal");
-DATA(insert OID = 291 (  float4gt         PGUID 12 f t t t 2 f 16 "700 700" 100 0 0 100    float4gt - ));
+DATA(insert OID = 291 (  float4gt         PGUID 12 f t t t 2 f 16 "700 700" 100 0 0 100  float4gt - ));
 DESCR("greater-than");
-DATA(insert OID = 292 (  float4ge         PGUID 12 f t t t 2 f 16 "700 700" 100 0 0 100    float4ge - ));
+DATA(insert OID = 292 (  float4ge         PGUID 12 f t t t 2 f 16 "700 700" 100 0 0 100  float4ge - ));
 DESCR("greater-than-or-equal");
 
-DATA(insert OID = 293 (  float8eq         PGUID 12 f t t t 2 f 16 "701 701" 100 0 0 100    float8eq - ));
+DATA(insert OID = 293 (  float8eq         PGUID 12 f t t t 2 f 16 "701 701" 100 0 0 100  float8eq - ));
 DESCR("equal");
-DATA(insert OID = 294 (  float8ne         PGUID 12 f t t t 2 f 16 "701 701" 100 0 0 100    float8ne - ));
+DATA(insert OID = 294 (  float8ne         PGUID 12 f t t t 2 f 16 "701 701" 100 0 0 100  float8ne - ));
 DESCR("not equal");
-DATA(insert OID = 295 (  float8lt         PGUID 12 f t t t 2 f 16 "701 701" 100 0 0 100    float8lt - ));
+DATA(insert OID = 295 (  float8lt         PGUID 12 f t t t 2 f 16 "701 701" 100 0 0 100  float8lt - ));
 DESCR("less-than");
-DATA(insert OID = 296 (  float8le         PGUID 12 f t t t 2 f 16 "701 701" 100 0 0 100    float8le - ));
+DATA(insert OID = 296 (  float8le         PGUID 12 f t t t 2 f 16 "701 701" 100 0 0 100  float8le - ));
 DESCR("less-than-or-equal");
-DATA(insert OID = 297 (  float8gt         PGUID 12 f t t t 2 f 16 "701 701" 100 0 0 100    float8gt - ));
+DATA(insert OID = 297 (  float8gt         PGUID 12 f t t t 2 f 16 "701 701" 100 0 0 100  float8gt - ));
 DESCR("greater-than");
-DATA(insert OID = 298 (  float8ge         PGUID 12 f t t t 2 f 16 "701 701" 100 0 0 100    float8ge - ));
+DATA(insert OID = 298 (  float8ge         PGUID 12 f t t t 2 f 16 "701 701" 100 0 0 100  float8ge - ));
 DESCR("greater-than-or-equal");
 
-DATA(insert OID = 299 (  float48eq        PGUID 12 f t t t 2 f 16 "700 701" 100 0 0 100    float48eq - ));
+DATA(insert OID = 299 (  float48eq        PGUID 12 f t t t 2 f 16 "700 701" 100 0 0 100  float48eq - ));
 DESCR("equal");
 
 /* OIDS 300 - 399 */
 
-DATA(insert OID = 300 (  float48ne        PGUID 12 f t t t 2 f 16 "700 701" 100 0 0 100    float48ne - ));
+DATA(insert OID = 300 (  float48ne        PGUID 12 f t t t 2 f 16 "700 701" 100 0 0 100  float48ne - ));
 DESCR("not equal");
-DATA(insert OID = 301 (  float48lt        PGUID 12 f t t t 2 f 16 "700 701" 100 0 0 100    float48lt - ));
+DATA(insert OID = 301 (  float48lt        PGUID 12 f t t t 2 f 16 "700 701" 100 0 0 100  float48lt - ));
 DESCR("less-than");
-DATA(insert OID = 302 (  float48le        PGUID 12 f t t t 2 f 16 "700 701" 100 0 0 100    float48le - ));
+DATA(insert OID = 302 (  float48le        PGUID 12 f t t t 2 f 16 "700 701" 100 0 0 100  float48le - ));
 DESCR("less-than-or-equal");
-DATA(insert OID = 303 (  float48gt        PGUID 12 f t t t 2 f 16 "700 701" 100 0 0 100    float48gt - ));
+DATA(insert OID = 303 (  float48gt        PGUID 12 f t t t 2 f 16 "700 701" 100 0 0 100  float48gt - ));
 DESCR("greater-than");
-DATA(insert OID = 304 (  float48ge        PGUID 12 f t t t 2 f 16 "700 701" 100 0 0 100    float48ge - ));
+DATA(insert OID = 304 (  float48ge        PGUID 12 f t t t 2 f 16 "700 701" 100 0 0 100  float48ge - ));
 DESCR("greater-than-or-equal");
-DATA(insert OID = 305 (  float84eq        PGUID 12 f t t t 2 f 16 "701 700" 100 0 0 100    float84eq - ));
+DATA(insert OID = 305 (  float84eq        PGUID 12 f t t t 2 f 16 "701 700" 100 0 0 100  float84eq - ));
 DESCR("equal");
-DATA(insert OID = 306 (  float84ne        PGUID 12 f t t t 2 f 16 "701 700" 100 0 0 100    float84ne - ));
+DATA(insert OID = 306 (  float84ne        PGUID 12 f t t t 2 f 16 "701 700" 100 0 0 100  float84ne - ));
 DESCR("not equal");
-DATA(insert OID = 307 (  float84lt        PGUID 12 f t t t 2 f 16 "701 700" 100 0 0 100    float84lt - ));
+DATA(insert OID = 307 (  float84lt        PGUID 12 f t t t 2 f 16 "701 700" 100 0 0 100  float84lt - ));
 DESCR("less-than");
-DATA(insert OID = 308 (  float84le        PGUID 12 f t t t 2 f 16 "701 700" 100 0 0 100    float84le - ));
+DATA(insert OID = 308 (  float84le        PGUID 12 f t t t 2 f 16 "701 700" 100 0 0 100  float84le - ));
 DESCR("less-than-or-equal");
-DATA(insert OID = 309 (  float84gt        PGUID 12 f t t t 2 f 16 "701 700" 100 0 0 100    float84gt - ));
+DATA(insert OID = 309 (  float84gt        PGUID 12 f t t t 2 f 16 "701 700" 100 0 0 100  float84gt - ));
 DESCR("greater-than");
-DATA(insert OID = 310 (  float84ge        PGUID 12 f t t t 2 f 16 "701 700" 100 0 0 100    float84ge - ));
+DATA(insert OID = 310 (  float84ge        PGUID 12 f t t t 2 f 16 "701 700" 100 0 0 100  float84ge - ));
 DESCR("greater-than-or-equal");
 
 DATA(insert OID = 311 (  float8               PGUID 12 f t t t 1 f 701 "700" 100 0 0 100  ftod - ));
@@ -653,7 +653,7 @@ DATA(insert OID = 313 (  int4              PGUID 12 f t t t 1 f  23  "21" 100 0 0 100  i
 DESCR("convert int2 to int4");
 DATA(insert OID = 314 (  int2             PGUID 12 f t t t 1 f  21  "23" 100 0 0 100  i4toi2 - ));
 DESCR("convert int4 to int2");
-DATA(insert OID = 315 (  int2vectoreq     PGUID 12 f t t t 2 f  16  "22 22" 100 0 0 100    int2vectoreq - ));
+DATA(insert OID = 315 (  int2vectoreq     PGUID 12 f t t t 2 f  16  "22 22" 100 0 0 100  int2vectoreq - ));
 DESCR("equal");
 DATA(insert OID = 316 (  float8               PGUID 12 f t t t 1 f 701  "23" 100 0 0 100  i4tod - ));
 DESCR("convert int4 to float8");
@@ -664,21 +664,21 @@ DESCR("convert int4 to float4");
 DATA(insert OID = 319 (  int4             PGUID 12 f t t t 1 f  23 "700" 100 0 0 100  ftoi4 - ));
 DESCR("convert float4 to int4");
 
-DATA(insert OID = 320 (  rtinsert         PGUID 12 f t f t 5 f 23 "0 0 0 0 0" 100 0 0 100  rtinsert - ));
+DATA(insert OID = 320 (  rtinsert         PGUID 12 f t f t 5 f 23 "0 0 0 0 0" 100 0 0 100  rtinsert - ));
 DESCR("r-tree(internal)");
 DATA(insert OID = 322 (  rtgettuple           PGUID 12 f t f t 2 f 23 "0 0" 100 0 0 100  rtgettuple - ));
 DESCR("r-tree(internal)");
-DATA(insert OID = 323 (  rtbuild          PGUID 12 f t f t 3 f 23 "0 0 0" 100 0 0 100  rtbuild - ));
+DATA(insert OID = 323 (  rtbuild          PGUID 12 f t f t 3 f 23 "0 0 0" 100 0 0 100  rtbuild - ));
 DESCR("r-tree(internal)");
 DATA(insert OID = 324 (  rtbeginscan      PGUID 12 f t f t 4 f 23 "0 0 0 0" 100 0 0 100  rtbeginscan - ));
 DESCR("r-tree(internal)");
-DATA(insert OID = 325 (  rtendscan        PGUID 12 f t f t 1 f 23 "0" 100 0 0 100  rtendscan - ));
+DATA(insert OID = 325 (  rtendscan        PGUID 12 f t f t 1 f 23 "0" 100 0 0 100  rtendscan - ));
 DESCR("r-tree(internal)");
-DATA(insert OID = 326 (  rtmarkpos        PGUID 12 f t f t 1 f 23 "0" 100 0 0 100  rtmarkpos - ));
+DATA(insert OID = 326 (  rtmarkpos        PGUID 12 f t f t 1 f 23 "0" 100 0 0 100  rtmarkpos - ));
 DESCR("r-tree(internal)");
-DATA(insert OID = 327 (  rtrestrpos           PGUID 12 f t f t 1 f 23 "0" 100 0 0 100  rtrestrpos - ));
+DATA(insert OID = 327 (  rtrestrpos           PGUID 12 f t f t 1 f 23 "0" 100 0 0 100  rtrestrpos - ));
 DESCR("r-tree(internal)");
-DATA(insert OID = 328 (  rtrescan         PGUID 12 f t f t 3 f 23 "0 0 0" 100 0 0 100  rtrescan - ));
+DATA(insert OID = 328 (  rtrescan         PGUID 12 f t f t 3 f 23 "0 0 0" 100 0 0 100  rtrescan - ));
 DESCR("r-tree(internal)");
 DATA(insert OID = 321 (  rtbulkdelete     PGUID 12 f t f t 3 f 23 "0 0 0" 100 0 0 100  rtbulkdelete - ));
 DESCR("r-tree(internal)");
@@ -687,19 +687,19 @@ DESCR("r-tree(internal)");
 
 DATA(insert OID = 330 (  btgettuple           PGUID 12 f t f t 2 f 23 "0 0" 100 0 0 100  btgettuple - ));
 DESCR("btree(internal)");
-DATA(insert OID = 331 (  btinsert         PGUID 12 f t f t 5 f 23 "0 0 0 0 0" 100 0 0 100  btinsert - ));
+DATA(insert OID = 331 (  btinsert         PGUID 12 f t f t 5 f 23 "0 0 0 0 0" 100 0 0 100  btinsert - ));
 DESCR("btree(internal)");
 DATA(insert OID = 333 (  btbeginscan      PGUID 12 f t f t 4 f 23 "0 0 0 0" 100 0 0 100  btbeginscan - ));
 DESCR("btree(internal)");
-DATA(insert OID = 334 (  btrescan         PGUID 12 f t f t 3 f 23 "0 0 0" 100 0 0 100  btrescan - ));
+DATA(insert OID = 334 (  btrescan         PGUID 12 f t f t 3 f 23 "0 0 0" 100 0 0 100  btrescan - ));
 DESCR("btree(internal)");
-DATA(insert OID = 335 (  btendscan        PGUID 12 f t f t 1 f 23 "0" 100 0 0 100  btendscan - ));
+DATA(insert OID = 335 (  btendscan        PGUID 12 f t f t 1 f 23 "0" 100 0 0 100  btendscan - ));
 DESCR("btree(internal)");
-DATA(insert OID = 336 (  btmarkpos        PGUID 12 f t f t 1 f 23 "0" 100 0 0 100  btmarkpos - ));
+DATA(insert OID = 336 (  btmarkpos        PGUID 12 f t f t 1 f 23 "0" 100 0 0 100  btmarkpos - ));
 DESCR("btree(internal)");
-DATA(insert OID = 337 (  btrestrpos           PGUID 12 f t f t 1 f 23 "0" 100 0 0 100  btrestrpos - ));
+DATA(insert OID = 337 (  btrestrpos           PGUID 12 f t f t 1 f 23 "0" 100 0 0 100  btrestrpos - ));
 DESCR("btree(internal)");
-DATA(insert OID = 338 (  btbuild          PGUID 12 f t f t 3 f 23 "0 0 0" 100 0 0 100  btbuild - ));
+DATA(insert OID = 338 (  btbuild          PGUID 12 f t f t 3 f 23 "0 0 0" 100 0 0 100  btbuild - ));
 DESCR("btree(internal)");
 DATA(insert OID = 332 (  btbulkdelete     PGUID 12 f t f t 3 f 23 "0 0 0" 100 0 0 100  btbulkdelete - ));
 DESCR("btree(internal)");
@@ -727,27 +727,27 @@ DESCR("(internal)");
 DATA(insert OID = 348 (  poly_out         PGUID 12 f t t t 1 f 23  "0" 100 0 0 100  poly_out - ));
 DESCR("(internal)");
 
-DATA(insert OID = 350 (  btint2cmp        PGUID 12 f t t t 2 f 23 "21 21" 100 0 0 100  btint2cmp - ));
+DATA(insert OID = 350 (  btint2cmp        PGUID 12 f t t t 2 f 23 "21 21" 100 0 0 100  btint2cmp - ));
 DESCR("btree less-equal-greater");
-DATA(insert OID = 351 (  btint4cmp        PGUID 12 f t t t 2 f 23 "23 23" 100 0 0 100  btint4cmp - ));
+DATA(insert OID = 351 (  btint4cmp        PGUID 12 f t t t 2 f 23 "23 23" 100 0 0 100  btint4cmp - ));
 DESCR("btree less-equal-greater");
-DATA(insert OID = 842 (  btint8cmp        PGUID 12 f t t t 2 f 23 "20 20" 100 0 0 100  btint8cmp - ));
+DATA(insert OID = 842 (  btint8cmp        PGUID 12 f t t t 2 f 23 "20 20" 100 0 0 100  btint8cmp - ));
 DESCR("btree less-equal-greater");
-DATA(insert OID = 354 (  btfloat4cmp      PGUID 12 f t t t 2 f 23 "700 700" 100 0 0 100    btfloat4cmp - ));
+DATA(insert OID = 354 (  btfloat4cmp      PGUID 12 f t t t 2 f 23 "700 700" 100 0 0 100  btfloat4cmp - ));
 DESCR("btree less-equal-greater");
-DATA(insert OID = 355 (  btfloat8cmp      PGUID 12 f t t t 2 f 23 "701 701" 100 0 0 100    btfloat8cmp - ));
+DATA(insert OID = 355 (  btfloat8cmp      PGUID 12 f t t t 2 f 23 "701 701" 100 0 0 100  btfloat8cmp - ));
 DESCR("btree less-equal-greater");
-DATA(insert OID = 356 (  btoidcmp         PGUID 12 f t t t 2 f 23 "26 26" 100 0 0 100  btoidcmp - ));
+DATA(insert OID = 356 (  btoidcmp         PGUID 12 f t t t 2 f 23 "26 26" 100 0 0 100  btoidcmp - ));
 DESCR("btree less-equal-greater");
-DATA(insert OID = 404 (  btoidvectorcmp    PGUID 12 f t t t 2 f 23 "30 30" 100 0 0 100 btoidvectorcmp - ));
+DATA(insert OID = 404 (  btoidvectorcmp    PGUID 12 f t t t 2 f 23 "30 30" 100 0 0 100  btoidvectorcmp - ));
 DESCR("btree less-equal-greater");
-DATA(insert OID = 357 (  btabstimecmp     PGUID 12 f t f t 2 f 23 "702 702" 100 0 0 100    btabstimecmp - ));
+DATA(insert OID = 357 (  btabstimecmp     PGUID 12 f t f t 2 f 23 "702 702" 100 0 0 100  btabstimecmp - ));
 DESCR("btree less-equal-greater");
-DATA(insert OID = 358 (  btcharcmp        PGUID 12 f t t t 2 f 23 "18 18" 100 0 0 100  btcharcmp - ));
+DATA(insert OID = 358 (  btcharcmp        PGUID 12 f t t t 2 f 23 "18 18" 100 0 0 100  btcharcmp - ));
 DESCR("btree less-equal-greater");
-DATA(insert OID = 359 (  btnamecmp        PGUID 12 f t t t 2 f 23 "19 19" 100 0 0 100  btnamecmp - ));
+DATA(insert OID = 359 (  btnamecmp        PGUID 12 f t t t 2 f 23 "19 19" 100 0 0 100  btnamecmp - ));
 DESCR("btree less-equal-greater");
-DATA(insert OID = 360 (  bttextcmp        PGUID 12 f t t t 2 f 23 "25 25" 100 0 0 100  bttextcmp - ));
+DATA(insert OID = 360 (  bttextcmp        PGUID 12 f t t t 2 f 23 "25 25" 100 0 0 100  bttextcmp - ));
 DESCR("btree less-equal-greater");
 
 DATA(insert OID = 361 (  lseg_distance    PGUID 12 f t t t 2 f 701 "601 601" 100 0 0 100  lseg_distance - ));
@@ -766,15 +766,15 @@ DATA(insert OID = 367 (  close_pb        PGUID 12 f t t t 2 f 600 "600 603" 100 0 0
 DESCR("closest point on box");
 DATA(insert OID = 368 (  close_sb         PGUID 12 f t t t 2 f 600 "601 603" 100 0 0 100  close_sb - ));
 DESCR("closest point to line segment on box");
-DATA(insert OID = 369 (  on_ps            PGUID 12 f t t t 2 f 16 "600 601" 100 0 0 100    on_ps - ));
+DATA(insert OID = 369 (  on_ps            PGUID 12 f t t t 2 f 16 "600 601" 100 0 0 100  on_ps - ));
 DESCR("point contained in segment");
 DATA(insert OID = 370 (  path_distance    PGUID 12 f t t t 2 f 701 "602 602" 100 0 0 100  path_distance - ));
 DESCR("distance between paths");
 DATA(insert OID = 371 (  dist_ppath           PGUID 12 f t t t 2 f 701 "600 602" 100 0 0 100  dist_ppath - ));
 DESCR("distance between point and path");
-DATA(insert OID = 372 (  on_sb            PGUID 12 f t t t 2 f 16 "601 603" 100 0 0 100    on_sb - ));
+DATA(insert OID = 372 (  on_sb            PGUID 12 f t t t 2 f 16 "601 603" 100 0 0 100  on_sb - ));
 DESCR("contained in");
-DATA(insert OID = 373 (  inter_sb         PGUID 12 f t t t 2 f 16 "601 603" 100 0 0 100    inter_sb - ));
+DATA(insert OID = 373 (  inter_sb         PGUID 12 f t t t 2 f 16 "601 603" 100 0 0 100  inter_sb - ));
 DESCR("intersects?");
 
 /* OIDS 400 - 499 */
@@ -785,24 +785,24 @@ DATA(insert OID =  407 (  name               PGUID 12 f t t t 1 f 19 "25" 100 0 0 100 tex
 DESCR("convert text to name");
 DATA(insert OID =  408 (  bpchar          PGUID 12 f t t t 1 f 1042 "19" 100 0 0 100 name_bpchar - ));
 DESCR("convert name to char()");
-DATA(insert OID =  409 (  name            PGUID 12 f t t t 1 f 19 "1042" 100 0 0 100   bpchar_name - ));
+DATA(insert OID =  409 (  name            PGUID 12 f t t t 1 f 19 "1042" 100 0 0 100  bpchar_name - ));
 DESCR("convert char() to name");
 
 DATA(insert OID = 440 (  hashgettuple     PGUID 12 f t f t 2 f 23 "0 0" 100 0 0 100  hashgettuple - ));
 DESCR("hash(internal)");
-DATA(insert OID = 441 (  hashinsert           PGUID 12 f t f t 5 f 23 "0 0 0 0 0" 100 0 0 100  hashinsert - ));
+DATA(insert OID = 441 (  hashinsert           PGUID 12 f t f t 5 f 23 "0 0 0 0 0" 100 0 0 100  hashinsert - ));
 DESCR("hash(internal)");
 DATA(insert OID = 443 (  hashbeginscan    PGUID 12 f t f t 4 f 23 "0 0 0 0" 100 0 0 100  hashbeginscan - ));
 DESCR("hash(internal)");
-DATA(insert OID = 444 (  hashrescan           PGUID 12 f t f t 3 f 23 "0 0 0" 100 0 0 100  hashrescan - ));
+DATA(insert OID = 444 (  hashrescan           PGUID 12 f t f t 3 f 23 "0 0 0" 100 0 0 100  hashrescan - ));
 DESCR("hash(internal)");
-DATA(insert OID = 445 (  hashendscan      PGUID 12 f t f t 1 f 23 "0" 100 0 0 100  hashendscan - ));
+DATA(insert OID = 445 (  hashendscan      PGUID 12 f t f t 1 f 23 "0" 100 0 0 100  hashendscan - ));
 DESCR("hash(internal)");
-DATA(insert OID = 446 (  hashmarkpos      PGUID 12 f t f t 1 f 23 "0" 100 0 0 100  hashmarkpos - ));
+DATA(insert OID = 446 (  hashmarkpos      PGUID 12 f t f t 1 f 23 "0" 100 0 0 100  hashmarkpos - ));
 DESCR("hash(internal)");
-DATA(insert OID = 447 (  hashrestrpos     PGUID 12 f t f t 1 f 23 "0" 100 0 0 100  hashrestrpos - ));
+DATA(insert OID = 447 (  hashrestrpos     PGUID 12 f t f t 1 f 23 "0" 100 0 0 100  hashrestrpos - ));
 DESCR("hash(internal)");
-DATA(insert OID = 448 (  hashbuild        PGUID 12 f t f t 3 f 23 "0 0 0" 100 0 0 100  hashbuild - ));
+DATA(insert OID = 448 (  hashbuild        PGUID 12 f t f t 3 f 23 "0 0 0" 100 0 0 100  hashbuild - ));
 DESCR("hash(internal)");
 DATA(insert OID = 442 (  hashbulkdelete       PGUID 12 f t f t 3 f 23 "0 0 0" 100 0 0 100  hashbulkdelete - ));
 DESCR("hash(internal)");
@@ -815,9 +815,9 @@ DATA(insert OID = 450 (  hashint4          PGUID 12 f t t t 1 f 23 "23" 100 0 0 100
 DESCR("hash");
 DATA(insert OID = 949 (  hashint8         PGUID 12 f t t t 1 f 23 "20" 100 0 0 100  hashint8 - ));
 DESCR("hash");
-DATA(insert OID = 451 (  hashfloat4           PGUID 12 f t t t 1 f 23 "700" 100 0 0 100    hashfloat4 - ));
+DATA(insert OID = 451 (  hashfloat4           PGUID 12 f t t t 1 f 23 "700" 100 0 0 100  hashfloat4 - ));
 DESCR("hash");
-DATA(insert OID = 452 (  hashfloat8           PGUID 12 f t t t 1 f 23 "701" 100 0 0 100    hashfloat8 - ));
+DATA(insert OID = 452 (  hashfloat8           PGUID 12 f t t t 1 f 23 "701" 100 0 0 100  hashfloat8 - ));
 DESCR("hash");
 DATA(insert OID = 453 (  hashoid          PGUID 12 f t t t 1 f 23 "26" 100 0 0 100  hashoid - ));
 DESCR("hash");
@@ -825,62 +825,62 @@ DATA(insert OID = 454 (  hashchar        PGUID 12 f t t t 1 f 23 "18" 100 0 0 100
 DESCR("hash");
 DATA(insert OID = 455 (  hashname         PGUID 12 f t t t 1 f 23 "19" 100 0 0 100  hashname - ));
 DESCR("hash");
-DATA(insert OID = 456 (  hashvarlena      PGUID 12 f t t t 1 f 23 "0" 100 0 0 100  hashvarlena - ));
+DATA(insert OID = 456 (  hashvarlena      PGUID 12 f t t t 1 f 23 "0" 100 0 0 100  hashvarlena - ));
 DESCR("hash any varlena type");
 DATA(insert OID = 457 (  hashoidvector    PGUID 12 f t t t 1 f 23 "30" 100 0 0 100  hashoidvector - ));
 DESCR("hash");
 DATA(insert OID = 399 (  hashmacaddr      PGUID 12 f t t t 1 f 23 "829" 100 0 0 100  hashmacaddr - ));
 DESCR("hash");
-DATA(insert OID = 458 (  text_larger      PGUID 12 f t t t 2 f 25 "25 25" 100 0 0 100  text_larger - ));
+DATA(insert OID = 458 (  text_larger      PGUID 12 f t t t 2 f 25 "25 25" 100 0 0 100  text_larger - ));
 DESCR("larger of two");
-DATA(insert OID = 459 (  text_smaller     PGUID 12 f t t t 2 f 25 "25 25" 100 0 0 100  text_smaller - ));
+DATA(insert OID = 459 (  text_smaller     PGUID 12 f t t t 2 f 25 "25 25" 100 0 0 100  text_smaller - ));
 DESCR("smaller of two");
 
-DATA(insert OID = 460 (  int8in               PGUID 12 f t t t 1 f 20 "0" 100 0 0 100  int8in - ));
+DATA(insert OID = 460 (  int8in               PGUID 12 f t t t 1 f 20 "0" 100 0 0 100  int8in - ));
 DESCR("(internal)");
-DATA(insert OID = 461 (  int8out          PGUID 12 f t t t 1 f 23 "0" 100 0 0 100  int8out - ));
+DATA(insert OID = 461 (  int8out          PGUID 12 f t t t 1 f 23 "0" 100 0 0 100  int8out - ));
 DESCR("(internal)");
 DATA(insert OID = 462 (  int8um               PGUID 12 f t t t 1 f 20 "20" 100 0 0 100  int8um - ));
 DESCR("negate");
-DATA(insert OID = 463 (  int8pl               PGUID 12 f t t t 2 f 20 "20 20" 100 0 0 100  int8pl - ));
+DATA(insert OID = 463 (  int8pl               PGUID 12 f t t t 2 f 20 "20 20" 100 0 0 100  int8pl - ));
 DESCR("add");
-DATA(insert OID = 464 (  int8mi               PGUID 12 f t t t 2 f 20 "20 20" 100 0 0 100  int8mi - ));
+DATA(insert OID = 464 (  int8mi               PGUID 12 f t t t 2 f 20 "20 20" 100 0 0 100  int8mi - ));
 DESCR("subtract");
-DATA(insert OID = 465 (  int8mul          PGUID 12 f t t t 2 f 20 "20 20" 100 0 0 100  int8mul - ));
+DATA(insert OID = 465 (  int8mul          PGUID 12 f t t t 2 f 20 "20 20" 100 0 0 100  int8mul - ));
 DESCR("multiply");
-DATA(insert OID = 466 (  int8div          PGUID 12 f t t t 2 f 20 "20 20" 100 0 0 100  int8div - ));
+DATA(insert OID = 466 (  int8div          PGUID 12 f t t t 2 f 20 "20 20" 100 0 0 100  int8div - ));
 DESCR("divide");
-DATA(insert OID = 467 (  int8eq               PGUID 12 f t t t 2 f 16 "20 20" 100 0 0 100  int8eq - ));
+DATA(insert OID = 467 (  int8eq               PGUID 12 f t t t 2 f 16 "20 20" 100 0 0 100  int8eq - ));
 DESCR("equal");
-DATA(insert OID = 468 (  int8ne               PGUID 12 f t t t 2 f 16 "20 20" 100 0 0 100  int8ne - ));
+DATA(insert OID = 468 (  int8ne               PGUID 12 f t t t 2 f 16 "20 20" 100 0 0 100  int8ne - ));
 DESCR("not equal");
-DATA(insert OID = 469 (  int8lt               PGUID 12 f t t t 2 f 16 "20 20" 100 0 0 100  int8lt - ));
+DATA(insert OID = 469 (  int8lt               PGUID 12 f t t t 2 f 16 "20 20" 100 0 0 100  int8lt - ));
 DESCR("less-than");
-DATA(insert OID = 470 (  int8gt               PGUID 12 f t t t 2 f 16 "20 20" 100 0 0 100  int8gt - ));
+DATA(insert OID = 470 (  int8gt               PGUID 12 f t t t 2 f 16 "20 20" 100 0 0 100  int8gt - ));
 DESCR("greater-than");
-DATA(insert OID = 471 (  int8le               PGUID 12 f t t t 2 f 16 "20 20" 100 0 0 100  int8le - ));
+DATA(insert OID = 471 (  int8le               PGUID 12 f t t t 2 f 16 "20 20" 100 0 0 100  int8le - ));
 DESCR("less-than-or-equal");
-DATA(insert OID = 472 (  int8ge               PGUID 12 f t t t 2 f 16 "20 20" 100 0 0 100  int8ge - ));
+DATA(insert OID = 472 (  int8ge               PGUID 12 f t t t 2 f 16 "20 20" 100 0 0 100  int8ge - ));
 DESCR("greater-than-or-equal");
 
-DATA(insert OID = 474 (  int84eq          PGUID 12 f t t t 2 f 16 "20 23" 100 0 0 100  int84eq - ));
+DATA(insert OID = 474 (  int84eq          PGUID 12 f t t t 2 f 16 "20 23" 100 0 0 100  int84eq - ));
 DESCR("equal");
-DATA(insert OID = 475 (  int84ne          PGUID 12 f t t t 2 f 16 "20 23" 100 0 0 100  int84ne - ));
+DATA(insert OID = 475 (  int84ne          PGUID 12 f t t t 2 f 16 "20 23" 100 0 0 100  int84ne - ));
 DESCR("not equal");
-DATA(insert OID = 476 (  int84lt          PGUID 12 f t t t 2 f 16 "20 23" 100 0 0 100  int84lt - ));
+DATA(insert OID = 476 (  int84lt          PGUID 12 f t t t 2 f 16 "20 23" 100 0 0 100  int84lt - ));
 DESCR("less-than");
-DATA(insert OID = 477 (  int84gt          PGUID 12 f t t t 2 f 16 "20 23" 100 0 0 100  int84gt - ));
+DATA(insert OID = 477 (  int84gt          PGUID 12 f t t t 2 f 16 "20 23" 100 0 0 100  int84gt - ));
 DESCR("greater-than");
-DATA(insert OID = 478 (  int84le          PGUID 12 f t t t 2 f 16 "20 23" 100 0 0 100  int84le - ));
+DATA(insert OID = 478 (  int84le          PGUID 12 f t t t 2 f 16 "20 23" 100 0 0 100  int84le - ));
 DESCR("less-than-or-equal");
-DATA(insert OID = 479 (  int84ge          PGUID 12 f t t t 2 f 16 "20 23" 100 0 0 100  int84ge - ));
+DATA(insert OID = 479 (  int84ge          PGUID 12 f t t t 2 f 16 "20 23" 100 0 0 100  int84ge - ));
 DESCR("greater-than-or-equal");
 
-DATA(insert OID = 480 (  int4             PGUID 12 f t t t 1 f  23 "20" 100 0 0 100    int84 - ));
+DATA(insert OID = 480 (  int4             PGUID 12 f t t t 1 f  23 "20" 100 0 0 100  int84 - ));
 DESCR("convert int8 to int4");
-DATA(insert OID = 481 (  int8             PGUID 12 f t t t 1 f  20 "23" 100 0 0 100    int48 - ));
+DATA(insert OID = 481 (  int8             PGUID 12 f t t t 1 f  20 "23" 100 0 0 100  int48 - ));
 DESCR("convert int4 to int8");
-DATA(insert OID = 482 (  float8               PGUID 12 f t t t 1 f 701 "20" 100 0 0 100    i8tod - ));
+DATA(insert OID = 482 (  float8               PGUID 12 f t t t 1 f 701 "20" 100 0 0 100  i8tod - ));
 DESCR("convert int8 to float8");
 DATA(insert OID = 483 (  int8             PGUID 12 f t t t 1 f  20 "701" 100 0 0 100  dtoi8 - ));
 DESCR("convert float8 to int8");
@@ -889,66 +889,66 @@ DESCR("convert float8 to int8");
 
 /* OIDS 600 - 699 */
 
-DATA(insert OID = 1285 (  int4notin           PGUID 12 f t f t 2 f 16 "23 25" 100 0 0 100  int4notin - ));
+DATA(insert OID = 1285 (  int4notin           PGUID 12 f t f t 2 f 16 "23 25" 100 0 0 100  int4notin - ));
 DESCR("not in");
-DATA(insert OID = 1286 (  oidnotin        PGUID 12 f t f t 2 f 16 "26 25" 100 0 0 100  oidnotin - ));
+DATA(insert OID = 1286 (  oidnotin        PGUID 12 f t f t 2 f 16 "26 25" 100 0 0 100  oidnotin - ));
 DESCR("not in");
-DATA(insert OID = 1287 (  int44in         PGUID 12 f t t t 1 f 22 "0" 100 0 0 100  int44in - ));
+DATA(insert OID = 1287 (  int44in         PGUID 12 f t t t 1 f 22 "0" 100 0 0 100  int44in - ));
 DESCR("(internal)");
-DATA(insert OID = 653 (  int44out         PGUID 12 f t t t 1 f 23 "0" 100 0 0 100  int44out - ));
+DATA(insert OID = 653 (  int44out         PGUID 12 f t t t 1 f 23 "0" 100 0 0 100  int44out - ));
 DESCR("(internal)");
-DATA(insert OID = 655 (  namelt               PGUID 12 f t t t 2 f 16 "19 19" 100 0 0 100  namelt - ));
+DATA(insert OID = 655 (  namelt               PGUID 12 f t t t 2 f 16 "19 19" 100 0 0 100  namelt - ));
 DESCR("less-than");
-DATA(insert OID = 656 (  namele               PGUID 12 f t t t 2 f 16 "19 19" 100 0 0 100  namele - ));
+DATA(insert OID = 656 (  namele               PGUID 12 f t t t 2 f 16 "19 19" 100 0 0 100  namele - ));
 DESCR("less-than-or-equal");
-DATA(insert OID = 657 (  namegt               PGUID 12 f t t t 2 f 16 "19 19" 100 0 0 100  namegt - ));
+DATA(insert OID = 657 (  namegt               PGUID 12 f t t t 2 f 16 "19 19" 100 0 0 100  namegt - ));
 DESCR("greater-than");
-DATA(insert OID = 658 (  namege               PGUID 12 f t t t 2 f 16 "19 19" 100 0 0 100  namege - ));
+DATA(insert OID = 658 (  namege               PGUID 12 f t t t 2 f 16 "19 19" 100 0 0 100  namege - ));
 DESCR("greater-than-or-equal");
-DATA(insert OID = 659 (  namene               PGUID 12 f t t t 2 f 16 "19 19" 100 0 0 100  namene - ));
+DATA(insert OID = 659 (  namene               PGUID 12 f t t t 2 f 16 "19 19" 100 0 0 100  namene - ));
 DESCR("not equal");
 
-DATA(insert OID = 668 (  bpchar               PGUID 12 f t t t 2 f 1042 "1042 23" 100 0 0 100  bpchar - ));
+DATA(insert OID = 668 (  bpchar               PGUID 12 f t t t 2 f 1042 "1042 23" 100 0 0 100  bpchar - ));
 DESCR("adjust char() to typmod length");
-DATA(insert OID = 669 (  varchar          PGUID 12 f t t t 2 f 1043 "1043 23" 100 0 0 100  varchar - ));
+DATA(insert OID = 669 (  varchar          PGUID 12 f t t t 2 f 1043 "1043 23" 100 0 0 100  varchar - ));
 DESCR("adjust varchar() to typmod length");
 
 DATA(insert OID = 676 (  mktinterval      PGUID 12 f t f t 2 f 704 "702 702" 100 0 0 100 mktinterval - ));
 DESCR("convert to tinterval");
-DATA(insert OID = 619 (  oidvectorne      PGUID 12 f t t t 2 f 16 "30 30" 100 0 0 100  oidvectorne - ));
+DATA(insert OID = 619 (  oidvectorne      PGUID 12 f t t t 2 f 16 "30 30" 100 0 0 100  oidvectorne - ));
 DESCR("not equal");
-DATA(insert OID = 677 (  oidvectorlt      PGUID 12 f t t t 2 f 16 "30 30" 100 0 0 100  oidvectorlt - ));
+DATA(insert OID = 677 (  oidvectorlt      PGUID 12 f t t t 2 f 16 "30 30" 100 0 0 100  oidvectorlt - ));
 DESCR("less-than");
-DATA(insert OID = 678 (  oidvectorle      PGUID 12 f t t t 2 f 16 "30 30" 100 0 0 100  oidvectorle - ));
+DATA(insert OID = 678 (  oidvectorle      PGUID 12 f t t t 2 f 16 "30 30" 100 0 0 100  oidvectorle - ));
 DESCR("less-than-or-equal");
-DATA(insert OID = 679 (  oidvectoreq      PGUID 12 f t t t 2 f 16 "30 30" 100 0 0 100  oidvectoreq - ));
+DATA(insert OID = 679 (  oidvectoreq      PGUID 12 f t t t 2 f 16 "30 30" 100 0 0 100  oidvectoreq - ));
 DESCR("equal");
-DATA(insert OID = 680 (  oidvectorge      PGUID 12 f t t t 2 f 16 "30 30" 100 0 0 100  oidvectorge - ));
+DATA(insert OID = 680 (  oidvectorge      PGUID 12 f t t t 2 f 16 "30 30" 100 0 0 100  oidvectorge - ));
 DESCR("greater-than-or-equal");
-DATA(insert OID = 681 (  oidvectorgt      PGUID 12 f t t t 2 f 16 "30 30" 100 0 0 100  oidvectorgt - ));
+DATA(insert OID = 681 (  oidvectorgt      PGUID 12 f t t t 2 f 16 "30 30" 100 0 0 100  oidvectorgt - ));
 DESCR("greater-than");
 
 /* OIDS 700 - 799 */
-DATA(insert OID = 710 (  getpgusername    PGUID 12 f t f t 0 f 19 "0" 100 0 0 100  current_user - ));
+DATA(insert OID = 710 (  getpgusername    PGUID 12 f t f t 0 f 19 "0" 100 0 0 100  current_user - ));
 DESCR("deprecated -- use current_user");
 DATA(insert OID = 711 (  userfntest           PGUID 12 f t t t 1 f 23 "23" 100 0 0 100  userfntest - ));
 DESCR("");
-DATA(insert OID = 713 (  oidrand          PGUID 12 f t f t 2 f 16 "26 23" 100 0 0 100  oidrand - ));
+DATA(insert OID = 713 (  oidrand          PGUID 12 f t f t 2 f 16 "26 23" 100 0 0 100  oidrand - ));
 DESCR("random");
 DATA(insert OID = 715 (  oidsrand         PGUID 12 f t f t 1 f 16 "23" 100 0 0 100  oidsrand - ));
 DESCR("seed random number generator");
-DATA(insert OID = 716 (  oidlt            PGUID 12 f t t t 2 f 16 "26 26" 100 0 0 100  oidlt - ));
+DATA(insert OID = 716 (  oidlt            PGUID 12 f t t t 2 f 16 "26 26" 100 0 0 100  oidlt - ));
 DESCR("less-than");
-DATA(insert OID = 717 (  oidle            PGUID 12 f t t t 2 f 16 "26 26" 100 0 0 100  oidle - ));
+DATA(insert OID = 717 (  oidle            PGUID 12 f t t t 2 f 16 "26 26" 100 0 0 100  oidle - ));
 DESCR("less-than-or-equal");
 
 DATA(insert OID = 720 (  octet_length     PGUID 12 f t t t 1 f 23 "17" 100 0 0 100  byteaoctetlen - ));
 DESCR("octet length");
-DATA(insert OID = 721 (  get_byte         PGUID 12 f t t t 2 f 23 "17 23" 100 0 0 100  byteaGetByte - ));
+DATA(insert OID = 721 (  get_byte         PGUID 12 f t t t 2 f 23 "17 23" 100 0 0 100  byteaGetByte - ));
 DESCR("");
 DATA(insert OID = 722 (  set_byte         PGUID 12 f t t t 3 f 17 "17 23 23" 100 0 0 100  byteaSetByte - ));
 DESCR("");
-DATA(insert OID = 723 (  get_bit          PGUID 12 f t t t 2 f 23 "17 23" 100 0 0 100  byteaGetBit - ));
+DATA(insert OID = 723 (  get_bit          PGUID 12 f t t t 2 f 23 "17 23" 100 0 0 100  byteaGetBit - ));
 DESCR("");
 DATA(insert OID = 724 (  set_bit          PGUID 12 f t t t 3 f 17 "17 23 23" 100 0 0 100  byteaSetBit - ));
 DESCR("");
@@ -964,87 +964,87 @@ DESCR("distance between");
 DATA(insert OID = 729 (  poly_distance    PGUID 12 f t t t 2 f 701 "604 604" 100 0 0 100  poly_distance - ));
 DESCR("distance between");
 
-DATA(insert OID = 740 (  text_lt          PGUID 12 f t t t 2 f 16 "25 25" 100 0 0 100  text_lt - ));
+DATA(insert OID = 740 (  text_lt          PGUID 12 f t t t 2 f 16 "25 25" 100 0 0 100  text_lt - ));
 DESCR("less-than");
-DATA(insert OID = 741 (  text_le          PGUID 12 f t t t 2 f 16 "25 25" 100 0 0 100  text_le - ));
+DATA(insert OID = 741 (  text_le          PGUID 12 f t t t 2 f 16 "25 25" 100 0 0 100  text_le - ));
 DESCR("less-than-or-equal");
-DATA(insert OID = 742 (  text_gt          PGUID 12 f t t t 2 f 16 "25 25" 100 0 0 100  text_gt - ));
+DATA(insert OID = 742 (  text_gt          PGUID 12 f t t t 2 f 16 "25 25" 100 0 0 100  text_gt - ));
 DESCR("greater-than");
-DATA(insert OID = 743 (  text_ge          PGUID 12 f t t t 2 f 16 "25 25" 100 0 0 100  text_ge - ));
+DATA(insert OID = 743 (  text_ge          PGUID 12 f t t t 2 f 16 "25 25" 100 0 0 100  text_ge - ));
 DESCR("greater-than-or-equal");
 
 DATA(insert OID = 744 (  array_eq         PGUID 12 f t t t 2 f 16 "0 0" 100 0 0 100 array_eq -));
 DESCR("array equal");
 
-DATA(insert OID = 745 (  current_user     PGUID 12 f t f t 0 f 19 "0" 100 0 0 100  current_user - ));
+DATA(insert OID = 745 (  current_user     PGUID 12 f t f t 0 f 19 "0" 100 0 0 100  current_user - ));
 DESCR("current user name");
-DATA(insert OID = 746 (  session_user     PGUID 12 f t f t 0 f 19 "0" 100 0 0 100  session_user - ));
+DATA(insert OID = 746 (  session_user     PGUID 12 f t f t 0 f 19 "0" 100 0 0 100  session_user - ));
 DESCR("session user name");
 
 DATA(insert OID = 747 (  array_dims           PGUID 12 f t t t 1 f 25 "0" 100 0 0 100 array_dims -));
 DESCR("array dimensions");
-DATA(insert OID = 750 (  array_in         PGUID 12 f t t t 3 f 23 "0 26 23" 100 0 0 100    array_in - ));
+DATA(insert OID = 750 (  array_in         PGUID 12 f t t t 3 f 23 "0 26 23" 100 0 0 100  array_in - ));
 DESCR("array");
-DATA(insert OID = 751 (  array_out        PGUID 12 f t t t 2 f 23 "0 26" 100 0 0 100   array_out - ));
+DATA(insert OID = 751 (  array_out        PGUID 12 f t t t 2 f 23 "0 26" 100 0 0 100  array_out - ));
 DESCR("array");
 
 DATA(insert OID = 760 (  smgrin               PGUID 12 f t f t 1 f 210 "0" 100 0 0 100  smgrin - ));
 DESCR("storage manager(internal)");
 DATA(insert OID = 761 (  smgrout          PGUID 12 f t f t 1 f 23  "0" 100 0 0 100  smgrout - ));
 DESCR("storage manager(internal)");
-DATA(insert OID = 762 (  smgreq               PGUID 12 f t f t 2 f 16 "210 210" 100 0 0 100    smgreq - ));
+DATA(insert OID = 762 (  smgreq               PGUID 12 f t f t 2 f 16 "210 210" 100 0 0 100  smgreq - ));
 DESCR("storage manager");
-DATA(insert OID = 763 (  smgrne               PGUID 12 f t f t 2 f 16 "210 210" 100 0 0 100    smgrne - ));
+DATA(insert OID = 763 (  smgrne               PGUID 12 f t f t 2 f 16 "210 210" 100 0 0 100  smgrne - ));
 DESCR("storage manager");
 
 DATA(insert OID = 764 (  lo_import        PGUID 12 f t f t 1 f 26 "25" 100 0 0 100  lo_import - ));
 DESCR("large object import");
-DATA(insert OID = 765 (  lo_export        PGUID 12 f t f t 2 f 23 "26 25" 100 0 0 100  lo_export - ));
+DATA(insert OID = 765 (  lo_export        PGUID 12 f t f t 2 f 23 "26 25" 100 0 0 100  lo_export - ));
 DESCR("large object export");
 
 DATA(insert OID = 766 (  int4inc          PGUID 12 f t t t 1 f 23 "23" 100 0 0 100  int4inc - ));
 DESCR("increment");
-DATA(insert OID = 768 (  int4larger           PGUID 12 f t t t 2 f 23 "23 23" 100 0 0 100  int4larger - ));
+DATA(insert OID = 768 (  int4larger           PGUID 12 f t t t 2 f 23 "23 23" 100 0 0 100  int4larger - ));
 DESCR("larger of two");
-DATA(insert OID = 769 (  int4smaller      PGUID 12 f t t t 2 f 23 "23 23" 100 0 0 100  int4smaller - ));
+DATA(insert OID = 769 (  int4smaller      PGUID 12 f t t t 2 f 23 "23 23" 100 0 0 100  int4smaller - ));
 DESCR("smaller of two");
-DATA(insert OID = 770 (  int2larger           PGUID 12 f t t t 2 f 21 "21 21" 100 0 0 100  int2larger - ));
+DATA(insert OID = 770 (  int2larger           PGUID 12 f t t t 2 f 21 "21 21" 100 0 0 100  int2larger - ));
 DESCR("larger of two");
-DATA(insert OID = 771 (  int2smaller      PGUID 12 f t t t 2 f 21 "21 21" 100 0 0 100  int2smaller - ));
+DATA(insert OID = 771 (  int2smaller      PGUID 12 f t t t 2 f 21 "21 21" 100 0 0 100  int2smaller - ));
 DESCR("smaller of two");
 
 DATA(insert OID = 774 (  gistgettuple     PGUID 12 f t f t 2 f 23 "0 0" 100 0 0 100  gistgettuple - ));
 DESCR("gist(internal)");
-DATA(insert OID = 775 (  gistinsert           PGUID 12 f t f t 5 f 23 "0 0 0 0 0" 100 0 0 100  gistinsert - ));
+DATA(insert OID = 775 (  gistinsert           PGUID 12 f t f t 5 f 23 "0 0 0 0 0" 100 0 0 100  gistinsert - ));
 DESCR("gist(internal)");
 DATA(insert OID = 777 (  gistbeginscan    PGUID 12 f t f t 4 f 23 "0 0 0 0" 100 0 0 100  gistbeginscan - ));
 DESCR("gist(internal)");
-DATA(insert OID = 778 (  gistrescan           PGUID 12 f t f t 3 f 23 "0 0 0" 100 0 0 100  gistrescan - ));
+DATA(insert OID = 778 (  gistrescan           PGUID 12 f t f t 3 f 23 "0 0 0" 100 0 0 100  gistrescan - ));
 DESCR("gist(internal)");
-DATA(insert OID = 779 (  gistendscan      PGUID 12 f t f t 1 f 23 "0" 100 0 0 100  gistendscan - ));
+DATA(insert OID = 779 (  gistendscan      PGUID 12 f t f t 1 f 23 "0" 100 0 0 100  gistendscan - ));
 DESCR("gist(internal)");
-DATA(insert OID = 780 (  gistmarkpos      PGUID 12 f t f t 1 f 23 "0" 100 0 0 100  gistmarkpos - ));
+DATA(insert OID = 780 (  gistmarkpos      PGUID 12 f t f t 1 f 23 "0" 100 0 0 100  gistmarkpos - ));
 DESCR("gist(internal)");
-DATA(insert OID = 781 (  gistrestrpos     PGUID 12 f t f t 1 f 23 "0" 100 0 0 100  gistrestrpos - ));
+DATA(insert OID = 781 (  gistrestrpos     PGUID 12 f t f t 1 f 23 "0" 100 0 0 100  gistrestrpos - ));
 DESCR("gist(internal)");
-DATA(insert OID = 782 (  gistbuild        PGUID 12 f t f t 3 f 23 "0 0 0" 100 0 0 100  gistbuild - ));
+DATA(insert OID = 782 (  gistbuild        PGUID 12 f t f t 3 f 23 "0 0 0" 100 0 0 100  gistbuild - ));
 DESCR("gist(internal)");
 DATA(insert OID = 776 (  gistbulkdelete       PGUID 12 f t f t 3 f 23 "0 0 0" 100 0 0 100  gistbulkdelete - ));
 DESCR("gist(internal)");
 DATA(insert OID = 772 (  gistcostestimate  PGUID 12 f t f t 8 f 0 "0 0 0 0 0 0 0 0" 100 0 0 100  gistcostestimate - ));
 DESCR("gist(internal)");
 
-DATA(insert OID = 784 (  tintervaleq      PGUID 12 f t f t 2 f 16 "704 704" 100 0 0 100    tintervaleq - ));
+DATA(insert OID = 784 (  tintervaleq      PGUID 12 f t f t 2 f 16 "704 704" 100 0 0 100  tintervaleq - ));
 DESCR("equal");
-DATA(insert OID = 785 (  tintervalne      PGUID 12 f t f t 2 f 16 "704 704" 100 0 0 100    tintervalne - ));
+DATA(insert OID = 785 (  tintervalne      PGUID 12 f t f t 2 f 16 "704 704" 100 0 0 100  tintervalne - ));
 DESCR("not equal");
-DATA(insert OID = 786 (  tintervallt      PGUID 12 f t f t 2 f 16 "704 704" 100 0 0 100    tintervallt - ));
+DATA(insert OID = 786 (  tintervallt      PGUID 12 f t f t 2 f 16 "704 704" 100 0 0 100  tintervallt - ));
 DESCR("less-than");
-DATA(insert OID = 787 (  tintervalgt      PGUID 12 f t f t 2 f 16 "704 704" 100 0 0 100    tintervalgt - ));
+DATA(insert OID = 787 (  tintervalgt      PGUID 12 f t f t 2 f 16 "704 704" 100 0 0 100  tintervalgt - ));
 DESCR("greater-than");
-DATA(insert OID = 788 (  tintervalle      PGUID 12 f t f t 2 f 16 "704 704" 100 0 0 100    tintervalle - ));
+DATA(insert OID = 788 (  tintervalle      PGUID 12 f t f t 2 f 16 "704 704" 100 0 0 100  tintervalle - ));
 DESCR("less-than-or-equal");
-DATA(insert OID = 789 (  tintervalge      PGUID 12 f t f t 2 f 16 "704 704" 100 0 0 100    tintervalge - ));
+DATA(insert OID = 789 (  tintervalge      PGUID 12 f t f t 2 f 16 "704 704" 100 0 0 100  tintervalge - ));
 DESCR("greater-than-or-equal");
 
 /* OIDS 800 - 899 */
@@ -1056,9 +1056,9 @@ DESCR("convert text to int2");
 DATA(insert OID = 819 (  int4             PGUID 12 f t t t 1 f 23 "25" 100 0 0 100  text_int4 -));
 DESCR("convert text to int4");
 
-DATA(insert OID = 838 (  float8               PGUID 12 f t t t 1 f 701 "25" 100 0 0 100    text_float8 -));
+DATA(insert OID = 838 (  float8               PGUID 12 f t t t 1 f 701 "25" 100 0 0 100  text_float8 -));
 DESCR("convert text to float8");
-DATA(insert OID = 839 (  float4               PGUID 12 f t t t 1 f 700 "25" 100 0 0 100    text_float4 -));
+DATA(insert OID = 839 (  float4               PGUID 12 f t t t 1 f 700 "25" 100 0 0 100  text_float4 -));
 DESCR("convert text to float4");
 DATA(insert OID = 840 (  text             PGUID 12 f t t t 1 f  25 "701" 100 0 0 100  float8_text -));
 DESCR("convert float8 to text");
@@ -1079,22 +1079,22 @@ DESCR("matches LIKE expression");
 DATA(insert OID =  851 (  textnlike           PGUID 12 f t t t 2 f 16 "25 25" 100 0 0 100 textnlike - ));
 DESCR("does not match LIKE expression");
 
-DATA(insert OID =  852 (  int48eq         PGUID 12 f t t t 2 f 16 "23 20" 100 0 0 100  int48eq - ));
+DATA(insert OID =  852 (  int48eq         PGUID 12 f t t t 2 f 16 "23 20" 100 0 0 100  int48eq - ));
 DESCR("equal");
-DATA(insert OID =  853 (  int48ne         PGUID 12 f t t t 2 f 16 "23 20" 100 0 0 100  int48ne - ));
+DATA(insert OID =  853 (  int48ne         PGUID 12 f t t t 2 f 16 "23 20" 100 0 0 100  int48ne - ));
 DESCR("not equal");
-DATA(insert OID =  854 (  int48lt         PGUID 12 f t t t 2 f 16 "23 20" 100 0 0 100  int48lt - ));
+DATA(insert OID =  854 (  int48lt         PGUID 12 f t t t 2 f 16 "23 20" 100 0 0 100  int48lt - ));
 DESCR("less-than");
-DATA(insert OID =  855 (  int48gt         PGUID 12 f t t t 2 f 16 "23 20" 100 0 0 100  int48gt - ));
+DATA(insert OID =  855 (  int48gt         PGUID 12 f t t t 2 f 16 "23 20" 100 0 0 100  int48gt - ));
 DESCR("greater-than");
-DATA(insert OID =  856 (  int48le         PGUID 12 f t t t 2 f 16 "23 20" 100 0 0 100  int48le - ));
+DATA(insert OID =  856 (  int48le         PGUID 12 f t t t 2 f 16 "23 20" 100 0 0 100  int48le - ));
 DESCR("less-than-or-equal");
-DATA(insert OID =  857 (  int48ge         PGUID 12 f t t t 2 f 16 "23 20" 100 0 0 100  int48ge - ));
+DATA(insert OID =  857 (  int48ge         PGUID 12 f t t t 2 f 16 "23 20" 100 0 0 100  int48ge - ));
 DESCR("greater-than-or-equal");
 
-DATA(insert OID =  858 (  namelike        PGUID 12 f t t t 2 f 16 "19 25" 100 0 0 100  namelike - ));
+DATA(insert OID =  858 (  namelike        PGUID 12 f t t t 2 f 16 "19 25" 100 0 0 100  namelike - ));
 DESCR("matches LIKE expression");
-DATA(insert OID =  859 (  namenlike           PGUID 12 f t t t 2 f 16 "19 25" 100 0 0 100  namenlike - ));
+DATA(insert OID =  859 (  namenlike           PGUID 12 f t t t 2 f 16 "19 25" 100 0 0 100  namenlike - ));
 DESCR("does not match LIKE expression");
 
 DATA(insert OID =  860 (  bpchar          PGUID 12 f t t t 1 f 1042 "18" 100 0 0 100  char_bpchar - ));
@@ -1102,25 +1102,23 @@ DESCR("convert char to char()");
 DATA(insert OID =  861 (  char            PGUID 12 f t t t 1 f 18 "1042" 100 0 0 100  bpchar_char - ));
 DESCR("convert char() to char");
 
-DATA(insert OID =  862 (  int4_mul_cash           PGUID 12 f t t t 2 f 790 "23 790" 100 0 0 100    int4_mul_cash - ));
+DATA(insert OID =  862 (  int4_mul_cash           PGUID 12 f t t t 2 f 790 "23 790" 100 0 0 100  int4_mul_cash - ));
 DESCR("multiply");
-DATA(insert OID =  863 (  int2_mul_cash           PGUID 12 f t t t 2 f 790 "21 790" 100 0 0 100    int2_mul_cash - ));
+DATA(insert OID =  863 (  int2_mul_cash           PGUID 12 f t t t 2 f 790 "21 790" 100 0 0 100  int2_mul_cash - ));
 DESCR("multiply");
-DATA(insert OID =  864 (  cash_mul_int4           PGUID 12 f t t t 2 f 790 "790 23" 100 0 0 100    cash_mul_int4 - ));
+DATA(insert OID =  864 (  cash_mul_int4           PGUID 12 f t t t 2 f 790 "790 23" 100 0 0 100  cash_mul_int4 - ));
 DESCR("multiply");
-DATA(insert OID =  865 (  cash_div_int4           PGUID 12 f t t t 2 f 790 "790 23" 100 0 0 100    cash_div_int4 - ));
+DATA(insert OID =  865 (  cash_div_int4           PGUID 12 f t t t 2 f 790 "790 23" 100 0 0 100  cash_div_int4 - ));
 DESCR("divide");
-DATA(insert OID =  866 (  cash_mul_int2           PGUID 12 f t t t 2 f 790 "790 21" 100 0 0 100    cash_mul_int2 - ));
+DATA(insert OID =  866 (  cash_mul_int2           PGUID 12 f t t t 2 f 790 "790 21" 100 0 0 100  cash_mul_int2 - ));
 DESCR("multiply");
-DATA(insert OID =  867 (  cash_div_int2           PGUID 12 f t t t 2 f 790 "790 21" 100 0 0 100    cash_div_int2 - ));
+DATA(insert OID =  867 (  cash_div_int2           PGUID 12 f t t t 2 f 790 "790 21" 100 0 0 100  cash_div_int2 - ));
 DESCR("divide");
 
 DATA(insert OID =  886 (  cash_in         PGUID 12 f t t t 1 f 790 "0" 100 0 0 100  cash_in - ));
 DESCR("(internal)");
 DATA(insert OID =  887 (  cash_out        PGUID 12 f t t t 1 f  23 "0" 100 0 0 100  cash_out - ));
 DESCR("(internal)");
-DATA(insert OID =  1273 (  cash_words  PGUID 12 f t t t 1 f  25 "790" 100 0 0 100  cash_words - ));
-DESCR("output amount as words");
 DATA(insert OID =  888 (  cash_eq         PGUID 12 f t t t 2 f  16 "790 790" 100 0 0 100  cash_eq - ));
 DESCR("equal");
 DATA(insert OID =  889 (  cash_ne         PGUID 12 f t t t 2 f  16 "790 790" 100 0 0 100  cash_ne - ));
@@ -1137,32 +1135,33 @@ DATA(insert OID =  894 (  cash_pl          PGUID 12 f t t t 2 f 790 "790 790" 100 0 0
 DESCR("add");
 DATA(insert OID =  895 (  cash_mi         PGUID 12 f t t t 2 f 790 "790 790" 100 0 0 100  cash_mi - ));
 DESCR("subtract");
-DATA(insert OID =  896 (  cash_mul_flt8           PGUID 12 f t t t 2 f 790 "790 701" 100 0 0 100  cash_mul_flt8 - ));
+DATA(insert OID =  896 (  cash_mul_flt8       PGUID 12 f t t t 2 f 790 "790 701" 100 0 0 100  cash_mul_flt8 - ));
 DESCR("multiply");
-DATA(insert OID =  897 (  cash_div_flt8           PGUID 12 f t t t 2 f 790 "790 701" 100 0 0 100  cash_div_flt8 - ));
+DATA(insert OID =  897 (  cash_div_flt8       PGUID 12 f t t t 2 f 790 "790 701" 100 0 0 100  cash_div_flt8 - ));
 DESCR("divide");
 DATA(insert OID =  898 (  cashlarger      PGUID 12 f t t t 2 f 790 "790 790" 100 0 0 100  cashlarger - ));
 DESCR("larger of two");
 DATA(insert OID =  899 (  cashsmaller     PGUID 12 f t t t 2 f 790 "790 790" 100 0 0 100  cashsmaller - ));
 DESCR("smaller of two");
-
 DATA(insert OID =  919 (  flt8_mul_cash    PGUID 12 f t t t 2 f 790 "701 790" 100 0 0 100  flt8_mul_cash - ));
 DESCR("multiply");
+DATA(insert OID =  935 (  cash_words      PGUID 12 f t t t 1 f  25 "790" 100 0 0 100  cash_words - ));
+DESCR("output amount as words");
 
 /* OIDS 900 - 999 */
 
-DATA(insert OID = 940 (  mod              PGUID 12 f t t t 2 f 21 "21 21" 100 0 0 100  int2mod - ));
+DATA(insert OID = 940 (  mod              PGUID 12 f t t t 2 f 21 "21 21" 100 0 0 100  int2mod - ));
 DESCR("modulus");
-DATA(insert OID = 941 (  mod              PGUID 12 f t t t 2 f 23 "23 23" 100 0 0 100  int4mod - ));
+DATA(insert OID = 941 (  mod              PGUID 12 f t t t 2 f 23 "23 23" 100 0 0 100  int4mod - ));
 DESCR("modulus");
-DATA(insert OID = 942 (  mod              PGUID 12 f t t t 2 f 23 "21 23" 100 0 0 100  int24mod - ));
+DATA(insert OID = 942 (  mod              PGUID 12 f t t t 2 f 23 "21 23" 100 0 0 100  int24mod - ));
 DESCR("modulus");
-DATA(insert OID = 943 (  mod              PGUID 12 f t t t 2 f 23 "23 21" 100 0 0 100  int42mod - ));
+DATA(insert OID = 943 (  mod              PGUID 12 f t t t 2 f 23 "23 21" 100 0 0 100  int42mod - ));
 DESCR("modulus");
 
-DATA(insert OID = 945 (  int8mod          PGUID 12 f t t t 2 f 20 "20 20" 100 0 0 100  int8mod - ));
+DATA(insert OID = 945 (  int8mod          PGUID 12 f t t t 2 f 20 "20 20" 100 0 0 100  int8mod - ));
 DESCR("modulus");
-DATA(insert OID = 947 (  mod              PGUID 12 f t t t 2 f 20 "20 20" 100 0 0 100  int8mod - ));
+DATA(insert OID = 947 (  mod              PGUID 12 f t t t 2 f 20 "20 20" 100 0 0 100  int8mod - ));
 DESCR("modulus");
 
 DATA(insert OID = 944 (  char             PGUID 12 f t t t 1 f 18 "25" 100 0 0 100  text_char - ));
@@ -1175,13 +1174,13 @@ DESCR("bool is true (not false or unknown)");
 DATA(insert OID = 951 (  isfalse          PGUID 12 f t t f 1 f 16 "16" 100 0 0 100  isfalse - ));
 DESCR("bool is false (not true or unknown)");
 
-DATA(insert OID = 952 (  lo_open          PGUID 12 f t f t 2 f 23 "26 23" 100 0 0 100  lo_open - ));
+DATA(insert OID = 952 (  lo_open          PGUID 12 f t f t 2 f 23 "26 23" 100 0 0 100  lo_open - ));
 DESCR("large object open");
 DATA(insert OID = 953 (  lo_close         PGUID 12 f t f t 1 f 23 "23" 100 0 0 100  lo_close - ));
 DESCR("large object close");
-DATA(insert OID = 954 (  loread               PGUID 12 f t f t 2 f 17 "23 23" 100 0 0 100  loread - ));
+DATA(insert OID = 954 (  loread               PGUID 12 f t f t 2 f 17 "23 23" 100 0 0 100  loread - ));
 DESCR("large object read");
-DATA(insert OID = 955 (  lowrite          PGUID 12 f t f t 2 f 23 "23 17" 100 0 0 100  lowrite - ));
+DATA(insert OID = 955 (  lowrite          PGUID 12 f t f t 2 f 23 "23 17" 100 0 0 100  lowrite - ));
 DESCR("large object write");
 DATA(insert OID = 956 (  lo_lseek         PGUID 12 f t f t 3 f 23 "23 23 23" 100 0 0 100  lo_lseek - ));
 DESCR("large object seek");
@@ -1201,9 +1200,9 @@ DESCR("closest point to line segment on line");
 DATA(insert OID = 963 (  close_lb         PGUID 12 f t t t 2 f 600 "628 603" 100 0 0 100  close_lb - ));
 DESCR("closest point to line on box");
 
-DATA(insert OID = 964 (  lo_unlink        PGUID 12 f t f t 1 f  23 "26" 100 0 0 100    lo_unlink - ));
+DATA(insert OID = 964 (  lo_unlink        PGUID 12 f t f t 1 f  23 "26" 100 0 0 100  lo_unlink - ));
 DESCR("large object unlink(delete)");
-DATA(insert OID = 972 (  regproctooid     PGUID 12 f t t t 1 f  26 "24" 100 0 0 100    regproctooid - ));
+DATA(insert OID = 972 (  regproctooid     PGUID 12 f t t t 1 f  26 "24" 100 0 0 100  regproctooid - ));
 DESCR("get oid for regproc");
 
 DATA(insert OID = 973 (  path_inter           PGUID 12 f t t t 2 f  16 "602 602" 100 0 0 100  path_inter - ));
@@ -1220,23 +1219,23 @@ DATA(insert OID = 980 (  box_intersect     PGUID 12 f t t t 2 f 603 "603 603" 100
 DESCR("box intersection (another box)");
 DATA(insert OID = 981 (  diagonal         PGUID 12 f t t t 1 f 601 "603" 100 0 0 100  box_diagonal - ));
 DESCR("box diagonal");
-DATA(insert OID = 982 (  path_n_lt        PGUID 12 f t t t 2 f 16 "602 602" 100 0 0 100    path_n_lt - ));
+DATA(insert OID = 982 (  path_n_lt        PGUID 12 f t t t 2 f 16 "602 602" 100 0 0 100  path_n_lt - ));
 DESCR("less-than");
-DATA(insert OID = 983 (  path_n_gt        PGUID 12 f t t t 2 f 16 "602 602" 100 0 0 100    path_n_gt - ));
+DATA(insert OID = 983 (  path_n_gt        PGUID 12 f t t t 2 f 16 "602 602" 100 0 0 100  path_n_gt - ));
 DESCR("greater-than");
-DATA(insert OID = 984 (  path_n_eq        PGUID 12 f t t t 2 f 16 "602 602" 100 0 0 100    path_n_eq - ));
+DATA(insert OID = 984 (  path_n_eq        PGUID 12 f t t t 2 f 16 "602 602" 100 0 0 100  path_n_eq - ));
 DESCR("equal");
-DATA(insert OID = 985 (  path_n_le        PGUID 12 f t t t 2 f 16 "602 602" 100 0 0 100    path_n_le - ));
+DATA(insert OID = 985 (  path_n_le        PGUID 12 f t t t 2 f 16 "602 602" 100 0 0 100  path_n_le - ));
 DESCR("less-than-or-equal");
-DATA(insert OID = 986 (  path_n_ge        PGUID 12 f t t t 2 f 16 "602 602" 100 0 0 100    path_n_ge - ));
+DATA(insert OID = 986 (  path_n_ge        PGUID 12 f t t t 2 f 16 "602 602" 100 0 0 100  path_n_ge - ));
 DESCR("greater-than-or-equal");
 DATA(insert OID = 987 (  path_length      PGUID 12 f t t t 1 f 701 "602" 100 0 0 100  path_length - ));
 DESCR("sum of path segments");
-DATA(insert OID = 988 (  point_ne         PGUID 12 f t t t 2 f 16 "600 600" 100 0 0 100    point_ne - ));
+DATA(insert OID = 988 (  point_ne         PGUID 12 f t t t 2 f 16 "600 600" 100 0 0 100  point_ne - ));
 DESCR("not equal");
-DATA(insert OID = 989 (  point_vert           PGUID 12 f t t t 2 f 16 "600 600" 100 0 0 100    point_vert - ));
+DATA(insert OID = 989 (  point_vert           PGUID 12 f t t t 2 f 16 "600 600" 100 0 0 100  point_vert - ));
 DESCR("vertically aligned?");
-DATA(insert OID = 990 (  point_horiz      PGUID 12 f t t t 2 f 16 "600 600" 100 0 0 100    point_horiz - ));
+DATA(insert OID = 990 (  point_horiz      PGUID 12 f t t t 2 f 16 "600 600" 100 0 0 100  point_horiz - ));
 DESCR("horizontally aligned?");
 DATA(insert OID = 991 (  point_distance    PGUID 12 f t t t 2 f 701 "600 600" 100 0 0 100  point_distance - ));
 DESCR("distance between");
@@ -1244,141 +1243,141 @@ DATA(insert OID = 992 (  slope               PGUID 12 f t t t 2 f 701 "600 600" 100 0 0 1
 DESCR("slope between points");
 DATA(insert OID = 993 (  lseg             PGUID 12 f t t t 2 f 601 "600 600" 100 0 0 100  lseg_construct - ));
 DESCR("convert points to line segment");
-DATA(insert OID = 994 (  lseg_intersect    PGUID 12 f t t t 2 f 16 "601 601" 100 0 0 100   lseg_intersect - ));
+DATA(insert OID = 994 (  lseg_intersect    PGUID 12 f t t t 2 f 16 "601 601" 100 0 0 100  lseg_intersect - ));
 DESCR("intersect?");
-DATA(insert OID = 995 (  lseg_parallel    PGUID 12 f t t t 2 f 16 "601 601" 100 0 0 100    lseg_parallel - ));
+DATA(insert OID = 995 (  lseg_parallel    PGUID 12 f t t t 2 f 16 "601 601" 100 0 0 100  lseg_parallel - ));
 DESCR("parallel?");
-DATA(insert OID = 996 (  lseg_perp        PGUID 12 f t t t 2 f 16 "601 601" 100 0 0 100    lseg_perp - ));
+DATA(insert OID = 996 (  lseg_perp        PGUID 12 f t t t 2 f 16 "601 601" 100 0 0 100  lseg_perp - ));
 DESCR("perpendicular?");
-DATA(insert OID = 997 (  lseg_vertical    PGUID 12 f t t t 1 f 16 "601" 100 0 0 100    lseg_vertical - ));
+DATA(insert OID = 997 (  lseg_vertical    PGUID 12 f t t t 1 f 16 "601" 100 0 0 100  lseg_vertical - ));
 DESCR("vertical?");
-DATA(insert OID = 998 (  lseg_horizontal   PGUID 12 f t t t 1 f 16 "601" 100 0 0 100   lseg_horizontal - ));
+DATA(insert OID = 998 (  lseg_horizontal   PGUID 12 f t t t 1 f 16 "601" 100 0 0 100  lseg_horizontal - ));
 DESCR("horizontal?");
-DATA(insert OID = 999 (  lseg_eq          PGUID 12 f t t t 2 f 16 "601 601" 100 0 0 100    lseg_eq - ));
+DATA(insert OID = 999 (  lseg_eq          PGUID 12 f t t t 2 f 16 "601 601" 100 0 0 100  lseg_eq - ));
 DESCR("equal");
 
-DATA(insert OID =  748 (  date            PGUID 12 f t f t 1 f 1082 "25" 100 0 0 100 text_date - ));
+DATA(insert OID =  748 (  date            PGUID 12 f t t t 1 f 1082 "25" 100 0 0 100 text_date - ));
 DESCR("convert text to date");
-DATA(insert OID =  749 (  text            PGUID 12 f t f t 1 f 25 "1082" 100 0 0 100 date_text - ));
+DATA(insert OID =  749 (  text            PGUID 12 f t t t 1 f 25 "1082" 100 0 0 100 date_text - ));
 DESCR("convert date to text");
-DATA(insert OID =  837 (  time            PGUID 12 f t f t 1 f 1083 "25" 100 0 0 100 text_time - ));
+DATA(insert OID =  837 (  time            PGUID 12 f t t t 1 f 1083 "25" 100 0 0 100 text_time - ));
 DESCR("convert text to time");
-DATA(insert OID =  948 (  text            PGUID 12 f t f t 1 f 25 "1083" 100 0 0 100 time_text - ));
+DATA(insert OID =  948 (  text            PGUID 12 f t t t 1 f 25 "1083" 100 0 0 100 time_text - ));
 DESCR("convert time to text");
-DATA(insert OID =  938 (  timetz          PGUID 12 f t f t 1 f 1266 "25" 100 0 0 100 text_timetz - ));
+DATA(insert OID =  938 (  timetz          PGUID 12 f t t t 1 f 1266 "25" 100 0 0 100 text_timetz - ));
 DESCR("convert text to timetz");
-DATA(insert OID =  939 (  text            PGUID 12 f t f t 1 f 25 "1266" 100 0 0 100 timetz_text - ));
+DATA(insert OID =  939 (  text            PGUID 12 f t t t 1 f 25 "1266" 100 0 0 100 timetz_text - ));
 DESCR("convert timetz to text");
 
 /* OIDS 1000 - 1999 */
 
-DATA(insert OID = 1026 (  timezone        PGUID 12 f t f t 2 f 25 "1186 1184" 100 0 0 100  timestamp_izone - ));
+DATA(insert OID = 1026 (  timezone        PGUID 12 f t t t 2 f 25 "1186 1184" 100 0 0 100  timestamptz_izone - ));
 DESCR("time zone");
 
-DATA(insert OID = 1029 (  nullvalue           PGUID 12 f t t f 1 f 16 "0" 100 0 0 100  nullvalue - ));
+DATA(insert OID = 1029 (  nullvalue           PGUID 12 f t t f 1 f 16 "0" 100 0 0 100  nullvalue - ));
 DESCR("(internal)");
-DATA(insert OID = 1030 (  nonnullvalue    PGUID 12 f t t f 1 f 16 "0" 100 0 0 100  nonnullvalue - ));
+DATA(insert OID = 1030 (  nonnullvalue    PGUID 12 f t t f 1 f 16 "0" 100 0 0 100  nonnullvalue - ));
 DESCR("(internal)");
-DATA(insert OID = 1031 (  aclitemin           PGUID 12 f t f t 1 f 1033 "0" 100 0 0 100    aclitemin - ));
+DATA(insert OID = 1031 (  aclitemin           PGUID 12 f t f t 1 f 1033 "0" 100 0 0 100  aclitemin - ));
 DESCR("(internal)");
 DATA(insert OID = 1032 (  aclitemout      PGUID 12 f t f t 1 f 23 "1033" 100 0 0 100  aclitemout - ));
 DESCR("(internal)");
-DATA(insert OID = 1035 (  aclinsert           PGUID 12 f t f t 2 f 1034 "1034 1033" 100 0 0 100    aclinsert - ));
+DATA(insert OID = 1035 (  aclinsert           PGUID 12 f t f t 2 f 1034 "1034 1033" 100 0 0 100  aclinsert - ));
 DESCR("add/update ACL item");
-DATA(insert OID = 1036 (  aclremove           PGUID 12 f t f t 2 f 1034 "1034 1033" 100 0 0 100    aclremove - ));
+DATA(insert OID = 1036 (  aclremove           PGUID 12 f t f t 2 f 1034 "1034 1033" 100 0 0 100  aclremove - ));
 DESCR("remove ACL item");
-DATA(insert OID = 1037 (  aclcontains     PGUID 12 f t f t 2 f 16 "1034 1033" 100 0 0 100  aclcontains - ));
+DATA(insert OID = 1037 (  aclcontains     PGUID 12 f t f t 2 f 16 "1034 1033" 100 0 0 100  aclcontains - ));
 DESCR("does ACL contain item?");
 DATA(insert OID = 1038 (  seteval         PGUID 12 f t f t 1 t 23 "26" 100 0 0 100  seteval - ));
 DESCR("internal function supporting PostQuel-style sets");
 DATA(insert OID = 1044 (  bpcharin        PGUID 12 f t t t 3 f 1042 "0 26 23" 100 0 0 100 bpcharin - ));
 DESCR("(internal)");
-DATA(insert OID = 1045 (  bpcharout           PGUID 12 f t t t 1 f 23 "0" 100 0 0 100  bpcharout - ));
+DATA(insert OID = 1045 (  bpcharout           PGUID 12 f t t t 1 f 23 "0" 100 0 0 100  bpcharout - ));
 DESCR("(internal)");
 DATA(insert OID = 1046 (  varcharin           PGUID 12 f t t t 3 f 1043 "0 26 23" 100 0 0 100 varcharin - ));
 DESCR("(internal)");
-DATA(insert OID = 1047 (  varcharout      PGUID 12 f t t t 1 f 23 "0" 100 0 0 100  varcharout - ));
+DATA(insert OID = 1047 (  varcharout      PGUID 12 f t t t 1 f 23 "0" 100 0 0 100  varcharout - ));
 DESCR("(internal)");
-DATA(insert OID = 1048 (  bpchareq        PGUID 12 f t t t 2 f 16 "1042 1042" 100 0 0 100  bpchareq - ));
+DATA(insert OID = 1048 (  bpchareq        PGUID 12 f t t t 2 f 16 "1042 1042" 100 0 0 100  bpchareq - ));
 DESCR("equal");
-DATA(insert OID = 1049 (  bpcharlt        PGUID 12 f t t t 2 f 16 "1042 1042" 100 0 0 100  bpcharlt - ));
+DATA(insert OID = 1049 (  bpcharlt        PGUID 12 f t t t 2 f 16 "1042 1042" 100 0 0 100  bpcharlt - ));
 DESCR("less-than");
-DATA(insert OID = 1050 (  bpcharle        PGUID 12 f t t t 2 f 16 "1042 1042" 100 0 0 100  bpcharle - ));
+DATA(insert OID = 1050 (  bpcharle        PGUID 12 f t t t 2 f 16 "1042 1042" 100 0 0 100  bpcharle - ));
 DESCR("less-than-or-equal");
-DATA(insert OID = 1051 (  bpchargt        PGUID 12 f t t t 2 f 16 "1042 1042" 100 0 0 100  bpchargt - ));
+DATA(insert OID = 1051 (  bpchargt        PGUID 12 f t t t 2 f 16 "1042 1042" 100 0 0 100  bpchargt - ));
 DESCR("greater-than");
-DATA(insert OID = 1052 (  bpcharge        PGUID 12 f t t t 2 f 16 "1042 1042" 100 0 0 100  bpcharge - ));
+DATA(insert OID = 1052 (  bpcharge        PGUID 12 f t t t 2 f 16 "1042 1042" 100 0 0 100  bpcharge - ));
 DESCR("greater-than-or-equal");
-DATA(insert OID = 1053 (  bpcharne        PGUID 12 f t t t 2 f 16 "1042 1042" 100 0 0 100  bpcharne - ));
+DATA(insert OID = 1053 (  bpcharne        PGUID 12 f t t t 2 f 16 "1042 1042" 100 0 0 100  bpcharne - ));
 DESCR("not equal");
-DATA(insert OID = 1070 (  varchareq           PGUID 12 f t t t 2 f 16 "1043 1043" 100 0 0 100  varchareq - ));
+DATA(insert OID = 1070 (  varchareq           PGUID 12 f t t t 2 f 16 "1043 1043" 100 0 0 100  varchareq - ));
 DESCR("equal");
-DATA(insert OID = 1071 (  varcharlt           PGUID 12 f t t t 2 f 16 "1043 1043" 100 0 0 100  varcharlt - ));
+DATA(insert OID = 1071 (  varcharlt           PGUID 12 f t t t 2 f 16 "1043 1043" 100 0 0 100  varcharlt - ));
 DESCR("less-than");
-DATA(insert OID = 1072 (  varcharle           PGUID 12 f t t t 2 f 16 "1043 1043" 100 0 0 100  varcharle - ));
+DATA(insert OID = 1072 (  varcharle           PGUID 12 f t t t 2 f 16 "1043 1043" 100 0 0 100  varcharle - ));
 DESCR("less-than-or-equal");
-DATA(insert OID = 1073 (  varchargt           PGUID 12 f t t t 2 f 16 "1043 1043" 100 0 0 100  varchargt - ));
+DATA(insert OID = 1073 (  varchargt           PGUID 12 f t t t 2 f 16 "1043 1043" 100 0 0 100  varchargt - ));
 DESCR("greater-than");
-DATA(insert OID = 1074 (  varcharge           PGUID 12 f t t t 2 f 16 "1043 1043" 100 0 0 100  varcharge - ));
+DATA(insert OID = 1074 (  varcharge           PGUID 12 f t t t 2 f 16 "1043 1043" 100 0 0 100  varcharge - ));
 DESCR("greater-than-or-equal");
-DATA(insert OID = 1075 (  varcharne           PGUID 12 f t t t 2 f 16 "1043 1043" 100 0 0 100  varcharne - ));
+DATA(insert OID = 1075 (  varcharne           PGUID 12 f t t t 2 f 16 "1043 1043" 100 0 0 100  varcharne - ));
 DESCR("not equal");
-DATA(insert OID = 1078 (  bpcharcmp           PGUID 12 f t t t 2 f 23 "1042 1042" 100 0 0 100  bpcharcmp - ));
+DATA(insert OID = 1078 (  bpcharcmp           PGUID 12 f t t t 2 f 23 "1042 1042" 100 0 0 100  bpcharcmp - ));
 DESCR("less-equal-greater");
-DATA(insert OID = 1079 (  varcharcmp      PGUID 12 f t t t 2 f 23 "1043 1043" 100 0 0 100  varcharcmp - ));
+DATA(insert OID = 1079 (  varcharcmp      PGUID 12 f t t t 2 f 23 "1043 1043" 100 0 0 100  varcharcmp - ));
 DESCR("less-equal-greater");
 DATA(insert OID = 1080 (  hashbpchar      PGUID 12 f t t t 1 f 23 "1042" 100 0 0 100  hashbpchar - ));
 DESCR("hash");
 DATA(insert OID = 1081 (  format_type     PGUID 12 f t t f 2 f 25 "26 23" 100 0 0 100 format_type - ));
 DESCR("format a type oid and atttypmod to canonical SQL");
-DATA(insert OID = 1084 (  date_in         PGUID 12 f t f t 1 f 1082 "0" 100 0 0 100    date_in - ));
+DATA(insert OID = 1084 (  date_in         PGUID 12 f t f t 1 f 1082 "0" 100 0 0 100  date_in - ));
 DESCR("(internal)");
-DATA(insert OID = 1085 (  date_out        PGUID 12 f t f t 1 f 23 "0" 100 0 0 100  date_out - ));
+DATA(insert OID = 1085 (  date_out        PGUID 12 f t t t 1 f 23 "0" 100 0 0 100  date_out - ));
 DESCR("(internal)");
-DATA(insert OID = 1086 (  date_eq         PGUID 12 f t t t 2 f 16 "1082 1082" 100 0 0 100  date_eq - ));
+DATA(insert OID = 1086 (  date_eq         PGUID 12 f t t t 2 f 16 "1082 1082" 100 0 0 100  date_eq - ));
 DESCR("equal");
-DATA(insert OID = 1087 (  date_lt         PGUID 12 f t t t 2 f 16 "1082 1082" 100 0 0 100  date_lt - ));
+DATA(insert OID = 1087 (  date_lt         PGUID 12 f t t t 2 f 16 "1082 1082" 100 0 0 100  date_lt - ));
 DESCR("less-than");
-DATA(insert OID = 1088 (  date_le         PGUID 12 f t t t 2 f 16 "1082 1082" 100 0 0 100  date_le - ));
+DATA(insert OID = 1088 (  date_le         PGUID 12 f t t t 2 f 16 "1082 1082" 100 0 0 100  date_le - ));
 DESCR("less-than-or-equal");
-DATA(insert OID = 1089 (  date_gt         PGUID 12 f t t t 2 f 16 "1082 1082" 100 0 0 100  date_gt - ));
+DATA(insert OID = 1089 (  date_gt         PGUID 12 f t t t 2 f 16 "1082 1082" 100 0 0 100  date_gt - ));
 DESCR("greater-than");
-DATA(insert OID = 1090 (  date_ge         PGUID 12 f t t t 2 f 16 "1082 1082" 100 0 0 100  date_ge - ));
+DATA(insert OID = 1090 (  date_ge         PGUID 12 f t t t 2 f 16 "1082 1082" 100 0 0 100  date_ge - ));
 DESCR("greater-than-or-equal");
-DATA(insert OID = 1091 (  date_ne         PGUID 12 f t t t 2 f 16 "1082 1082" 100 0 0 100  date_ne - ));
+DATA(insert OID = 1091 (  date_ne         PGUID 12 f t t t 2 f 16 "1082 1082" 100 0 0 100  date_ne - ));
 DESCR("not equal");
-DATA(insert OID = 1092 (  date_cmp        PGUID 12 f t t t 2 f 23 "1082 1082" 100 0 0 100  date_cmp - ));
+DATA(insert OID = 1092 (  date_cmp        PGUID 12 f t t t 2 f 23 "1082 1082" 100 0 0 100  date_cmp - ));
 DESCR("less-equal-greater");
 
 /* OIDS 1100 - 1199 */
 
-DATA(insert OID = 1102 (  time_lt         PGUID 12 f t t t 2 f 16 "1083 1083" 100 0 0 100  time_lt - ));
+DATA(insert OID = 1102 (  time_lt         PGUID 12 f t t t 2 f 16 "1083 1083" 100 0 0 100  time_lt - ));
 DESCR("less-than");
-DATA(insert OID = 1103 (  time_le         PGUID 12 f t t t 2 f 16 "1083 1083" 100 0 0 100  time_le - ));
+DATA(insert OID = 1103 (  time_le         PGUID 12 f t t t 2 f 16 "1083 1083" 100 0 0 100  time_le - ));
 DESCR("less-than-or-equal");
-DATA(insert OID = 1104 (  time_gt         PGUID 12 f t t t 2 f 16 "1083 1083" 100 0 0 100  time_gt - ));
+DATA(insert OID = 1104 (  time_gt         PGUID 12 f t t t 2 f 16 "1083 1083" 100 0 0 100  time_gt - ));
 DESCR("greater-than");
-DATA(insert OID = 1105 (  time_ge         PGUID 12 f t t t 2 f 16 "1083 1083" 100 0 0 100  time_ge - ));
+DATA(insert OID = 1105 (  time_ge         PGUID 12 f t t t 2 f 16 "1083 1083" 100 0 0 100  time_ge - ));
 DESCR("greater-than-or-equal");
-DATA(insert OID = 1106 (  time_ne         PGUID 12 f t t t 2 f 16 "1083 1083" 100 0 0 100  time_ne - ));
+DATA(insert OID = 1106 (  time_ne         PGUID 12 f t t t 2 f 16 "1083 1083" 100 0 0 100  time_ne - ));
 DESCR("not equal");
-DATA(insert OID = 1107 (  time_cmp        PGUID 12 f t t t 2 f 23 "1083 1083" 100 0 0 100  time_cmp - ));
+DATA(insert OID = 1107 (  time_cmp        PGUID 12 f t t t 2 f 23 "1083 1083" 100 0 0 100  time_cmp - ));
 DESCR("less-equal-greater");
-DATA(insert OID = 1138 (  date_larger     PGUID 12 f t t t 2 f 1082 "1082 1082" 100 0 0 100    date_larger - ));
+DATA(insert OID = 1138 (  date_larger     PGUID 12 f t t t 2 f 1082 "1082 1082" 100 0 0 100  date_larger - ));
 DESCR("larger of two");
-DATA(insert OID = 1139 (  date_smaller    PGUID 12 f t t t 2 f 1082 "1082 1082" 100 0 0 100    date_smaller - ));
+DATA(insert OID = 1139 (  date_smaller    PGUID 12 f t t t 2 f 1082 "1082 1082" 100 0 0 100  date_smaller - ));
 DESCR("smaller of two");
-DATA(insert OID = 1140 (  date_mi         PGUID 12 f t t t 2 f 23 "1082 1082" 100 0 0 100  date_mi - ));
+DATA(insert OID = 1140 (  date_mi         PGUID 12 f t t t 2 f 23 "1082 1082" 100 0 0 100  date_mi - ));
 DESCR("subtract");
-DATA(insert OID = 1141 (  date_pli        PGUID 12 f t t t 2 f 1082 "1082 23" 100 0 0 100  date_pli - ));
+DATA(insert OID = 1141 (  date_pli        PGUID 12 f t t t 2 f 1082 "1082 23" 100 0 0 100  date_pli - ));
 DESCR("add");
-DATA(insert OID = 1142 (  date_mii        PGUID 12 f t t t 2 f 1082 "1082 23" 100 0 0 100  date_mii - ));
+DATA(insert OID = 1142 (  date_mii        PGUID 12 f t t t 2 f 1082 "1082 23" 100 0 0 100  date_mii - ));
 DESCR("subtract");
-DATA(insert OID = 1143 (  time_in         PGUID 12 f t f t 1 f 1083 "0" 100 0 0 100    time_in - ));
+DATA(insert OID = 1143 (  time_in         PGUID 12 f t f t 1 f 1083 "0" 100 0 0 100  time_in - ));
 DESCR("(internal)");
-DATA(insert OID = 1144 (  time_out        PGUID 12 f t f t 1 f 23 "0" 100 0 0 100  time_out - ));
+DATA(insert OID = 1144 (  time_out        PGUID 12 f t t t 1 f 23 "0" 100 0 0 100  time_out - ));
 DESCR("(internal)");
-DATA(insert OID = 1145 (  time_eq         PGUID 12 f t t t 2 f 16 "1083 1083" 100 0 0 100  time_eq - ));
+DATA(insert OID = 1145 (  time_eq         PGUID 12 f t t t 2 f 16 "1083 1083" 100 0 0 100  time_eq - ));
 DESCR("equal");
 
 DATA(insert OID = 1146 (  circle_add_pt    PGUID 12 f t t t 2 f 718 "718 600" 100 0 0 100  circle_add_pt - ));
@@ -1390,92 +1389,92 @@ DESCR("multiply");
 DATA(insert OID = 1149 (  circle_div_pt    PGUID 12 f t t t 2 f 718 "718 600" 100 0 0 100  circle_div_pt - ));
 DESCR("divide");
 
-DATA(insert OID = 1150 (  timestamp_in    PGUID 12 f t f t 1 f 1184 "0" 100 0 0 100    timestamp_in - ));
+DATA(insert OID = 1150 (  timestamptz_in   PGUID 12 f t f t 1 f 1184 "0" 100 0 0 100  timestamptz_in - ));
 DESCR("(internal)");
-DATA(insert OID = 1151 (  timestamp_out    PGUID 12 f t f t 1 f 23 "0" 100 0 0 100 timestamp_out - ));
+DATA(insert OID = 1151 (  timestamptz_out  PGUID 12 f t t t 1 f 23 "0" 100 0 0 100  timestamptz_out - ));
 DESCR("(internal)");
-DATA(insert OID = 1152 (  timestamp_eq    PGUID 12 f t f t 2 f 16 "1184 1184" 100 0 0 100  timestamp_eq - ));
+DATA(insert OID = 1152 (  timestamptz_eq   PGUID 12 f t t t 2 f 16 "1184 1184" 100 0 0 100  timestamp_eq - ));
 DESCR("equal");
-DATA(insert OID = 1153 (  timestamp_ne    PGUID 12 f t f t 2 f 16 "1184 1184" 100 0 0 100  timestamp_ne - ));
+DATA(insert OID = 1153 (  timestamptz_ne   PGUID 12 f t t t 2 f 16 "1184 1184" 100 0 0 100  timestamp_ne - ));
 DESCR("not equal");
-DATA(insert OID = 1154 (  timestamp_lt    PGUID 12 f t f t 2 f 16 "1184 1184" 100 0 0 100  timestamp_lt - ));
+DATA(insert OID = 1154 (  timestamptz_lt   PGUID 12 f t t t 2 f 16 "1184 1184" 100 0 0 100  timestamp_lt - ));
 DESCR("less-than");
-DATA(insert OID = 1155 (  timestamp_le    PGUID 12 f t f t 2 f 16 "1184 1184" 100 0 0 100  timestamp_le - ));
+DATA(insert OID = 1155 (  timestamptz_le   PGUID 12 f t t t 2 f 16 "1184 1184" 100 0 0 100  timestamp_le - ));
 DESCR("less-than-or-equal");
-DATA(insert OID = 1156 (  timestamp_ge    PGUID 12 f t f t 2 f 16 "1184 1184" 100 0 0 100  timestamp_ge - ));
+DATA(insert OID = 1156 (  timestamptz_ge   PGUID 12 f t t t 2 f 16 "1184 1184" 100 0 0 100  timestamp_ge - ));
 DESCR("greater-than-or-equal");
-DATA(insert OID = 1157 (  timestamp_gt    PGUID 12 f t f t 2 f 16 "1184 1184" 100 0 0 100  timestamp_gt - ));
+DATA(insert OID = 1157 (  timestamptz_gt   PGUID 12 f t t t 2 f 16 "1184 1184" 100 0 0 100  timestamp_gt - ));
 DESCR("greater-than");
-DATA(insert OID = 1159 (  timezone        PGUID 12 f t f t 2 f 25 "25 1184" 100 0 0 100  timestamp_zone - ));
+DATA(insert OID = 1159 (  timezone        PGUID 12 f t f t 2 f 25 "25 1184" 100 0 0 100  timestamptz_zone - ));
 DESCR("time zone");
 
-DATA(insert OID = 1160 (  interval_in     PGUID 12 f t f t 1 f 1186 "0" 100 0 0 100    interval_in - ));
+DATA(insert OID = 1160 (  interval_in     PGUID 12 f t f t 1 f 1186 "0" 100 0 0 100  interval_in - ));
 DESCR("(internal)");
-DATA(insert OID = 1161 (  interval_out    PGUID 12 f t f t 1 f 23 "0" 100 0 0 100  interval_out - ));
+DATA(insert OID = 1161 (  interval_out    PGUID 12 f t t t 1 f 23 "0" 100 0 0 100  interval_out - ));
 DESCR("(internal)");
-DATA(insert OID = 1162 (  interval_eq     PGUID 12 f t f t 2 f 16 "1186 1186" 100 0 0 100  interval_eq - ));
+DATA(insert OID = 1162 (  interval_eq     PGUID 12 f t t t 2 f 16 "1186 1186" 100 0 0 100  interval_eq - ));
 DESCR("equal");
-DATA(insert OID = 1163 (  interval_ne     PGUID 12 f t f t 2 f 16 "1186 1186" 100 0 0 100  interval_ne - ));
+DATA(insert OID = 1163 (  interval_ne     PGUID 12 f t t t 2 f 16 "1186 1186" 100 0 0 100  interval_ne - ));
 DESCR("not equal");
-DATA(insert OID = 1164 (  interval_lt     PGUID 12 f t f t 2 f 16 "1186 1186" 100 0 0 100  interval_lt - ));
+DATA(insert OID = 1164 (  interval_lt     PGUID 12 f t t t 2 f 16 "1186 1186" 100 0 0 100  interval_lt - ));
 DESCR("less-than");
-DATA(insert OID = 1165 (  interval_le     PGUID 12 f t f t 2 f 16 "1186 1186" 100 0 0 100  interval_le - ));
+DATA(insert OID = 1165 (  interval_le     PGUID 12 f t t t 2 f 16 "1186 1186" 100 0 0 100  interval_le - ));
 DESCR("less-than-or-equal");
-DATA(insert OID = 1166 (  interval_ge     PGUID 12 f t f t 2 f 16 "1186 1186" 100 0 0 100  interval_ge - ));
+DATA(insert OID = 1166 (  interval_ge     PGUID 12 f t t t 2 f 16 "1186 1186" 100 0 0 100  interval_ge - ));
 DESCR("greater-than-or-equal");
-DATA(insert OID = 1167 (  interval_gt     PGUID 12 f t f t 2 f 16 "1186 1186" 100 0 0 100  interval_gt - ));
+DATA(insert OID = 1167 (  interval_gt     PGUID 12 f t t t 2 f 16 "1186 1186" 100 0 0 100  interval_gt - ));
 DESCR("greater-than");
-DATA(insert OID = 1168 (  interval_um     PGUID 12 f t f t 1 f 1186 "1186" 100 0 0 100  interval_um - ));
+DATA(insert OID = 1168 (  interval_um     PGUID 12 f t t t 1 f 1186 "1186" 100 0 0 100  interval_um - ));
 DESCR("subtract");
-DATA(insert OID = 1169 (  interval_pl     PGUID 12 f t f t 2 f 1186 "1186 1186" 100 0 0 100    interval_pl - ));
+DATA(insert OID = 1169 (  interval_pl     PGUID 12 f t t t 2 f 1186 "1186 1186" 100 0 0 100  interval_pl - ));
 DESCR("add");
-DATA(insert OID = 1170 (  interval_mi     PGUID 12 f t f t 2 f 1186 "1186 1186" 100 0 0 100    interval_mi - ));
+DATA(insert OID = 1170 (  interval_mi     PGUID 12 f t t t 2 f 1186 "1186 1186" 100 0 0 100  interval_mi - ));
 DESCR("subtract");
-DATA(insert OID = 1171 (  date_part           PGUID 12 f t f t 2 f  701 "25 1184" 100 0 0 100  timestamp_part - ));
-DESCR("extract field from timestamp");
-DATA(insert OID = 1172 (  date_part           PGUID 12 f t f t 2 f  701 "25 1186" 100 0 0 100  interval_part - ));
+DATA(insert OID = 1171 (  date_part           PGUID 12 f t t t 2 f  701 "25 1184" 100 0 0 100  timestamptz_part - ));
+DESCR("extract field from timestamp with time zone");
+DATA(insert OID = 1172 (  date_part           PGUID 12 f t t t 2 f  701 "25 1186" 100 0 0 100  interval_part - ));
 DESCR("extract field from interval");
 
-DATA(insert OID = 1173 (  timestamp           PGUID 12 f t f t 1 f 1184 "702" 100 0 0 100  abstime_timestamp - ));
-DESCR("convert abstime to timestamp");
-DATA(insert OID = 1174 (  timestamp           PGUID 12 f t f t 1 f 1184 "1082" 100 0 0 100  date_timestamp - ));
-DESCR("convert date to timestamp");
-DATA(insert OID = 1176 (  timestamp           PGUID 12 f t f t 2 f 1184 "1082 1083" 100 0 0 100    datetime_timestamp - ));
-DESCR("convert date and time to timestamp");
-DATA(insert OID = 1177 (  interval        PGUID 12 f t f t 1 f 1186 "703" 100 0 0 100  reltime_interval - ));
+DATA(insert OID = 1173 (  timestamptz     PGUID 12 f t f t 1 f 1184 "702" 100 0 0 100  abstime_timestamptz - ));
+DESCR("convert abstime to timestamp with time zone");
+DATA(insert OID = 1174 (  timestamptz     PGUID 12 f t f t 1 f 1184 "1082" 100 0 0 100  date_timestamptz - ));
+DESCR("convert date to timestamp with time zone");
+DATA(insert OID = 1176 (  timestamptz     PGUID 14 f t f t 2 f 1184 "1082 1083" 100 0 0 100  "select timestamptz($1 + $2)" - ));
+DESCR("convert date and time to timestamp with time zone");
+DATA(insert OID = 1177 (  interval        PGUID 12 f t t t 1 f 1186 "703" 100 0 0 100  reltime_interval - ));
 DESCR("convert reltime to interval");
-DATA(insert OID = 1178 (  date            PGUID 12 f t f t 1 f 1082 "1184" 100 0 0 100  timestamp_date - ));
-DESCR("convert timestamp to date");
-DATA(insert OID = 1179 (  date            PGUID 12 f t f t 1 f 1082 "702" 100 0 0 100  abstime_date - ));
+DATA(insert OID = 1178 (  date            PGUID 12 f t f t 1 f 1082 "1184" 100 0 0 100  timestamptz_date - ));
+DESCR("convert timestamp with time zone to date");
+DATA(insert OID = 1179 (  date            PGUID 12 f t f t 1 f 1082 "702" 100 0 0 100  abstime_date - ));
 DESCR("convert abstime to date");
-DATA(insert OID = 1180 (  abstime         PGUID 12 f t f t 1 f  702 "1184" 100 0 0 100  timestamp_abstime - ));
-DESCR("convert timestamp to abstime");
+DATA(insert OID = 1180 (  abstime         PGUID 12 f t f t 1 f  702 "1184" 100 0 0 100  timestamptz_abstime - ));
+DESCR("convert timestamp with time zone to abstime");
 DATA(insert OID = 1181 (  age             PGUID 12 f t f t 1 f 23 "28" 100 0 0 100  xid_age - ));
 DESCR("age of a transaction ID, in transactions before current transaction");
 
-DATA(insert OID = 1188 (  timestamp_mi     PGUID 12 f t f t 2 f 1186 "1184 1184" 100 0 0 100  timestamp_mi - ));
+DATA(insert OID = 1188 (  timestamptz_mi   PGUID 12 f t t t 2 f 1186 "1184 1184" 100 0 0 100  timestamp_mi - ));
 DESCR("subtract");
-DATA(insert OID = 1189 (  timestamp_pl_span PGUID 12 f t f t 2 f 1184 "1184 1186" 100 0 0 100  timestamp_pl_span - ));
+DATA(insert OID = 1189 (  timestamptz_pl_span PGUID 12 f t t t 2 f 1184 "1184 1186" 100 0 0 100  timestamp_pl_span - ));
 DESCR("plus");
-DATA(insert OID = 1190 (  timestamp_mi_span PGUID 12 f t f t 2 f 1184 "1184 1186" 100 0 0 100  timestamp_mi_span - ));
+DATA(insert OID = 1190 (  timestamptz_mi_span PGUID 12 f t t t 2 f 1184 "1184 1186" 100 0 0 100  timestamp_mi_span - ));
 DESCR("minus");
-DATA(insert OID = 1191 (  timestamp            PGUID 12 f t f t 1 f 1184 "25" 100 0 0 100  text_timestamp - ));
-DESCR("convert text to timestamp");
-DATA(insert OID = 1192 (  text             PGUID 12 f t f t 1 f     25 "1184" 100 0 0 100  timestamp_text - ));
+DATA(insert OID = 1191 (  timestamptz      PGUID 12 f t t t 1 f 1184 "25" 100 0 0 100  text_timestamptz - ));
+DESCR("convert text to timestamp with time zone");
+DATA(insert OID = 1192 (  text             PGUID 12 f t t t 1 f     25 "1184" 100 0 0 100  timestamptz_text - ));
 DESCR("convert timestamp to text");
-DATA(insert OID = 1193 (  text             PGUID 12 f t f t 1 f     25 "1186" 100 0 0 100  interval_text - ));
+DATA(insert OID = 1193 (  text             PGUID 12 f t t t 1 f     25 "1186" 100 0 0 100  interval_text - ));
 DESCR("convert interval to text");
-DATA(insert OID = 1194 (  reltime          PGUID 12 f t f t 1 f    703 "1186" 100 0 0 100  interval_reltime - ));
+DATA(insert OID = 1194 (  reltime          PGUID 12 f t t t 1 f    703 "1186" 100 0 0 100  interval_reltime - ));
 DESCR("convert interval to reltime");
-DATA(insert OID = 1195 (  timestamp_smaller PGUID 12 f t f t 2 f 1184 "1184 1184" 100 0 0 100  timestamp_smaller - ));
+DATA(insert OID = 1195 (  timestamptz_smaller PGUID 12 f t t t 2 f 1184 "1184 1184" 100 0 0 100  timestamp_smaller - ));
 DESCR("smaller of two");
-DATA(insert OID = 1196 (  timestamp_larger PGUID 12 f t f t 2 f 1184 "1184 1184" 100 0 0 100  timestamp_larger - ));
+DATA(insert OID = 1196 (  timestamptz_larger  PGUID 12 f t t t 2 f 1184 "1184 1184" 100 0 0 100  timestamp_larger - ));
 DESCR("larger of two");
-DATA(insert OID = 1197 (  interval_smaller PGUID 12 f t f t 2 f 1186 "1186 1186" 100 0 0 100  interval_smaller - ));
+DATA(insert OID = 1197 (  interval_smaller PGUID 12 f t t t 2 f 1186 "1186 1186" 100 0 0 100  interval_smaller - ));
 DESCR("smaller of two");
-DATA(insert OID = 1198 (  interval_larger  PGUID 12 f t f t 2 f 1186 "1186 1186" 100 0 0 100  interval_larger - ));
+DATA(insert OID = 1198 (  interval_larger  PGUID 12 f t t t 2 f 1186 "1186 1186" 100 0 0 100  interval_larger - ));
 DESCR("larger of two");
-DATA(insert OID = 1199 (  age              PGUID 12 f t f t 2 f 1186 "1184 1184" 100 0 0 100  timestamp_age - ));
+DATA(insert OID = 1199 (  age              PGUID 12 f t t t 2 f 1186 "1184 1184" 100 0 0 100  timestamptz_age - ));
 DESCR("date difference preserving months and years");
 
 /* OIDS 1200 - 1299 */
@@ -1488,9 +1487,9 @@ DESCR("get description for object id and catalog name");
 DATA(insert OID = 1216 (  col_description  PGUID 14 f t f t 2 f    25 "26 23" 100 0 0 100  "select description from pg_description where objoid = $1 and classoid = (select oid from pg_class where relname = \'pg_class\') and objsubid = $2" - ));
 DESCR("get description for table column");
 
-DATA(insert OID = 1217 (  date_trunc      PGUID 12 f t f t 2 f 1184 "25 1184" 100 0 0 100  timestamp_trunc - ));
-DESCR("truncate timestamp to specified units");
-DATA(insert OID = 1218 (  date_trunc      PGUID 12 f t f t 2 f 1186 "25 1186" 100 0 0 100  interval_trunc - ));
+DATA(insert OID = 1217 (  date_trunc      PGUID 12 f t t t 2 f 1184 "25 1184" 100 0 0 100  timestamptz_trunc - ));
+DESCR("truncate timestamp with time zone to specified units");
+DATA(insert OID = 1218 (  date_trunc      PGUID 12 f t t t 2 f 1186 "25 1186" 100 0 0 100  interval_trunc - ));
 DESCR("truncate interval to specified units");
 
 DATA(insert OID = 1219 (  int8inc         PGUID 12 f t t t 1 f 20 "20" 100 0 0 100  int8inc - ));
@@ -1498,18 +1497,18 @@ DESCR("increment");
 DATA(insert OID = 1230 (  int8abs         PGUID 12 f t t t 1 f 20 "20" 100 0 0 100  int8abs - ));
 DESCR("absolute value");
 
-DATA(insert OID = 1236 (  int8larger      PGUID 12 f t t t 2 f 20 "20 20" 100 0 0 100  int8larger - ));
+DATA(insert OID = 1236 (  int8larger      PGUID 12 f t t t 2 f 20 "20 20" 100 0 0 100  int8larger - ));
 DESCR("larger of two");
-DATA(insert OID = 1237 (  int8smaller     PGUID 12 f t t t 2 f 20 "20 20" 100 0 0 100  int8smaller - ));
+DATA(insert OID = 1237 (  int8smaller     PGUID 12 f t t t 2 f 20 "20 20" 100 0 0 100  int8smaller - ));
 DESCR("smaller of two");
 
-DATA(insert OID = 1238 (  texticregexeq    PGUID 12 f t t t 2 f 16 "25 25" 100 0 0 100 texticregexeq - ));
+DATA(insert OID = 1238 (  texticregexeq    PGUID 12 f t t t 2 f 16 "25 25" 100 0 0 100  texticregexeq - ));
 DESCR("matches regex., case-insensitive");
-DATA(insert OID = 1239 (  texticregexne    PGUID 12 f t t t 2 f 16 "25 25" 100 0 0 100 texticregexne - ));
+DATA(insert OID = 1239 (  texticregexne    PGUID 12 f t t t 2 f 16 "25 25" 100 0 0 100  texticregexne - ));
 DESCR("does not match regex., case-insensitive");
-DATA(insert OID = 1240 (  nameicregexeq    PGUID 12 f t t t 2 f 16 "19 25" 100 0 0 100 nameicregexeq - ));
+DATA(insert OID = 1240 (  nameicregexeq    PGUID 12 f t t t 2 f 16 "19 25" 100 0 0 100  nameicregexeq - ));
 DESCR("matches regex., case-insensitive");
-DATA(insert OID = 1241 (  nameicregexne    PGUID 12 f t t t 2 f 16 "19 25" 100 0 0 100 nameicregexne - ));
+DATA(insert OID = 1241 (  nameicregexne    PGUID 12 f t t t 2 f 16 "19 25" 100 0 0 100  nameicregexne - ));
 DESCR("does not match regex., case-insensitive");
 
 DATA(insert OID = 1251 (  int4abs         PGUID 12 f t t t 1 f 23 "23" 100 0 0 100  int4abs - ));
@@ -1517,29 +1516,29 @@ DESCR("absolute value");
 DATA(insert OID = 1253 (  int2abs         PGUID 12 f t t t 1 f 21 "21" 100 0 0 100  int2abs - ));
 DESCR("absolute value");
 
-DATA(insert OID = 1263 (  interval        PGUID 12 f t f t 1 f 1186 "25" 100 0 0 100  text_interval - ));
+DATA(insert OID = 1263 (  interval        PGUID 12 f t t t 1 f 1186 "25" 100 0 0 100  text_interval - ));
 DESCR("convert text to interval");
 
 DATA(insert OID = 1271 (  overlaps        PGUID 12 f t t f 4 f 16 "1266 1266 1266 1266" 100 0 0 100  overlaps_timetz - ));
 DESCR("SQL92 interval comparison");
-DATA(insert OID = 1272 (  datetime_pl     PGUID 12 f t f t 2 f 1184 "1082 1083" 100 0 0 100    datetime_timestamp - ));
+DATA(insert OID = 1272 (  datetime_pl     PGUID 12 f t t t 2 f 1114 "1082 1083" 100 0 0 100  datetime_timestamp - ));
 DESCR("convert date and time to timestamp");
 
-DATA(insert OID = 1274 (  int84pl         PGUID 12 f t t t 2 f 20 "20 23" 100 0 0 100  int84pl - ));
+DATA(insert OID = 1274 (  int84pl         PGUID 12 f t t t 2 f 20 "20 23" 100 0 0 100  int84pl - ));
 DESCR("add");
-DATA(insert OID = 1275 (  int84mi         PGUID 12 f t t t 2 f 20 "20 23" 100 0 0 100  int84mi - ));
+DATA(insert OID = 1275 (  int84mi         PGUID 12 f t t t 2 f 20 "20 23" 100 0 0 100  int84mi - ));
 DESCR("subtract");
-DATA(insert OID = 1276 (  int84mul        PGUID 12 f t t t 2 f 20 "20 23" 100 0 0 100  int84mul - ));
+DATA(insert OID = 1276 (  int84mul        PGUID 12 f t t t 2 f 20 "20 23" 100 0 0 100  int84mul - ));
 DESCR("multiply");
-DATA(insert OID = 1277 (  int84div        PGUID 12 f t t t 2 f 20 "20 23" 100 0 0 100  int84div - ));
+DATA(insert OID = 1277 (  int84div        PGUID 12 f t t t 2 f 20 "20 23" 100 0 0 100  int84div - ));
 DESCR("divide");
-DATA(insert OID = 1278 (  int48pl         PGUID 12 f t t t 2 f 20 "23 20" 100 0 0 100  int48pl - ));
+DATA(insert OID = 1278 (  int48pl         PGUID 12 f t t t 2 f 20 "23 20" 100 0 0 100  int48pl - ));
 DESCR("add");
-DATA(insert OID = 1279 (  int48mi         PGUID 12 f t t t 2 f 20 "23 20" 100 0 0 100  int48mi - ));
+DATA(insert OID = 1279 (  int48mi         PGUID 12 f t t t 2 f 20 "23 20" 100 0 0 100  int48mi - ));
 DESCR("subtract");
-DATA(insert OID = 1280 (  int48mul        PGUID 12 f t t t 2 f 20 "23 20" 100 0 0 100  int48mul - ));
+DATA(insert OID = 1280 (  int48mul        PGUID 12 f t t t 2 f 20 "23 20" 100 0 0 100  int48mul - ));
 DESCR("multiply");
-DATA(insert OID = 1281 (  int48div        PGUID 12 f t t t 2 f 20 "23 20" 100 0 0 100  int48div - ));
+DATA(insert OID = 1281 (  int48div        PGUID 12 f t t t 2 f 20 "23 20" 100 0 0 100  int48div - ));
 DESCR("divide");
 
 DATA(insert OID = 1288 (  text            PGUID 12 f t t t 1 f 25 "20" 100 0 0 100  int8_text - ));
@@ -1547,61 +1546,65 @@ DESCR("convert int8 to text");
 DATA(insert OID = 1289 (  int8            PGUID 12 f t t t 1 f 20 "25" 100 0 0 100  text_int8 - ));
 DESCR("convert text to int8");
 
-DATA(insert OID = 1290 (  _bpchar         PGUID 12 f t t t 2 f 1014 "1014 23" 100 0 0 100  _bpchar - ));
+DATA(insert OID = 1290 (  _bpchar         PGUID 12 f t t t 2 f 1014 "1014 23" 100 0 0 100  _bpchar - ));
 DESCR("adjust char()[] to typmod length");
-DATA(insert OID = 1291 (  _varchar        PGUID 12 f t t t 2 f 1015 "1015 23" 100 0 0 100  _varchar - ));
+DATA(insert OID = 1291 (  _varchar        PGUID 12 f t t t 2 f 1015 "1015 23" 100 0 0 100  _varchar - ));
 DESCR("adjust varchar()[] to typmod length");
 
-DATA(insert OID = 1292 ( tideq            PGUID 12 f t f t 2 f 16 "27 27" 100 0 0 100  tideq - ));
+DATA(insert OID = 1292 ( tideq            PGUID 12 f t f t 2 f 16 "27 27" 100 0 0 100  tideq - ));
 DESCR("equal");
-DATA(insert OID = 1293 ( currtid          PGUID 12 f t f t 2 f 27 "26 27" 100 0 0 100  currtid_byreloid - ));
+DATA(insert OID = 1293 ( currtid          PGUID 12 f t f t 2 f 27 "26 27" 100 0 0 100  currtid_byreloid - ));
 DESCR("latest tid of a tuple");
-DATA(insert OID = 1294 ( currtid2         PGUID 12 f t f t 2 f 27 "25 27" 100 0 0 100  currtid_byrelname - ));
+DATA(insert OID = 1294 ( currtid2         PGUID 12 f t f t 2 f 27 "25 27" 100 0 0 100  currtid_byrelname - ));
 DESCR("latest tid of a tuple");
 
-DATA(insert OID = 1296 (  timedate_pl     PGUID 14 f t f t 2 f 1184 "1083 1082" 100 0 0 100    "select datetime_pl($2, $1)" - ));
+DATA(insert OID = 1296 (  timedate_pl     PGUID 14 f t t t 2 f 1114 "1083 1082" 100 0 0 100  "select datetime_pl($2, $1)" - ));
 DESCR("convert time and date to timestamp");
-DATA(insert OID = 1297 (  datetimetz_pl    PGUID 12 f t f t 2 f 1184 "1082 1266" 100 0 0 100   datetimetz_timestamp - ));
-DESCR("convert date and time with time zone to timestamp");
-DATA(insert OID = 1298 (  timetzdate_pl    PGUID 14 f t f t 2 f 1184 "1266 1082" 100 0 0 100   "select datetimetz_pl($2, $1)" - ));
+DATA(insert OID = 1297 (  datetimetz_pl    PGUID 12 f t t t 2 f 1184 "1082 1266" 100 0 0 100  datetimetz_timestamptz - ));
+DESCR("convert date and time with time zone to timestamp with time zone");
+DATA(insert OID = 1298 (  timetzdate_pl    PGUID 14 f t t t 2 f 1184 "1266 1082" 100 0 0 100  "select datetimetz_pl($2, $1)" - ));
 DESCR("convert time with time zone and date to timestamp");
-DATA(insert OID = 1299 (  now             PGUID 12 f t f t 0 f 1184 "0" 100 0 0 100    now - ));
+DATA(insert OID = 1299 (  now             PGUID 12 f t f t 0 f 1184 "0" 100 0 0 100  now - ));
 DESCR("current transaction time");
 
 /* OIDS 1300 - 1399 */
 
 DATA(insert OID = 1300 (  positionsel         PGUID 12 f t f t 4 f 701 "0 26 0 23" 100 0 0 100  positionsel - ));
 DESCR("restriction selectivity for position-comparison operators");
-DATA(insert OID = 1301 (  positionjoinsel     PGUID 12 f t f t 3 f 701 "0 26 0" 100 0 0 100    positionjoinsel - ));
+DATA(insert OID = 1301 (  positionjoinsel     PGUID 12 f t f t 3 f 701 "0 26 0" 100 0 0 100  positionjoinsel - ));
 DESCR("join selectivity for position-comparison operators");
 DATA(insert OID = 1302 (  contsel         PGUID 12 f t f t 4 f 701 "0 26 0 23" 100 0 0 100  contsel - ));
 DESCR("restriction selectivity for containment comparison operators");
-DATA(insert OID = 1303 (  contjoinsel     PGUID 12 f t f t 3 f 701 "0 26 0" 100 0 0 100    contjoinsel - ));
+DATA(insert OID = 1303 (  contjoinsel     PGUID 12 f t f t 3 f 701 "0 26 0" 100 0 0 100  contjoinsel - ));
 DESCR("join selectivity for containment comparison operators");
 
-DATA(insert OID = 1304 ( overlaps           PGUID 12 f t t f 4 f 16 "1184 1184 1184 1184" 100 0 0 100  overlaps_timestamp - ));
+DATA(insert OID = 1304 ( overlaps           PGUID 12 f t t f 4 f 16 "1184 1184 1184 1184" 100 0 0 100  overlaps_timestamp - ));
 DESCR("SQL92 interval comparison");
-DATA(insert OID = 1305 ( overlaps           PGUID 14 f t t f 4 f 16 "1184 1186 1184 1186" 100 0 0 100  "select ($1, ($1 + $2)) overlaps ($3, ($3 + $4))" - ));
+DATA(insert OID = 1305 ( overlaps           PGUID 14 f t t f 4 f 16 "1184 1186 1184 1186" 100 0 0 100  "select ($1, ($1 + $2)) overlaps ($3, ($3 + $4))" - ));
 DESCR("SQL92 interval comparison");
-DATA(insert OID = 1306 ( overlaps           PGUID 14 f t t f 4 f 16 "1184 1184 1184 1186" 100 0 0 100  "select ($1, $2) overlaps ($3, ($3 + $4))" - ));
+DATA(insert OID = 1306 ( overlaps           PGUID 14 f t t f 4 f 16 "1184 1184 1184 1186" 100 0 0 100  "select ($1, $2) overlaps ($3, ($3 + $4))" - ));
 DESCR("SQL92 interval comparison");
-DATA(insert OID = 1307 ( overlaps           PGUID 14 f t t f 4 f 16 "1184 1186 1184 1184" 100 0 0 100  "select ($1, ($1 + $2)) overlaps ($3, $4)" - ));
+DATA(insert OID = 1307 ( overlaps           PGUID 14 f t t f 4 f 16 "1184 1186 1184 1184" 100 0 0 100  "select ($1, ($1 + $2)) overlaps ($3, $4)" - ));
 DESCR("SQL92 interval comparison");
 
-DATA(insert OID = 1308 ( overlaps           PGUID 12 f t t f 4 f 16 "1083 1083 1083 1083" 100 0 0 100  overlaps_time - ));
+DATA(insert OID = 1308 ( overlaps           PGUID 12 f t t f 4 f 16 "1083 1083 1083 1083" 100 0 0 100  overlaps_time - ));
 DESCR("SQL92 interval comparison");
-DATA(insert OID = 1309 ( overlaps           PGUID 14 f t t f 4 f 16 "1083 1186 1083 1186" 100 0 0 100  "select ($1, ($1 + $2)) overlaps ($3, ($3 + $4))" - ));
+DATA(insert OID = 1309 ( overlaps           PGUID 14 f t t f 4 f 16 "1083 1186 1083 1186" 100 0 0 100  "select ($1, ($1 + $2)) overlaps ($3, ($3 + $4))" - ));
 DESCR("SQL92 interval comparison");
-DATA(insert OID = 1310 ( overlaps           PGUID 14 f t t f 4 f 16 "1083 1083 1083 1186" 100 0 0 100  "select ($1, $2) overlaps ($3, ($3 + $4))" - ));
+DATA(insert OID = 1310 ( overlaps           PGUID 14 f t t f 4 f 16 "1083 1083 1083 1186" 100 0 0 100  "select ($1, $2) overlaps ($3, ($3 + $4))" - ));
 DESCR("SQL92 interval comparison");
-DATA(insert OID = 1311 ( overlaps           PGUID 14 f t t f 4 f 16 "1083 1186 1083 1083" 100 0 0 100  "select ($1, ($1 + $2)) overlaps ($3, $4)" - ));
+DATA(insert OID = 1311 ( overlaps           PGUID 14 f t t f 4 f 16 "1083 1186 1083 1083" 100 0 0 100  "select ($1, ($1 + $2)) overlaps ($3, $4)" - ));
 DESCR("SQL92 interval comparison");
 
-DATA(insert OID = 1314 (  timestamp_cmp         PGUID 12 f t f t 2 f   23 "1184 1184" 100 0 0 100  timestamp_cmp - ));
+DATA(insert OID = 1312 (  timestamp_in      PGUID 12 f t f t 1 f 1114 "0" 100 0 0 100  timestamp_in - ));
+DESCR("(internal)");
+DATA(insert OID = 1313 (  timestamp_out         PGUID 12 f t t t 1 f 23 "0" 100 0 0 100  timestamp_out - ));
+DESCR("(internal)");
+DATA(insert OID = 1314 (  timestamptz_cmp   PGUID 12 f t t t 2 f   23 "1184 1184" 100 0 0 100  timestamp_cmp - ));
 DESCR("less-equal-greater");
-DATA(insert OID = 1315 (  interval_cmp      PGUID 12 f t f t 2 f   23 "1186 1186" 100 0 0 100  interval_cmp - ));
+DATA(insert OID = 1315 (  interval_cmp      PGUID 12 f t t t 2 f   23 "1186 1186" 100 0 0 100  interval_cmp - ));
 DESCR("less-equal-greater");
-DATA(insert OID = 1316 (  time              PGUID 12 f t f t 1 f 1083 "1184" 100 0 0 100  timestamp_time - ));
+DATA(insert OID = 1316 (  time              PGUID 12 f t t t 1 f 1083 "1114" 100 0 0 100  timestamp_time - ));
 DESCR("convert timestamp to time");
 
 DATA(insert OID = 1317 (  length            PGUID 12 f t t t 1 f   23 "25" 100 0 0 100  textlen - ));
@@ -1611,7 +1614,7 @@ DESCR("character length");
 DATA(insert OID = 1319 (  length            PGUID 12 f t t t 1 f   23 "1043" 100 0 0 100  varcharlen - ));
 DESCR("character length");
 
-DATA(insert OID = 1326 (  interval_div      PGUID 12 f t f t 2 f 1186 "1186 701" 100 0 0 100  interval_div - ));
+DATA(insert OID = 1326 (  interval_div      PGUID 12 f t t t 2 f 1186 "1186 701" 100 0 0 100  interval_div - ));
 DESCR("divide");
 
 DATA(insert OID = 1339 (  dlog10            PGUID 12 f t t t 1 f 701 "701" 100 0 0 100  dlog10 - ));
@@ -1643,40 +1646,40 @@ DATA(insert OID = 1349 (  oidvectortypes     PGUID 12 f t f t 1 f   25 "30" 100 0 0 1
 DESCR("print type names of oidvector field");
 
 
-DATA(insert OID = 1350 (  timetz_in           PGUID 12 f t f t 1 f 1266 "0" 100 0 0 100    timetz_in - ));
+DATA(insert OID = 1350 (  timetz_in           PGUID 12 f t f t 1 f 1266 "0" 100 0 0 100  timetz_in - ));
 DESCR("(internal)");
-DATA(insert OID = 1351 (  timetz_out      PGUID 12 f t f t 1 f 23 "0" 100 0 0 100  timetz_out - ));
+DATA(insert OID = 1351 (  timetz_out      PGUID 12 f t t t 1 f 23 "0" 100 0 0 100  timetz_out - ));
 DESCR("(internal)");
-DATA(insert OID = 1352 (  timetz_eq           PGUID 12 f t t t 2 f 16 "1266 1266" 100 0 0 100  timetz_eq - ));
+DATA(insert OID = 1352 (  timetz_eq           PGUID 12 f t t t 2 f 16 "1266 1266" 100 0 0 100  timetz_eq - ));
 DESCR("equal");
-DATA(insert OID = 1353 (  timetz_ne           PGUID 12 f t t t 2 f 16 "1266 1266" 100 0 0 100  timetz_ne - ));
+DATA(insert OID = 1353 (  timetz_ne           PGUID 12 f t t t 2 f 16 "1266 1266" 100 0 0 100  timetz_ne - ));
 DESCR("not equal");
-DATA(insert OID = 1354 (  timetz_lt           PGUID 12 f t t t 2 f 16 "1266 1266" 100 0 0 100  timetz_lt - ));
+DATA(insert OID = 1354 (  timetz_lt           PGUID 12 f t t t 2 f 16 "1266 1266" 100 0 0 100  timetz_lt - ));
 DESCR("less-than");
-DATA(insert OID = 1355 (  timetz_le           PGUID 12 f t t t 2 f 16 "1266 1266" 100 0 0 100  timetz_le - ));
+DATA(insert OID = 1355 (  timetz_le           PGUID 12 f t t t 2 f 16 "1266 1266" 100 0 0 100  timetz_le - ));
 DESCR("less-than-or-equal");
-DATA(insert OID = 1356 (  timetz_ge           PGUID 12 f t t t 2 f 16 "1266 1266" 100 0 0 100  timetz_ge - ));
+DATA(insert OID = 1356 (  timetz_ge           PGUID 12 f t t t 2 f 16 "1266 1266" 100 0 0 100  timetz_ge - ));
 DESCR("greater-than-or-equal");
-DATA(insert OID = 1357 (  timetz_gt           PGUID 12 f t t t 2 f 16 "1266 1266" 100 0 0 100  timetz_gt - ));
+DATA(insert OID = 1357 (  timetz_gt           PGUID 12 f t t t 2 f 16 "1266 1266" 100 0 0 100  timetz_gt - ));
 DESCR("greater-than");
-DATA(insert OID = 1358 (  timetz_cmp      PGUID 12 f t t t 2 f 23 "1266 1266" 100 0 0 100  timetz_cmp - ));
+DATA(insert OID = 1358 (  timetz_cmp      PGUID 12 f t t t 2 f 23 "1266 1266" 100 0 0 100  timetz_cmp - ));
 DESCR("less-equal-greater");
-DATA(insert OID = 1359 (  timestamp           PGUID 12 f t f t 2 f 1184 "1082 1266" 100 0 0 100    datetimetz_timestamp - ));
-DESCR("convert date and time with time zone to timestamp");
+DATA(insert OID = 1359 (  timestamptz     PGUID 12 f t t t 2 f 1184 "1082 1266" 100 0 0 100  datetimetz_timestamptz - ));
+DESCR("convert date and time with time zone to timestamp with time zone");
 
 DATA(insert OID = 1362 (  time              PGUID 14 f t t t 1 f 1083 "1083" 100 0 0 100  "select $1" - ));
 DESCR("convert (noop)");
-DATA(insert OID = 1364 (  time              PGUID 14 f t f t 1 f 1083 "702" 100 0 0 100    "select time(timestamp($1))" - ));
+DATA(insert OID = 1364 (  time              PGUID 14 f t t t 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 t 1 f  702 "702" 100 0 0 100    "select $1" - ));
+DATA(insert OID = 1365 (  abstime           PGUID 14 f t f t 1 f  702 "702" 100 0 0 100  "select $1" - ));
 DESCR("convert (noop)");
-DATA(insert OID = 1367 (  reltime           PGUID 14 f t t t 1 f  703 "703" 100 0 0 100    "select $1" - ));
+DATA(insert OID = 1367 (  reltime           PGUID 14 f t t t 1 f  703 "703" 100 0 0 100  "select $1" - ));
 DESCR("convert (noop)");
-DATA(insert OID = 1368 (  timestamp             PGUID 14 f t f t 1 f 1184 "1184" 100 0 0 100  "select $1" - ));
+DATA(insert OID = 1368 (  timestamptz       PGUID 14 f t t t 1 f 1184 "1184" 100 0 0 100  "select $1" - ));
 DESCR("convert (noop)");
 DATA(insert OID = 1369 (  interval          PGUID 14 f t t t 1 f 1186 "1186" 100 0 0 100  "select $1" - ));
 DESCR("convert (noop)");
-DATA(insert OID = 1370 (  interval          PGUID 12 f t f t 1 f 1186 "1083" 100 0 0 100  time_interval - ));
+DATA(insert OID = 1370 (  interval          PGUID 12 f t t t 1 f 1186 "1083" 100 0 0 100  time_interval - ));
 DESCR("convert time to interval");
 DATA(insert OID = 1371 (  date              PGUID 14 f t t t 1 f 1082 "1082" 100 0 0 100  "select $1" - ));
 DESCR("convert (noop)");
@@ -1692,37 +1695,37 @@ DESCR("octet length");
 DATA(insert OID = 1376 (  octet_length          PGUID 12 f t t t 1 f   23   "1043" 100 0 0 100  varcharoctetlen - ));
 DESCR("octet length");
 
-DATA(insert OID = 1377 (  time_larger     PGUID 12 f t t t 2 f 1083 "1083 1083" 100 0 0 100    time_larger - ));
+DATA(insert OID = 1377 (  time_larger     PGUID 12 f t t t 2 f 1083 "1083 1083" 100 0 0 100  time_larger - ));
 DESCR("larger of two");
-DATA(insert OID = 1378 (  time_smaller    PGUID 12 f t t t 2 f 1083 "1083 1083" 100 0 0 100    time_smaller - ));
+DATA(insert OID = 1378 (  time_smaller    PGUID 12 f t t t 2 f 1083 "1083 1083" 100 0 0 100  time_smaller - ));
 DESCR("smaller of two");
-DATA(insert OID = 1379 (  timetz_larger    PGUID 12 f t t t 2 f 1266 "1266 1266" 100 0 0 100   timetz_larger - ));
+DATA(insert OID = 1379 (  timetz_larger    PGUID 12 f t t t 2 f 1266 "1266 1266" 100 0 0 100  timetz_larger - ));
 DESCR("larger of two");
-DATA(insert OID = 1380 (  timetz_smaller   PGUID 12 f t t t 2 f 1266 "1266 1266" 100 0 0 100   timetz_smaller - ));
+DATA(insert OID = 1380 (  timetz_smaller   PGUID 12 f t t t 2 f 1266 "1266 1266" 100 0 0 100  timetz_smaller - ));
 DESCR("smaller of two");
 
 DATA(insert OID = 1381 (  char_length     PGUID 12 f t t t 1 f 23 "25" 100 0 0 100  textlen - ));
 DESCR("length");
 
-DATA(insert OID = 1382 (  date_part    PGUID 14 f t f t 2 f  701 "25 702" 100 0 0 100  "select date_part($1, timestamp($2))" - ));
+DATA(insert OID = 1382 (  date_part    PGUID 14 f t f t 2 f  701 "25 702" 100 0 0 100  "select date_part($1, timestamptz($2))" - ));
 DESCR("extract field from abstime");
 DATA(insert OID = 1383 (  date_part    PGUID 14 f t f t 2 f  701 "25 703" 100 0 0 100  "select date_part($1, interval($2))" - ));
 DESCR("extract field from reltime");
-DATA(insert OID = 1384 (  date_part    PGUID 14 f t f t 2 f  701 "25 1082" 100 0 0 100 "select date_part($1, timestamp($2))" - ));
+DATA(insert OID = 1384 (  date_part    PGUID 14 f t t t 2 f  701 "25 1082" 100 0 0 100  "select date_part($1, timestamptz($2))" - ));
 DESCR("extract field from date");
-DATA(insert OID = 1385 (  date_part    PGUID 14 f t f t 2 f  701 "25 1083" 100 0 0 100 "select date_part($1, interval($2))" - ));
+DATA(insert OID = 1385 (  date_part    PGUID 14 f t t t 2 f  701 "25 1083" 100 0 0 100  "select date_part($1, interval($2))" - ));
 DESCR("extract field from time");
-DATA(insert OID = 1386 (  age         PGUID 14 f t f t 1 f 1186 "1184" 100 0 0 100  "select age(\'today\', $1)" - ));
+DATA(insert OID = 1386 (  age         PGUID 14 f t t t 1 f 1186 "1184" 100 0 0 100  "select age(\'today\', $1)" - ));
 DESCR("date difference from today preserving months and years");
 
-DATA(insert OID = 1387 (  timetz          PGUID 14 f t f t 1 f 1266 "1266" 100 0 0 100  "select $1" - ));
+DATA(insert OID = 1387 (  timetz          PGUID 14 f t t t 1 f 1266 "1266" 100 0 0 100  "select $1" - ));
 DESCR("noop conversion");
-DATA(insert OID = 1388 (  timetz          PGUID 12 f t f t 1 f 1266 "1184" 100 0 0 100  timestamp_timetz - ));
+DATA(insert OID = 1388 (  timetz          PGUID 12 f t t t 1 f 1266 "1184" 100 0 0 100  timestamptz_timetz - ));
 DESCR("convert timestamp to timetz");
 
-DATA(insert OID = 1389 (  isfinite    PGUID 12 f t f t 1 f 16 "1184" 100 0 0 100  timestamp_finite - ));
+DATA(insert OID = 1389 (  isfinite    PGUID 12 f t t t 1 f 16 "1184" 100 0 0 100  timestamp_finite - ));
 DESCR("boolean test");
-DATA(insert OID = 1390 (  isfinite    PGUID 12 f t f t 1 f 16 "1186" 100 0 0 100  interval_finite - ));
+DATA(insert OID = 1390 (  isfinite    PGUID 12 f t t t 1 f 16 "1186" 100 0 0 100  interval_finite - ));
 DESCR("boolean test");
 
 
@@ -1759,17 +1762,17 @@ DESCR("convert (no-op)");
 DATA(insert OID = 1405 (  int4        PGUID 14 f t t t 1 f 23   "23" 100 0 0 100  "select $1" - ));
 DESCR("convert (no-op)");
 
-DATA(insert OID = 1406 (  isvertical       PGUID 12 f t t t 2 f    16 "600 600" 100 0 0 100    point_vert - ));
+DATA(insert OID = 1406 (  isvertical       PGUID 12 f t t t 2 f    16 "600 600" 100 0 0 100  point_vert - ));
 DESCR("vertically aligned?");
-DATA(insert OID = 1407 (  ishorizontal     PGUID 12 f t t t 2 f    16 "600 600" 100 0 0 100    point_horiz - ));
+DATA(insert OID = 1407 (  ishorizontal     PGUID 12 f t t t 2 f    16 "600 600" 100 0 0 100  point_horiz - ));
 DESCR("horizontally aligned?");
-DATA(insert OID = 1408 (  isparallel       PGUID 12 f t t t 2 f    16 "601 601" 100 0 0 100    lseg_parallel - ));
+DATA(insert OID = 1408 (  isparallel       PGUID 12 f t t t 2 f    16 "601 601" 100 0 0 100  lseg_parallel - ));
 DESCR("parallel?");
-DATA(insert OID = 1409 (  isperp           PGUID 12 f t t t 2 f    16 "601 601" 100 0 0 100    lseg_perp - ));
+DATA(insert OID = 1409 (  isperp           PGUID 12 f t t t 2 f    16 "601 601" 100 0 0 100  lseg_perp - ));
 DESCR("perpendicular?");
-DATA(insert OID = 1410 (  isvertical       PGUID 12 f t t t 1 f    16 "601" 100 0 0 100    lseg_vertical - ));
+DATA(insert OID = 1410 (  isvertical       PGUID 12 f t t t 1 f    16 "601" 100 0 0 100  lseg_vertical - ));
 DESCR("vertical?");
-DATA(insert OID = 1411 (  ishorizontal     PGUID 12 f t t t 1 f    16 "601" 100 0 0 100    lseg_horizontal - ));
+DATA(insert OID = 1411 (  ishorizontal     PGUID 12 f t t t 1 f    16 "601" 100 0 0 100  lseg_horizontal - ));
 DESCR("horizontal?");
 DATA(insert OID = 1412 (  isparallel       PGUID 12 f t t t 2 f    16 "628 628" 100 0 0 100  line_parallel - ));
 DESCR("lines parallel?");
@@ -1779,7 +1782,7 @@ DATA(insert OID = 1414 (  isvertical      PGUID 12 f t t t 1 f    16 "628" 100 0 0 100
 DESCR("lines vertical?");
 DATA(insert OID = 1415 (  ishorizontal     PGUID 12 f t t t 1 f    16 "628" 100 0 0 100  line_horizontal - ));
 DESCR("lines horizontal?");
-DATA(insert OID = 1416 (  point                PGUID 12 f t t t 1 f 600 "718" 100 0 0 100  circle_center - ));
+DATA(insert OID = 1416 (  point                PGUID 12 f t t t 1 f 600 "718" 100 0 0 100  circle_center - ));
 DESCR("center of");
 
 DATA(insert OID = 1417 (  isnottrue            PGUID 12 f t t f 1 f 16 "16" 100 0 0 100  isnottrue - ));
@@ -1787,18 +1790,18 @@ DESCR("bool is not true (ie, false or unknown)");
 DATA(insert OID = 1418 (  isnotfalse       PGUID 12 f t t f 1 f 16 "16" 100 0 0 100  isnotfalse - ));
 DESCR("bool is not false (ie, true or unknown)");
 
-DATA(insert OID = 1419 (  time             PGUID 12 f t f t 1 f 1083 "1186" 100 0 0 100  interval_time - ));
+DATA(insert OID = 1419 (  time             PGUID 12 f t t t 1 f 1083 "1186" 100 0 0 100  interval_time - ));
 DESCR("convert interval to time");
 
-DATA(insert OID = 1421 (  box              PGUID 12 f t t t 2 f 603 "600 600" 100 0 0 100  points_box - ));
+DATA(insert OID = 1421 (  box              PGUID 12 f t t t 2 f 603 "600 600" 100 0 0 100  points_box - ));
 DESCR("convert points to box");
-DATA(insert OID = 1422 (  box_add          PGUID 12 f t t t 2 f 603 "603 600" 100 0 0 100  box_add - ));
+DATA(insert OID = 1422 (  box_add          PGUID 12 f t t t 2 f 603 "603 600" 100 0 0 100  box_add - ));
 DESCR("add point to box (translate)");
-DATA(insert OID = 1423 (  box_sub          PGUID 12 f t t t 2 f 603 "603 600" 100 0 0 100  box_sub - ));
+DATA(insert OID = 1423 (  box_sub          PGUID 12 f t t t 2 f 603 "603 600" 100 0 0 100  box_sub - ));
 DESCR("subtract point from box (translate)");
-DATA(insert OID = 1424 (  box_mul          PGUID 12 f t t t 2 f 603 "603 600" 100 0 0 100  box_mul - ));
+DATA(insert OID = 1424 (  box_mul          PGUID 12 f t t t 2 f 603 "603 600" 100 0 0 100  box_mul - ));
 DESCR("multiply box by point (scale)");
-DATA(insert OID = 1425 (  box_div          PGUID 12 f t t t 2 f 603 "603 600" 100 0 0 100  box_div - ));
+DATA(insert OID = 1425 (  box_div          PGUID 12 f t t t 2 f 603 "603 600" 100 0 0 100  box_div - ));
 DESCR("divide box by point (scale)");
 DATA(insert OID = 1426 (  path_contain_pt  PGUID 14 f t t t 2 f    16 "602 600" 100 0 0 100  "select on_ppath($2, $1)" - ));
 DESCR("path contains point?");
@@ -1818,104 +1821,104 @@ DESCR("# points in path");
  * - thomas 97/04/20
  */
 
-DATA(insert OID = 1433 (  pclose           PGUID 12 f t t t 1 f 602 "602" 100 0 0 100  path_close - ));
+DATA(insert OID = 1433 (  pclose           PGUID 12 f t t t 1 f 602 "602" 100 0 0 100  path_close - ));
 DESCR("close path");
-DATA(insert OID = 1434 (  popen                PGUID 12 f t t t 1 f 602 "602" 100 0 0 100  path_open - ));
+DATA(insert OID = 1434 (  popen                PGUID 12 f t t t 1 f 602 "602" 100 0 0 100  path_open - ));
 DESCR("open path");
-DATA(insert OID = 1435 (  path_add         PGUID 12 f t t t 2 f 602 "602 602" 100 0 0 100  path_add - ));
+DATA(insert OID = 1435 (  path_add         PGUID 12 f t t t 2 f 602 "602 602" 100 0 0 100  path_add - ));
 DESCR("concatenate open paths");
-DATA(insert OID = 1436 (  path_add_pt      PGUID 12 f t t t 2 f 602 "602 600" 100 0 0 100  path_add_pt - ));
+DATA(insert OID = 1436 (  path_add_pt      PGUID 12 f t t t 2 f 602 "602 600" 100 0 0 100  path_add_pt - ));
 DESCR("add (translate path)");
-DATA(insert OID = 1437 (  path_sub_pt      PGUID 12 f t t t 2 f 602 "602 600" 100 0 0 100  path_sub_pt - ));
+DATA(insert OID = 1437 (  path_sub_pt      PGUID 12 f t t t 2 f 602 "602 600" 100 0 0 100  path_sub_pt - ));
 DESCR("subtract (translate path)");
-DATA(insert OID = 1438 (  path_mul_pt      PGUID 12 f t t t 2 f 602 "602 600" 100 0 0 100  path_mul_pt - ));
+DATA(insert OID = 1438 (  path_mul_pt      PGUID 12 f t t t 2 f 602 "602 600" 100 0 0 100  path_mul_pt - ));
 DESCR("multiply (rotate/scale path)");
-DATA(insert OID = 1439 (  path_div_pt      PGUID 12 f t t t 2 f 602 "602 600" 100 0 0 100  path_div_pt - ));
+DATA(insert OID = 1439 (  path_div_pt      PGUID 12 f t t t 2 f 602 "602 600" 100 0 0 100  path_div_pt - ));
 DESCR("divide (rotate/scale path)");
 
-DATA(insert OID = 1440 (  point                PGUID 12 f t t t 2 f 600 "701 701" 100 0 0 100  construct_point - ));
+DATA(insert OID = 1440 (  point                PGUID 12 f t t t 2 f 600 "701 701" 100 0 0 100  construct_point - ));
 DESCR("convert x, y to point");
-DATA(insert OID = 1441 (  point_add            PGUID 12 f t t t 2 f 600 "600 600" 100 0 0 100  point_add - ));
+DATA(insert OID = 1441 (  point_add            PGUID 12 f t t t 2 f 600 "600 600" 100 0 0 100  point_add - ));
 DESCR("add points (translate)");
-DATA(insert OID = 1442 (  point_sub            PGUID 12 f t t t 2 f 600 "600 600" 100 0 0 100  point_sub - ));
+DATA(insert OID = 1442 (  point_sub            PGUID 12 f t t t 2 f 600 "600 600" 100 0 0 100  point_sub - ));
 DESCR("subtract points (translate)");
-DATA(insert OID = 1443 (  point_mul            PGUID 12 f t t t 2 f 600 "600 600" 100 0 0 100  point_mul - ));
+DATA(insert OID = 1443 (  point_mul            PGUID 12 f t t t 2 f 600 "600 600" 100 0 0 100  point_mul - ));
 DESCR("multiply points (scale/rotate)");
-DATA(insert OID = 1444 (  point_div            PGUID 12 f t t t 2 f 600 "600 600" 100 0 0 100  point_div - ));
+DATA(insert OID = 1444 (  point_div            PGUID 12 f t t t 2 f 600 "600 600" 100 0 0 100  point_div - ));
 DESCR("divide points (scale/rotate)");
 
 DATA(insert OID = 1445 (  poly_npoints     PGUID 12 f t t t 1 f    23 "604" 100 0 0 100  poly_npoints - ));
 DESCR("number of points in polygon");
-DATA(insert OID = 1446 (  box              PGUID 12 f t t t 1 f 603 "604" 100 0 0 100  poly_box - ));
+DATA(insert OID = 1446 (  box              PGUID 12 f t t t 1 f 603 "604" 100 0 0 100  poly_box - ));
 DESCR("convert polygon to bounding box");
-DATA(insert OID = 1447 (  path             PGUID 12 f t t t 1 f 602 "604" 100 0 0 100  poly_path - ));
+DATA(insert OID = 1447 (  path             PGUID 12 f t t t 1 f 602 "604" 100 0 0 100  poly_path - ));
 DESCR("convert polygon to path");
-DATA(insert OID = 1448 (  polygon          PGUID 12 f t t t 1 f 604 "603" 100 0 0 100  box_poly - ));
+DATA(insert OID = 1448 (  polygon          PGUID 12 f t t t 1 f 604 "603" 100 0 0 100  box_poly - ));
 DESCR("convert box to polygon");
-DATA(insert OID = 1449 (  polygon          PGUID 12 f t t t 1 f 604 "602" 100 0 0 100  path_poly - ));
+DATA(insert OID = 1449 (  polygon          PGUID 12 f t t t 1 f 604 "602" 100 0 0 100  path_poly - ));
 DESCR("convert path to polygon");
 
 DATA(insert OID = 1450 (  circle_in            PGUID 12 f t t t 1 f 718 "0" 100 0 0 100  circle_in - ));
 DESCR("(internal)");
 DATA(insert OID = 1451 (  circle_out       PGUID 12 f t t t 1 f    23  "718" 100 0 0 100  circle_out - ));
 DESCR("(internal)");
-DATA(insert OID = 1452 (  circle_same      PGUID 12 f t t t 2 f    16 "718 718" 100 0 0 100    circle_same - ));
+DATA(insert OID = 1452 (  circle_same      PGUID 12 f t t t 2 f    16 "718 718" 100 0 0 100  circle_same - ));
 DESCR("same as");
-DATA(insert OID = 1453 (  circle_contain   PGUID 12 f t t t 2 f    16 "718 718" 100 0 0 100    circle_contain - ));
+DATA(insert OID = 1453 (  circle_contain   PGUID 12 f t t t 2 f    16 "718 718" 100 0 0 100  circle_contain - ));
 DESCR("contains");
-DATA(insert OID = 1454 (  circle_left      PGUID 12 f t t t 2 f    16 "718 718" 100 0 0 100    circle_left - ));
+DATA(insert OID = 1454 (  circle_left      PGUID 12 f t t t 2 f    16 "718 718" 100 0 0 100  circle_left - ));
 DESCR("is left of");
-DATA(insert OID = 1455 (  circle_overleft  PGUID 12 f t t t 2 f    16 "718 718" 100 0 0 100    circle_overleft - ));
+DATA(insert OID = 1455 (  circle_overleft  PGUID 12 f t t t 2 f    16 "718 718" 100 0 0 100  circle_overleft - ));
 DESCR("overlaps, but does not extend to right of");
-DATA(insert OID = 1456 (  circle_overright PGUID 12 f t t t 2 f    16 "718 718" 100 0 0 100    circle_overright - ));
+DATA(insert OID = 1456 (  circle_overright PGUID 12 f t t t 2 f    16 "718 718" 100 0 0 100  circle_overright - ));
 DESCR("");
-DATA(insert OID = 1457 (  circle_right     PGUID 12 f t t t 2 f    16 "718 718" 100 0 0 100    circle_right - ));
+DATA(insert OID = 1457 (  circle_right     PGUID 12 f t t t 2 f    16 "718 718" 100 0 0 100  circle_right - ));
 DESCR("is right of");
-DATA(insert OID = 1458 (  circle_contained PGUID 12 f t t t 2 f    16 "718 718" 100 0 0 100    circle_contained - ));
+DATA(insert OID = 1458 (  circle_contained PGUID 12 f t t t 2 f    16 "718 718" 100 0 0 100  circle_contained - ));
 DESCR("");
-DATA(insert OID = 1459 (  circle_overlap   PGUID 12 f t t t 2 f    16 "718 718" 100 0 0 100    circle_overlap - ));
+DATA(insert OID = 1459 (  circle_overlap   PGUID 12 f t t t 2 f    16 "718 718" 100 0 0 100  circle_overlap - ));
 DESCR("overlaps");
-DATA(insert OID = 1460 (  circle_below     PGUID 12 f t t t 2 f    16 "718 718" 100 0 0 100    circle_below - ));
+DATA(insert OID = 1460 (  circle_below     PGUID 12 f t t t 2 f    16 "718 718" 100 0 0 100  circle_below - ));
 DESCR("is below");
-DATA(insert OID = 1461 (  circle_above     PGUID 12 f t t t 2 f    16 "718 718" 100 0 0 100    circle_above - ));
+DATA(insert OID = 1461 (  circle_above     PGUID 12 f t t t 2 f    16 "718 718" 100 0 0 100  circle_above - ));
 DESCR("is above");
-DATA(insert OID = 1462 (  circle_eq            PGUID 12 f t t t 2 f    16 "718 718" 100 0 0 100    circle_eq - ));
+DATA(insert OID = 1462 (  circle_eq            PGUID 12 f t t t 2 f    16 "718 718" 100 0 0 100  circle_eq - ));
 DESCR("equal by area");
-DATA(insert OID = 1463 (  circle_ne            PGUID 12 f t t t 2 f    16 "718 718" 100 0 0 100    circle_ne - ));
+DATA(insert OID = 1463 (  circle_ne            PGUID 12 f t t t 2 f    16 "718 718" 100 0 0 100  circle_ne - ));
 DESCR("not equal by area");
-DATA(insert OID = 1464 (  circle_lt            PGUID 12 f t t t 2 f    16 "718 718" 100 0 0 100    circle_lt - ));
+DATA(insert OID = 1464 (  circle_lt            PGUID 12 f t t t 2 f    16 "718 718" 100 0 0 100  circle_lt - ));
 DESCR("less-than by area");
-DATA(insert OID = 1465 (  circle_gt            PGUID 12 f t t t 2 f    16 "718 718" 100 0 0 100    circle_gt - ));
+DATA(insert OID = 1465 (  circle_gt            PGUID 12 f t t t 2 f    16 "718 718" 100 0 0 100  circle_gt - ));
 DESCR("greater-than by area");
-DATA(insert OID = 1466 (  circle_le            PGUID 12 f t t t 2 f    16 "718 718" 100 0 0 100    circle_le - ));
+DATA(insert OID = 1466 (  circle_le            PGUID 12 f t t t 2 f    16 "718 718" 100 0 0 100  circle_le - ));
 DESCR("less-than-or-equal by area");
-DATA(insert OID = 1467 (  circle_ge            PGUID 12 f t t t 2 f    16 "718 718" 100 0 0 100    circle_ge - ));
+DATA(insert OID = 1467 (  circle_ge            PGUID 12 f t t t 2 f    16 "718 718" 100 0 0 100  circle_ge - ));
 DESCR("greater-than-or-equal by area");
-DATA(insert OID = 1468 (  area             PGUID 12 f t t t 1 f 701 "718" 100 0 0 100  circle_area - ));
+DATA(insert OID = 1468 (  area             PGUID 12 f t t t 1 f 701 "718" 100 0 0 100  circle_area - ));
 DESCR("area of circle");
-DATA(insert OID = 1469 (  diameter         PGUID 12 f t t t 1 f 701 "718" 100 0 0 100  circle_diameter - ));
+DATA(insert OID = 1469 (  diameter         PGUID 12 f t t t 1 f 701 "718" 100 0 0 100  circle_diameter - ));
 DESCR("diameter of circle");
-DATA(insert OID = 1470 (  radius           PGUID 12 f t t t 1 f 701 "718" 100 0 0 100  circle_radius - ));
+DATA(insert OID = 1470 (  radius           PGUID 12 f t t t 1 f 701 "718" 100 0 0 100  circle_radius - ));
 DESCR("radius of circle");
-DATA(insert OID = 1471 (  circle_distance  PGUID 12 f t t t 2 f 701 "718 718" 100 0 0 100  circle_distance - ));
+DATA(insert OID = 1471 (  circle_distance  PGUID 12 f t t t 2 f 701 "718 718" 100 0 0 100  circle_distance - ));
 DESCR("distance between");
-DATA(insert OID = 1472 (  circle_center        PGUID 12 f t t t 1 f 600 "718" 100 0 0 100  circle_center - ));
+DATA(insert OID = 1472 (  circle_center        PGUID 12 f t t t 1 f 600 "718" 100 0 0 100  circle_center - ));
 DESCR("center of");
-DATA(insert OID = 1473 (  circle           PGUID 12 f t t t 2 f 718 "600 701" 100 0 0 100  cr_circle - ));
+DATA(insert OID = 1473 (  circle           PGUID 12 f t t t 2 f 718 "600 701" 100 0 0 100  cr_circle - ));
 DESCR("convert point and radius to circle");
-DATA(insert OID = 1474 (  circle           PGUID 12 f t t t 1 f 718 "604" 100 0 0 100  poly_circle - ));
+DATA(insert OID = 1474 (  circle           PGUID 12 f t t t 1 f 718 "604" 100 0 0 100  poly_circle - ));
 DESCR("convert polygon to circle");
 DATA(insert OID = 1475 (  polygon          PGUID 12 f t t t 2 f 604 "23 718" 100 0 0 100  circle_poly - ));
 DESCR("convert vertex count and circle to polygon");
-DATA(insert OID = 1476 (  dist_pc          PGUID 12 f t t t 2 f 701 "600 718" 100 0 0 100  dist_pc - ));
+DATA(insert OID = 1476 (  dist_pc          PGUID 12 f t t t 2 f 701 "600 718" 100 0 0 100  dist_pc - ));
 DESCR("distance between point and circle");
 DATA(insert OID = 1477 (  circle_contain_pt PGUID 12 f t t t 2 f   16 "718 600" 100 0 0 100  circle_contain_pt - ));
 DESCR("circle contains point?");
 DATA(insert OID = 1478 (  pt_contained_circle  PGUID 12 f t t t 2 f    16 "600 718" 100 0 0 100  pt_contained_circle - ));
 DESCR("point inside circle?");
-DATA(insert OID = 1479 (  circle           PGUID 12 f t t t 1 f 718 "603" 100 0 0 100  box_circle - ));
+DATA(insert OID = 1479 (  circle           PGUID 12 f t t t 1 f 718 "603" 100 0 0 100  box_circle - ));
 DESCR("convert box to circle");
-DATA(insert OID = 1480 (  box              PGUID 12 f t t t 1 f 603 "718" 100 0 0 100  circle_box - ));
+DATA(insert OID = 1480 (  box              PGUID 12 f t t t 1 f 603 "718" 100 0 0 100  circle_box - ));
 DESCR("convert circle to box");
 DATA(insert OID = 1481 (  tinterval             PGUID 12 f t f t 2 f 704 "702 702" 100 0 0 100 mktinterval - ));
 DESCR("convert to tinterval");
@@ -1930,22 +1933,22 @@ DATA(insert OID = 1485 (  lseg_gt           PGUID 12 f t t t 2 f    16 "601 601" 100 0 0 10
 DESCR("greater-than by length");
 DATA(insert OID = 1486 (  lseg_ge          PGUID 12 f t t t 2 f    16 "601 601" 100 0 0 100  lseg_ge - ));
 DESCR("greater-than-or-equal by length");
-DATA(insert OID = 1487 (  lseg_length      PGUID 12 f t t t 1 f 701 "601" 100 0 0 100  lseg_length - ));
+DATA(insert OID = 1487 (  lseg_length      PGUID 12 f t t t 1 f 701 "601" 100 0 0 100  lseg_length - ));
 DESCR("distance between endpoints");
-DATA(insert OID = 1488 (  close_ls         PGUID 12 f t t t 2 f 600 "628 601" 100 0 0 100  close_ls - ));
+DATA(insert OID = 1488 (  close_ls         PGUID 12 f t t t 2 f 600 "628 601" 100 0 0 100  close_ls - ));
 DESCR("closest point to line on line segment");
-DATA(insert OID = 1489 (  close_lseg       PGUID 12 f t t t 2 f 600 "601 601" 100 0 0 100  close_lseg - ));
+DATA(insert OID = 1489 (  close_lseg       PGUID 12 f t t t 2 f 600 "601 601" 100 0 0 100  close_lseg - ));
 DESCR("closest point to line segment on line segment");
 
-DATA(insert OID = 1490 (  line_in          PGUID 12 f t t t 1 f 628 "0" 100 0 0 100    line_in - ));
+DATA(insert OID = 1490 (  line_in          PGUID 12 f t t t 1 f 628 "0" 100 0 0 100  line_in - ));
 DESCR("(internal)");
-DATA(insert OID = 1491 (  line_out         PGUID 12 f t t t 1 f 23  "628" 100 0 0 100  line_out - ));
+DATA(insert OID = 1491 (  line_out         PGUID 12 f t t t 1 f 23  "628" 100 0 0 100  line_out - ));
 DESCR("(internal)");
-DATA(insert OID = 1492 (  line_eq          PGUID 12 f t t t 2 f  16 "628 628" 100 0 0 100  line_eq - ));
+DATA(insert OID = 1492 (  line_eq          PGUID 12 f t t t 2 f  16 "628 628" 100 0 0 100  line_eq - ));
 DESCR("lines equal?");
-DATA(insert OID = 1493 (  line             PGUID 12 f t t t 2 f 628 "600 600" 100 0 0 100  line_construct_pp - ));
+DATA(insert OID = 1493 (  line             PGUID 12 f t t t 2 f 628 "600 600" 100 0 0 100  line_construct_pp - ));
 DESCR("line from points");
-DATA(insert OID = 1494 (  line_interpt     PGUID 12 f t t t 2 f 600 "628 628" 100 0 0 100  line_interpt - ));
+DATA(insert OID = 1494 (  line_interpt     PGUID 12 f t t t 2 f 600 "628 628" 100 0 0 100  line_interpt - ));
 DESCR("intersection point");
 DATA(insert OID = 1495 (  line_intersect   PGUID 12 f t t t 2 f    16 "628 628" 100 0 0 100  line_intersect - ));
 DESCR("lines intersect?");
@@ -1960,27 +1963,27 @@ DESCR("lines horizontal?");
 
 /* OIDS 1500 - 1599 */
 
-DATA(insert OID = 1530 (  length           PGUID 12 f t t t 1 f 701 "601" 100 0 0 100  lseg_length - ));
+DATA(insert OID = 1530 (  length           PGUID 12 f t t t 1 f 701 "601" 100 0 0 100  lseg_length - ));
 DESCR("distance between endpoints");
-DATA(insert OID = 1531 (  length           PGUID 12 f t t t 1 f 701 "602" 100 0 0 100  path_length - ));
+DATA(insert OID = 1531 (  length           PGUID 12 f t t t 1 f 701 "602" 100 0 0 100  path_length - ));
 DESCR("sum of path segments");
 
 
-DATA(insert OID = 1532 (  point                PGUID 12 f t t t 1 f 600 "601" 100 0 0 100  lseg_center - ));
+DATA(insert OID = 1532 (  point                PGUID 12 f t t t 1 f 600 "601" 100 0 0 100  lseg_center - ));
 DESCR("center of");
-DATA(insert OID = 1533 (  point                PGUID 12 f t t t 1 f 600 "602" 100 0 0 100  path_center - ));
+DATA(insert OID = 1533 (  point                PGUID 12 f t t t 1 f 600 "602" 100 0 0 100  path_center - ));
 DESCR("center of");
-DATA(insert OID = 1534 (  point                PGUID 12 f t t t 1 f 600 "603" 100 0 0 100  box_center - ));
+DATA(insert OID = 1534 (  point                PGUID 12 f t t t 1 f 600 "603" 100 0 0 100  box_center - ));
 DESCR("center of");
-DATA(insert OID = 1540 (  point                PGUID 12 f t t t 1 f 600 "604" 100 0 0 100  poly_center - ));
+DATA(insert OID = 1540 (  point                PGUID 12 f t t t 1 f 600 "604" 100 0 0 100  poly_center - ));
 DESCR("center of");
-DATA(insert OID = 1541 (  lseg             PGUID 12 f t t t 1 f 601 "603" 100 0 0 100  box_diagonal - ));
+DATA(insert OID = 1541 (  lseg             PGUID 12 f t t t 1 f 601 "603" 100 0 0 100  box_diagonal - ));
 DESCR("diagonal of");
-DATA(insert OID = 1542 (  center           PGUID 12 f t t t 1 f 600 "603" 100 0 0 100  box_center - ));
+DATA(insert OID = 1542 (  center           PGUID 12 f t t t 1 f 600 "603" 100 0 0 100  box_center - ));
 DESCR("center of");
-DATA(insert OID = 1543 (  center           PGUID 12 f t t t 1 f 600 "718" 100 0 0 100  circle_center - ));
+DATA(insert OID = 1543 (  center           PGUID 12 f t t t 1 f 600 "718" 100 0 0 100  circle_center - ));
 DESCR("center of");
-DATA(insert OID = 1544 (  polygon          PGUID 14 f t t t 1 f 604 "718" 100 0 0 100  "select polygon(12, $1)" - ));
+DATA(insert OID = 1544 (  polygon          PGUID 14 f t t t 1 f 604 "718" 100 0 0 100  "select polygon(12, $1)" - ));
 DESCR("convert circle to 12-vertex polygon");
 DATA(insert OID = 1545 (  npoints          PGUID 12 f t t t 1 f    23 "602" 100 0 0 100  path_npoints - ));
 DESCR("# points in path");
@@ -2005,13 +2008,13 @@ DESCR("convert int8 to int8 (no-op)");
 
 
 /* SEQUENCEs nextval & currval functions */
-DATA(insert OID = 1574 (  nextval          PGUID 12 f t f t 1 f 20 "25" 100 0 0 100    nextval - ));
+DATA(insert OID = 1574 (  nextval          PGUID 12 f t f t 1 f 20 "25" 100 0 0 100  nextval - ));
 DESCR("sequence next value");
-DATA(insert OID = 1575 (  currval          PGUID 12 f t f t 1 f 20 "25" 100 0 0 100    currval - ));
+DATA(insert OID = 1575 (  currval          PGUID 12 f t f t 1 f 20 "25" 100 0 0 100  currval - ));
 DESCR("sequence current value");
 DATA(insert OID = 1576 (  setval           PGUID 12 f t f t 2 f 20 "25 20" 100 0 0 100  setval - ));
 DESCR("set sequence value");
-DATA(insert OID = 1765 (  setval           PGUID 12 f t f t 3 f 20 "25 20 16" 100 0 0 100  setval_and_iscalled - ));
+DATA(insert OID = 1765 (  setval           PGUID 12 f t f t 3 f 20 "25 20 16" 100 0 0 100  setval_and_iscalled - ));
 DESCR("set sequence value and iscalled status");
 
 DATA(insert OID = 1579 (  varbit_in            PGUID 12 f t t t 1 f 1562 "0" 100 0 0 100  varbit_in - ));
@@ -2034,51 +2037,51 @@ DESCR("less than");
 DATA(insert OID = 1596 (  bitcmp           PGUID 12 f t t t 2 f 23 "1560 1560" 100 0 0 100  bitcmp - ));
 DESCR("compare");
 
-DATA(insert OID = 1598 (  random           PGUID 12 f t f t 0 f 701 "0" 100 0 0 100    drandom - ));
+DATA(insert OID = 1598 (  random           PGUID 12 f t f t 0 f 701 "0" 100 0 0 100  drandom - ));
 DESCR("random value");
-DATA(insert OID = 1599 (  setseed          PGUID 12 f t f t 1 f  23 "701" 100 0 0 100  setseed - ));
+DATA(insert OID = 1599 (  setseed          PGUID 12 f t f t 1 f  23 "701" 100 0 0 100  setseed - ));
 DESCR("set random seed");
 
 /* OIDS 1600 - 1699 */
 
-DATA(insert OID = 1600 (  asin             PGUID 12 f t t t 1 f 701 "701" 100 0 0 100  dasin - ));
+DATA(insert OID = 1600 (  asin             PGUID 12 f t t t 1 f 701 "701" 100 0 0 100  dasin - ));
 DESCR("arcsine");
-DATA(insert OID = 1601 (  acos             PGUID 12 f t t t 1 f 701 "701" 100 0 0 100  dacos - ));
+DATA(insert OID = 1601 (  acos             PGUID 12 f t t t 1 f 701 "701" 100 0 0 100  dacos - ));
 DESCR("arccosine");
-DATA(insert OID = 1602 (  atan             PGUID 12 f t t t 1 f 701 "701" 100 0 0 100  datan - ));
+DATA(insert OID = 1602 (  atan             PGUID 12 f t t t 1 f 701 "701" 100 0 0 100  datan - ));
 DESCR("arctangent");
-DATA(insert OID = 1603 (  atan2                PGUID 12 f t t t 2 f 701 "701 701" 100 0 0 100  datan2 - ));
+DATA(insert OID = 1603 (  atan2                PGUID 12 f t t t 2 f 701 "701 701" 100 0 0 100  datan2 - ));
 DESCR("arctangent, two arguments");
-DATA(insert OID = 1604 (  sin              PGUID 12 f t t t 1 f 701 "701" 100 0 0 100  dsin - ));
+DATA(insert OID = 1604 (  sin              PGUID 12 f t t t 1 f 701 "701" 100 0 0 100  dsin - ));
 DESCR("sine");
-DATA(insert OID = 1605 (  cos              PGUID 12 f t t t 1 f 701 "701" 100 0 0 100  dcos - ));
+DATA(insert OID = 1605 (  cos              PGUID 12 f t t t 1 f 701 "701" 100 0 0 100  dcos - ));
 DESCR("cosine");
-DATA(insert OID = 1606 (  tan              PGUID 12 f t t t 1 f 701 "701" 100 0 0 100  dtan - ));
+DATA(insert OID = 1606 (  tan              PGUID 12 f t t t 1 f 701 "701" 100 0 0 100  dtan - ));
 DESCR("tangent");
-DATA(insert OID = 1607 (  cot              PGUID 12 f t t t 1 f 701 "701" 100 0 0 100  dcot - ));
+DATA(insert OID = 1607 (  cot              PGUID 12 f t t t 1 f 701 "701" 100 0 0 100  dcot - ));
 DESCR("cotangent");
-DATA(insert OID = 1608 (  degrees          PGUID 12 f t t t 1 f 701 "701" 100 0 0 100  degrees - ));
+DATA(insert OID = 1608 (  degrees          PGUID 12 f t t t 1 f 701 "701" 100 0 0 100  degrees - ));
 DESCR("radians to degrees");
-DATA(insert OID = 1609 (  radians          PGUID 12 f t t t 1 f 701 "701" 100 0 0 100  radians - ));
+DATA(insert OID = 1609 (  radians          PGUID 12 f t t t 1 f 701 "701" 100 0 0 100  radians - ));
 DESCR("degrees to radians");
-DATA(insert OID = 1610 (  pi               PGUID 12 f t t t 0 f 701 "0" 100 0 0 100    dpi - ));
+DATA(insert OID = 1610 (  pi               PGUID 12 f t t t 0 f 701 "0" 100 0 0 100  dpi - ));
 DESCR("PI");
 
-DATA(insert OID = 1618 (  interval_mul     PGUID 12 f t t t 2 f 1186 "1186 701" 100 0 0 100    interval_mul - ));
+DATA(insert OID = 1618 (  interval_mul     PGUID 12 f t t t 2 f 1186 "1186 701" 100 0 0 100  interval_mul - ));
 DESCR("multiply interval");
-DATA(insert OID = 1619 (  varchar          PGUID 12 f t t t 1 f 1043 "23" 100 0 0 100  int4_text - ));
+DATA(insert OID = 1619 (  varchar          PGUID 12 f t t t 1 f 1043 "23" 100 0 0 100  int4_text - ));
 DESCR("convert int4 to varchar");
 
-DATA(insert OID = 1620 (  ascii                PGUID 12 f t t t 1 f 23 "25" 100 0 0 100    ascii - ));
+DATA(insert OID = 1620 (  ascii                PGUID 12 f t t t 1 f 23 "25" 100 0 0 100  ascii - ));
 DESCR("convert first char to int4");
-DATA(insert OID = 1621 (  chr              PGUID 12 f t t t 1 f 25 "23" 100 0 0 100    chr - ));
+DATA(insert OID = 1621 (  chr              PGUID 12 f t t t 1 f 25 "23" 100 0 0 100  chr - ));
 DESCR("convert int4 to char");
 DATA(insert OID = 1622 (  repeat           PGUID 12 f t t t 2 f 25 "25 23" 100 0 0 100  repeat - ));
 DESCR("replicate string int4 times");
 
-DATA(insert OID = 1623 (  varchar          PGUID 12 f t t t 1 f 1043 "20" 100 0 0 100  int8_text - ));
+DATA(insert OID = 1623 (  varchar          PGUID 12 f t t t 1 f 1043 "20" 100 0 0 100  int8_text - ));
 DESCR("convert int8 to varchar");
-DATA(insert OID = 1624 (  mul_d_interval   PGUID 12 f t t t 2 f 1186 "701 1186" 100 0 0 100    mul_d_interval - ));
+DATA(insert OID = 1624 (  mul_d_interval   PGUID 12 f t t t 2 f 1186 "701 1186" 100 0 0 100  mul_d_interval - ));
 
 DATA(insert OID = 1633 (  texticlike       PGUID 12 f t t t 2 f 16 "25 25" 100 0 0 100 texticlike - ));
 DESCR("matches LIKE expression, case-insensitive");
@@ -2095,7 +2098,7 @@ DATA(insert OID = 1689 (  update_pg_pwd         PGUID 12 f t f t 0 f 0  ""  100 0 0 1
 DESCR("update pg_pwd file");
 
 /* Oracle Compatibility Related Functions - By Edmund Mergl  */
-DATA(insert OID =  868 (  strpos      PGUID 12 f t t t 2 f 23 "25 25" 100 0 0 100  textpos - ));
+DATA(insert OID =  868 (  strpos      PGUID 12 f t t t 2 f 23 "25 25" 100 0 0 100  textpos - ));
 DESCR("find position of substring");
 DATA(insert OID =  870 (  lower           PGUID 12 f t t t 1 f 25 "25" 100 0 0 100  lower - ));
 DESCR("lowercase");
@@ -2107,38 +2110,38 @@ DATA(insert OID =  873 (  lpad         PGUID 12 f t t t 3 f 25 "25 23 25" 100 0 0 10
 DESCR("left-pad string to length");
 DATA(insert OID =  874 (  rpad        PGUID 12 f t t t 3 f 25 "25 23 25" 100 0 0 100  rpad - ));
 DESCR("right-pad string to length");
-DATA(insert OID =  875 (  ltrim           PGUID 12 f t t t 2 f 25 "25 25" 100 0 0 100  ltrim - ));
+DATA(insert OID =  875 (  ltrim           PGUID 12 f t t t 2 f 25 "25 25" 100 0 0 100  ltrim - ));
 DESCR("left-pad string to length");
-DATA(insert OID =  876 (  rtrim           PGUID 12 f t t t 2 f 25 "25 25" 100 0 0 100  rtrim - ));
+DATA(insert OID =  876 (  rtrim           PGUID 12 f t t t 2 f 25 "25 25" 100 0 0 100  rtrim - ));
 DESCR("right-pad string to length");
 DATA(insert OID =  877 (  substr      PGUID 12 f t t t 3 f 25 "25 23 23" 100 0 0 100  text_substr - ));
 DESCR("return portion of string");
 DATA(insert OID =  878 (  translate    PGUID 12 f t t t 3 f 25 "25 25 25" 100 0 0 100  translate - ));
 DESCR("map a set of character appearing in string");
-DATA(insert OID =  879 (  lpad        PGUID 14 f t t t 2 f 25 "25 23" 100 0 0 100  "select lpad($1, $2, \' \')" - ));
+DATA(insert OID =  879 (  lpad        PGUID 14 f t t t 2 f 25 "25 23" 100 0 0 100  "select lpad($1, $2, \' \')" - ));
 DESCR("left-pad string to length");
-DATA(insert OID =  880 (  rpad        PGUID 14 f t t t 2 f 25 "25 23" 100 0 0 100  "select rpad($1, $2, \' \')" - ));
+DATA(insert OID =  880 (  rpad        PGUID 14 f t t t 2 f 25 "25 23" 100 0 0 100  "select rpad($1, $2, \' \')" - ));
 DESCR("right-pad string to length");
 DATA(insert OID =  881 (  ltrim           PGUID 14 f t t t 1 f 25 "25" 100 0 0 100  "select ltrim($1, \' \')" - ));
 DESCR("remove initial characters from string");
 DATA(insert OID =  882 (  rtrim           PGUID 14 f t t t 1 f 25 "25" 100 0 0 100  "select rtrim($1, \' \')" - ));
 DESCR("remove trailing characters from string");
-DATA(insert OID =  883 (  substr      PGUID 14 f t t t 2 f 25 "25 23" 100 0 0 100  "select substr($1, $2, -1)" - ));
+DATA(insert OID =  883 (  substr      PGUID 14 f t t t 2 f 25 "25 23" 100 0 0 100  "select substr($1, $2, -1)" - ));
 DESCR("return portion of string");
-DATA(insert OID =  884 (  btrim           PGUID 12 f t t t 2 f 25 "25 25" 100 0 0 100  btrim - ));
+DATA(insert OID =  884 (  btrim           PGUID 12 f t t t 2 f 25 "25 25" 100 0 0 100  btrim - ));
 DESCR("trim both ends of string");
 DATA(insert OID =  885 (  btrim           PGUID 14 f t t t 1 f 25 "25" 100 0 0 100  "select btrim($1, \' \')" - ));
 DESCR("trim both ends of string");
 
 DATA(insert OID =  936 (  substring    PGUID 12 f t t t 3 f 25 "25 23 23" 100 0 0 100  text_substr - ));
 DESCR("return portion of string");
-DATA(insert OID =  937 (  substring    PGUID 14 f t t t 2 f 25 "25 23" 100 0 0 100 "select substring($1, $2, -1)" - ));
+DATA(insert OID =  937 (  substring    PGUID 14 f t t t 2 f 25 "25 23" 100 0 0 100  "select substring($1, $2, -1)" - ));
 DESCR("return portion of string");
 
 /* for multi-byte support */
 
 /* old encoding names - back compatibility only */
-DATA(insert OID = 1039 (  getdatabaseencoding     PGUID 12 f t f t 0 f 19 "0" 100 0 0 100  getdatabaseencoding - ));
+DATA(insert OID = 1039 (  getdatabaseencoding     PGUID 12 f t f t 0 f 19 "0" 100 0 0 100  getdatabaseencoding - ));
 DESCR("encoding name of current database");
 
 DATA(insert OID = 1717 (  convert         PGUID 12 f t f t 2 f 25 "25 19" 100 0 0 100  pg_convert - ));
@@ -2153,9 +2156,9 @@ DESCR("convert encoding name to encoding id");
 DATA(insert OID = 1597 (  pg_encoding_to_char     PGUID 12 f t f t 1 f 19 "23" 100 0 0 100  PG_encoding_to_char - ));
 DESCR("convert encoding id to encoding name");
 
-DATA(insert OID = 1638 (  oidgt                   PGUID 12 f t t t 2 f 16 "26 26" 100 0 0 100  oidgt - ));
+DATA(insert OID = 1638 (  oidgt                   PGUID 12 f t t t 2 f 16 "26 26" 100 0 0 100  oidgt - ));
 DESCR("greater-than");
-DATA(insert OID = 1639 (  oidge                   PGUID 12 f t t t 2 f 16 "26 26" 100 0 0 100  oidge - ));
+DATA(insert OID = 1639 (  oidge                   PGUID 12 f t t t 2 f 16 "26 26" 100 0 0 100  oidge - ));
 DESCR("greater-than-or-equal");
 
 /* System-view support functions */
@@ -2188,13 +2191,13 @@ DATA(insert OID = 1650 (  RI_FKey_setnull_del   PGUID 12 f t f t 0 f 0 "" 100 0 0
 DESCR("referential integrity ON DELETE SET NULL");
 DATA(insert OID = 1651 (  RI_FKey_setnull_upd  PGUID 12 f t f t 0 f 0 "" 100 0 0 100  RI_FKey_setnull_upd - ));
 DESCR("referential integrity ON UPDATE SET NULL");
-DATA(insert OID = 1652 (  RI_FKey_setdefault_del PGUID 12 f t f t 0 f 0 "" 100 0 0 100 RI_FKey_setdefault_del - ));
+DATA(insert OID = 1652 (  RI_FKey_setdefault_del PGUID 12 f t f t 0 f 0 "" 100 0 0 100  RI_FKey_setdefault_del - ));
 DESCR("referential integrity ON DELETE SET DEFAULT");
-DATA(insert OID = 1653 (  RI_FKey_setdefault_upd PGUID 12 f t f t 0 f 0 "" 100 0 0 100 RI_FKey_setdefault_upd - ));
+DATA(insert OID = 1653 (  RI_FKey_setdefault_upd PGUID 12 f t f t 0 f 0 "" 100 0 0 100  RI_FKey_setdefault_upd - ));
 DESCR("referential integrity ON UPDATE SET DEFAULT");
-DATA(insert OID = 1654 (  RI_FKey_noaction_del PGUID 12 f t f t 0 f 0 "" 100 0 0 100   RI_FKey_noaction_del - ));
+DATA(insert OID = 1654 (  RI_FKey_noaction_del PGUID 12 f t f t 0 f 0 "" 100 0 0 100  RI_FKey_noaction_del - ));
 DESCR("referential integrity ON DELETE NO ACTION");
-DATA(insert OID = 1655 (  RI_FKey_noaction_upd PGUID 12 f t f t 0 f 0 "" 100 0 0 100   RI_FKey_noaction_upd - ));
+DATA(insert OID = 1655 (  RI_FKey_noaction_upd PGUID 12 f t f t 0 f 0 "" 100 0 0 100  RI_FKey_noaction_upd - ));
 DESCR("referential integrity ON UPDATE NO ACTION");
 
 DATA(insert OID = 1666 (  varbiteq         PGUID 12 f t t t 2 f 16 "1562 1562" 100 0 0 100  biteq - ));
@@ -2226,24 +2229,24 @@ DATA(insert OID = 1678 (  bitshiftright     PGUID 12 f t t t 2 f 1560 "1560 23" 100
 DESCR("bitwise right shift");
 DATA(insert OID = 1679 (  bitcat           PGUID 12 f t t t 2 f 1560 "1560 1560" 100 0 0 100  bitcat - ));
 DESCR("bitwise concatenation");
-DATA(insert OID = 1680 (  substring            PGUID 12 f t t t 3 f 1560 "1560 23 23" 100 0 0 100  bitsubstr - ));
+DATA(insert OID = 1680 (  substring            PGUID 12 f t t t 3 f 1560 "1560 23 23" 100 0 0 100  bitsubstr - ));
 DESCR("return portion of bitstring");
-DATA(insert OID = 1681 (  length           PGUID 12 f t t t 1 f 23 "1560" 100 0 0 100  bitlength - ));
+DATA(insert OID = 1681 (  length           PGUID 12 f t t t 1 f 23 "1560" 100 0 0 100  bitlength - ));
 DESCR("bitstring length");
-DATA(insert OID = 1682 (  octet_length     PGUID 12 f t t t 1 f 23 "1560" 100 0 0 100  bitoctetlength - ));
+DATA(insert OID = 1682 (  octet_length     PGUID 12 f t t t 1 f 23 "1560" 100 0 0 100  bitoctetlength - ));
 DESCR("octet length");
-DATA(insert OID = 1683 (  bitfromint4      PGUID 12 f t t t 1 f 1560 "23" 100 0 0 100  bitfromint4 - ));
+DATA(insert OID = 1683 (  bitfromint4      PGUID 12 f t t t 1 f 1560 "23" 100 0 0 100  bitfromint4 - ));
 DESCR("int4 to bitstring");
-DATA(insert OID = 1684 (  bittoint4            PGUID 12 f t t t 1 f 23 "1560" 100 0 0 100  bittoint4 - ));
+DATA(insert OID = 1684 (  bittoint4            PGUID 12 f t t t 1 f 23 "1560" 100 0 0 100  bittoint4 - ));
 DESCR("bitstring to int4");
 
-DATA(insert OID = 1685 (  bit             PGUID 12 f t t t 2 f 1560 "1560 23" 100 0 0 100  bit - ));
+DATA(insert OID = 1685 (  bit             PGUID 12 f t t t 2 f 1560 "1560 23" 100 0 0 100  bit - ));
 DESCR("adjust bit() to typmod length");
-DATA(insert OID = 1686 (  _bit            PGUID 12 f t t t 2 f 1561 "1561 23" 100 0 0 100  _bit - ));
+DATA(insert OID = 1686 (  _bit            PGUID 12 f t t t 2 f 1561 "1561 23" 100 0 0 100  _bit - ));
 DESCR("adjust bit()[] to typmod length");
-DATA(insert OID = 1687 (  varbit          PGUID 12 f t t t 2 f 1562 "1562 23" 100 0 0 100  varbit - ));
+DATA(insert OID = 1687 (  varbit          PGUID 12 f t t t 2 f 1562 "1562 23" 100 0 0 100  varbit - ));
 DESCR("adjust varbit() to typmod length");
-DATA(insert OID = 1688 (  _varbit         PGUID 12 f t t t 2 f 1563 "1563 23" 100 0 0 100  _varbit - ));
+DATA(insert OID = 1688 (  _varbit         PGUID 12 f t t t 2 f 1563 "1563 23" 100 0 0 100  _varbit - ));
 DESCR("adjust varbit()[] to typmod length");
 
 DATA(insert OID = 1698 (  position        PGUID 12 f t t t 2 f 23 "1560 1560" 100 0 0 100 bitposition - ));
@@ -2253,91 +2256,94 @@ DESCR("return portion of bitstring");
 
 
 /* for mac type support */
-DATA(insert OID = 436 (  macaddr_in            PGUID 12 f t t t 1 f 829 "0" 100 0 0 100    macaddr_in - ));
+DATA(insert OID = 436 (  macaddr_in            PGUID 12 f t t t 1 f 829 "0" 100 0 0 100  macaddr_in - ));
 DESCR("(internal)");
 DATA(insert OID = 437 (  macaddr_out       PGUID 12 f t t t 1 f 23 "0" 100 0 0 100  macaddr_out - ));
 DESCR("(internal)");
 
-DATA(insert OID = 752 (  text              PGUID 12 f t t t 1 f 25 "829" 100 0 0 100   macaddr_text - ));
+DATA(insert OID = 752 (  text              PGUID 12 f t t t 1 f 25 "829" 100 0 0 100  macaddr_text - ));
 DESCR("MAC address to text");
-DATA(insert OID = 753 (  trunc             PGUID 12 f t t t 1 f 829 "829" 100 0 0 100  macaddr_trunc - ));
+DATA(insert OID = 753 (  trunc             PGUID 12 f t t t 1 f 829 "829" 100 0 0 100  macaddr_trunc - ));
 DESCR("MAC manufacturer fields");
-DATA(insert OID = 767 (  macaddr           PGUID 12 f t t t 1 f 829 "25" 100 0 0 100   text_macaddr - ));
+DATA(insert OID = 767 (  macaddr           PGUID 12 f t t t 1 f 829 "25" 100 0 0 100  text_macaddr - ));
 DESCR("text to MAC address");
 
-DATA(insert OID = 830 (  macaddr_eq            PGUID 12 f t t t 2 f 16 "829 829" 100 0 0 100   macaddr_eq - ));
+DATA(insert OID = 830 (  macaddr_eq            PGUID 12 f t t t 2 f 16 "829 829" 100 0 0 100  macaddr_eq - ));
 DESCR("equal");
-DATA(insert OID = 831 (  macaddr_lt            PGUID 12 f t t t 2 f 16 "829 829" 100 0 0 100   macaddr_lt - ));
+DATA(insert OID = 831 (  macaddr_lt            PGUID 12 f t t t 2 f 16 "829 829" 100 0 0 100  macaddr_lt - ));
 DESCR("less-than");
-DATA(insert OID = 832 (  macaddr_le            PGUID 12 f t t t 2 f 16 "829 829" 100 0 0 100   macaddr_le - ));
+DATA(insert OID = 832 (  macaddr_le            PGUID 12 f t t t 2 f 16 "829 829" 100 0 0 100  macaddr_le - ));
 DESCR("less-than-or-equal");
-DATA(insert OID = 833 (  macaddr_gt            PGUID 12 f t t t 2 f 16 "829 829" 100 0 0 100   macaddr_gt - ));
+DATA(insert OID = 833 (  macaddr_gt            PGUID 12 f t t t 2 f 16 "829 829" 100 0 0 100  macaddr_gt - ));
 DESCR("greater-than");
-DATA(insert OID = 834 (  macaddr_ge            PGUID 12 f t t t 2 f 16 "829 829" 100 0 0 100   macaddr_ge - ));
+DATA(insert OID = 834 (  macaddr_ge            PGUID 12 f t t t 2 f 16 "829 829" 100 0 0 100  macaddr_ge - ));
 DESCR("greater-than-or-equal");
-DATA(insert OID = 835 (  macaddr_ne            PGUID 12 f t t t 2 f 16 "829 829" 100 0 0 100   macaddr_ne - ));
+DATA(insert OID = 835 (  macaddr_ne            PGUID 12 f t t t 2 f 16 "829 829" 100 0 0 100  macaddr_ne - ));
 DESCR("not equal");
-DATA(insert OID = 836 (  macaddr_cmp       PGUID 12 f t t t 2 f 23 "829 829" 100 0 0 100   macaddr_cmp - ));
+DATA(insert OID = 836 (  macaddr_cmp       PGUID 12 f t t t 2 f 23 "829 829" 100 0 0 100  macaddr_cmp - ));
 DESCR("less-equal-greater");
 
 /* for inet type support */
-DATA(insert OID = 910 (  inet_in           PGUID 12 f t t t 1 f 869 "0" 100 0 0 100    inet_in - ));
+DATA(insert OID = 910 (  inet_in           PGUID 12 f t t t 1 f 869 "0" 100 0 0 100  inet_in - ));
 DESCR("(internal)");
 DATA(insert OID = 911 (  inet_out          PGUID 12 f t t t 1 f 23 "0" 100 0 0 100  inet_out - ));
 DESCR("(internal)");
 
 /* for cidr type support */
-DATA(insert OID = 1267 (  cidr_in          PGUID 12 f t t t 1 f 650 "0" 100 0 0 100    cidr_in - ));
+DATA(insert OID = 1267 (  cidr_in          PGUID 12 f t t t 1 f 650 "0" 100 0 0 100  cidr_in - ));
 DESCR("(internal)");
 DATA(insert OID = 1427 (  cidr_out         PGUID 12 f t t t 1 f 23 "0" 100 0 0 100  cidr_out - ));
 DESCR("(internal)");
 
 /* these are used for both inet and cidr */
-DATA(insert OID = 920 (  network_eq            PGUID 12 f t t t 2 f 16 "869 869" 100 0 0 100   network_eq - ));
+DATA(insert OID = 920 (  network_eq            PGUID 12 f t t t 2 f 16 "869 869" 100 0 0 100  network_eq - ));
 DESCR("equal");
-DATA(insert OID = 921 (  network_lt            PGUID 12 f t t t 2 f 16 "869 869" 100 0 0 100   network_lt - ));
+DATA(insert OID = 921 (  network_lt            PGUID 12 f t t t 2 f 16 "869 869" 100 0 0 100  network_lt - ));
 DESCR("less-than");
-DATA(insert OID = 922 (  network_le            PGUID 12 f t t t 2 f 16 "869 869" 100 0 0 100   network_le - ));
+DATA(insert OID = 922 (  network_le            PGUID 12 f t t t 2 f 16 "869 869" 100 0 0 100  network_le - ));
 DESCR("less-than-or-equal");
-DATA(insert OID = 923 (  network_gt            PGUID 12 f t t t 2 f 16 "869 869" 100 0 0 100   network_gt - ));
+DATA(insert OID = 923 (  network_gt            PGUID 12 f t t t 2 f 16 "869 869" 100 0 0 100  network_gt - ));
 DESCR("greater-than");
-DATA(insert OID = 924 (  network_ge            PGUID 12 f t t t 2 f 16 "869 869" 100 0 0 100   network_ge - ));
+DATA(insert OID = 924 (  network_ge            PGUID 12 f t t t 2 f 16 "869 869" 100 0 0 100  network_ge - ));
 DESCR("greater-than-or-equal");
-DATA(insert OID = 925 (  network_ne            PGUID 12 f t t t 2 f 16 "869 869" 100 0 0 100   network_ne - ));
+DATA(insert OID = 925 (  network_ne            PGUID 12 f t t t 2 f 16 "869 869" 100 0 0 100  network_ne - ));
 DESCR("not equal");
-DATA(insert OID = 926 (  network_cmp       PGUID 12 f t t t 2 f 23 "869 869" 100 0 0 100   network_cmp - ));
+DATA(insert OID = 926 (  network_cmp       PGUID 12 f t t t 2 f 23 "869 869" 100 0 0 100  network_cmp - ));
 DESCR("less-equal-greater");
-DATA(insert OID = 927 (  network_sub       PGUID 12 f t t t 2 f 16 "869 869" 100 0 0 100   network_sub - ));
+DATA(insert OID = 927 (  network_sub       PGUID 12 f t t t 2 f 16 "869 869" 100 0 0 100  network_sub - ));
 DESCR("is-subnet");
-DATA(insert OID = 928 (  network_subeq     PGUID 12 f t t t 2 f 16 "869 869" 100 0 0 100   network_subeq - ));
+DATA(insert OID = 928 (  network_subeq     PGUID 12 f t t t 2 f 16 "869 869" 100 0 0 100  network_subeq - ));
 DESCR("is-subnet-or-equal");
-DATA(insert OID = 929 (  network_sup       PGUID 12 f t t t 2 f 16 "869 869" 100 0 0 100   network_sup - ));
+DATA(insert OID = 929 (  network_sup       PGUID 12 f t t t 2 f 16 "869 869" 100 0 0 100  network_sup - ));
 DESCR("is-supernet");
-DATA(insert OID = 930 (  network_supeq     PGUID 12 f t t t 2 f 16 "869 869" 100 0 0 100   network_supeq - ));
+DATA(insert OID = 930 (  network_supeq     PGUID 12 f t t t 2 f 16 "869 869" 100 0 0 100  network_supeq - ));
 DESCR("is-supernet-or-equal");
 
 /* inet/cidr functions */
 DATA(insert OID = 605 (  abbrev                PGUID 12 f t t t 1 f 25 "869" 100 0 0 100  network_abbrev - ));
 DESCR("abbreviated display of inet/cidr value");
-DATA(insert OID = 683 (  network           PGUID 12 f t t t 1 f 650 "869" 100 0 0 100  network_network - ));
+DATA(insert OID = 683 (  network           PGUID 12 f t t t 1 f 650 "869" 100 0 0 100  network_network - ));
 DESCR("network part of address");
-DATA(insert OID = 696 (  netmask           PGUID 12 f t t t 1 f 869 "869" 100 0 0 100  network_netmask - ));
+DATA(insert OID = 696 (  netmask           PGUID 12 f t t t 1 f 869 "869" 100 0 0 100  network_netmask - ));
 DESCR("netmask of address");
 DATA(insert OID = 697 (  masklen           PGUID 12 f t t t 1 f 23 "869" 100 0 0 100  network_masklen - ));
 DESCR("netmask length");
-DATA(insert OID = 698 (  broadcast         PGUID 12 f t t t 1 f 869 "869" 100 0 0 100  network_broadcast - ));
+DATA(insert OID = 698 (  broadcast         PGUID 12 f t t t 1 f 869 "869" 100 0 0 100  network_broadcast - ));
 DESCR("broadcast address of network");
 DATA(insert OID = 699 (  host              PGUID 12 f t t t 1 f 25 "869" 100 0 0 100  network_host - ));
 DESCR("show address octets only");
 DATA(insert OID = 730 (  text              PGUID 12 f t t t 1 f 25 "869" 100 0 0 100  network_show - ));
 DESCR("show all parts of inet/cidr value");
-DATA(insert OID = 1713 (  inet             PGUID 12 f t t t 1 f 869 "25" 100 0 0 100   text_inet - ));
+DATA(insert OID = 1713 (  inet             PGUID 12 f t t t 1 f 869 "25" 100 0 0 100  text_inet - ));
 DESCR("text to inet");
-DATA(insert OID = 1714 (  cidr             PGUID 12 f t t t 1 f 650 "25" 100 0 0 100   text_cidr - ));
+DATA(insert OID = 1714 (  cidr             PGUID 12 f t t t 1 f 650 "25" 100 0 0 100  text_cidr - ));
 DESCR("text to cidr");
-DATA(insert OID = 1715 (  set_masklen          PGUID 12 f t t t 2 f 869 "869 23" 100 0 0 100   inet_set_masklen - ));
+DATA(insert OID = 1715 (  set_masklen      PGUID 12 f t t t 2 f 869 "869 23" 100 0 0 100  inet_set_masklen - ));
 DESCR("change the netmask of an inet");
 
+DATA(insert OID = 1690 ( time_mi_time      PGUID 12 f t t t 2 f 1186 "1083 1083" 100 0 0 100  time_mi_time - ));
+DESCR("minus");
+
 DATA(insert OID =  1691 (  boolle          PGUID 12 f t t t 2 f 16 "16 16" 100 0 0 100  boolle - ));
 DESCR("less-than-or-equal");
 DATA(insert OID =  1692 (  boolge          PGUID 12 f t t t 2 f 16 "16 16" 100 0 0 100  boolge - ));
@@ -2345,9 +2351,9 @@ DESCR("greater-than-or-equal");
 DATA(insert OID = 1693 (  btboolcmp            PGUID 12 f t t t 2 f 23 "16 16" 100 0 0 100  btboolcmp - ));
 DESCR("btree less-equal-greater");
 
-DATA(insert OID = 1696 (  timetz_hash      PGUID 12 f t t t 1 f 23 "1266" 100 0 0 100  timetz_hash - ));
+DATA(insert OID = 1696 (  timetz_hash      PGUID 12 f t t t 1 f 23 "1266" 100 0 0 100  timetz_hash - ));
 DESCR("hash");
-DATA(insert OID = 1697 (  interval_hash        PGUID 12 f t t t 1 f 23 "1186" 100 0 0 100  interval_hash - ));
+DATA(insert OID = 1697 (  interval_hash        PGUID 12 f t t t 1 f 23 "1186" 100 0 0 100  interval_hash - ));
 DESCR("hash");
 
 
@@ -2358,23 +2364,23 @@ DATA(insert OID = 1702 ( numeric_out            PGUID 12 f t t t 1 f 23 "0" 100 0 0 100
 DESCR("(internal)");
 DATA(insert OID = 1703 ( numeric               PGUID 12 f t t t 2 f 1700 "1700 23" 100 0 0 100  numeric - ));
 DESCR("adjust numeric to typmod precision/scale");
-DATA(insert OID = 1704 ( numeric_abs           PGUID 12 f t t t 1 f 1700 "1700" 100 0 0 100    numeric_abs - ));
+DATA(insert OID = 1704 ( numeric_abs           PGUID 12 f t t t 1 f 1700 "1700" 100 0 0 100  numeric_abs - ));
 DESCR("absolute value");
-DATA(insert OID = 1705 ( abs                   PGUID 12 f t t t 1 f 1700 "1700" 100 0 0 100    numeric_abs - ));
+DATA(insert OID = 1705 ( abs                   PGUID 12 f t t t 1 f 1700 "1700" 100 0 0 100  numeric_abs - ));
 DESCR("absolute value");
-DATA(insert OID = 1706 ( sign                  PGUID 12 f t t t 1 f 1700 "1700" 100 0 0 100    numeric_sign - ));
+DATA(insert OID = 1706 ( sign                  PGUID 12 f t t t 1 f 1700 "1700" 100 0 0 100  numeric_sign - ));
 DESCR("sign of value");
 DATA(insert OID = 1707 ( round                 PGUID 12 f t t t 2 f 1700 "1700 23" 100 0 0 100  numeric_round - ));
 DESCR("value rounded to 'scale'");
-DATA(insert OID = 1708 ( round                 PGUID 14 f t t t 1 f 1700 "1700" 100 0 0 100    "select round($1,0)" - ));
+DATA(insert OID = 1708 ( round                 PGUID 14 f t t t 1 f 1700 "1700" 100 0 0 100  "select round($1,0)" - ));
 DESCR("value rounded to 'scale' of zero");
 DATA(insert OID = 1709 ( trunc                 PGUID 12 f t t t 2 f 1700 "1700 23" 100 0 0 100  numeric_trunc - ));
 DESCR("value truncated to 'scale'");
-DATA(insert OID = 1710 ( trunc                 PGUID 14 f t t t 1 f 1700 "1700" 100 0 0 100    "select trunc($1,0)" - ));
+DATA(insert OID = 1710 ( trunc                 PGUID 14 f t t t 1 f 1700 "1700" 100 0 0 100  "select trunc($1,0)" - ));
 DESCR("value truncated to 'scale' of zero");
-DATA(insert OID = 1711 ( ceil                  PGUID 12 f t t t 1 f 1700 "1700" 100 0 0 100    numeric_ceil - ));
+DATA(insert OID = 1711 ( ceil                  PGUID 12 f t t t 1 f 1700 "1700" 100 0 0 100  numeric_ceil - ));
 DESCR("smallest integer >= value");
-DATA(insert OID = 1712 ( floor                 PGUID 12 f t t t 1 f 1700 "1700" 100 0 0 100    numeric_floor - ));
+DATA(insert OID = 1712 ( floor                 PGUID 12 f t t t 1 f 1700 "1700" 100 0 0 100  numeric_floor - ));
 DESCR("largest integer <= value");
 DATA(insert OID = 1718 ( numeric_eq                PGUID 12 f t t t 2 f 16 "1700 1700" 100 0 0 100  numeric_eq - ));
 DESCR("equal");
@@ -2400,17 +2406,17 @@ DATA(insert OID = 1728 ( mod                    PGUID 12 f t t t 2 f 1700 "1700 1700" 100 0 0 1
 DESCR("modulus");
 DATA(insert OID = 1729 ( numeric_mod           PGUID 12 f t t t 2 f 1700 "1700 1700" 100 0 0 100  numeric_mod - ));
 DESCR("modulus");
-DATA(insert OID = 1730 ( sqrt                  PGUID 12 f t t t 1 f 1700 "1700" 100 0 0 100    numeric_sqrt - ));
+DATA(insert OID = 1730 ( sqrt                  PGUID 12 f t t t 1 f 1700 "1700" 100 0 0 100  numeric_sqrt - ));
 DESCR("square root");
-DATA(insert OID = 1731 ( numeric_sqrt          PGUID 12 f t t t 1 f 1700 "1700" 100 0 0 100    numeric_sqrt - ));
+DATA(insert OID = 1731 ( numeric_sqrt          PGUID 12 f t t t 1 f 1700 "1700" 100 0 0 100  numeric_sqrt - ));
 DESCR("square root");
-DATA(insert OID = 1732 ( exp                   PGUID 12 f t t t 1 f 1700 "1700" 100 0 0 100    numeric_exp - ));
+DATA(insert OID = 1732 ( exp                   PGUID 12 f t t t 1 f 1700 "1700" 100 0 0 100  numeric_exp - ));
 DESCR("e raised to the power of n");
-DATA(insert OID = 1733 ( numeric_exp           PGUID 12 f t t t 1 f 1700 "1700" 100 0 0 100    numeric_exp - ));
+DATA(insert OID = 1733 ( numeric_exp           PGUID 12 f t t t 1 f 1700 "1700" 100 0 0 100  numeric_exp - ));
 DESCR("e raised to the power of n");
-DATA(insert OID = 1734 ( ln                        PGUID 12 f t t t 1 f 1700 "1700" 100 0 0 100    numeric_ln - ));
+DATA(insert OID = 1734 ( ln                        PGUID 12 f t t t 1 f 1700 "1700" 100 0 0 100  numeric_ln - ));
 DESCR("natural logarithm of n");
-DATA(insert OID = 1735 ( numeric_ln                PGUID 12 f t t t 1 f 1700 "1700" 100 0 0 100    numeric_ln - ));
+DATA(insert OID = 1735 ( numeric_ln                PGUID 12 f t t t 1 f 1700 "1700" 100 0 0 100  numeric_ln - ));
 DESCR("natural logarithm of n");
 DATA(insert OID = 1736 ( log                   PGUID 12 f t t t 2 f 1700 "1700 1700" 100 0 0 100  numeric_log - ));
 DESCR("logarithm base m of n");
@@ -2420,15 +2426,15 @@ DATA(insert OID = 1738 ( pow                    PGUID 12 f t t t 2 f 1700 "1700 1700" 100 0 0 1
 DESCR("m raised to the power of n");
 DATA(insert OID = 1739 ( numeric_power         PGUID 12 f t t t 2 f 1700 "1700 1700" 100 0 0 100  numeric_power - ));
 DESCR("m raised to the power of n");
-DATA(insert OID = 1740 ( numeric               PGUID 12 f t t t 1 f 1700 "23" 100 0 0 100  int4_numeric - ));
+DATA(insert OID = 1740 ( numeric               PGUID 12 f t t t 1 f 1700 "23" 100 0 0 100  int4_numeric - ));
 DESCR("(internal)");
-DATA(insert OID = 1741 ( log                   PGUID 14 f t t t 1 f 1700 "1700" 100 0 0 100    "select log(10, $1)" - ));
+DATA(insert OID = 1741 ( log                   PGUID 14 f t t t 1 f 1700 "1700" 100 0 0 100  "select log(10, $1)" - ));
 DESCR("logarithm base 10 of n");
 DATA(insert OID = 1742 ( numeric               PGUID 12 f t t t 1 f 1700 "700" 100 0 0 100  float4_numeric - ));
 DESCR("(internal)");
 DATA(insert OID = 1743 ( numeric               PGUID 12 f t t t 1 f 1700 "701" 100 0 0 100  float8_numeric - ));
 DESCR("(internal)");
-DATA(insert OID = 1744 ( int4                  PGUID 12 f t t t 1 f 23 "1700" 100 0 0 100  numeric_int4 - ));
+DATA(insert OID = 1744 ( int4                  PGUID 12 f t t t 1 f 23 "1700" 100 0 0 100  numeric_int4 - ));
 DESCR("(internal)");
 DATA(insert OID = 1745 ( float4                    PGUID 12 f t t t 1 f 700 "1700" 100 0 0 100  numeric_float4 - ));
 DESCR("(internal)");
@@ -2444,7 +2450,7 @@ DESCR("plus");
 DATA(insert OID = 1750 ( timetz_mi_interval        PGUID 12 f t t t 2 f 1266 "1266 1186" 100 0 0 100  timetz_mi_interval - ));
 DESCR("minus");
 
-DATA(insert OID = 1764 ( numeric_inc           PGUID 12 f t t t 1 f 1700 "1700" 100 0 0 100    numeric_inc - ));
+DATA(insert OID = 1764 ( numeric_inc           PGUID 12 f t t t 1 f 1700 "1700" 100 0 0 100  numeric_inc - ));
 DESCR("increment by one");
 DATA(insert OID = 1766 ( numeric_smaller       PGUID 12 f t t t 2 f 1700 "1700 1700" 100 0 0 100  numeric_smaller - ));
 DESCR("smaller of two numbers");
@@ -2452,25 +2458,25 @@ DATA(insert OID = 1767 ( numeric_larger         PGUID 12 f t t t 2 f 1700 "1700 1700"
 DESCR("larger of two numbers");
 DATA(insert OID = 1769 ( numeric_cmp           PGUID 12 f t t t 2 f 23 "1700 1700" 100 0 0 100  numeric_cmp - ));
 DESCR("compare two numbers");
-DATA(insert OID = 1771 ( numeric_uminus            PGUID 12 f t t t 1 f 1700 "1700" 100 0 0 100    numeric_uminus - ));
+DATA(insert OID = 1771 ( numeric_uminus            PGUID 12 f t t t 1 f 1700 "1700" 100 0 0 100  numeric_uminus - ));
 DESCR("negate");
-DATA(insert OID = 1779 ( int8                  PGUID 12 f t t t 1 f 20 "1700" 100 0 0 100  numeric_int8 - ));
+DATA(insert OID = 1779 ( int8                  PGUID 12 f t t t 1 f 20 "1700" 100 0 0 100  numeric_int8 - ));
 DESCR("(internal)");
-DATA(insert OID = 1781 ( numeric               PGUID 12 f t t t 1 f 1700 "20" 100 0 0 100  int8_numeric - ));
+DATA(insert OID = 1781 ( numeric               PGUID 12 f t t t 1 f 1700 "20" 100 0 0 100  int8_numeric - ));
 DESCR("(internal)");
-DATA(insert OID = 1782 ( numeric               PGUID 12 f t t t 1 f 1700 "21" 100 0 0 100  int2_numeric - ));
+DATA(insert OID = 1782 ( numeric               PGUID 12 f t t t 1 f 1700 "21" 100 0 0 100  int2_numeric - ));
 DESCR("(internal)");
-DATA(insert OID = 1783 ( int2                  PGUID 12 f t t t 1 f 21 "1700" 100 0 0 100  numeric_int2 - ));
+DATA(insert OID = 1783 ( int2                  PGUID 12 f t t t 1 f 21 "1700" 100 0 0 100  numeric_int2 - ));
 DESCR("(internal)");
 
 /* formatting */
-DATA(insert OID = 1770 ( to_char           PGUID 12 f t f t 2 f    25 "1184 25" 100 0 0 100  timestamp_to_char - ));
+DATA(insert OID = 1770 ( to_char           PGUID 12 f t f t 2 f    25 "1184 25" 100 0 0 100  timestamptz_to_char - ));
 DESCR("format timestamp to text");
 DATA(insert OID = 1772 ( to_char           PGUID 12 f t f t 2 f    25 "1700 25" 100 0 0 100  numeric_to_char - ));
 DESCR("format numeric to text");
-DATA(insert OID = 1773 ( to_char           PGUID 12 f t f t 2 f    25 "23 25" 100 0 0 100  int4_to_char - ));
+DATA(insert OID = 1773 ( to_char           PGUID 12 f t f t 2 f    25 "23 25" 100 0 0 100  int4_to_char - ));
 DESCR("format int4 to text");
-DATA(insert OID = 1774 ( to_char           PGUID 12 f t f t 2 f    25 "20 25" 100 0 0 100  int8_to_char - ));
+DATA(insert OID = 1774 ( to_char           PGUID 12 f t f t 2 f    25 "20 25" 100 0 0 100  int8_to_char - ));
 DESCR("format int8 to text");
 DATA(insert OID = 1775 ( to_char           PGUID 12 f t f t 2 f    25 "700 25" 100 0 0 100  float4_to_char - ));
 DESCR("format float4 to text");
@@ -2478,7 +2484,7 @@ DATA(insert OID = 1776 ( to_char          PGUID 12 f t f t 2 f    25 "701 25" 100 0 0 100
 DESCR("format float8 to text");
 DATA(insert OID = 1777 ( to_number         PGUID 12 f t f t 2 f    1700 "25 25" 100 0 0 100  numeric_to_number - ));
 DESCR("convert text to numeric");
-DATA(insert OID = 1778 ( to_timestamp          PGUID 12 f t f t 2 f    1184 "25 25" 100 0 0 100  to_timestamp - ));
+DATA(insert OID = 1778 ( to_timestamp      PGUID 12 f t f t 2 f    1184 "25 25" 100 0 0 100  to_timestamp - ));
 DESCR("convert text to timestamp");
 DATA(insert OID = 1780 ( to_date           PGUID 12 f t f t 2 f    1082 "25 25" 100 0 0 100  to_date - ));
 DESCR("convert text to date");
@@ -2490,9 +2496,9 @@ DESCR("quote an identifier for usage in a querystring");
 DATA(insert OID =  1283 ( quote_literal    PGUID 12 f t t t 1 f 25 "25" 100 0 0 100 quote_literal - ));
 DESCR("quote a literal for usage in a querystring");
 
-DATA(insert OID = 1798 (  oidin               PGUID 12 f t t t 1 f 26 "0" 100 0 0 100  oidin - ));
+DATA(insert OID = 1798 (  oidin               PGUID 12 f t t t 1 f 26 "0" 100 0 0 100  oidin - ));
 DESCR("(internal)");
-DATA(insert OID = 1799 (  oidout          PGUID 12 f t t t 1 f 23 "0" 100 0 0 100  oidout - ));
+DATA(insert OID = 1799 (  oidout          PGUID 12 f t t t 1 f 23 "0" 100 0 0 100  oidout - ));
 DESCR("(internal)");
 
 
@@ -2508,9 +2514,9 @@ DATA(insert OID = 1814 ( iclikesel            PGUID 12 f t f t 4 f 701 "0 26 0 23" 100 0
 DESCR("restriction selectivity of ILIKE");
 DATA(insert OID = 1815 ( icnlikesel            PGUID 12 f t f t 4 f 701 "0 26 0 23" 100 0 0 100  icnlikesel - ));
 DESCR("restriction selectivity of NOT ILIKE");
-DATA(insert OID = 1816 ( iclikejoinsel     PGUID 12 f t f t 3 f 701 "0 26 0" 100 0 0 100   iclikejoinsel - ));
+DATA(insert OID = 1816 ( iclikejoinsel     PGUID 12 f t f t 3 f 701 "0 26 0" 100 0 0 100  iclikejoinsel - ));
 DESCR("join selectivity of ILIKE");
-DATA(insert OID = 1817 ( icnlikejoinsel        PGUID 12 f t f t 3 f 701 "0 26 0" 100 0 0 100   icnlikejoinsel - ));
+DATA(insert OID = 1817 ( icnlikejoinsel        PGUID 12 f t f t 3 f 701 "0 26 0" 100 0 0 100  icnlikejoinsel - ));
 DESCR("join selectivity of NOT ILIKE");
 DATA(insert OID = 1818 ( regexeqsel            PGUID 12 f t f t 4 f 701 "0 26 0 23" 100 0 0 100  regexeqsel - ));
 DESCR("restriction selectivity of regex match");
@@ -2524,33 +2530,33 @@ DATA(insert OID = 1822 ( nlikesel           PGUID 12 f t f t 4 f 701 "0 26 0 23" 100 0 0
 DESCR("restriction selectivity of NOT LIKE");
 DATA(insert OID = 1823 ( icregexnesel      PGUID 12 f t f t 4 f 701 "0 26 0 23" 100 0 0 100  icregexnesel - ));
 DESCR("restriction selectivity of case-insensitive regex non-match");
-DATA(insert OID = 1824 ( regexeqjoinsel        PGUID 12 f t f t 3 f 701 "0 26 0" 100 0 0 100   regexeqjoinsel - ));
+DATA(insert OID = 1824 ( regexeqjoinsel        PGUID 12 f t f t 3 f 701 "0 26 0" 100 0 0 100  regexeqjoinsel - ));
 DESCR("join selectivity of regex match");
-DATA(insert OID = 1825 ( likejoinsel       PGUID 12 f t f t 3 f 701 "0 26 0" 100 0 0 100   likejoinsel - ));
+DATA(insert OID = 1825 ( likejoinsel       PGUID 12 f t f t 3 f 701 "0 26 0" 100 0 0 100  likejoinsel - ));
 DESCR("join selectivity of LIKE");
-DATA(insert OID = 1826 ( icregexeqjoinsel  PGUID 12 f t f t 3 f 701 "0 26 0" 100 0 0 100   icregexeqjoinsel - ));
+DATA(insert OID = 1826 ( icregexeqjoinsel  PGUID 12 f t f t 3 f 701 "0 26 0" 100 0 0 100  icregexeqjoinsel - ));
 DESCR("join selectivity of case-insensitive regex match");
-DATA(insert OID = 1827 ( regexnejoinsel        PGUID 12 f t f t 3 f 701 "0 26 0" 100 0 0 100   regexnejoinsel - ));
+DATA(insert OID = 1827 ( regexnejoinsel        PGUID 12 f t f t 3 f 701 "0 26 0" 100 0 0 100  regexnejoinsel - ));
 DESCR("join selectivity of regex non-match");
-DATA(insert OID = 1828 ( nlikejoinsel      PGUID 12 f t f t 3 f 701 "0 26 0" 100 0 0 100   nlikejoinsel - ));
+DATA(insert OID = 1828 ( nlikejoinsel      PGUID 12 f t f t 3 f 701 "0 26 0" 100 0 0 100  nlikejoinsel - ));
 DESCR("join selectivity of NOT LIKE");
-DATA(insert OID = 1829 ( icregexnejoinsel  PGUID 12 f t f t 3 f 701 "0 26 0" 100 0 0 100   icregexnejoinsel - ));
+DATA(insert OID = 1829 ( icregexnejoinsel  PGUID 12 f t f t 3 f 701 "0 26 0" 100 0 0 100  icregexnejoinsel - ));
 DESCR("join selectivity of case-insensitive regex non-match");
 
 /* Aggregate-related functions */
-DATA(insert OID = 1830 (  float8_avg      PGUID 12 f t t t 1 f 701 "1022" 100 0 0 100  float8_avg - ));
+DATA(insert OID = 1830 (  float8_avg      PGUID 12 f t t t 1 f 701 "1022" 100 0 0 100  float8_avg - ));
 DESCR("AVG aggregate final function");
-DATA(insert OID = 1831 (  float8_variance  PGUID 12 f t t t 1 f 701 "1022" 100 0 0 100 float8_variance - ));
+DATA(insert OID = 1831 (  float8_variance  PGUID 12 f t t t 1 f 701 "1022" 100 0 0 100  float8_variance - ));
 DESCR("VARIANCE aggregate final function");
-DATA(insert OID = 1832 (  float8_stddev    PGUID 12 f t t t 1 f 701 "1022" 100 0 0 100 float8_stddev - ));
+DATA(insert OID = 1832 (  float8_stddev    PGUID 12 f t t t 1 f 701 "1022" 100 0 0 100  float8_stddev - ));
 DESCR("STDDEV aggregate final function");
 DATA(insert OID = 1833 (  numeric_accum    PGUID 12 f t t t 2 f 1231 "1231 1700" 100 0 0 100  numeric_accum - ));
 DESCR("aggregate transition function");
-DATA(insert OID = 1834 (  int2_accum      PGUID 12 f t t t 2 f 1231 "1231 21" 100 0 0 100  int2_accum - ));
+DATA(insert OID = 1834 (  int2_accum      PGUID 12 f t t t 2 f 1231 "1231 21" 100 0 0 100  int2_accum - ));
 DESCR("aggregate transition function");
-DATA(insert OID = 1835 (  int4_accum      PGUID 12 f t t t 2 f 1231 "1231 23" 100 0 0 100  int4_accum - ));
+DATA(insert OID = 1835 (  int4_accum      PGUID 12 f t t t 2 f 1231 "1231 23" 100 0 0 100  int4_accum - ));
 DESCR("aggregate transition function");
-DATA(insert OID = 1836 (  int8_accum      PGUID 12 f t t t 2 f 1231 "1231 20" 100 0 0 100  int8_accum - ));
+DATA(insert OID = 1836 (  int8_accum      PGUID 12 f t t t 2 f 1231 "1231 20" 100 0 0 100  int8_accum - ));
 DESCR("aggregate transition function");
 DATA(insert OID = 1837 (  numeric_avg     PGUID 12 f t t t 1 f 1700 "1231" 100 0 0 100  numeric_avg - ));
 DESCR("AVG aggregate final function");
@@ -2558,19 +2564,19 @@ DATA(insert OID = 1838 (  numeric_variance PGUID 12 f t t t 1 f 1700 "1231" 100
 DESCR("VARIANCE aggregate final function");
 DATA(insert OID = 1839 (  numeric_stddev   PGUID 12 f t t t 1 f 1700 "1231" 100 0 0 100  numeric_stddev - ));
 DESCR("STDDEV aggregate final function");
-DATA(insert OID = 1840 (  int2_sum        PGUID 12 f t t f 2 f 20 "20 21" 100 0 0 100  int2_sum - ));
+DATA(insert OID = 1840 (  int2_sum        PGUID 12 f t t f 2 f 20 "20 21" 100 0 0 100  int2_sum - ));
 DESCR("SUM(int2) transition function");
-DATA(insert OID = 1841 (  int4_sum        PGUID 12 f t t f 2 f 20 "20 23" 100 0 0 100  int4_sum - ));
+DATA(insert OID = 1841 (  int4_sum        PGUID 12 f t t f 2 f 20 "20 23" 100 0 0 100  int4_sum - ));
 DESCR("SUM(int4) transition function");
-DATA(insert OID = 1842 (  int8_sum        PGUID 12 f t t f 2 f 1700 "1700 20" 100 0 0 100  int8_sum - ));
+DATA(insert OID = 1842 (  int8_sum        PGUID 12 f t t f 2 f 1700 "1700 20" 100 0 0 100  int8_sum - ));
 DESCR("SUM(int8) transition function");
 DATA(insert OID = 1843 (  interval_accum   PGUID 12 f t t t 2 f 1187 "1187 1186" 100 0 0 100  interval_accum - ));
 DESCR("aggregate transition function");
 DATA(insert OID = 1844 (  interval_avg    PGUID 12 f t t t 1 f 1186 "1187" 100 0 0 100  interval_avg - ));
 DESCR("AVG aggregate final function");
-DATA(insert OID = 1962 (  int2_avg_accum   PGUID 12 f t t t 2 f 1016 "1016 21" 100 0 0 100 int2_avg_accum - ));
+DATA(insert OID = 1962 (  int2_avg_accum   PGUID 12 f t t t 2 f 1016 "1016 21" 100 0 0 100  int2_avg_accum - ));
 DESCR("AVG(int2) transition function");
-DATA(insert OID = 1963 (  int4_avg_accum   PGUID 12 f t t t 2 f 1016 "1016 23" 100 0 0 100 int4_avg_accum - ));
+DATA(insert OID = 1963 (  int4_avg_accum   PGUID 12 f t t t 2 f 1016 "1016 23" 100 0 0 100  int4_avg_accum - ));
 DESCR("AVG(int4) transition function");
 DATA(insert OID = 1964 (  int8_avg        PGUID 12 f t t t 1 f 1700 "1016" 100 0 0 100  int8_avg - ));
 DESCR("AVG(int) aggregate final function");
@@ -2578,77 +2584,77 @@ DESCR("AVG(int) aggregate final function");
 /* To ASCII conversion */
 DATA(insert OID = 1845 ( to_ascii  PGUID 12 f t t t 1 f    25 "25" 100 0 0 100  to_ascii_default - ));
 DESCR("encode text from DB encoding to ASCII text");
-DATA(insert OID = 1846 ( to_ascii  PGUID 12 f t t t 2 f    25 "25 23" 100 0 0 100  to_ascii_enc - ));
+DATA(insert OID = 1846 ( to_ascii  PGUID 12 f t t t 2 f    25 "25 23" 100 0 0 100  to_ascii_enc - ));
 DESCR("encode text from encoding to ASCII text");
-DATA(insert OID = 1847 ( to_ascii  PGUID 12 f t t t 2 f    25 "25 19" 100 0 0 100  to_ascii_encname - ));
+DATA(insert OID = 1847 ( to_ascii  PGUID 12 f t t t 2 f    25 "25 19" 100 0 0 100  to_ascii_encname - ));
 DESCR("encode text from encoding to ASCII text");
 
 DATA(insert OID = 1848 ( interval_pl_time      PGUID 12 f t t t 2 f 1083 "1186 1083" 100 0 0 100  interval_pl_time - ));
 DESCR("plus");
 
-DATA(insert OID = 1850 (  int28eq         PGUID 12 f t t t 2 f 16 "21 20" 100 0 0 100  int28eq - ));
+DATA(insert OID = 1850 (  int28eq         PGUID 12 f t t t 2 f 16 "21 20" 100 0 0 100  int28eq - ));
 DESCR("equal");
-DATA(insert OID = 1851 (  int28ne         PGUID 12 f t t t 2 f 16 "21 20" 100 0 0 100  int28ne - ));
+DATA(insert OID = 1851 (  int28ne         PGUID 12 f t t t 2 f 16 "21 20" 100 0 0 100  int28ne - ));
 DESCR("not equal");
-DATA(insert OID = 1852 (  int28lt         PGUID 12 f t t t 2 f 16 "21 20" 100 0 0 100  int28lt - ));
+DATA(insert OID = 1852 (  int28lt         PGUID 12 f t t t 2 f 16 "21 20" 100 0 0 100  int28lt - ));
 DESCR("less-than");
-DATA(insert OID = 1853 (  int28gt         PGUID 12 f t t t 2 f 16 "21 20" 100 0 0 100  int28gt - ));
+DATA(insert OID = 1853 (  int28gt         PGUID 12 f t t t 2 f 16 "21 20" 100 0 0 100  int28gt - ));
 DESCR("greater-than");
-DATA(insert OID = 1854 (  int28le         PGUID 12 f t t t 2 f 16 "21 20" 100 0 0 100  int28le - ));
+DATA(insert OID = 1854 (  int28le         PGUID 12 f t t t 2 f 16 "21 20" 100 0 0 100  int28le - ));
 DESCR("less-than-or-equal");
-DATA(insert OID = 1855 (  int28ge         PGUID 12 f t t t 2 f 16 "21 20" 100 0 0 100  int28ge - ));
+DATA(insert OID = 1855 (  int28ge         PGUID 12 f t t t 2 f 16 "21 20" 100 0 0 100  int28ge - ));
 DESCR("greater-than-or-equal");
 
-DATA(insert OID = 1856 (  int82eq         PGUID 12 f t t t 2 f 16 "20 21" 100 0 0 100  int82eq - ));
+DATA(insert OID = 1856 (  int82eq         PGUID 12 f t t t 2 f 16 "20 21" 100 0 0 100  int82eq - ));
 DESCR("equal");
-DATA(insert OID = 1857 (  int82ne         PGUID 12 f t t t 2 f 16 "20 21" 100 0 0 100  int82ne - ));
+DATA(insert OID = 1857 (  int82ne         PGUID 12 f t t t 2 f 16 "20 21" 100 0 0 100  int82ne - ));
 DESCR("not equal");
-DATA(insert OID = 1858 (  int82lt         PGUID 12 f t t t 2 f 16 "20 21" 100 0 0 100  int82lt - ));
+DATA(insert OID = 1858 (  int82lt         PGUID 12 f t t t 2 f 16 "20 21" 100 0 0 100  int82lt - ));
 DESCR("less-than");
-DATA(insert OID = 1859 (  int82gt         PGUID 12 f t t t 2 f 16 "20 21" 100 0 0 100  int82gt - ));
+DATA(insert OID = 1859 (  int82gt         PGUID 12 f t t t 2 f 16 "20 21" 100 0 0 100  int82gt - ));
 DESCR("greater-than");
-DATA(insert OID = 1860 (  int82le         PGUID 12 f t t t 2 f 16 "20 21" 100 0 0 100  int82le - ));
+DATA(insert OID = 1860 (  int82le         PGUID 12 f t t t 2 f 16 "20 21" 100 0 0 100  int82le - ));
 DESCR("less-than-or-equal");
-DATA(insert OID = 1861 (  int82ge         PGUID 12 f t t t 2 f 16 "20 21" 100 0 0 100  int82ge - ));
+DATA(insert OID = 1861 (  int82ge         PGUID 12 f t t t 2 f 16 "20 21" 100 0 0 100  int82ge - ));
 DESCR("greater-than-or-equal");
 
-DATA(insert OID = 1892 (  int2and         PGUID 12 f t t t 2 f 21 "21 21" 100 0 0 100  int2and - ));
+DATA(insert OID = 1892 (  int2and         PGUID 12 f t t t 2 f 21 "21 21" 100 0 0 100  int2and - ));
 DESCR("binary and");
-DATA(insert OID = 1893 (  int2or          PGUID 12 f t t t 2 f 21 "21 21" 100 0 0 100  int2or - ));
+DATA(insert OID = 1893 (  int2or          PGUID 12 f t t t 2 f 21 "21 21" 100 0 0 100  int2or - ));
 DESCR("binary or");
-DATA(insert OID = 1894 (  int2xor         PGUID 12 f t t t 2 f 21 "21 21" 100 0 0 100  int2xor - ));
+DATA(insert OID = 1894 (  int2xor         PGUID 12 f t t t 2 f 21 "21 21" 100 0 0 100  int2xor - ));
 DESCR("binary xor");
 DATA(insert OID = 1895 (  int2not         PGUID 12 f t t t 1 f 21 "21" 100 0 0 100  int2not - ));
 DESCR("binary not");
-DATA(insert OID = 1896 (  int2shl         PGUID 12 f t t t 2 f 21 "21 23" 100 0 0 100  int2shl - ));
+DATA(insert OID = 1896 (  int2shl         PGUID 12 f t t t 2 f 21 "21 23" 100 0 0 100  int2shl - ));
 DESCR("binary shift left");
-DATA(insert OID = 1897 (  int2shr         PGUID 12 f t t t 2 f 21 "21 23" 100 0 0 100  int2shr - ));
+DATA(insert OID = 1897 (  int2shr         PGUID 12 f t t t 2 f 21 "21 23" 100 0 0 100  int2shr - ));
 DESCR("binary shift right");
 
-DATA(insert OID = 1898 (  int4and         PGUID 12 f t t t 2 f 23 "23 23" 100 0 0 100  int4and - ));
+DATA(insert OID = 1898 (  int4and         PGUID 12 f t t t 2 f 23 "23 23" 100 0 0 100  int4and - ));
 DESCR("binary and");
-DATA(insert OID = 1899 (  int4or          PGUID 12 f t t t 2 f 23 "23 23" 100 0 0 100  int4or - ));
+DATA(insert OID = 1899 (  int4or          PGUID 12 f t t t 2 f 23 "23 23" 100 0 0 100  int4or - ));
 DESCR("binary or");
-DATA(insert OID = 1900 (  int4xor         PGUID 12 f t t t 2 f 23 "23 23" 100 0 0 100  int4xor - ));
+DATA(insert OID = 1900 (  int4xor         PGUID 12 f t t t 2 f 23 "23 23" 100 0 0 100  int4xor - ));
 DESCR("binary xor");
 DATA(insert OID = 1901 (  int4not         PGUID 12 f t t t 1 f 23 "23" 100 0 0 100  int4not - ));
 DESCR("binary not");
-DATA(insert OID = 1902 (  int4shl         PGUID 12 f t t t 2 f 23 "23 23" 100 0 0 100  int4shl - ));
+DATA(insert OID = 1902 (  int4shl         PGUID 12 f t t t 2 f 23 "23 23" 100 0 0 100  int4shl - ));
 DESCR("binary shift left");
-DATA(insert OID = 1903 (  int4shr         PGUID 12 f t t t 2 f 23 "23 23" 100 0 0 100  int4shr - ));
+DATA(insert OID = 1903 (  int4shr         PGUID 12 f t t t 2 f 23 "23 23" 100 0 0 100  int4shr - ));
 DESCR("binary shift right");
 
-DATA(insert OID = 1904 (  int8and         PGUID 12 f t t t 2 f 20 "20 20" 100 0 0 100  int8and - ));
+DATA(insert OID = 1904 (  int8and         PGUID 12 f t t t 2 f 20 "20 20" 100 0 0 100  int8and - ));
 DESCR("binary and");
-DATA(insert OID = 1905 (  int8or          PGUID 12 f t t t 2 f 20 "20 20" 100 0 0 100  int8or - ));
+DATA(insert OID = 1905 (  int8or          PGUID 12 f t t t 2 f 20 "20 20" 100 0 0 100  int8or - ));
 DESCR("binary or");
-DATA(insert OID = 1906 (  int8xor         PGUID 12 f t t t 2 f 20 "20 20" 100 0 0 100  int8xor - ));
+DATA(insert OID = 1906 (  int8xor         PGUID 12 f t t t 2 f 20 "20 20" 100 0 0 100  int8xor - ));
 DESCR("binary xor");
 DATA(insert OID = 1907 (  int8not         PGUID 12 f t t t 1 f 20 "20" 100 0 0 100  int8not - ));
 DESCR("binary not");
-DATA(insert OID = 1908 (  int8shl         PGUID 12 f t t t 2 f 20 "20 23" 100 0 0 100  int8shl - ));
+DATA(insert OID = 1908 (  int8shl         PGUID 12 f t t t 2 f 20 "20 23" 100 0 0 100  int8shl - ));
 DESCR("binary shift left");
-DATA(insert OID = 1909 (  int8shr         PGUID 12 f t t t 2 f 20 "20 23" 100 0 0 100  int8shr - ));
+DATA(insert OID = 1909 (  int8shr         PGUID 12 f t t t 2 f 20 "20 23" 100 0 0 100  int8shr - ));
 DESCR("binary shift right");
 
 DATA(insert OID = 1910 (  int8up          PGUID 12 f t t t 1 f 20  "20"   100 0 0 100  int8up - ));
@@ -2664,80 +2670,80 @@ DESCR("unary plus");
 DATA(insert OID = 1915 (  numeric_uplus       PGUID 12 f t t t 1 f 1700 "1700" 100 0 0 100  numeric_uplus - ));
 DESCR("unary plus");
 
-DATA(insert OID = 1922 (  has_table_privilege         PGUID 12 f t f t 3 f 16 "19 19 25" 100 0 0 100   has_table_privilege_name_name - ));
+DATA(insert OID = 1922 (  has_table_privilege         PGUID 12 f t f t 3 f 16 "19 19 25" 100 0 0 100  has_table_privilege_name_name - ));
 DESCR("user privilege on relation by username, relname");
-DATA(insert OID = 1923 (  has_table_privilege         PGUID 12 f t f t 3 f 16 "19 26 25" 100 0 0 100   has_table_privilege_name_id - ));
+DATA(insert OID = 1923 (  has_table_privilege         PGUID 12 f t f t 3 f 16 "19 26 25" 100 0 0 100  has_table_privilege_name_id - ));
 DESCR("user privilege on relation by username, rel oid");
-DATA(insert OID = 1924 (  has_table_privilege         PGUID 12 f t f t 3 f 16 "23 19 25" 100 0 0 100   has_table_privilege_id_name - ));
+DATA(insert OID = 1924 (  has_table_privilege         PGUID 12 f t f t 3 f 16 "23 19 25" 100 0 0 100  has_table_privilege_id_name - ));
 DESCR("user privilege on relation by usesysid, relname");
-DATA(insert OID = 1925 (  has_table_privilege         PGUID 12 f t f t 3 f 16 "23 26 25" 100 0 0 100   has_table_privilege_id_id - ));
+DATA(insert OID = 1925 (  has_table_privilege         PGUID 12 f t f t 3 f 16 "23 26 25" 100 0 0 100  has_table_privilege_id_id - ));
 DESCR("user privilege on relation by usesysid, rel oid");
-DATA(insert OID = 1926 (  has_table_privilege         PGUID 12 f t f t 2 f 16 "19 25" 100 0 0 100  has_table_privilege_name - ));
+DATA(insert OID = 1926 (  has_table_privilege         PGUID 12 f t f t 2 f 16 "19 25" 100 0 0 100  has_table_privilege_name - ));
 DESCR("current user privilege on relation by relname");
-DATA(insert OID = 1927 (  has_table_privilege         PGUID 12 f t f t 2 f 16 "26 25" 100 0 0 100  has_table_privilege_id - ));
+DATA(insert OID = 1927 (  has_table_privilege         PGUID 12 f t f t 2 f 16 "26 25" 100 0 0 100  has_table_privilege_id - ));
 DESCR("current user privilege on relation by rel oid");
 
 
-DATA(insert OID = 1928 (  pg_stat_get_numscans         PGUID 12 f t f t 1 f 20 "26" 100 0 0 100    pg_stat_get_numscans - ));
+DATA(insert OID = 1928 (  pg_stat_get_numscans         PGUID 12 f t f t 1 f 20 "26" 100 0 0 100  pg_stat_get_numscans - ));
 DESCR("Statistics: Number of scans done for table/index");
-DATA(insert OID = 1929 (  pg_stat_get_tuples_returned  PGUID 12 f t f t 1 f 20 "26" 100 0 0 100    pg_stat_get_tuples_returned - ));
+DATA(insert OID = 1929 (  pg_stat_get_tuples_returned  PGUID 12 f t f t 1 f 20 "26" 100 0 0 100  pg_stat_get_tuples_returned - ));
 DESCR("Statistics: Number of tuples read by seqscan");
-DATA(insert OID = 1930 (  pg_stat_get_tuples_fetched   PGUID 12 f t f t 1 f 20 "26" 100 0 0 100    pg_stat_get_tuples_fetched - ));
+DATA(insert OID = 1930 (  pg_stat_get_tuples_fetched   PGUID 12 f t f t 1 f 20 "26" 100 0 0 100  pg_stat_get_tuples_fetched - ));
 DESCR("Statistics: Number of tuples fetched by idxscan");
-DATA(insert OID = 1931 (  pg_stat_get_tuples_inserted  PGUID 12 f t f t 1 f 20 "26" 100 0 0 100    pg_stat_get_tuples_inserted - ));
+DATA(insert OID = 1931 (  pg_stat_get_tuples_inserted  PGUID 12 f t f t 1 f 20 "26" 100 0 0 100  pg_stat_get_tuples_inserted - ));
 DESCR("Statistics: Number of tuples inserted");
-DATA(insert OID = 1932 (  pg_stat_get_tuples_updated   PGUID 12 f t f t 1 f 20 "26" 100 0 0 100    pg_stat_get_tuples_updated - ));
+DATA(insert OID = 1932 (  pg_stat_get_tuples_updated   PGUID 12 f t f t 1 f 20 "26" 100 0 0 100  pg_stat_get_tuples_updated - ));
 DESCR("Statistics: Number of tuples updated");
-DATA(insert OID = 1933 (  pg_stat_get_tuples_deleted   PGUID 12 f t f t 1 f 20 "26" 100 0 0 100    pg_stat_get_tuples_deleted - ));
+DATA(insert OID = 1933 (  pg_stat_get_tuples_deleted   PGUID 12 f t f t 1 f 20 "26" 100 0 0 100  pg_stat_get_tuples_deleted - ));
 DESCR("Statistics: Number of tuples deleted");
-DATA(insert OID = 1934 (  pg_stat_get_blocks_fetched   PGUID 12 f t f t 1 f 20 "26" 100 0 0 100    pg_stat_get_blocks_fetched - ));
+DATA(insert OID = 1934 (  pg_stat_get_blocks_fetched   PGUID 12 f t f t 1 f 20 "26" 100 0 0 100  pg_stat_get_blocks_fetched - ));
 DESCR("Statistics: Number of blocks fetched");
-DATA(insert OID = 1935 (  pg_stat_get_blocks_hit       PGUID 12 f t f t 1 f 20 "26" 100 0 0 100    pg_stat_get_blocks_hit - ));
+DATA(insert OID = 1935 (  pg_stat_get_blocks_hit       PGUID 12 f t f t 1 f 20 "26" 100 0 0 100  pg_stat_get_blocks_hit - ));
 DESCR("Statistics: Number of blocks found in cache");
-DATA(insert OID = 1936 (  pg_stat_get_backend_idset        PGUID 12 f t f t 0 t 23 "" 100 0 0 100  pg_stat_get_backend_idset - ));
+DATA(insert OID = 1936 (  pg_stat_get_backend_idset        PGUID 12 f t f t 0 t 23 "" 100 0 0 100  pg_stat_get_backend_idset - ));
 DESCR("Statistics: Currently active backend IDs");
-DATA(insert OID = 1937 (  pg_stat_get_backend_pid      PGUID 12 f t f t 1 f 23 "23" 100 0 0 100    pg_stat_get_backend_pid - ));
+DATA(insert OID = 1937 (  pg_stat_get_backend_pid      PGUID 12 f t f t 1 f 23 "23" 100 0 0 100  pg_stat_get_backend_pid - ));
 DESCR("Statistics: PID of backend");
-DATA(insert OID = 1938 (  pg_stat_get_backend_dbid     PGUID 12 f t f t 1 f 26 "23" 100 0 0 100    pg_stat_get_backend_dbid - ));
+DATA(insert OID = 1938 (  pg_stat_get_backend_dbid     PGUID 12 f t f t 1 f 26 "23" 100 0 0 100  pg_stat_get_backend_dbid - ));
 DESCR("Statistics: Database ID of backend");
-DATA(insert OID = 1939 (  pg_stat_get_backend_userid   PGUID 12 f t f t 1 f 26 "23" 100 0 0 100    pg_stat_get_backend_userid - ));
+DATA(insert OID = 1939 (  pg_stat_get_backend_userid   PGUID 12 f t f t 1 f 26 "23" 100 0 0 100  pg_stat_get_backend_userid - ));
 DESCR("Statistics: User ID of backend");
-DATA(insert OID = 1940 (  pg_stat_get_backend_activity PGUID 12 f t f t 1 f 25 "23" 100 0 0 100    pg_stat_get_backend_activity - ));
+DATA(insert OID = 1940 (  pg_stat_get_backend_activity PGUID 12 f t f t 1 f 25 "23" 100 0 0 100  pg_stat_get_backend_activity - ));
 DESCR("Statistics: Current query of backend");
-DATA(insert OID = 1941 (  pg_stat_get_db_numbackends   PGUID 12 f t f t 1 f 23 "26" 100 0 0 100    pg_stat_get_db_numbackends - ));
+DATA(insert OID = 1941 (  pg_stat_get_db_numbackends   PGUID 12 f t f t 1 f 23 "26" 100 0 0 100  pg_stat_get_db_numbackends - ));
 DESCR("Statistics: Number of backends in database");
-DATA(insert OID = 1942 (  pg_stat_get_db_xact_commit   PGUID 12 f t f t 1 f 20 "26" 100 0 0 100    pg_stat_get_db_xact_commit - ));
+DATA(insert OID = 1942 (  pg_stat_get_db_xact_commit   PGUID 12 f t f t 1 f 20 "26" 100 0 0 100  pg_stat_get_db_xact_commit - ));
 DESCR("Statistics: Transactions committed");
-DATA(insert OID = 1943 (  pg_stat_get_db_xact_rollback PGUID 12 f t f t 1 f 20 "26" 100 0 0 100    pg_stat_get_db_xact_rollback - ));
+DATA(insert OID = 1943 (  pg_stat_get_db_xact_rollback PGUID 12 f t f t 1 f 20 "26" 100 0 0 100  pg_stat_get_db_xact_rollback - ));
 DESCR("Statistics: Transactions rolled back");
-DATA(insert OID = 1944 (  pg_stat_get_db_blocks_fetched    PGUID 12 f t f t 1 f 20 "26" 100 0 0 100    pg_stat_get_db_blocks_fetched - ));
+DATA(insert OID = 1944 (  pg_stat_get_db_blocks_fetched    PGUID 12 f t f t 1 f 20 "26" 100 0 0 100  pg_stat_get_db_blocks_fetched - ));
 DESCR("Statistics: Blocks fetched for database");
-DATA(insert OID = 1945 (  pg_stat_get_db_blocks_hit        PGUID 12 f t f t 1 f 20 "26" 100 0 0 100    pg_stat_get_db_blocks_hit - ));
+DATA(insert OID = 1945 (  pg_stat_get_db_blocks_hit        PGUID 12 f t f t 1 f 20 "26" 100 0 0 100  pg_stat_get_db_blocks_hit - ));
 DESCR("Statistics: Block found in cache for database");
 
-DATA(insert OID = 1946 (  encode                       PGUID 12 f t t t 2 f 25 "17 25" 100 0 0 100 binary_encode - ));
+DATA(insert OID = 1946 (  encode                       PGUID 12 f t t t 2 f 25 "17 25" 100 0 0 100  binary_encode - ));
 DESCR("Convert bytea value into some ascii-only text string");
-DATA(insert OID = 1947 (  decode                       PGUID 12 f t t t 2 f 17 "25 25" 100 0 0 100 binary_decode - ));
+DATA(insert OID = 1947 (  decode                       PGUID 12 f t t t 2 f 17 "25 25" 100 0 0 100  binary_decode - ));
 DESCR("Convert ascii-encoded text string into bytea value");
 
-DATA(insert OID = 1948 (  byteaeq         PGUID 12 f t t t 2 f 16 "17 17" 100 0 0 100  byteaeq - ));
+DATA(insert OID = 1948 (  byteaeq         PGUID 12 f t t t 2 f 16 "17 17" 100 0 0 100  byteaeq - ));
 DESCR("equal");
-DATA(insert OID = 1949 (  bytealt         PGUID 12 f t t t 2 f 16 "17 17" 100 0 0 100  bytealt - ));
+DATA(insert OID = 1949 (  bytealt         PGUID 12 f t t t 2 f 16 "17 17" 100 0 0 100  bytealt - ));
 DESCR("less-than");
-DATA(insert OID = 1950 (  byteale         PGUID 12 f t t t 2 f 16 "17 17" 100 0 0 100  byteale - ));
+DATA(insert OID = 1950 (  byteale         PGUID 12 f t t t 2 f 16 "17 17" 100 0 0 100  byteale - ));
 DESCR("less-than-or-equal");
-DATA(insert OID = 1951 (  byteagt         PGUID 12 f t t t 2 f 16 "17 17" 100 0 0 100  byteagt - ));
+DATA(insert OID = 1951 (  byteagt         PGUID 12 f t t t 2 f 16 "17 17" 100 0 0 100  byteagt - ));
 DESCR("greater-than");
-DATA(insert OID = 1952 (  byteage         PGUID 12 f t t t 2 f 16 "17 17" 100 0 0 100  byteage - ));
+DATA(insert OID = 1952 (  byteage         PGUID 12 f t t t 2 f 16 "17 17" 100 0 0 100  byteage - ));
 DESCR("greater-than-or-equal");
-DATA(insert OID = 1953 (  byteane         PGUID 12 f t t t 2 f 16 "17 17" 100 0 0 100  byteane - ));
+DATA(insert OID = 1953 (  byteane         PGUID 12 f t t t 2 f 16 "17 17" 100 0 0 100  byteane - ));
 DESCR("not equal");
-DATA(insert OID = 1954 (  byteacmp        PGUID 12 f t t t 2 f 23 "17 17" 100 0 0 100  byteacmp - ));
+DATA(insert OID = 1954 (  byteacmp        PGUID 12 f t t t 2 f 23 "17 17" 100 0 0 100  byteacmp - ));
 DESCR("less-equal-greater");
 
-DATA(insert OID = 1965 (  oidlarger           PGUID 12 f t t t 2 f 26 "26 26" 100 0 0 100  oidlarger - ));
+DATA(insert OID = 1965 (  oidlarger           PGUID 12 f t t t 2 f 26 "26 26" 100 0 0 100  oidlarger - ));
 DESCR("larger of two");
-DATA(insert OID = 1966 (  oidsmaller      PGUID 12 f t t t 2 f 26 "26 26" 100 0 0 100  oidsmaller - ));
+DATA(insert OID = 1966 (  oidsmaller      PGUID 12 f t t t 2 f 26 "26 26" 100 0 0 100  oidsmaller - ));
 DESCR("smaller of two");
 
 DATA(insert OID = 2005 (  bytealike           PGUID 12 f t t t 2 f 16 "17 17" 100 0 0 100 bytealike - ));
@@ -2763,6 +2769,87 @@ DESCR("return position of substring");
 DATA(insert OID = 2015 (  btrim               PGUID 12 f t t t 2 f 17 "17 17" 100 0 0 100  byteatrim - ));
 DESCR("trim both ends of string");
  
+DATA(insert OID = 2020 (  date_trunc       PGUID 12 f t t t 2 f 1114 "25 1114" 100 0 0 100  timestamp_trunc - ));
+DESCR("truncate timestamp to specified units");
+DATA(insert OID = 2021 (  date_part            PGUID 12 f t t t 2 f  701 "25 1114" 100 0 0 100  timestamp_part - ));
+DESCR("extract field from timestamp");
+DATA(insert OID = 2022 (  timestamp            PGUID 12 f t f t 1 f 1114 "25" 100 0 0 100  text_timestamp - ));
+DESCR("convert text to timestamp");
+DATA(insert OID = 2023 (  timestamp            PGUID 12 f t f t 1 f 1114 "702" 100 0 0 100  abstime_timestamp - ));
+DESCR("convert abstime to timestamp");
+DATA(insert OID = 2024 (  timestamp            PGUID 12 f t t t 1 f 1114 "1082" 100 0 0 100  date_timestamp - ));
+DESCR("convert date to timestamp");
+DATA(insert OID = 2025 (  timestamp            PGUID 12 f t t t 2 f 1114 "1082 1083" 100 0 0 100  datetime_timestamp - ));
+DESCR("convert date and time to timestamp");
+DATA(insert OID = 2026 (  timestamp            PGUID 14 f t t t 1 f 1114 "1114" 100 0 0 100  "select $1" - ));
+DESCR("convert (noop)");
+DATA(insert OID = 2027 (  timestamp            PGUID 12 f t f t 1 f 1114 "1184" 100 0 0 100  timestamptz_timestamp - ));
+DESCR("convert date and time with time zone to timestamp");
+DATA(insert OID = 2028 (  timestamptz      PGUID 12 f t f t 1 f 1184 "1114" 100 0 0 100  timestamp_timestamptz - ));
+DESCR("convert date and time with time zone to timestamp");
+DATA(insert OID = 2029 (  date             PGUID 12 f t t t 1 f 1082 "1114" 100 0 0 100  timestamp_date - ));
+DESCR("convert timestamp to date");
+DATA(insert OID = 2030 (  abstime          PGUID 12 f t f t 1 f  702 "1114" 100 0 0 100  timestamp_abstime - ));
+DESCR("convert timestamp to abstime");
+DATA(insert OID = 2031 (  timestamp_mi     PGUID 12 f t t t 2 f 1186 "1114 1114" 100 0 0 100  timestamp_mi - ));
+DESCR("subtract");
+DATA(insert OID = 2032 (  timestamp_pl_span PGUID 12 f t t t 2 f 1114 "1114 1186" 100 0 0 100  timestamp_pl_span - ));
+DESCR("plus");
+DATA(insert OID = 2033 (  timestamp_mi_span PGUID 12 f t t t 2 f 1114 "1114 1186" 100 0 0 100  timestamp_mi_span - ));
+DESCR("minus");
+DATA(insert OID = 2034 (  text             PGUID 12 f t t t 1 f   25 "1114" 100 0 0 100  timestamp_text - ));
+DESCR("convert timestamp to text");
+DATA(insert OID = 2035 (  timestamp_smaller PGUID 12 f t t t 2 f 1114 "1114 1114" 100 0 0 100  timestamp_smaller - ));
+DESCR("smaller of two");
+DATA(insert OID = 2036 (  timestamp_larger PGUID 12 f t t t 2 f 1114 "1114 1114" 100 0 0 100  timestamp_larger - ));
+DESCR("larger of two");
+DATA(insert OID = 2037 (  timetz           PGUID 12 f t f t 2 f 1266 "25 1266" 100 0 0 100  timetz_zone - ));
+DESCR("time with time zone");
+DATA(insert OID = 2038 (  timetz           PGUID 12 f t t t 2 f 1266 "1186 1266" 100 0 0 100  timetz_izone - ));
+DESCR("time with time zone");
+DATA(insert OID = 2041 ( overlaps          PGUID 12 f t t f 4 f 16 "1114 1114 1114 1114" 100 0 0 100  overlaps_timestamp - ));
+DESCR("SQL92 interval comparison");
+DATA(insert OID = 2042 ( overlaps          PGUID 14 f t t f 4 f 16 "1114 1186 1114 1186" 100 0 0 100  "select ($1, ($1 + $2)) overlaps ($3, ($3 + $4))" - ));
+DESCR("SQL92 interval comparison");
+DATA(insert OID = 2043 ( overlaps          PGUID 14 f t t f 4 f 16 "1114 1114 1114 1186" 100 0 0 100  "select ($1, $2) overlaps ($3, ($3 + $4))" - ));
+DESCR("SQL92 interval comparison");
+DATA(insert OID = 2044 ( overlaps          PGUID 14 f t t f 4 f 16 "1114 1186 1114 1114" 100 0 0 100  "select ($1, ($1 + $2)) overlaps ($3, $4)" - ));
+DESCR("SQL92 interval comparison");
+DATA(insert OID = 2045 (  timestamp_cmp        PGUID 12 f t t t 2 f    23 "1114 1114" 100 0 0 100  timestamp_cmp - ));
+DESCR("less-equal-greater");
+DATA(insert OID = 2046 (  time             PGUID 12 f t t t 1 f 1083 "1266" 100 0 0 100  timetz_time - ));
+DESCR("convert time with time zone to time");
+DATA(insert OID = 2047 (  timetz           PGUID 12 f t f t 1 f 1266 "1083" 100 0 0 100  time_timetz - ));
+DESCR("convert time to timetz");
+DATA(insert OID = 2048 (  isfinite         PGUID 12 f t t t 1 f   16 "1114" 100 0 0 100  timestamp_finite - ));
+DESCR("boolean test");
+
+DATA(insert OID = 2050 ( interval_mi_time  PGUID 14 f t t t 2 f 1083 "1186 1083" 100 0 0 100  "select $2 - $1 + (interval \'24 hours\')" - ));
+DESCR("minus");
+DATA(insert OID = 2051 ( interval_mi_timetz    PGUID 14 f t t t 2 f 1266 "1186 1266" 100 0 0 100  "select $2 - $1 + (interval \'24 hours\')" - ));
+DESCR("minus");
+DATA(insert OID = 2052 (  timestamp_eq     PGUID 12 f t t t 2 f 16 "1114 1114" 100 0 0 100  timestamp_eq - ));
+DESCR("equal");
+DATA(insert OID = 2053 (  timestamp_ne     PGUID 12 f t t t 2 f 16 "1114 1114" 100 0 0 100  timestamp_ne - ));
+DESCR("not equal");
+DATA(insert OID = 2054 (  timestamp_lt     PGUID 12 f t t t 2 f 16 "1114 1114" 100 0 0 100  timestamp_lt - ));
+DESCR("less-than");
+DATA(insert OID = 2055 (  timestamp_le     PGUID 12 f t t t 2 f 16 "1114 1114" 100 0 0 100  timestamp_le - ));
+DESCR("less-than-or-equal");
+DATA(insert OID = 2056 (  timestamp_ge     PGUID 12 f t t t 2 f 16 "1114 1114" 100 0 0 100  timestamp_ge - ));
+DESCR("greater-than-or-equal");
+DATA(insert OID = 2057 (  timestamp_gt     PGUID 12 f t t t 2 f 16 "1114 1114" 100 0 0 100  timestamp_gt - ));
+DESCR("greater-than");
+DATA(insert OID = 2058 (  age              PGUID 12 f t t t 2 f 1186 "1114 1114" 100 0 0 100  timestamp_age - ));
+DESCR("date difference preserving months and years");
+DATA(insert OID = 2059 (  age              PGUID 14 f t t t 1 f 1186 "1114" 100 0 0 100  "select age(\'today\', $1)" - ));
+DESCR("date difference from today preserving months and years");
+DATA(insert OID = 2069 (  timezone         PGUID 12 f t t t 2 f 1184 "25 1114" 100 0 0 100  timestamp_zone - ));
+DESCR("time zone");
+DATA(insert OID = 2070 (  timezone         PGUID 12 f t t t 2 f 1184 "1186 1114" 100 0 0 100  timestamp_izone - ));
+DESCR("time zone");
+
+
 /*
  * prototypes for functions pg_proc.c
  */
@@ -2781,4 +2868,4 @@ extern Oid ProcedureCreate(char *procedureName,
                int32 outin_ratio,
                List *argList);
 
-#endif  /* PG_PROC_H */
+#endif  /* PG_PROC_H */
index 912a47a96c94f279bc21e008d0fec46a920c326f..8b653a73e452de886a1e9d6ebba6ee39e39b60d3 100644 (file)
@@ -8,7 +8,7 @@
  * Portions Copyright (c) 1996-2001, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $Id: pg_type.h,v 1.111 2001/09/06 02:07:42 tgl Exp $
+ * $Id: pg_type.h,v 1.112 2001/09/28 08:09:14 thomas Exp $
  *
  * NOTES
  *   the genbki.sh script reads this file and generates .bki
@@ -395,12 +395,16 @@ DESCR("hh:mm:ss, ANSI SQL time");
 #define TIMEOID            1083
 
 /* OIDS 1100 - 1199 */
+DATA(insert OID = 1114 ( timestamp  PGUID  8  47 f b t \054 0  0 timestamp_in timestamp_out timestamp_in timestamp_out d p _null_ ));
+DESCR("date and time");
+#define TIMESTAMPOID   1114
+DATA(insert OID = 1115 ( _timestamp  PGUID -1 -1 f b t \054 0  1184 array_in array_out array_in array_out d x _null_ ));
 DATA(insert OID = 1182 ( _date      PGUID  -1 -1 f b t \054 0  1082 array_in array_out array_in array_out i x _null_ ));
 DATA(insert OID = 1183 ( _time      PGUID  -1 -1 f b t \054 0  1083 array_in array_out array_in array_out d x _null_ ));
-DATA(insert OID = 1184 ( timestamp  PGUID  8  47 f b t \054 0  0 timestamp_in timestamp_out timestamp_in timestamp_out d p _null_ ));
-DESCR("date and time");
-#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 x _null_ ));
+DATA(insert OID = 1184 ( timestamptz PGUID 8  47 f b t \054 0  0 timestamptz_in timestamptz_out timestamptz_in timestamptz_out d p _null_ ));
+DESCR("date and time with time zone");
+#define TIMESTAMPTZOID 1184
+DATA(insert OID = 1185 ( _timestamptz PGUID    -1 -1 f b t \054 0  1184 array_in array_out array_in array_out d x _null_ ));
 DATA(insert OID = 1186 ( interval   PGUID 12  47 f b t \054 0  0 interval_in interval_out interval_in interval_out d p _null_ ));
 DESCR("@  , time interval");
 #define INTERVALOID        1186
index 671d72684d5d79fa57924a000602fbf145d385f1..0f0c9e15a8a927b4a2bd2767d03b368c1351c99f 100644 (file)
@@ -7,7 +7,7 @@
  * Portions Copyright (c) 1996-2001, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $Id: builtins.h,v 1.164 2001/09/14 17:46:40 momjian Exp $
+ * $Id: builtins.h,v 1.165 2001/09/28 08:09:14 thomas Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -16,7 +16,7 @@
 
 #include "fmgr.h"
 #include "nodes/primnodes.h"
-
+#include "storage/itemptr.h"  /* for setLastTid() */
 
 /*
  *     Defined in adt/
@@ -345,6 +345,7 @@ extern char *deparse_expression(Node *expr, List *dpcontext,
 extern List *deparse_context_for(char *relname, Oid relid);
 
 /* tid.c */
+extern void  setLastTid(const ItemPointer tid);
 extern Datum tidin(PG_FUNCTION_ARGS);
 extern Datum tidout(PG_FUNCTION_ARGS);
 extern Datum tideq(PG_FUNCTION_ARGS);
index 5aeb87ee00e279bc300cbb08b5ee9faf5927eff1..cc58cf97470a5ddc6b65c22010397f324d676d67 100644 (file)
@@ -7,7 +7,7 @@
  * Portions Copyright (c) 1996-2001, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $Id: date.h,v 1.11 2001/03/22 04:01:11 momjian Exp $
+ * $Id: date.h,v 1.12 2001/09/28 08:09:14 thomas Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -68,6 +68,8 @@ extern Datum date_pli(PG_FUNCTION_ARGS);
 extern Datum date_mii(PG_FUNCTION_ARGS);
 extern Datum date_timestamp(PG_FUNCTION_ARGS);
 extern Datum timestamp_date(PG_FUNCTION_ARGS);
+extern Datum date_timestamptz(PG_FUNCTION_ARGS);
+extern Datum timestamptz_date(PG_FUNCTION_ARGS);
 extern Datum datetime_timestamp(PG_FUNCTION_ARGS);
 extern Datum abstime_date(PG_FUNCTION_ARGS);
 extern Datum text_date(PG_FUNCTION_ARGS);
@@ -85,6 +87,7 @@ extern Datum time_cmp(PG_FUNCTION_ARGS);
 extern Datum overlaps_time(PG_FUNCTION_ARGS);
 extern Datum time_larger(PG_FUNCTION_ARGS);
 extern Datum time_smaller(PG_FUNCTION_ARGS);
+extern Datum time_mi_time(PG_FUNCTION_ARGS);
 extern Datum timestamp_time(PG_FUNCTION_ARGS);
 extern Datum time_interval(PG_FUNCTION_ARGS);
 extern Datum interval_time(PG_FUNCTION_ARGS);
@@ -107,10 +110,14 @@ extern Datum timetz_hash(PG_FUNCTION_ARGS);
 extern Datum overlaps_timetz(PG_FUNCTION_ARGS);
 extern Datum timetz_larger(PG_FUNCTION_ARGS);
 extern Datum timetz_smaller(PG_FUNCTION_ARGS);
-extern Datum timestamp_timetz(PG_FUNCTION_ARGS);
-extern Datum datetimetz_timestamp(PG_FUNCTION_ARGS);
+extern Datum timetz_time(PG_FUNCTION_ARGS);
+extern Datum time_timetz(PG_FUNCTION_ARGS);
+extern Datum timestamptz_timetz(PG_FUNCTION_ARGS);
+extern Datum datetimetz_timestamptz(PG_FUNCTION_ARGS);
 extern Datum text_timetz(PG_FUNCTION_ARGS);
 extern Datum timetz_text(PG_FUNCTION_ARGS);
+extern Datum timetz_zone(PG_FUNCTION_ARGS);
+extern Datum timetz_izone(PG_FUNCTION_ARGS);
 extern Datum timetz_pl_interval(PG_FUNCTION_ARGS);
 extern Datum timetz_mi_interval(PG_FUNCTION_ARGS);
 
index d299c042eb1a96a8e56bfe4b689a287ae3396bbd..f2102a21e55aa5e0c3c873ac2e728916f73ab6db 100644 (file)
@@ -9,7 +9,7 @@
  * Portions Copyright (c) 1996-2001, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $Id: datetime.h,v 1.21 2001/08/27 20:02:10 tgl Exp $
+ * $Id: datetime.h,v 1.22 2001/09/28 08:09:14 thomas Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -86,7 +86,7 @@
 #define MONTH  1
 #define YEAR   2
 #define DAY        3
-#define TIMES  4               /* not used - thomas 1997-07-14 */
+#define JULIAN 4
 #define TZ     5
 #define DTZ        6
 #define DTZMOD 7
 #define AGO        17
 #define ABS_BEFORE     18
 #define ABS_AFTER      19
+/* reserved for unrecognized string values */
+#define UNKNOWN_FIELD  31
 
 /*
  * Token field definitions for time parsing and decoding.
 #define DTK_MILLENNIUM 28
 #define DTK_MILLISEC   29
 #define DTK_MICROSEC   30
+#define DTK_JULIAN     31
 
 #define DTK_DOW            32
 #define DTK_DOY            33
 #define DTK_TZ_HOUR        34
 #define DTK_TZ_MINUTE  35
 
+#define DTK_ISO_DATE   36
+#define DTK_ISO_TIME   37
+
+
 /*
  * Bit mask definitions for time parsing.
  */
@@ -238,6 +245,7 @@ extern int  day_tab[2][13];
 
 
 extern void GetCurrentTime(struct tm * tm);
+extern void GetCurrentTimeUsec(struct tm * tm, double *fsec);
 extern void j2date(int jd, int *year, int *month, int *day);
 extern int date2j(int year, int month, int day);
 
index 424bcf0fcba0bff76cf2734e0d9db94532854621..14d3f578ab371359acc4c077f1e42b1466a1921f 100644 (file)
@@ -2,7 +2,7 @@
 /* -----------------------------------------------------------------------
  * formatting.h
  *
- * $Id: formatting.h,v 1.8 2001/09/06 03:22:42 momjian Exp $
+ * $Id: formatting.h,v 1.9 2001/09/28 08:09:14 thomas Exp $
  *
  *
  *  Portions Copyright (c) 1999-2000, PostgreSQL Global Development Group
@@ -22,6 +22,7 @@
 
 
 extern Datum timestamp_to_char(PG_FUNCTION_ARGS);
+extern Datum timestamptz_to_char(PG_FUNCTION_ARGS);
 extern Datum interval_to_char(PG_FUNCTION_ARGS);
 extern Datum to_timestamp(PG_FUNCTION_ARGS);
 extern Datum to_date(PG_FUNCTION_ARGS);
index d5343e5a14c30d516ea87345fdfb4c183c4e403d..299c7dbc604030e3c766ccea5d7fcbfe64d7ba58 100644 (file)
@@ -7,7 +7,7 @@
  * Portions Copyright (c) 1996-2001, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $Id: nabstime.h,v 1.30 2001/05/03 19:00:37 tgl Exp $
+ * $Id: nabstime.h,v 1.31 2001/09/28 08:09:14 thomas Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -74,11 +74,8 @@ typedef TimeIntervalData *TimeInterval;
  * These were chosen as special 32-bit bit patterns,
  * so redefine them explicitly using these bit patterns. - tgl 97/02/24
  */
-#define EPOCH_ABSTIME  ((AbsoluteTime) 0)
 #define INVALID_ABSTIME ((AbsoluteTime) 0x7FFFFFFE)        /* 2147483647 (2^31 - 1) */
-#define CURRENT_ABSTIME ((AbsoluteTime) 0x7FFFFFFD)        /* 2147483646 (2^31 - 2) */
 #define NOEND_ABSTIME  ((AbsoluteTime) 0x7FFFFFFC)     /* 2147483645 (2^31 - 3) */
-#define BIG_ABSTIME        ((AbsoluteTime) 0x7FFFFFFB)     /* 2147483644 (2^31 - 4) */
 #define NOSTART_ABSTIME ((AbsoluteTime) INT_MIN)       /* -2147483648 */
 
 #define INVALID_RELTIME ((RelativeTime) 0x7FFFFFFE)        /* 2147483647 (2^31 - 1) */
@@ -116,6 +113,8 @@ extern Datum abstime_finite(PG_FUNCTION_ARGS);
 
 extern Datum timestamp_abstime(PG_FUNCTION_ARGS);
 extern Datum abstime_timestamp(PG_FUNCTION_ARGS);
+extern Datum timestamptz_abstime(PG_FUNCTION_ARGS);
+extern Datum abstime_timestamptz(PG_FUNCTION_ARGS);
 
 extern Datum reltimein(PG_FUNCTION_ARGS);
 extern Datum reltimeout(PG_FUNCTION_ARGS);
@@ -158,6 +157,7 @@ extern Datum timeofday(PG_FUNCTION_ARGS);
 
 /* non-fmgr-callable support routines */
 extern AbsoluteTime GetCurrentAbsoluteTime(void);
+extern AbsoluteTime GetCurrentAbsoluteTimeUsec(int *usec);
 extern void abstime2tm(AbsoluteTime time, int *tzp, struct tm * tm, char *tzn);
 
 #endif  /* NABSTIME_H */
index 11b650c88ac1252d6947a4e290af4ddd2e3f724b..51189ec4013e21e5b1dbb125bdc5a8a8f7bbd6af 100644 (file)
@@ -6,7 +6,7 @@
  * Portions Copyright (c) 1996-2001, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $Id: timestamp.h,v 1.17 2001/09/06 03:22:42 momjian Exp $
+ * $Id: timestamp.h,v 1.18 2001/09/28 08:09:14 thomas Exp $
  *
  *-------------------------------------------------------------------------
  */
 
 typedef double Timestamp;
 
+typedef double TimestampTz;
+
 typedef struct
 {
-   double      time;           /* all time units other than months and
-                                * years */
-   int32       month;          /* months and years, after time for
-                                * alignment */
+   double      time;   /* all time units other than months and years */
+   int32       month;  /* months and years, after time for alignment */
 } Interval;
 
 
@@ -49,23 +49,22 @@ typedef struct
  * Therefore Timestamp is pass-by-reference if and only if float8 is!
  */
 #define DatumGetTimestamp(X)  ((Timestamp) DatumGetFloat8(X))
+#define DatumGetTimestampTz(X)  ((Timestamp) DatumGetFloat8(X))
 #define DatumGetIntervalP(X)  ((Interval *) DatumGetPointer(X))
 
-#define TimestampGetDatum(X)  Float8GetDatum(X)
-#define IntervalPGetDatum(X)  PointerGetDatum(X)
+#define TimestampGetDatum(X) Float8GetDatum(X)
+#define TimestampTzGetDatum(X) Float8GetDatum(X)
+#define IntervalPGetDatum(X) PointerGetDatum(X)
 
-#define PG_GETARG_TIMESTAMP(n) DatumGetTimestamp(PG_GETARG_DATUM(n))
+#define PG_GETARG_TIMESTAMP(n) DatumGetTimestamp(PG_GETARG_DATUM(n))
+#define PG_GETARG_TIMESTAMPTZ(n) DatumGetTimestampTz(PG_GETARG_DATUM(n))
 #define PG_GETARG_INTERVAL_P(n) DatumGetIntervalP(PG_GETARG_DATUM(n))
 
-#define PG_RETURN_TIMESTAMP(x) return TimestampGetDatum(x)
+#define PG_RETURN_TIMESTAMP(x) return TimestampGetDatum(x)
+#define PG_RETURN_TIMESTAMPTZ(x) return TimestampTzGetDatum(x)
 #define PG_RETURN_INTERVAL_P(x) return IntervalPGetDatum(x)
 
 
-#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)
@@ -73,15 +72,6 @@ typedef struct
 #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)   do {j = DT_INVALID;} while (0)
-#ifdef NAN
-#define TIMESTAMP_IS_INVALID(j) (isnan(j))
-#else
-#define TIMESTAMP_IS_INVALID(j) ((j) == DT_INVALID)
-#endif
 
 #define TIMESTAMP_NOBEGIN(j)   do {j = DT_NOBEGIN;} while (0)
 #define TIMESTAMP_IS_NOBEGIN(j) ((j) == DT_NOBEGIN)
@@ -89,24 +79,7 @@ typedef struct
 #define TIMESTAMP_NOEND(j)     do {j = DT_NOEND;} while (0)
 #define TIMESTAMP_IS_NOEND(j)  ((j) == DT_NOEND)
 
-#define TIMESTAMP_CURRENT(j)   do {j = DT_CURRENT;} while (0)
-#define TIMESTAMP_IS_CURRENT(j) ((j) == DT_CURRENT)
-
-#define TIMESTAMP_EPOCH(j)     do {j = DT_EPOCH;} while (0)
-#define TIMESTAMP_IS_EPOCH(j)  ((j) == DT_EPOCH)
-
-#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)        do {(j).time = DT_INVALID;} while (0)
-#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 TIMESTAMP_NOT_FINITE(j) (TIMESTAMP_IS_NOBEGIN(j) || TIMESTAMP_IS_NOEND(j))
 
 #define TIME_PREC_INV 1000000.0
 #define JROUND(j) (rint(((double) (j))*TIME_PREC_INV)/TIME_PREC_INV)
@@ -153,6 +126,14 @@ extern Datum timestamp_part(PG_FUNCTION_ARGS);
 extern Datum interval_part(PG_FUNCTION_ARGS);
 extern Datum timestamp_zone(PG_FUNCTION_ARGS);
 extern Datum timestamp_izone(PG_FUNCTION_ARGS);
+extern Datum timestamp_timestamptz(PG_FUNCTION_ARGS);
+
+extern Datum timestamptz_in(PG_FUNCTION_ARGS);
+extern Datum timestamptz_out(PG_FUNCTION_ARGS);
+extern Datum timestamptz_timestamp(PG_FUNCTION_ARGS);
+extern Datum timestamptz_zone(PG_FUNCTION_ARGS);
+extern Datum timestamptz_izone(PG_FUNCTION_ARGS);
+extern Datum timestamptz_timestamptz(PG_FUNCTION_ARGS);
 
 extern Datum interval_um(PG_FUNCTION_ARGS);
 extern Datum interval_pl(PG_FUNCTION_ARGS);
@@ -169,18 +150,28 @@ extern Datum timestamp_mi_span(PG_FUNCTION_ARGS);
 extern Datum timestamp_age(PG_FUNCTION_ARGS);
 extern Datum overlaps_timestamp(PG_FUNCTION_ARGS);
 
+extern Datum timestamptz_text(PG_FUNCTION_ARGS);
+extern Datum text_timestamptz(PG_FUNCTION_ARGS);
+extern Datum timestamptz_pl_span(PG_FUNCTION_ARGS);
+extern Datum timestamptz_mi_span(PG_FUNCTION_ARGS);
+extern Datum timestamptz_age(PG_FUNCTION_ARGS);
+extern Datum timestamptz_trunc(PG_FUNCTION_ARGS);
+extern Datum timestamptz_part(PG_FUNCTION_ARGS);
+
 extern Datum now(PG_FUNCTION_ARGS);
 
 /* Internal routines (not fmgr-callable) */
 
 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 int timestamp2tm(Timestamp dt, int *tzp, struct tm * tm,
+                        double *fsec, char **tzn);
+extern void    dt2time(Timestamp dt, int *hour, int *min, double *sec);
 
 extern int interval2tm(Interval span, struct tm * tm, float8 *fsec);
 extern int tm2interval(struct tm * tm, double fsec, Interval *span);
 
-extern Timestamp SetTimestamp(Timestamp timestamp);
+extern Timestamp SetEpochTimestamp(void);
+extern void GetEpochTime(struct tm * tm);
 
 extern void isoweek2date(int woy, int *year, int *mon, int *mday);
 extern int date2isoweek(int year, int mon, int mday);