First round of changes for new fmgr interface. fmgr itself and the
authorTom Lane
Sun, 28 May 2000 17:56:29 +0000 (17:56 +0000)
committerTom Lane
Sun, 28 May 2000 17:56:29 +0000 (17:56 +0000)
key call sites are changed, but most called functions are still oldstyle.
An exception is that the PL managers are updated (so, for example, NULL
handling now behaves as expected in plperl and plpgsql functions).
NOTE initdb is forced due to added column in pg_proc.

80 files changed:
src/backend/Makefile
src/backend/access/common/Makefile
src/backend/access/index/indexam.c
src/backend/access/index/istrat.c
src/backend/bootstrap/bootstrap.c
src/backend/catalog/heap.c
src/backend/catalog/index.c
src/backend/catalog/indexing.c
src/backend/catalog/pg_operator.c
src/backend/catalog/pg_proc.c
src/backend/catalog/pg_type.c
src/backend/commands/async.c
src/backend/commands/command.c
src/backend/commands/comment.c
src/backend/commands/copy.c
src/backend/commands/dbcommands.c
src/backend/commands/define.c
src/backend/commands/indexcmds.c
src/backend/commands/proclang.c
src/backend/commands/trigger.c
src/backend/commands/user.c
src/backend/commands/vacuum.c
src/backend/executor/execQual.c
src/backend/executor/execUtils.c
src/backend/executor/functions.c
src/backend/executor/nodeAgg.c
src/backend/libpq/Makefile
src/backend/libpq/be-pqexec.c
src/backend/nodes/freefuncs.c
src/backend/optimizer/path/clausesel.c
src/backend/optimizer/path/indxpath.c
src/backend/optimizer/util/plancat.c
src/backend/parser/analyze.c
src/backend/parser/parse_func.c
src/backend/parser/parse_node.c
src/backend/parser/parse_oper.c
src/backend/port/dynloader/alpha.h
src/backend/port/dynloader/bsdi.h
src/backend/port/dynloader/hpux.c
src/backend/port/dynloader/hpux.h
src/backend/port/dynloader/linux.h
src/backend/port/dynloader/qnx4.c
src/backend/port/dynloader/qnx4.h
src/backend/rewrite/rewriteRemove.c
src/backend/storage/large_object/inv_api.c
src/backend/tcop/Makefile
src/backend/tcop/fastpath.c
src/backend/utils/Gen_fmgrtab.sh.in
src/backend/utils/Makefile
src/backend/utils/adt/int8.c
src/backend/utils/adt/regproc.c
src/backend/utils/adt/selfuncs.c
src/backend/utils/adt/sets.c
src/backend/utils/cache/catcache.c
src/backend/utils/cache/fcache.c
src/backend/utils/cache/relcache.c
src/backend/utils/fmgr/dfmgr.c
src/backend/utils/fmgr/fmgr.c
src/backend/utils/init/postinit.c
src/bin/scripts/createlang.sh
src/include/access/valid.h
src/include/c.h
src/include/catalog/catversion.h
src/include/catalog/pg_attribute.h
src/include/catalog/pg_class.h
src/include/catalog/pg_language.h
src/include/catalog/pg_proc.h
src/include/executor/functions.h
src/include/fmgr.h [new file with mode: 0644]
src/include/postgres.h
src/include/utils/dynamic_loader.h
src/include/utils/fcache.h
src/include/utils/fmgrtab.h
src/include/utils/int8.h
src/interfaces/libpq/Makefile.in
src/pl/plperl/plperl.c
src/pl/plpgsql/src/pl_exec.c
src/pl/plpgsql/src/pl_handler.c
src/pl/plpgsql/src/plpgsql.h
src/pl/tcl/pltcl.c

index ae90a17b0427924ce738624daf59e02f095a9656..6af51106bd399d6002ceb0ec3bcaa3e0d90b2ffd 100644 (file)
@@ -34,7 +34,7 @@
 #
 #
 # IDENTIFICATION
-#    $Header: /cvsroot/pgsql/src/backend/Makefile,v 1.47 2000/05/11 17:46:28 momjian Exp $
+#    $Header: /cvsroot/pgsql/src/backend/Makefile,v 1.48 2000/05/28 17:55:51 tgl Exp $
 #
 #-------------------------------------------------------------------------
 
@@ -79,7 +79,7 @@ all: postgres $(POSTGRES_IMP) global1.bki.source local1_template1.bki.source \
                global1.description local1_template1.description
 
 ifneq ($(PORTNAME), win)
-postgres: fmgr.h $(OBJS) $(VERSIONOBJ)
+postgres: utils/fmgroids.h $(OBJS) $(VERSIONOBJ)
    $(CC) $(CFLAGS) -o postgres $(OBJS) $(OBJS1) $(VERSIONOBJ) $(LDFLAGS)
 else
 postgres: $(DLLOBJS) $(SRCDIR)/utils/dllinit.o postgres.def libpostgres.a
@@ -126,15 +126,12 @@ parse.h: parser/parse.h
 parser/parse.h:
    $(MAKE) -C parser parse.h
 
-fmgr.h: utils/fmgr.h
-   cp utils/fmgr.h .
-
-utils/fmgr.h:
-   $(MAKE) -C utils fmgr.h
+utils/fmgroids.h:
+   $(MAKE) -C utils fmgroids.h
 
 #############################################################################
 clean:
-   rm -f postgres$(X) $(POSTGRES_IMP) fmgr.h parse.h \
+   rm -f postgres$(X) $(POSTGRES_IMP) parse.h \
        global1.bki.source local1_template1.bki.source \
        global1.description local1_template1.description
 ifeq ($(PORTNAME), win)
@@ -205,7 +202,7 @@ install-templates: $(TEMPLATEDIR) \
    $(INSTALL) $(INSTLOPTS) pg_options.sample \
      $(TEMPLATEDIR)/pg_options.sample
 
-install-headers: fmgr.h $(SRCDIR)/include/config.h
+install-headers: utils/fmgroids.h $(SRCDIR)/include/config.h
    -@if [ ! -d $(HEADERDIR) ]; then mkdir $(HEADERDIR); fi
    -@if [ ! -d $(HEADERDIR)/port ]; then mkdir $(HEADERDIR)/port; fi
    -@if [ ! -d $(HEADERDIR)/port/$(PORTNAME) ]; \
@@ -222,8 +219,6 @@ install-headers: fmgr.h $(SRCDIR)/include/config.h
        then mkdir $(HEADERDIR)/executor; fi
    -@if [ ! -d $(HEADERDIR)/commands ]; \
        then mkdir $(HEADERDIR)/commands; fi
-   $(INSTALL) $(INSTLOPTS) fmgr.h \
-          $(HEADERDIR)/fmgr.h
    $(INSTALL) $(INSTLOPTS) $(SRCDIR)/include/os.h \
           $(HEADERDIR)/os.h
    $(INSTALL) $(INSTLOPTS) $(SRCDIR)/include/config.h \
@@ -244,6 +239,8 @@ install-headers: fmgr.h $(SRCDIR)/include/config.h
           $(HEADERDIR)/utils/geo_decls.h
    $(INSTALL) $(INSTLOPTS) $(SRCDIR)/include/utils/elog.h \
           $(HEADERDIR)/utils/elog.h
+   $(INSTALL) $(INSTLOPTS) utils/fmgroids.h \
+          $(HEADERDIR)/utils/fmgroids.h
    $(INSTALL) $(INSTLOPTS) $(SRCDIR)/include/utils/palloc.h \
           $(HEADERDIR)/utils/palloc.h
    $(INSTALL) $(INSTLOPTS) $(SRCDIR)/include/utils/mcxt.h \
index 594ed50a59d59302293fa7cbd9f0955d9ad8917e..847b06b1d21c84a481ba5995f762b7a0897b1533 100644 (file)
@@ -4,7 +4,7 @@
 #    Makefile for access/common
 #
 # IDENTIFICATION
-#    $Header: /cvsroot/pgsql/src/backend/access/common/Makefile,v 1.16 2000/01/19 02:58:50 petere Exp $
+#    $Header: /cvsroot/pgsql/src/backend/access/common/Makefile,v 1.17 2000/05/28 17:55:52 tgl Exp $
 #
 #-------------------------------------------------------------------------
 
@@ -21,12 +21,7 @@ all: SUBSYS.o
 SUBSYS.o: $(OBJS)
    $(LD) $(LDREL) $(LDOUT) SUBSYS.o $(OBJS)
 
-heaptuple.o heapvalid.o tupdesc.o: ../../fmgr.h
-
-../../fmgr.h:
-   $(MAKE) -C ../.. fmgr.h
-
-dep depend: ../../fmgr.h
+dep depend:
    $(CC) -MM $(CFLAGS) *.c >depend
 
 clean: 
index e0672667c7fbba99d2a58950f13719351e5810f9..43d8a3850f54631c73a8fdc1a0be78f2a8568f74 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *   $Header: /cvsroot/pgsql/src/backend/access/index/indexam.c,v 1.42 2000/04/12 17:14:47 momjian Exp $
+ *   $Header: /cvsroot/pgsql/src/backend/access/index/indexam.c,v 1.43 2000/05/28 17:55:52 tgl Exp $
  *
  * INTERFACE ROUTINES
  *     index_open      - open an index relation by relationId
@@ -418,28 +418,43 @@ GetIndexValue(HeapTuple tuple,
              bool *attNull)
 {
    Datum       returnVal;
-   bool        isNull = FALSE;
 
    if (PointerIsValid(fInfo) && FIgetProcOid(fInfo) != InvalidOid)
    {
-       int         i;
-       Datum      *attData = (Datum *) palloc(FIgetnArgs(fInfo) * sizeof(Datum));
+       FmgrInfo                flinfo;
+       FunctionCallInfoData    fcinfo;
+       int                     i;
+       bool                    anynull = false;
+
+       /*
+        * XXX ought to store lookup info in FuncIndexInfo so it need not
+        * be repeated on each call?
+        */
+       fmgr_info(FIgetProcOid(fInfo), &flinfo);
+
+       MemSet(&fcinfo, 0, sizeof(fcinfo));
+       fcinfo.flinfo = &flinfo;
+       fcinfo.nargs = FIgetnArgs(fInfo);
 
        for (i = 0; i < FIgetnArgs(fInfo); i++)
        {
-           attData[i] = heap_getattr(tuple,
-                                     attrNums[i],
-                                     hTupDesc,
-                                     attNull);
-           if (*attNull)
-               isNull = TRUE;
+           fcinfo.arg[i] = heap_getattr(tuple,
+                                        attrNums[i],
+                                        hTupDesc,
+                                        &fcinfo.argnull[i]);
+           anynull |= fcinfo.argnull[i];
+       }
+       if (flinfo.fn_strict && anynull)
+       {
+           /* force a null result for strict function */
+           returnVal = (Datum) 0;
+           *attNull = true;
+       }
+       else
+       {
+           returnVal = FunctionCallInvoke(&fcinfo);
+           *attNull = fcinfo.isnull;
        }
-       returnVal = (Datum) fmgr_array_args(FIgetProcOid(fInfo),
-                                           FIgetnArgs(fInfo),
-                                           (char **) attData,
-                                           &isNull);
-       pfree(attData);
-       *attNull = isNull;
    }
    else
        returnVal = heap_getattr(tuple, attrNums[attOff], hTupDesc, attNull);
index b0864e505fac99084e40a3fd33304d7b97044854..5116b622dd1741847eb496782c54e6c35e574ac6 100644 (file)
@@ -9,7 +9,7 @@
  *
  *
  * IDENTIFICATION
- *   $Header: /cvsroot/pgsql/src/backend/access/index/Attic/istrat.c,v 1.42 2000/04/12 17:14:47 momjian Exp $
+ *   $Header: /cvsroot/pgsql/src/backend/access/index/Attic/istrat.c,v 1.43 2000/05/28 17:55:52 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -24,6 +24,7 @@
 #include "catalog/pg_index.h"
 #include "catalog/pg_operator.h"
 #include "miscadmin.h"
+#include "utils/fmgroids.h"
 #include "utils/syscache.h"
 
 #ifdef USE_ASSERT_CHECKING
index a12bca949327c59397eea46ebc87b76d16b444bd..beb4b079045f4ca7c14b2107309693df87e95e60 100644 (file)
@@ -8,7 +8,7 @@
  * Portions Copyright (c) 1994, Regents of the University of California
  *
  * IDENTIFICATION
- *   $Header: /cvsroot/pgsql/src/backend/bootstrap/bootstrap.c,v 1.81 2000/04/12 17:14:54 momjian Exp $
+ *   $Header: /cvsroot/pgsql/src/backend/bootstrap/bootstrap.c,v 1.82 2000/05/28 17:55:53 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -34,6 +34,7 @@
 #include "miscadmin.h"
 #include "tcop/tcopprot.h"
 #include "utils/builtins.h"
+#include "utils/fmgroids.h"
 #include "utils/lsyscache.h"
 #include "utils/portal.h"
 
index 762bff810d0b25f46538ad6dc57cdd1abfaadf4c..5c0eff6e7c743f941085c1bc0de4463795e273b0 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *   $Header: /cvsroot/pgsql/src/backend/catalog/heap.c,v 1.128 2000/05/25 21:25:32 tgl Exp $
+ *   $Header: /cvsroot/pgsql/src/backend/catalog/heap.c,v 1.129 2000/05/28 17:55:54 tgl Exp $
  *
  *
  * INTERFACE ROUTINES
@@ -63,6 +63,7 @@
 #include "tcop/tcopprot.h"
 #include "utils/builtins.h"
 #include "utils/catcache.h"
+#include "utils/fmgroids.h"
 #include "utils/portal.h"
 #include "utils/relcache.h"
 #include "utils/syscache.h"
@@ -1148,7 +1149,7 @@ RelationTruncateIndexes(Relation heapRelation)
        /* If a valid where predicate, compute predicate Node */
        if (VARSIZE(&index->indpred) != 0)
        {
-           predString = fmgr(F_TEXTOUT, &index->indpred);
+           predString = textout(&index->indpred);
            oldPred = stringToNode(predString);
            pfree(predString);
        }
index cfc5805b7c52c7b249048ad2e28b6d1ad9981c15..3ef1931e593bfa7098b067997fa27373ad0acef0 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *   $Header: /cvsroot/pgsql/src/backend/catalog/index.c,v 1.110 2000/05/20 23:11:28 tgl Exp $
+ *   $Header: /cvsroot/pgsql/src/backend/catalog/index.c,v 1.111 2000/05/28 17:55:54 tgl Exp $
  *
  *
  * INTERFACE ROUTINES
@@ -42,6 +42,7 @@
 #include "storage/smgr.h"
 #include "utils/builtins.h"
 #include "utils/catcache.h"
+#include "utils/fmgroids.h"
 #include "utils/relcache.h"
 #include "utils/syscache.h"
 #include "utils/temprel.h"
@@ -688,11 +689,11 @@ UpdateIndexRelation(Oid indexoid,
    if (predicate != NULL)
    {
        predString = nodeToString(predicate);
-       predText = (text *) fmgr(F_TEXTIN, predString);
+       predText = textin(predString);
        pfree(predString);
    }
    else
-       predText = (text *) fmgr(F_TEXTIN, "");
+       predText = textin("");
 
    predLen = VARSIZE(predText);
    itupLen = predLen + sizeof(FormData_pg_index);
@@ -832,11 +833,11 @@ UpdateIndexPredicate(Oid indexoid, Node *oldPred, Node *predicate)
    if (newPred != NULL)
    {
        predString = nodeToString(newPred);
-       predText = (text *) fmgr(F_TEXTIN, predString);
+       predText = textin(predString);
        pfree(predString);
    }
    else
-       predText = (text *) fmgr(F_TEXTIN, "");
+       predText = textin("");
 
    /* open the index system catalog relation */
    pg_index = heap_openr(IndexRelationName, RowExclusiveLock);
@@ -2109,7 +2110,7 @@ reindex_index(Oid indexId, bool force)
    /* If a valid where predicate, compute predicate Node */
    if (VARSIZE(&index->indpred) != 0)
    {
-       predString = fmgr(F_TEXTOUT, &index->indpred);
+       predString = textout(&index->indpred);
        oldPred = stringToNode(predString);
        pfree(predString);
    }
index eb3d6debcc585e2452abf7324b804f8b8bf4b950..79a987ba59c4ad4abd4d39fc110c316a91d27f47 100644 (file)
@@ -9,7 +9,7 @@
  *
  *
  * IDENTIFICATION
- *   $Header: /cvsroot/pgsql/src/backend/catalog/indexing.c,v 1.60 2000/04/12 17:14:56 momjian Exp $
+ *   $Header: /cvsroot/pgsql/src/backend/catalog/indexing.c,v 1.61 2000/05/28 17:55:54 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -24,6 +24,7 @@
 #include "catalog/indexing.h"
 #include "catalog/pg_index.h"
 #include "miscadmin.h"
+#include "utils/fmgroids.h"
 #include "utils/syscache.h"
 
 /*
index b0508d259a1523f6f622dcffa02be2b26bb4c989..5796b11b988ea2068681f5cace2e54f8167a60f1 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *   $Header: /cvsroot/pgsql/src/backend/catalog/pg_operator.c,v 1.49 2000/01/26 05:56:10 momjian Exp $
+ *   $Header: /cvsroot/pgsql/src/backend/catalog/pg_operator.c,v 1.50 2000/05/28 17:55:54 tgl Exp $
  *
  * NOTES
  *   these routines moved here from commands/define.c and somewhat cleaned up.
@@ -26,6 +26,7 @@
 #include "miscadmin.h"
 #include "parser/parse_func.h"
 #include "utils/builtins.h"
+#include "utils/fmgroids.h"
 #include "utils/syscache.h"
 
 
index aa23a3be8c2d9718541d050457d1d63ec402ad6c..6ddc343aaa60b417957b52042ab47b74e59d9200 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *   $Header: /cvsroot/pgsql/src/backend/catalog/pg_proc.c,v 1.42 2000/04/12 17:14:56 momjian Exp $
+ *   $Header: /cvsroot/pgsql/src/backend/catalog/pg_proc.c,v 1.43 2000/05/28 17:55:54 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -17,6 +17,7 @@
 #include "access/heapam.h"
 #include "catalog/catname.h"
 #include "catalog/indexing.h"
+#include "catalog/pg_language.h"
 #include "catalog/pg_proc.h"
 #include "catalog/pg_type.h"
 #include "miscadmin.h"
@@ -24,7 +25,6 @@
 #include "parser/parse_type.h"
 #include "tcop/tcopprot.h"
 #include "utils/builtins.h"
-#include "utils/fmgrtab.h"
 #include "utils/lsyscache.h"
 #include "utils/sets.h"
 #include "utils/syscache.h"
@@ -41,8 +41,9 @@ ProcedureCreate(char *procedureName,
                char *languageName,
                char *prosrc,
                char *probin,
-               bool canCache,
                bool trusted,
+               bool canCache,
+               bool isStrict,
                int32 byte_pct,
                int32 perbyte_cpu,
                int32 percall_cpu,
@@ -74,6 +75,15 @@ ProcedureCreate(char *procedureName,
    Assert(PointerIsValid(prosrc));
    Assert(PointerIsValid(probin));
 
+   tup = SearchSysCacheTuple(LANGNAME,
+                             PointerGetDatum(languageName),
+                             0, 0, 0);
+
+   if (!HeapTupleIsValid(tup))
+       elog(ERROR, "ProcedureCreate: no such language '%s'", languageName);
+
+   languageObjectId = tup->t_data->t_oid;
+
    parameterCount = 0;
    MemSet(typev, 0, FUNC_MAX_ARGS * sizeof(Oid));
    foreach(x, argList)
@@ -86,7 +96,7 @@ ProcedureCreate(char *procedureName,
 
        if (strcmp(strVal(t), "opaque") == 0)
        {
-           if (strcmp(languageName, "sql") == 0)
+           if (languageObjectId == SQLlanguageId)
                elog(ERROR, "ProcedureCreate: sql functions cannot take type \"opaque\"");
            toid = 0;
        }
@@ -120,7 +130,7 @@ ProcedureCreate(char *procedureName,
        elog(ERROR, "ProcedureCreate: procedure %s already exists with same arguments",
             procedureName);
 
-   if (!strcmp(languageName, "sql"))
+   if (languageObjectId == SQLlanguageId)
    {
 
        /*
@@ -129,7 +139,7 @@ ProcedureCreate(char *procedureName,
         * matches a function already in pg_proc.  If so just return the
         * OID of the existing set.
         */
-       if (!strcmp(procedureName, GENERICSETNAME))
+       if (strcmp(procedureName, GENERICSETNAME) == 0)
        {
 #ifdef SETS_FIXED
            /* ----------
@@ -138,7 +148,7 @@ ProcedureCreate(char *procedureName,
             * have been removed. Instead a sequential heap scan
             * or something better must get implemented. The reason
             * for removing is that nbtree index crashes if sources
-            * exceed 2K what's likely for procedural languages.
+            * exceed 2K --- what's likely for procedural languages.
             *
             * 1999/09/30 Jan
             * ----------
@@ -158,18 +168,9 @@ ProcedureCreate(char *procedureName,
        }
    }
 
-   tup = SearchSysCacheTuple(LANGNAME,
-                             PointerGetDatum(languageName),
-                             0, 0, 0);
-
-   if (!HeapTupleIsValid(tup))
-       elog(ERROR, "ProcedureCreate: no such language %s", languageName);
-
-   languageObjectId = tup->t_data->t_oid;
-
    if (strcmp(returnTypeName, "opaque") == 0)
    {
-       if (strcmp(languageName, "sql") == 0)
+       if (languageObjectId == SQLlanguageId)
            elog(ERROR, "ProcedureCreate: sql functions cannot return type \"opaque\"");
        typeObjectId = 0;
    }
@@ -181,16 +182,10 @@ ProcedureCreate(char *procedureName,
        {
            elog(NOTICE, "ProcedureCreate: type '%s' is not yet defined",
                 returnTypeName);
-#ifdef NOT_USED
-           elog(NOTICE, "ProcedureCreate: creating a shell for type '%s'",
-                returnTypeName);
-#endif
            typeObjectId = TypeShellMake(returnTypeName);
            if (!OidIsValid(typeObjectId))
-           {
                elog(ERROR, "ProcedureCreate: could not create type '%s'",
                     returnTypeName);
-           }
        }
        else if (!defined)
        {
@@ -219,7 +214,7 @@ ProcedureCreate(char *procedureName,
     * procedure's text in the prosrc attribute.
     */
 
-   if (strcmp(languageName, "sql") == 0)
+   if (languageObjectId == SQLlanguageId)
    {
        querytree_list = pg_parse_and_rewrite(prosrc, typev, parameterCount,
                                              FALSE);
@@ -237,16 +232,50 @@ ProcedureCreate(char *procedureName,
     * FUNCTION xyz AS '' LANGUAGE 'internal'.  To preserve some modicum
     * of backwards compatibility, accept an empty 'prosrc' value as
     * meaning the supplied SQL function name.
+    *
+    * XXX: we could treat "internal" and "newinternal" language specs
+    * as equivalent, and take the actual language ID from the table of
+    * known builtin functions.  Is that a better idea than making the
+    * user specify the right thing?  Not sure.
     */
 
-   if (strcmp(languageName, "internal") == 0)
+   if (languageObjectId == INTERNALlanguageId ||
+       languageObjectId == NEWINTERNALlanguageId)
    {
+       Oid         actualLangID;
+
        if (strlen(prosrc) == 0)
            prosrc = procedureName;
-       if (fmgr_lookupByName(prosrc) == (func_ptr) NULL)
+       actualLangID = fmgr_internal_language(prosrc);
+       if (actualLangID == InvalidOid)
            elog(ERROR,
-           "ProcedureCreate: there is no builtin function named \"%s\"",
+                "ProcedureCreate: there is no builtin function named \"%s\"",
                 prosrc);
+       if (actualLangID != languageObjectId)
+           elog(ERROR,
+                "ProcedureCreate: \"%s\" is not %s internal function",
+                prosrc,
+                ((languageObjectId == INTERNALlanguageId) ?
+                 "an old-style" : "a new-style"));
+   }
+
+   /*
+    * If this is a dynamically loadable procedure, make sure that the
+    * library file exists, is loadable, and contains the specified link
+    * symbol.
+    *
+    * We used to perform these checks only when the function was first
+    * called, but it seems friendlier to verify the library's validity
+    * at CREATE FUNCTION time.
+    */
+
+   if (languageObjectId == ClanguageId ||
+       languageObjectId == NEWClanguageId)
+   {
+       /* If link symbol is specified as "-", substitute procedure name */
+       if (strcmp(prosrc, "-") == 0)
+           prosrc = procedureName;
+       (void) load_external_function(probin, prosrc);
    }
 
    /*
@@ -265,9 +294,10 @@ ProcedureCreate(char *procedureName,
    values[i++] = Int32GetDatum(GetUserId());
    values[i++] = ObjectIdGetDatum(languageObjectId);
    /* XXX isinherited is always false for now */
-   values[i++] = Int8GetDatum((bool) 0);
+   values[i++] = Int8GetDatum((bool) false);
    values[i++] = Int8GetDatum(trusted);
    values[i++] = Int8GetDatum(canCache);
+   values[i++] = Int8GetDatum(isStrict);
    values[i++] = UInt16GetDatum(parameterCount);
    values[i++] = Int8GetDatum(returnsSet);
    values[i++] = ObjectIdGetDatum(typeObjectId);
@@ -276,8 +306,8 @@ ProcedureCreate(char *procedureName,
    values[i++] = Int32GetDatum(perbyte_cpu);   /* properbyte_cpu */
    values[i++] = Int32GetDatum(percall_cpu);   /* propercall_cpu */
    values[i++] = Int32GetDatum(outin_ratio);   /* prooutin_ratio */
-   values[i++] = (Datum) fmgr(F_TEXTIN, prosrc);       /* prosrc */
-   values[i++] = (Datum) fmgr(F_TEXTIN, probin);       /* probin */
+   values[i++] = (Datum) textin(prosrc);       /* prosrc */
+   values[i++] = (Datum) textin(probin);       /* probin */
 
    rel = heap_openr(ProcedureRelationName, RowExclusiveLock);
 
index 4c3120c40f4015b02de9a7602eeb159573d9b024..9386079997e5356b5508a2c7e5024d58785388d3 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *   $Header: /cvsroot/pgsql/src/backend/catalog/pg_type.c,v 1.50 2000/04/12 17:14:56 momjian Exp $
+ *   $Header: /cvsroot/pgsql/src/backend/catalog/pg_type.c,v 1.51 2000/05/28 17:55:54 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -21,6 +21,7 @@
 #include "miscadmin.h"
 #include "parser/parse_func.h"
 #include "utils/builtins.h"
+#include "utils/fmgroids.h"
 #include "utils/syscache.h"
 
 
@@ -190,7 +191,7 @@ TypeShellMakeWithOpenRelation(Relation pg_type_desc, char *typeName)
    /*
     * ... and fill typdefault with a bogus value
     */
-   values[i++] = (Datum) fmgr(F_TEXTIN, typeName);     /* 15 */
+   values[i++] = (Datum) textin(typeName);     /* 15 */
 
    /* ----------------
     *  create a new type tuple with FormHeapTuple
@@ -449,10 +450,9 @@ TypeCreate(char *typeName,
     *  initialize the default value for this type.
     * ----------------
     */
-   values[i] = (Datum) fmgr(F_TEXTIN,  /* 16 */
-                            PointerIsValid(defaultTypeValue)
-                            ? defaultTypeValue : "-"); /* XXX default
-                                                        * typdefault */
+   values[i] = (Datum) textin(PointerIsValid(defaultTypeValue) /* 16 */
+                              ? defaultTypeValue : "-"); /* XXX default
+                                                          * typdefault */
 
    /* ----------------
     *  open pg_type and begin a scan for the type name.
index c045f09b83d66874c9cee35a3f67effe38983f77..8225f3a7ca4295b14b6b916b5c69f9433cb5dd3d 100644 (file)
@@ -7,7 +7,7 @@
  * Portions Copyright (c) 1994, Regents of the University of California
  *
  * IDENTIFICATION
- *   $Header: /cvsroot/pgsql/src/backend/commands/async.c,v 1.60 2000/05/14 03:18:35 momjian Exp $
+ *   $Header: /cvsroot/pgsql/src/backend/commands/async.c,v 1.61 2000/05/28 17:55:54 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -87,6 +87,7 @@
 #include "libpq/libpq.h"
 #include "libpq/pqformat.h"
 #include "miscadmin.h"
+#include "utils/fmgroids.h"
 #include "utils/ps_status.h"
 #include "utils/syscache.h"
 #include "utils/trace.h"
index 2b9f6a257b12f87bc800374ee0a0a8dc80ea6c29..4fb184b7f6d85273e449dac21bc6dde424387055 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *   $Header: /cvsroot/pgsql/src/backend/commands/Attic/command.c,v 1.71 2000/04/12 17:14:57 momjian Exp $
+ *   $Header: /cvsroot/pgsql/src/backend/commands/Attic/command.c,v 1.72 2000/05/28 17:55:54 tgl Exp $
  *
  * NOTES
  *   The PortalExecutorHeapMemory crap needs to be eliminated
@@ -40,6 +40,7 @@
 #include "optimizer/prep.h"
 #include "utils/acl.h"
 #include "utils/builtins.h"
+#include "utils/fmgroids.h"
 #include "utils/syscache.h"
 #include "utils/temprel.h"
 #include "commands/trigger.h"
@@ -614,12 +615,15 @@ AlterTableAlterColumn(const char *relationName,
        HeapTuple   tuple;
 
        attr_rel = heap_openr(AttributeRelationName, AccessExclusiveLock);
-       ScanKeyEntryInitialize(&scankeys[0], 0x0, Anum_pg_attribute_attrelid, F_OIDEQ,
+       ScanKeyEntryInitialize(&scankeys[0], 0x0,
+                              Anum_pg_attribute_attrelid, F_OIDEQ,
                               ObjectIdGetDatum(myrelid));
-       ScanKeyEntryInitialize(&scankeys[1], 0x0, Anum_pg_attribute_attnum, F_INT2EQ,
+       ScanKeyEntryInitialize(&scankeys[1], 0x0,
+                              Anum_pg_attribute_attnum, F_INT2EQ,
                               Int16GetDatum(attnum));
-       ScanKeyEntryInitialize(&scankeys[2], 0x0, Anum_pg_attribute_atthasdef, F_BOOLEQ,
-                              TRUE);
+       ScanKeyEntryInitialize(&scankeys[2], 0x0,
+                              Anum_pg_attribute_atthasdef, F_BOOLEQ,
+                              Int32GetDatum(TRUE));
 
        scan = heap_beginscan(attr_rel, false, SnapshotNow, 3, scankeys);
        AssertState(scan != NULL);
@@ -661,9 +665,11 @@ drop_default(Oid relid, int16 attnum)
    HeapTuple   tuple;
 
    attrdef_rel = heap_openr(AttrDefaultRelationName, AccessExclusiveLock);
-   ScanKeyEntryInitialize(&scankeys[0], 0x0, Anum_pg_attrdef_adrelid, F_OIDEQ,
+   ScanKeyEntryInitialize(&scankeys[0], 0x0,
+                          Anum_pg_attrdef_adrelid, F_OIDEQ,
                           ObjectIdGetDatum(relid));
-   ScanKeyEntryInitialize(&scankeys[1], 0x0, Anum_pg_attrdef_adnum, F_INT2EQ,
+   ScanKeyEntryInitialize(&scankeys[1], 0x0,
+                          Anum_pg_attrdef_adnum, F_INT2EQ,
                           Int16GetDatum(attnum));
 
    scan = heap_beginscan(attrdef_rel, false, SnapshotNow, 2, scankeys);
index 3fe7b6f63470b74fdff6a577dbb52c874177073c..f33189d3ee94106638210bc64585ff5e63ee7676 100644 (file)
 #include "catalog/pg_type.h"
 #include "commands/comment.h"
 #include "miscadmin.h"
+#include "parser/parse.h"
 #include "rewrite/rewriteRemove.h"
 #include "utils/acl.h"
+#include "utils/fmgroids.h"
 #include "utils/syscache.h"
 
-#include "../backend/parser/parse.h"
 
 /*------------------------------------------------------------------
  * Static Function Prototypes --
@@ -153,7 +154,7 @@ CreateComments(Oid oid, char *comment)
        }
        i = 0;
        values[i++] = ObjectIdGetDatum(oid);
-       values[i++] = (Datum) fmgr(F_TEXTIN, comment);
+       values[i++] = (Datum) textin(comment);
    }
 
    /*** Now, open pg_description and attempt to find the old tuple ***/
index 65dff8ed44283de0160e01698dcae2eb35c8fdde..4285663a162fc394c2c66606f409e2c9932c90f5 100644 (file)
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *   $Header: /cvsroot/pgsql/src/backend/commands/copy.c,v 1.106 2000/05/18 01:52:45 tgl Exp $
+ *   $Header: /cvsroot/pgsql/src/backend/commands/copy.c,v 1.107 2000/05/28 17:55:54 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -680,7 +680,7 @@ CopyFrom(Relation rel, bool binary, bool oids, FILE *fp, char *delim, char *null
                indexNatts[i] = natts;
                if (VARSIZE(&pgIndexP[i]->indpred) != 0)
                {
-                   predString = fmgr(F_TEXTOUT, &pgIndexP[i]->indpred);
+                   predString = textout(&pgIndexP[i]->indpred);
                    indexPred[i] = stringToNode(predString);
                    pfree(predString);
                    /* make dummy ExprContext for use by ExecQual */
index 4458edafaf27de53925b7708026852fbcac3613b..b08f6545044dbd679a04d241af17d6ea6fd455f7 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *   $Header: /cvsroot/pgsql/src/backend/commands/dbcommands.c,v 1.54 2000/05/25 06:53:43 ishii Exp $
+ *   $Header: /cvsroot/pgsql/src/backend/commands/dbcommands.c,v 1.55 2000/05/28 17:55:55 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -37,6 +37,7 @@
 #include "storage/fd.h"            /* for closeAllVfds */
 #include "storage/sinval.h"        /* for DatabaseHasActiveBackends */
 #include "utils/builtins.h"
+#include "utils/fmgroids.h"
 #include "utils/elog.h"
 #include "utils/palloc.h"
 #include "utils/rel.h"
index 5bc75faaec7c92a1bd7d431f7fa0efc348ecf3e1..da8728721756d8728cd5b864880b7f5d810ad2aa 100644 (file)
@@ -10,7 +10,7 @@
  *
  *
  * IDENTIFICATION
- *   $Header: /cvsroot/pgsql/src/backend/commands/define.c,v 1.42 2000/05/12 18:51:59 momjian Exp $
+ *   $Header: /cvsroot/pgsql/src/backend/commands/define.c,v 1.43 2000/05/28 17:55:55 tgl Exp $
  *
  * DESCRIPTION
  *   The "DefineFoo" routines take the parse tree and pick out the
@@ -35,8 +35,6 @@
  */
 #include 
 #include 
-#include 
-
 
 #include "postgres.h"
 
@@ -66,18 +64,20 @@ static void
 case_translate_language_name(const char *input, char *output)
 {
 /*-------------------------------------------------------------------------
-  Translate the input language name to lower case, except if it's C,
-  translate to upper case.
+  Translate the input language name to lower case, except if it's "C",
+  translate to upper case, or "newC", translate to that spelling.
 --------------------------------------------------------------------------*/
    int         i;
 
-   for (i = 0; i < NAMEDATALEN && input[i]; ++i)
+   for (i = 0; i < NAMEDATALEN-1 && input[i]; ++i)
        output[i] = tolower(input[i]);
 
    output[i] = '\0';
 
    if (strcmp(output, "c") == 0)
        output[0] = 'C';
+   else if (strcmp(output, "newc") == 0)
+       output[3] = 'C';
 }
 
 
@@ -108,9 +108,10 @@ compute_return_type(const Node *returnType,
 
 
 static void
-compute_full_attributes(List *parameters, int32 *byte_pct_p,
-                       int32 *perbyte_cpu_p, int32 *percall_cpu_p,
-                       int32 *outin_ratio_p, bool *canCache_p)
+compute_full_attributes(List *parameters,
+                       int32 *byte_pct_p, int32 *perbyte_cpu_p,
+                       int32 *percall_cpu_p, int32 *outin_ratio_p,
+                       bool *canCache_p, bool *isStrict_p)
 {
 /*--------------------------------------------------------------------------
   Interpret the parameters *parameters and return their contents as
@@ -119,14 +120,20 @@ compute_full_attributes(List *parameters, int32 *byte_pct_p,
   These parameters supply optional information about a function.
   All have defaults if not specified.
 
-  Note: as of version 6.6, canCache is used (if set, the optimizer's
-  constant-folder is allowed to pre-evaluate the function if all its
-  inputs are constant).  The other four are not used.  They used to be
+  Note: currently, only two of these parameters actually do anything:
+
+  * canCache means the optimizer's constant-folder is allowed to
+    pre-evaluate the function when all its inputs are constants.
+
+  * isStrict means the function should not be called when any NULL
+    inputs are present; instead a NULL result value should be assumed.
+
+  The other four parameters are not used anywhere.  They used to be
   used in the "expensive functions" optimizer, but that's been dead code
   for a long time.
 
-  Since canCache is useful for any function, we now allow attributes to be
-  supplied for all functions regardless of language.
+  Since canCache and isStrict are useful for any function, we now allow
+  attributes to be supplied for all functions regardless of language.
 ---------------------------------------------------------------------------*/
    List       *pl;
 
@@ -136,6 +143,7 @@ compute_full_attributes(List *parameters, int32 *byte_pct_p,
    *percall_cpu_p = PERCALL_CPU;
    *outin_ratio_p = OUTIN_RATIO;
    *canCache_p = false;
+   *isStrict_p = false;
 
    foreach(pl, parameters)
    {
@@ -143,6 +151,8 @@ compute_full_attributes(List *parameters, int32 *byte_pct_p,
 
        if (strcasecmp(param->defname, "iscachable") == 0)
            *canCache_p = true;
+       else if (strcasecmp(param->defname, "isstrict") == 0)
+           *isStrict_p = true;
        else if (strcasecmp(param->defname, "trusted") == 0)
        {
 
@@ -182,24 +192,17 @@ static void
 interpret_AS_clause(const char *languageName, const List *as,
                    char **prosrc_str_p, char **probin_str_p)
 {
-   struct stat stat_buf;
-
    Assert(as != NIL);
 
-   if (strcmp(languageName, "C") == 0)
+   if (strcmp(languageName, "C") == 0 ||
+       strcmp(languageName, "newC") == 0)
    {
 
        /*
         * For "C" language, store the file name in probin and, when
-        * given, the link symbol name in prosrc. But first, stat the
-        * file to make sure it's there!
+        * given, the link symbol name in prosrc.
         */
-       
-       if (stat(strVal(lfirst(as)), &stat_buf) == -1)
-               elog(ERROR, "stat failed on file '%s': %m", strVal(lfirst(as)));
-
        *probin_str_p = strVal(lfirst(as));
-
        if (lnext(as) == NULL)
            *prosrc_str_p = "-";
        else
@@ -239,8 +242,8 @@ CreateFunction(ProcedureStmt *stmt, CommandDest dest)
    char        languageName[NAMEDATALEN];
 
    /*
-    * name of language of function, with case adjusted: "C", "internal",
-    * or "SQL"
+    * name of language of function, with case adjusted: "C", "newC",
+    * "internal", "newinternal", "sql", etc.
     */
 
    bool        returnsSet;
@@ -257,19 +260,21 @@ CreateFunction(ProcedureStmt *stmt, CommandDest dest)
                perbyte_cpu,
                percall_cpu,
                outin_ratio;
-   bool        canCache;
-
+   bool        canCache,
+               isStrict;
 
    case_translate_language_name(stmt->language, languageName);
 
    if (strcmp(languageName, "C") == 0 ||
-       strcmp(languageName, "internal") == 0)
+       strcmp(languageName, "newC") == 0 ||
+       strcmp(languageName, "internal") == 0 ||
+       strcmp(languageName, "newinternal") == 0)
    {
        if (!superuser())
            elog(ERROR,
                 "Only users with Postgres superuser privilege are "
-                "permitted to create a function "
-             "in the '%s' language.  Others may use the 'sql' language "
+                "permitted to create a function in the '%s' language.\n\t"
+                "Others may use the 'sql' language "
                 "or the created procedural languages.",
                 languageName);
    }
@@ -288,28 +293,23 @@ CreateFunction(ProcedureStmt *stmt, CommandDest dest)
                                            0, 0, 0);
 
        if (!HeapTupleIsValid(languageTuple))
-       {
-
            elog(ERROR,
                 "Unrecognized language specified in a CREATE FUNCTION: "
-                "'%s'.  Recognized languages are sql, C, internal "
-                "and the created procedural languages.",
+                "'%s'.\n\tRecognized languages are sql, C, newC, "
+                "internal, newinternal, and created procedural languages.",
                 languageName);
-       }
 
        /* Check that this language is a PL */
        languageStruct = (Form_pg_language) GETSTRUCT(languageTuple);
        if (!(languageStruct->lanispl))
-       {
            elog(ERROR,
                 "Language '%s' isn't defined as PL", languageName);
-       }
 
        /*
         * Functions in untrusted procedural languages are restricted to
         * be defined by postgres superusers only
         */
-       if (languageStruct->lanpltrusted == false && !superuser())
+       if (!languageStruct->lanpltrusted && !superuser())
        {
            elog(ERROR, "Only users with Postgres superuser privilege "
                 "are permitted to create a function in the '%s' "
@@ -324,7 +324,7 @@ CreateFunction(ProcedureStmt *stmt, CommandDest dest)
 
    compute_full_attributes(stmt->withClause,
                            &byte_pct, &perbyte_cpu, &percall_cpu,
-                           &outin_ratio, &canCache);
+                           &outin_ratio, &canCache, &isStrict);
 
    interpret_AS_clause(languageName, stmt->as, &prosrc_str, &probin_str);
 
@@ -338,8 +338,9 @@ CreateFunction(ProcedureStmt *stmt, CommandDest dest)
                    languageName,
                    prosrc_str, /* converted to text later */
                    probin_str, /* converted to text later */
-                   canCache,
                    true,       /* (obsolete "trusted") */
+                   canCache,
+                   isStrict,
                    byte_pct,
                    perbyte_cpu,
                    percall_cpu,
index 16ad849d8ffa81aadcec9fcb81ecc1f6267616f8..826efa40bbd2d421fbac9d878810646a1802b3f9 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *   $Header: /cvsroot/pgsql/src/backend/commands/indexcmds.c,v 1.26 2000/04/25 10:38:38 inoue Exp $
+ *   $Header: /cvsroot/pgsql/src/backend/commands/indexcmds.c,v 1.27 2000/05/28 17:55:55 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -37,6 +37,7 @@
 #include "parser/parse_func.h"
 #include "parser/parse_type.h"
 #include "utils/builtins.h"
+#include "utils/fmgroids.h"
 #include "utils/syscache.h"
 #include "miscadmin.h"         /* ReindexDatabase() */
 #include "utils/portal.h"      /* ReindexDatabase() */
@@ -298,7 +299,7 @@ ExtendIndex(char *indexRelationName, Expr *predicate, List *rangetable)
    {
        char       *predString;
 
-       predString = fmgr(F_TEXTOUT, &index->indpred);
+       predString = textout(&index->indpred);
        oldPred = stringToNode(predString);
        pfree(predString);
    }
index 47d2201c82aa30c75c8987ceda10a8d87ec8daf9..9b5f7c1ddff64a3a40e73918a41800dbfbf66307 100644 (file)
@@ -17,6 +17,7 @@
 #include "catalog/pg_shadow.h"
 #include "commands/proclang.h"
 #include "fmgr.h"
+#include "utils/builtins.h"
 #include "utils/syscache.h"
 
 
@@ -119,7 +120,7 @@ CreateProceduralLanguage(CreatePLangStmt *stmt)
    values[i++] = Int8GetDatum((bool) 1);
    values[i++] = Int8GetDatum(stmt->pltrusted);
    values[i++] = ObjectIdGetDatum(procTup->t_data->t_oid);
-   values[i++] = (Datum) fmgr(F_TEXTIN, stmt->plcompiler);
+   values[i++] = (Datum) textin(stmt->plcompiler);
 
    rel = heap_openr(LanguageRelationName, RowExclusiveLock);
 
index c79ce0cea50fbf28df38199b0719ceff7b67af5e..49f5570e8fc8a468987d68e27dbc75f0eb758c8b 100644 (file)
@@ -7,7 +7,7 @@
  * Portions Copyright (c) 1994, Regents of the University of California
  *
  * IDENTIFICATION
- *   $Header: /cvsroot/pgsql/src/backend/commands/trigger.c,v 1.64 2000/04/16 04:25:42 tgl Exp $
+ *   $Header: /cvsroot/pgsql/src/backend/commands/trigger.c,v 1.65 2000/05/28 17:55:55 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -27,6 +27,7 @@
 #include "miscadmin.h"
 #include "utils/acl.h"
 #include "utils/builtins.h"
+#include "utils/fmgroids.h"
 #include "utils/inval.h"
 #include "utils/syscache.h"
 #include "utils/tqual.h"
@@ -757,16 +758,9 @@ equalTriggerDescs(TriggerDesc *trigdesc1, TriggerDesc *trigdesc2)
 static HeapTuple
 ExecCallTriggerFunc(Trigger *trigger)
 {
-
    if (trigger->tgfunc.fn_addr == NULL)
        fmgr_info(trigger->tgfoid, &trigger->tgfunc);
 
-   if (trigger->tgfunc.fn_plhandler != NULL)
-   {
-       return (HeapTuple) (*(trigger->tgfunc.fn_plhandler))
-           (&trigger->tgfunc);
-   }
-
    return (HeapTuple) ((*fmgr_faddr(&trigger->tgfunc)) ());
 }
 
index 2e01e6e202c05475af3d3d99947ff27d45030716..ea5f457448fa46a3eba48c2a116a6017d787a261 100644 (file)
@@ -6,7 +6,7 @@
  * Portions Copyright (c) 1996-2000, PostgreSQL, Inc
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $Id: user.c,v 1.53 2000/05/04 20:06:07 tgl Exp $
+ * $Id: user.c,v 1.54 2000/05/28 17:55:55 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -33,6 +33,7 @@
 #include "utils/acl.h"
 #include "utils/array.h"
 #include "utils/builtins.h"
+#include "utils/fmgroids.h"
 #include "utils/syscache.h"
 
 static void CheckPgUserAclNotNull(void);
index 0c0c5f4785d9aff6df0d3ccc3935a55386bf2089..3a9b972b9ed618ddae52237687deac042753da8a 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *   $Header: /cvsroot/pgsql/src/backend/commands/vacuum.c,v 1.148 2000/05/19 03:22:29 tgl Exp $
+ *   $Header: /cvsroot/pgsql/src/backend/commands/vacuum.c,v 1.149 2000/05/28 17:55:55 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -38,6 +38,7 @@
 #include "tcop/tcopprot.h"
 #include "utils/acl.h"
 #include "utils/builtins.h"
+#include "utils/fmgroids.h"
 #include "utils/inval.h"
 #include "utils/portal.h"
 #include "utils/relcache.h"
index 58307e6a695e15568eb1f72b20f64a3c2e632dee..a53957c4f4ace45336a2093f653f7a3484dbebc6 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *   $Header: /cvsroot/pgsql/src/backend/executor/execQual.c,v 1.69 2000/04/12 17:15:08 momjian Exp $
+ *   $Header: /cvsroot/pgsql/src/backend/executor/execQual.c,v 1.70 2000/05/28 17:55:55 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -41,6 +41,7 @@
 #include "executor/functions.h"
 #include "executor/nodeSubplan.h"
 #include "utils/builtins.h"
+#include "utils/fmgroids.h"
 #include "utils/fcache2.h"
 
 
@@ -64,7 +65,8 @@ static Datum ExecEvalAnd(Expr *andExpr, ExprContext *econtext, bool *isNull);
 static Datum ExecEvalFunc(Expr *funcClause, ExprContext *econtext,
             bool *isNull, bool *isDone);
 static void ExecEvalFuncArgs(FunctionCachePtr fcache, ExprContext *econtext,
-                List *argList, Datum argV[], bool *argIsDone);
+                            List *argList, FunctionCallInfo fcinfo,
+                            bool *argIsDone);
 static Datum ExecEvalNot(Expr *notclause, ExprContext *econtext, bool *isNull);
 static Datum ExecEvalOper(Expr *opClause, ExprContext *econtext,
             bool *isNull);
@@ -614,15 +616,12 @@ static void
 ExecEvalFuncArgs(FunctionCachePtr fcache,
                 ExprContext *econtext,
                 List *argList,
-                Datum argV[],
+                FunctionCallInfo fcinfo,
                 bool *argIsDone)
 {
    int         i;
-   bool       *nullVect;
    List       *arg;
 
-   nullVect = fcache->nullVect;
-
    i = 0;
    foreach(arg, argList)
    {
@@ -632,16 +631,16 @@ ExecEvalFuncArgs(FunctionCachePtr fcache,
         * as arguments but we make an exception in the case of nested dot
         * expressions.  We have to watch out for this case here.
         */
-       argV[i] = ExecEvalExpr((Node *) lfirst(arg),
-                              econtext,
-                              &nullVect[i],
-                              argIsDone);
+       fcinfo->arg[i] = ExecEvalExpr((Node *) lfirst(arg),
+                                     econtext,
+                                     &fcinfo->argnull[i],
+                                     argIsDone);
 
        if (!(*argIsDone))
        {
            if (i != 0)
                elog(ERROR, "functions can only take sets in their first argument");
-           fcache->setArg = (char *) argV[0];
+           fcache->setArg = fcinfo->arg[0];
            fcache->hasSetArg = true;
        }
        i++;
@@ -658,40 +657,45 @@ ExecMakeFunctionResult(Node *node,
                       bool *isNull,
                       bool *isDone)
 {
-   Datum       argV[FUNC_MAX_ARGS];
-   FunctionCachePtr fcache;
-   Func       *funcNode = NULL;
-   Oper       *operNode = NULL;
-   bool        funcisset = false;
+   FunctionCallInfoData    fcinfo;
+   FunctionCachePtr        fcache;
+   List                   *ftlist;
+   bool                    funcisset;
+   Datum                   result;
+   bool                    argDone;
+
+   MemSet(&fcinfo, 0, sizeof(fcinfo));
 
    /*
     * This is kind of ugly, Func nodes now have targetlists so that we
     * know when and what to project out from postquel function results.
-    * This means we have to pass the func node all the way down instead
-    * of using only the fcache struct as before.  ExecMakeFunctionResult
-    * becomes a little bit more of a dual personality as a result.
+    * ExecMakeFunctionResult becomes a little bit more of a dual personality
+    * as a result.
     */
    if (IsA(node, Func))
    {
-       funcNode = (Func *) node;
-       fcache = funcNode->func_fcache;
+       fcache = ((Func *) node)->func_fcache;
+       ftlist = ((Func *) node)->func_tlist;
+       funcisset = (((Func *) node)->funcid == F_SETEVAL);
    }
    else
    {
-       operNode = (Oper *) node;
-       fcache = operNode->op_fcache;
+       fcache = ((Oper *) node)->op_fcache;
+       ftlist = NIL;
+       funcisset = false;
    }
 
+   fcinfo.flinfo = &fcache->func;
+   fcinfo.nargs = fcache->nargs;
+
    /*
     * arguments is a list of expressions to evaluate before passing to
-    * the function manager. We collect the results of evaluating the
-    * expressions into a datum array (argV) and pass this array to
-    * arrayFmgr()
+    * the function manager.  We collect the results of evaluating the
+    * expressions into the FunctionCallInfo struct.  Note we assume that
+    * fcache->nargs is the correct length of the arguments list!
     */
-   if (fcache->nargs != 0)
+   if (fcache->nargs > 0)
    {
-       bool        argDone;
-
        if (fcache->nargs > FUNC_MAX_ARGS)
            elog(ERROR, "ExecMakeFunctionResult: too many arguments");
 
@@ -700,21 +704,23 @@ ExecMakeFunctionResult(Node *node,
         * returning a set of tuples (i.e. a nested dot expression).  We
         * don't want to evaluate the arguments again until the function
         * is done. hasSetArg will always be false until we eval the args
-        * for the first time. We should set this in the parser.
+        * for the first time.
         */
-       if ((fcache->hasSetArg) && fcache->setArg != NULL)
+       if (fcache->hasSetArg && fcache->setArg != (Datum) 0)
        {
-           argV[0] = (Datum) fcache->setArg;
+           fcinfo.arg[0] = fcache->setArg;
            argDone = false;
        }
        else
-           ExecEvalFuncArgs(fcache, econtext, arguments, argV, &argDone);
+           ExecEvalFuncArgs(fcache, econtext, arguments, &fcinfo, &argDone);
 
-       if ((fcache->hasSetArg) && (argDone))
+       if (fcache->hasSetArg && argDone)
        {
+           /* can only get here if input is an empty set. */
            if (isDone)
                *isDone = true;
-           return (Datum) NULL;
+           *isNull = true;
+           return (Datum) 0;
        }
    }
 
@@ -731,27 +737,23 @@ ExecMakeFunctionResult(Node *node,
     * which defines this set.  So replace the existing funcid in the
     * funcnode with the set's OID.  Also, we want a new fcache which
     * points to the right function, so get that, now that we have the
-    * right OID.  Also zero out the argV, since the real set doesn't take
+    * right OID.  Also zero out fcinfo.arg, since the real set doesn't take
     * any arguments.
     */
-   if (((Func *) node)->funcid == F_SETEVAL)
+   if (funcisset)
    {
-       funcisset = true;
        if (fcache->setArg)
        {
-           argV[0] = 0;
-
-           ((Func *) node)->funcid = (Oid) PointerGetDatum(fcache->setArg);
-
+           ((Func *) node)->funcid = DatumGetObjectId(fcache->setArg);
        }
        else
        {
-           ((Func *) node)->funcid = (Oid) argV[0];
-           setFcache(node, argV[0], NIL, econtext);
+           ((Func *) node)->funcid = DatumGetObjectId(fcinfo.arg[0]);
+           setFcache(node, DatumGetObjectId(fcinfo.arg[0]), NIL, econtext);
            fcache = ((Func *) node)->func_fcache;
-           fcache->setArg = (char *) argV[0];
-           argV[0] = (Datum) 0;
+           fcache->setArg = fcinfo.arg[0];
        }
+       fcinfo.arg[0] = (Datum) 0;
    }
 
    /*
@@ -760,11 +762,6 @@ ExecMakeFunctionResult(Node *node,
     */
    if (fcache->language == SQLlanguageId)
    {
-       Datum       result;
-       bool        argDone;
-
-       Assert(funcNode);
-
        /*--------------------
         * This loop handles the situation where we are iterating through
         * all results in a nested dot function (whose argument function
@@ -777,8 +774,37 @@ ExecMakeFunctionResult(Node *node,
         */
        for (;;)
        {
-           result = postquel_function(funcNode, (char **) argV,
-                                      isNull, isDone);
+           /*
+            * If function is strict, and there are any NULL arguments,
+            * skip calling the function (at least for this set of args).
+            */
+           bool    callit = true;
+
+           if (fcinfo.flinfo->fn_strict)
+           {
+               int     i;
+
+               for (i = 0; i < fcinfo.nargs; i++)
+               {
+                   if (fcinfo.argnull[i])
+                   {
+                       callit = false;
+                       break;
+                   }
+               }
+           }
+
+           if (callit)
+           {
+               result = postquel_function(&fcinfo, fcache, ftlist, isDone);
+               *isNull = fcinfo.isnull;
+           }
+           else
+           {
+               result = (Datum) 0;
+               *isDone = true;
+               *isNull = true;
+           }
 
            if (!*isDone)
                break;          /* got a result from current argument */
@@ -786,7 +812,7 @@ ExecMakeFunctionResult(Node *node,
                break;          /* input not a set, so done */
 
            /* OK, get the next argument... */
-           ExecEvalFuncArgs(fcache, econtext, arguments, argV, &argDone);
+           ExecEvalFuncArgs(fcache, econtext, arguments, &fcinfo, &argDone);
 
            if (argDone)
            {
@@ -795,10 +821,11 @@ ExecMakeFunctionResult(Node *node,
                 * End of arguments, so reset the setArg flag and say
                 * "Done"
                 */
-               fcache->setArg = (char *) NULL;
+               fcache->setArg = (Datum) 0;
                fcache->hasSetArg = false;
                *isDone = true;
-               result = (Datum) NULL;
+               *isNull = true;
+               result = (Datum) 0;
                break;
            }
 
@@ -826,21 +853,34 @@ ExecMakeFunctionResult(Node *node,
            if (*isDone)
                ((Func *) node)->func_fcache = NULL;
        }
-
-       return result;
    }
    else
    {
-       int         i;
-
+       /* A non-SQL function cannot return a set, at present. */
        if (isDone)
            *isDone = true;
-       for (i = 0; i < fcache->nargs; i++)
-           if (fcache->nullVect[i] == true)
-               *isNull = true;
+       /*
+        * If function is strict, and there are any NULL arguments,
+        * skip calling the function and return NULL.
+        */
+       if (fcinfo.flinfo->fn_strict)
+       {
+           int     i;
 
-       return (Datum) fmgr_c(&fcache->func, (FmgrValues *) argV, isNull);
+           for (i = 0; i < fcinfo.nargs; i++)
+           {
+               if (fcinfo.argnull[i])
+               {
+                   *isNull = true;
+                   return (Datum) 0;
+               }
+           }
+       }
+       result = FunctionCallInvoke(&fcinfo);
+       *isNull = fcinfo.isnull;
    }
+
+   return result;
 }
 
 
index e3783473f96efdc98717e7257b276c437841a41f..39b29138e191e41f510fb854bf53b3a9a0f8dae3 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *   $Header: /cvsroot/pgsql/src/backend/executor/execUtils.c,v 1.55 2000/04/12 17:15:08 momjian Exp $
+ *   $Header: /cvsroot/pgsql/src/backend/executor/execUtils.c,v 1.56 2000/05/28 17:55:55 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -52,6 +52,8 @@
 #include "executor/execdebug.h"
 #include "executor/executor.h"
 #include "miscadmin.h"
+#include "utils/builtins.h"
+#include "utils/fmgroids.h"
 
 static void ExecGetIndexKeyInfo(Form_pg_index indexTuple, int *numAttsOutP,
                    AttrNumber **attsOutP, FuncIndexInfoPtr fInfoP);
@@ -843,7 +845,7 @@ ExecOpenIndices(Oid resultRelationOid,
         */
        if (VARSIZE(&indexStruct->indpred) != 0)
        {
-           predString = fmgr(F_TEXTOUT, &indexStruct->indpred);
+           predString = textout(&indexStruct->indpred);
            predicate = (PredInfo *) stringToNode(predString);
            pfree(predString);
        }
index c8d119df482001972556148a76b87734becbf7b1..ee5fabf170887b09feef74d4263bb06d28d18b57 100644 (file)
@@ -2,14 +2,13 @@
  *
  * functions.c
  *   Routines to handle functions called from the executor
- *   Putting this stuff in fmgr makes the postmaster a mess....
  *
  * Portions Copyright (c) 1996-2000, PostgreSQL, Inc
  * Portions Copyright (c) 1994, Regents of the University of California
  *
  *
  * IDENTIFICATION
- *   $Header: /cvsroot/pgsql/src/backend/executor/functions.c,v 1.33 2000/04/12 17:15:09 momjian Exp $
+ *   $Header: /cvsroot/pgsql/src/backend/executor/functions.c,v 1.34 2000/05/28 17:55:55 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -24,7 +23,6 @@
 #include "tcop/utility.h"
 #include "utils/datum.h"
 
-#undef new
 
 typedef enum
 {
@@ -39,18 +37,18 @@ typedef struct local_es
    ExecStatus  status;
 } execution_state;
 
-#define LAST_POSTQUEL_COMMAND(es) ((es)->next == (execution_state *)NULL)
+#define LAST_POSTQUEL_COMMAND(es) ((es)->next == (execution_state *) NULL)
 
 /* non-export function prototypes */
 static TupleDesc postquel_start(execution_state *es);
-static execution_state *init_execution_state(FunctionCachePtr fcache,
-                    char *args[]);
+static execution_state *init_execution_state(FunctionCachePtr fcache);
 static TupleTableSlot *postquel_getnext(execution_state *es);
 static void postquel_end(execution_state *es);
-static void postquel_sub_params(execution_state *es, int nargs,
-                   char *args[], bool *nullV);
-static Datum postquel_execute(execution_state *es, FunctionCachePtr fcache,
-                List *fTlist, char **args, bool *isNull);
+static void postquel_sub_params(execution_state *es, FunctionCallInfo fcinfo);
+static Datum postquel_execute(execution_state *es,
+                             FunctionCallInfo fcinfo,
+                             FunctionCachePtr fcache,
+                             List *func_tlist);
 
 
 Datum
@@ -64,7 +62,6 @@ ProjectAttribute(TupleDesc TD,
    Var        *attrVar = (Var *) tlist->expr;
    AttrNumber  attrno = attrVar->varattno;
 
-
    val = heap_getattr(tup, attrno, TD, isnullP);
    if (*isnullP)
        return (Datum) NULL;
@@ -77,8 +74,7 @@ ProjectAttribute(TupleDesc TD,
 }
 
 static execution_state *
-init_execution_state(FunctionCachePtr fcache,
-                    char *args[])
+init_execution_state(FunctionCachePtr fcache)
 {
    execution_state *newes;
    execution_state *nextes;
@@ -196,13 +192,10 @@ postquel_end(execution_state *es)
 }
 
 static void
-postquel_sub_params(execution_state *es,
-                   int nargs,
-                   char *args[],
-                   bool *nullV)
+postquel_sub_params(execution_state *es, FunctionCallInfo fcinfo)
 {
-   ParamListInfo paramLI;
    EState     *estate;
+   ParamListInfo paramLI;
 
    estate = es->estate;
    paramLI = estate->es_param_list_info;
@@ -211,9 +204,9 @@ postquel_sub_params(execution_state *es,
    {
        if (paramLI->kind == PARAM_NUM)
        {
-           Assert(paramLI->id <= nargs);
-           paramLI->value = (Datum) args[(paramLI->id - 1)];
-           paramLI->isnull = nullV[(paramLI->id - 1)];
+           Assert(paramLI->id <= fcinfo->nargs);
+           paramLI->value = fcinfo->arg[paramLI->id - 1];
+           paramLI->isnull = fcinfo->argnull[paramLI->id - 1];
        }
        paramLI++;
    }
@@ -264,10 +257,9 @@ copy_function_result(FunctionCachePtr fcache,
 
 static Datum
 postquel_execute(execution_state *es,
+                FunctionCallInfo fcinfo,
                 FunctionCachePtr fcache,
-                List *fTlist,
-                char **args,
-                bool *isNull)
+                List *func_tlist)
 {
    TupleTableSlot *slot;
    Datum       value;
@@ -278,8 +270,8 @@ postquel_execute(execution_state *es,
     * ExecutorStart->ExecInitIndexScan->ExecEvalParam works ok. (But
     * note: I HOPE we can do it here). - vadim 01/22/97
     */
-   if (fcache->nargs > 0)
-       postquel_sub_params(es, fcache->nargs, args, fcache->nullVect);
+   if (fcinfo->nargs > 0)
+       postquel_sub_params(es, fcinfo);
 
    if (es->status == F_EXEC_START)
    {
@@ -293,7 +285,7 @@ postquel_execute(execution_state *es,
    {
        postquel_end(es);
        es->status = F_EXEC_DONE;
-       *isNull = true;
+       fcinfo->isnull = true;
 
        /*
         * If this isn't the last command for the function we have to
@@ -315,19 +307,20 @@ postquel_execute(execution_state *es,
         * logic and code redundancy here.
         */
        resSlot = copy_function_result(fcache, slot);
-       if (fTlist != NIL)
+       if (func_tlist != NIL)
        {
-           TargetEntry *tle = lfirst(fTlist);
+           TargetEntry *tle = lfirst(func_tlist);
 
            value = ProjectAttribute(resSlot->ttc_tupleDescriptor,
                                     tle,
                                     resSlot->val,
-                                    isNull);
+                                    &fcinfo->isnull);
        }
        else
        {
-           value = (Datum) resSlot;
-           *isNull = false;
+           /* XXX is this right?  Return whole tuple slot?? */
+           value = PointerGetDatum(resSlot);
+           fcinfo->isnull = false;
        }
 
        /*
@@ -353,11 +346,13 @@ postquel_execute(execution_state *es,
 }
 
 Datum
-postquel_function(Func *funcNode, char **args, bool *isNull, bool *isDone)
+postquel_function(FunctionCallInfo fcinfo,
+                 FunctionCachePtr fcache,
+                 List *func_tlist,
+                 bool *isDone)
 {
    execution_state *es;
    Datum       result = 0;
-   FunctionCachePtr fcache = funcNode->func_fcache;
    CommandId   savedId;
 
    /*
@@ -371,7 +366,7 @@ postquel_function(Func *funcNode, char **args, bool *isNull, bool *isDone)
    es = (execution_state *) fcache->func_state;
    if (es == NULL)
    {
-       es = init_execution_state(fcache, args);
+       es = init_execution_state(fcache);
        fcache->func_state = (char *) es;
    }
 
@@ -388,15 +383,19 @@ postquel_function(Func *funcNode, char **args, bool *isNull, bool *isDone)
    while (es != (execution_state *) NULL)
    {
        result = postquel_execute(es,
+                                 fcinfo,
                                  fcache,
-                                 funcNode->func_tlist,
-                                 args,
-                                 isNull);
+                                 func_tlist);
        if (es->status != F_EXEC_DONE)
            break;
        es = es->next;
    }
 
+   /*
+    * Restore outer command ID.
+    */
+   SetScanCommandId(savedId);
+
    /*
     * If we've gone through every command in this function, we are done.
     */
@@ -417,17 +416,15 @@ postquel_function(Func *funcNode, char **args, bool *isNull, bool *isDone)
         * Let caller know we're finished.
         */
        *isDone = true;
-       SetScanCommandId(savedId);
        return (fcache->oneResult) ? result : (Datum) NULL;
    }
 
    /*
     * If we got a result from a command within the function it has to be
-    * the final command.  All others shouldn't be returing anything.
+    * the final command.  All others shouldn't be returning anything.
     */
    Assert(LAST_POSTQUEL_COMMAND(es));
-   *isDone = false;
 
-   SetScanCommandId(savedId);
+   *isDone = false;
    return result;
 }
index e2db06f84d140690bf2e9673783015bc7de00da0..853fa96e2c360e8b0af17aa072c7ce4e8bace057 100644 (file)
@@ -32,7 +32,7 @@
  * Portions Copyright (c) 1994, Regents of the University of California
  *
  * IDENTIFICATION
- *   $Header: /cvsroot/pgsql/src/backend/executor/nodeAgg.c,v 1.63 2000/04/12 17:15:09 momjian Exp $
+ *   $Header: /cvsroot/pgsql/src/backend/executor/nodeAgg.c,v 1.64 2000/05/28 17:55:55 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -218,8 +218,13 @@ static void
 advance_transition_functions(AggStatePerAgg peraggstate,
                             Datum newVal, bool isNull)
 {
-   Datum       args[2];
+   FunctionCallInfoData    fcinfo;
 
+   MemSet(&fcinfo, 0, sizeof(fcinfo));
+
+   /*
+    * XXX reconsider isNULL handling here
+    */
    if (OidIsValid(peraggstate->xfn1_oid) && !isNull)
    {
        if (peraggstate->noInitValue)
@@ -244,28 +249,48 @@ advance_transition_functions(AggStatePerAgg peraggstate,
        else
        {
            /* apply transition function 1 */
-           args[0] = peraggstate->value1;
-           args[1] = newVal;
-           newVal = (Datum) fmgr_c(&peraggstate->xfn1,
-                                   (FmgrValues *) args,
-                                   &isNull);
-           if (!peraggstate->transtype1ByVal)
+           fcinfo.flinfo = &peraggstate->xfn1;
+           fcinfo.nargs = 2;
+           fcinfo.arg[0] = peraggstate->value1;
+           fcinfo.argnull[0] = peraggstate->value1IsNull;
+           fcinfo.arg[1] = newVal;
+           fcinfo.argnull[1] = isNull;
+           if (fcinfo.flinfo->fn_strict &&
+               (peraggstate->value1IsNull || isNull))
+           {
+               /* don't call a strict function with NULL inputs */
+               newVal = (Datum) 0;
+               fcinfo.isnull = true;
+           }
+           else
+               newVal = FunctionCallInvoke(&fcinfo);
+           if (!peraggstate->transtype1ByVal && !peraggstate->value1IsNull)
                pfree(peraggstate->value1);
            peraggstate->value1 = newVal;
+           peraggstate->value1IsNull = fcinfo.isnull;
        }
    }
 
    if (OidIsValid(peraggstate->xfn2_oid))
    {
        /* apply transition function 2 */
-       args[0] = peraggstate->value2;
-       isNull = false;         /* value2 cannot be null, currently */
-       newVal = (Datum) fmgr_c(&peraggstate->xfn2,
-                               (FmgrValues *) args,
-                               &isNull);
-       if (!peraggstate->transtype2ByVal)
+       fcinfo.flinfo = &peraggstate->xfn2;
+       fcinfo.nargs = 1;
+       fcinfo.arg[0] = peraggstate->value2;
+       fcinfo.argnull[0] = peraggstate->value2IsNull;
+       fcinfo.isnull = false;  /* must reset after use by xfn1 */
+       if (fcinfo.flinfo->fn_strict && peraggstate->value2IsNull)
+       {
+           /* don't call a strict function with NULL inputs */
+           newVal = (Datum) 0;
+           fcinfo.isnull = true;
+       }
+       else
+           newVal = FunctionCallInvoke(&fcinfo);
+       if (!peraggstate->transtype2ByVal && !peraggstate->value2IsNull)
            pfree(peraggstate->value2);
        peraggstate->value2 = newVal;
+       peraggstate->value2IsNull = fcinfo.isnull;
    }
 }
 
@@ -276,8 +301,10 @@ static void
 finalize_aggregate(AggStatePerAgg peraggstate,
                   Datum *resultVal, bool *resultIsNull)
 {
-   Aggref     *aggref = peraggstate->aggref;
-   char       *args[2];
+   Aggref                 *aggref = peraggstate->aggref;
+   FunctionCallInfoData    fcinfo;
+
+   MemSet(&fcinfo, 0, sizeof(fcinfo));
 
    /*
     * If it's a DISTINCT aggregate, all we've done so far is to stuff the
@@ -337,21 +364,41 @@ finalize_aggregate(AggStatePerAgg peraggstate,
    if (OidIsValid(peraggstate->finalfn_oid) &&
        !peraggstate->noInitValue)
    {
+       fcinfo.flinfo = &peraggstate->finalfn;
        if (peraggstate->finalfn.fn_nargs > 1)
        {
-           args[0] = (char *) peraggstate->value1;
-           args[1] = (char *) peraggstate->value2;
+           fcinfo.nargs = 2;
+           fcinfo.arg[0] = peraggstate->value1;
+           fcinfo.argnull[0] = peraggstate->value1IsNull;
+           fcinfo.arg[1] = peraggstate->value2;
+           fcinfo.argnull[1] = peraggstate->value2IsNull;
        }
        else if (OidIsValid(peraggstate->xfn1_oid))
-           args[0] = (char *) peraggstate->value1;
+       {
+           fcinfo.nargs = 1;
+           fcinfo.arg[0] = peraggstate->value1;
+           fcinfo.argnull[0] = peraggstate->value1IsNull;
+       }
        else if (OidIsValid(peraggstate->xfn2_oid))
-           args[0] = (char *) peraggstate->value2;
+       {
+           fcinfo.nargs = 1;
+           fcinfo.arg[0] = peraggstate->value2;
+           fcinfo.argnull[0] = peraggstate->value2IsNull;
+       }
        else
            elog(ERROR, "ExecAgg: no valid transition functions??");
-       *resultIsNull = false;
-       *resultVal = (Datum) fmgr_c(&peraggstate->finalfn,
-                                   (FmgrValues *) args,
-                                   resultIsNull);
+       if (fcinfo.flinfo->fn_strict &&
+           (fcinfo.argnull[0] || fcinfo.argnull[1]))
+       {
+           /* don't call a strict function with NULL inputs */
+           *resultVal = (Datum) 0;
+           *resultIsNull = true;
+       }
+       else
+       {
+           *resultVal = FunctionCallInvoke(&fcinfo);
+           *resultIsNull = fcinfo.isnull;
+       }
    }
    else if (OidIsValid(peraggstate->xfn1_oid))
    {
index 656fbdb480d8d92496bfb0579aa7db6dfe61221b..50f5f1b7206f5c70d8cc748bce6cfb9519cd92ae 100644 (file)
@@ -4,7 +4,7 @@
 #    Makefile for libpq subsystem (backend half of libpq interface)
 #
 # IDENTIFICATION
-#    $Header: /cvsroot/pgsql/src/backend/libpq/Makefile,v 1.17 2000/01/19 02:58:52 petere Exp $
+#    $Header: /cvsroot/pgsql/src/backend/libpq/Makefile,v 1.18 2000/05/28 17:55:56 tgl Exp $
 #
 #-------------------------------------------------------------------------
 
@@ -29,11 +29,6 @@ all: SUBSYS.o
 SUBSYS.o: $(OBJS)
    $(LD) $(LDREL) $(LDOUT) SUBSYS.o $(OBJS)
 
-be-dumpdata.o be-pqexec.o: ../fmgr.h
-
-../fmgr.h: 
-   $(MAKE) -C .. fmgr.h
-
 depend dep:
    $(CC) -MM $(CFLAGS) *.c >depend
 
index 0c29ea251840ee9be6e43bf08775c55650f58ba4..42d48281e08db4fe03baeaa26ca65d300fd2508a 100644 (file)
@@ -9,7 +9,7 @@
  *
  *
  * IDENTIFICATION
- *   $Header: /cvsroot/pgsql/src/backend/libpq/Attic/be-pqexec.c,v 1.31 2000/03/17 02:36:08 tgl Exp $
+ *   $Header: /cvsroot/pgsql/src/backend/libpq/Attic/be-pqexec.c,v 1.32 2000/05/28 17:55:56 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -42,11 +42,11 @@ static char *strmake(char *str, int len);
  *     result_buf      : pointer to result buffer (&int if integer)
  *     result_len      : length of return value.
  *     result_is_int   : If the result is an integer, this must be non-zero
- *     args            : pointer to a NULL terminated arg array.
+ *     args            : pointer to an array of PQArgBlock items.
  *                       (length, if integer, and result-pointer)
  *     nargs           : # of arguments in args array.
  *
- *     This code scavanged from HandleFunctionRequest() in tcop/fastpath.h
+ *     This code scavenged from HandleFunctionRequest() in tcop/fastpath.h
  * ----------------
  */
 char *
@@ -57,46 +57,53 @@ PQfn(int fnid,
     PQArgBlock *args,
     int nargs)
 {
-   char       *retval;         /* XXX - should be datum, maybe ? */
-   char       *arg[FUNC_MAX_ARGS];
-   bool        isNull;
-   int         i;
+   FmgrInfo                flinfo;
+   FunctionCallInfoData    fcinfo;
+   Datum                   retval;
+   int                     i;
 
-   /* ----------------
-    *  fill args[] array
-    * ----------------
-    */
    if (nargs > FUNC_MAX_ARGS)
        elog(ERROR, "functions cannot have more than %d arguments",
             FUNC_MAX_ARGS);
+
+   /* ----------------
+    *  set up the argument block for the function manager
+    * ----------------
+    */
+   fmgr_info((Oid) fnid, &flinfo);
+
+   MemSet(&fcinfo, 0, sizeof(fcinfo));
+    fcinfo.flinfo = &flinfo;
+   fcinfo.nargs = nargs;
+
    for (i = 0; i < nargs; i++)
    {
        if (args[i].len == VAR_LENGTH_ARG)
-           arg[i] = (char *) args[i].u.ptr;
+           fcinfo.arg[i] = (Datum) args[i].u.ptr;
        else if ((Size) args[i].len > sizeof(int4))
            elog(ERROR, "arg_length of argument %d too long", i);
        else
-           arg[i] = (char *) args[i].u.integer;
+           fcinfo.arg[i] = (Datum) args[i].u.integer;
    }
 
    /* ----------------
     *  call the postgres function manager
     * ----------------
     */
-   retval = fmgr_array_args(fnid, nargs, arg, &isNull);
+   retval = FunctionCallInvoke(&fcinfo);
 
    /* ----------------
     *  put the result in the buffer the user specified and
     *  return the proper code.
     * ----------------
     */
-   if (isNull)                 /* void retval */
+   if (fcinfo.isnull)          /* void retval */
        return "0";
 
    if (result_is_int)
-       *result_buf = (int) retval;
+       *result_buf = DatumGetInt32(retval);
    else
-       memmove(result_buf, retval, result_len);
+       memmove(result_buf, DatumGetPointer(retval), result_len);
    return "G";
 }
 
index c0d07a05dbae8d2ad2773df87387dd784b599693..59e2ac1154ea20e64e9af4157c718ec3fd6d58fa 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *   $Header: /cvsroot/pgsql/src/backend/nodes/Attic/freefuncs.c,v 1.40 2000/04/12 17:15:16 momjian Exp $
+ *   $Header: /cvsroot/pgsql/src/backend/nodes/Attic/freefuncs.c,v 1.41 2000/05/28 17:55:57 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -530,16 +530,12 @@ _freeFcache(FunctionCachePtr ptr)
 {
    if (ptr->argOidVect)
        pfree(ptr->argOidVect);
-   if (ptr->nullVect)
-       pfree(ptr->nullVect);
    if (ptr->src)
        pfree(ptr->src);
    if (ptr->bin)
        pfree(ptr->bin);
    if (ptr->func_state)
        pfree(ptr->func_state);
-   if (ptr->setArg)
-       pfree(ptr->setArg);
 
    pfree(ptr);
 }
index d430059a1e0bae95cc82eca8ca79f850284f0b11..460417f2417e00d05deffce3da090bc27f2fc308 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *   $Header: /cvsroot/pgsql/src/backend/optimizer/path/clausesel.c,v 1.34 2000/04/12 17:15:19 momjian Exp $
+ *   $Header: /cvsroot/pgsql/src/backend/optimizer/path/clausesel.c,v 1.35 2000/05/28 17:55:58 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -21,6 +21,7 @@
 #include "optimizer/plancat.h"
 #include "optimizer/restrictinfo.h"
 #include "parser/parsetree.h"
+#include "utils/fmgroids.h"
 #include "utils/lsyscache.h"
 
 
index 06f9cd0247f0b40e9ae079d168de5dc3359dcc76..b862cf7f1297ff5b3cf6a4d0eeac034105095d1d 100644 (file)
@@ -9,7 +9,7 @@
  *
  *
  * IDENTIFICATION
- *   $Header: /cvsroot/pgsql/src/backend/optimizer/path/indxpath.c,v 1.83 2000/04/16 04:41:01 tgl Exp $
+ *   $Header: /cvsroot/pgsql/src/backend/optimizer/path/indxpath.c,v 1.84 2000/05/28 17:55:58 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -37,6 +37,7 @@
 #include "parser/parse_oper.h"
 #include "parser/parsetree.h"
 #include "utils/builtins.h"
+#include "utils/fmgroids.h"
 #include "utils/lsyscache.h"
 #include "utils/syscache.h"
 
index e9d7690e00c754dbd83413e1ba677f11424d8f2d..fca1bd0ab17870d3ea09874710f36a4e7b555dd6 100644 (file)
@@ -9,7 +9,7 @@
  *
  *
  * IDENTIFICATION
- *   $Header: /cvsroot/pgsql/src/backend/optimizer/util/plancat.c,v 1.50 2000/04/12 17:15:24 momjian Exp $
+ *   $Header: /cvsroot/pgsql/src/backend/optimizer/util/plancat.c,v 1.51 2000/05/28 17:55:59 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -28,6 +28,8 @@
 #include "optimizer/paths.h"
 #include "optimizer/plancat.h"
 #include "parser/parsetree.h"
+#include "utils/builtins.h"
+#include "utils/fmgroids.h"
 #include "utils/syscache.h"
 #include "catalog/catalog.h"
 #include "miscadmin.h"
@@ -117,7 +119,7 @@ find_secondary_indexes(Query *root, Index relid)
        info->indproc = index->indproc; /* functional index ?? */
        if (VARSIZE(&index->indpred) != 0)      /* partial index ?? */
        {
-           char       *predString = fmgr(F_TEXTOUT, &index->indpred);
+           char       *predString = textout(&index->indpred);
 
            info->indpred = (List *) stringToNode(predString);
            pfree(predString);
index 7658443a378738af3b00ba8fdd845d13b2defd84..6f454063626b6f67661bcfce5961677d9f4c7ff1 100644 (file)
@@ -6,7 +6,7 @@
  * Portions Copyright (c) 1996-2000, PostgreSQL, Inc
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $Id: analyze.c,v 1.142 2000/04/12 17:15:26 momjian Exp $
+ * $Id: analyze.c,v 1.143 2000/05/28 17:56:00 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -26,6 +26,7 @@
 #include "parser/parse_target.h"
 #include "parser/parse_type.h"
 #include "utils/builtins.h"
+#include "utils/fmgroids.h"
 #include "utils/numeric.h"
 
 void       CheckSelectForUpdate(Query *qry);   /* no points for style... */
index ed6a910f273ee83f5b0d45c42c21443b1152df5c..1866cd37b28df8941dd6d324b3734baca9040b9a 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *   $Header: /cvsroot/pgsql/src/backend/parser/parse_func.c,v 1.79 2000/05/26 03:56:40 tgl Exp $
+ *   $Header: /cvsroot/pgsql/src/backend/parser/parse_func.c,v 1.80 2000/05/28 17:56:00 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -34,6 +34,7 @@
 #include "parser/parse_target.h"
 #include "utils/acl.h"
 #include "utils/builtins.h"
+#include "utils/fmgroids.h"
 #include "utils/lsyscache.h"
 #include "utils/syscache.h"
 
index 0f386b84c71c180359afffe58b3a405b02bbff5d..dcec30b15890aee541938f49554cf91a2f6b1ebc 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *   $Header: /cvsroot/pgsql/src/backend/parser/parse_node.c,v 1.39 2000/04/12 17:15:27 momjian Exp $
+ *   $Header: /cvsroot/pgsql/src/backend/parser/parse_node.c,v 1.40 2000/05/28 17:56:00 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -442,14 +442,11 @@ make_const(Value *value)
        case T_Float:
            if (fitsInFloat(value))
            {
-               float64     fltval = (float64) palloc(sizeof(float64data));
-
-               *fltval = floatVal(value);
-               val = Float64GetDatum(fltval);
+               val = Float8GetDatum(floatVal(value));
 
                typeid = FLOAT8OID;
-               typelen = sizeof(float64data);
-               typebyval = false;
+               typelen = sizeof(float8);
+               typebyval = false; /* XXX might change someday */
            }
            else
            {
index 2a9de556b266c5754b1b6a54be943f31cf71414b..73be990c01083f0f070f174621ac422d38674396 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *   $Header: /cvsroot/pgsql/src/backend/parser/parse_oper.c,v 1.40 2000/04/12 17:15:27 momjian Exp $
+ *   $Header: /cvsroot/pgsql/src/backend/parser/parse_oper.c,v 1.41 2000/05/28 17:56:00 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -22,6 +22,7 @@
 #include "parser/parse_func.h"
 #include "parser/parse_oper.h"
 #include "parser/parse_type.h"
+#include "utils/fmgroids.h"
 #include "utils/syscache.h"
 
 static Oid *oper_select_candidate(int nargs, Oid *input_typeids,
index bc1046a24eca0df93f4801f0c106ea3d40074ff0..9fee04634017090ec5792bcfa2ac3e4123e0b41e 100644 (file)
@@ -7,7 +7,7 @@
  * Portions Copyright (c) 1996-2000, PostgreSQL, Inc
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $Id: alpha.h,v 1.4 2000/01/26 05:56:44 momjian Exp $
+ * $Id: alpha.h,v 1.5 2000/05/28 17:56:02 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -29,7 +29,7 @@
  *
  */
 #define  pg_dlopen(f)  dlopen(f, RTLD_LAZY)
-#define  pg_dlsym(h, f) ((func_ptr)dlsym(h, f))
+#define  pg_dlsym(h, f) ((PGFunction) dlsym(h, f))
 #define  pg_dlclose(h) dlclose(h)
 #define  pg_dlerror()  dlerror()
 
index 5c8b3058aa1c8b5d85f9b36f69657f40d90f24f3..b85bf1b6f387dcd945c9574ed0d0a320e8573ab9 100644 (file)
@@ -26,7 +26,7 @@
 #define          pg_dlclose      dlclose
 #define          pg_dlerror      dlerror
 #else
-#define pg_dlsym(handle, funcname)   ((func_ptr) dld_get_func((funcname)))
+#define pg_dlsym(handle, funcname)   ((PGFunction) dld_get_func((funcname)))
 #define pg_dlclose(handle)           ({ dld_unlink_by_file(handle, 1); free(handle); })
 #endif
 
index 562b59ee770f24ec9dc47e296340ad4bf31e5bc1..ba904fd2bcf32678fe6f9f76185f22b29a3fd7ab 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *   $Header: /cvsroot/pgsql/src/backend/port/dynloader/hpux.c,v 1.13 2000/04/26 23:35:34 tgl Exp $
+ *   $Header: /cvsroot/pgsql/src/backend/port/dynloader/hpux.c,v 1.14 2000/05/28 17:56:02 tgl Exp $
  *
  * NOTES
  *     all functions are defined here -- it's impossible to trace the
@@ -39,13 +39,13 @@ pg_dlopen(char *filename)
    return (void *) handle;
 }
 
-func_ptr
+PGFunction
 pg_dlsym(void *handle, char *funcname)
 {
-   func_ptr    f;
+   PGFunction  f;
 
    if (shl_findsym((shl_t *) & handle, funcname, TYPE_PROCEDURE, &f) == -1)
-       f = (func_ptr) NULL;
+       f = (PGFunction) NULL;
    return f;
 }
 
index 470e43f951a9bf335acedfb41d9088bad448eb87..e5f39baee8aa634e058231568c1ba02210f3c9ed 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *   $Header: /cvsroot/pgsql/src/backend/port/dynloader/hpux.h,v 1.3 2000/01/26 05:56:44 momjian Exp $
+ *   $Header: /cvsroot/pgsql/src/backend/port/dynloader/hpux.h,v 1.4 2000/05/28 17:56:02 tgl Exp $
  *
  * NOTES
  *     all functions are defined here -- it's impossible to trace the
@@ -17,7 +17,9 @@
  *-------------------------------------------------------------------------
  */
 /* System includes */
+#include "fmgr.h"
+
 void      *pg_dlopen(char *filename);
-func_ptr   pg_dlsym(void *handle, char *funcname);
+PGFunction pg_dlsym(void *handle, char *funcname);
 void       pg_dlclose(void *handle);
 char      *pg_dlerror();
index 029143aa1f6bd153c3b105a972b6a131f001e080..ad50aa821d3425001194895236384cb3319541ad 100644 (file)
@@ -7,7 +7,7 @@
  * Portions Copyright (c) 1996-2000, PostgreSQL, Inc
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $Id: linux.h,v 1.8 2000/01/26 05:56:44 momjian Exp $
+ * $Id: linux.h,v 1.9 2000/05/28 17:56:02 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -27,7 +27,7 @@
 #define pg_dlsym(handle, funcname)     (NULL)
 #define pg_dlclose(handle)            ({})
 #else
-#define pg_dlsym(handle, funcname)     ((func_ptr) dld_get_func((funcname)))
+#define pg_dlsym(handle, funcname)     ((PGFunction) dld_get_func((funcname)))
 #define pg_dlclose(handle)            ({ dld_unlink_by_file(handle, 1); free(handle); })
 #endif
 #else
index eae3e2393d32cda89c742a1c1391d0f78e3dee85..60bed57c6321b282e7b4c2d07851548b88791b19 100644 (file)
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *   $Header: /cvsroot/pgsql/src/backend/port/dynloader/Attic/qnx4.c,v 1.1 1999/12/16 01:25:04 momjian Exp $
+ *   $Header: /cvsroot/pgsql/src/backend/port/dynloader/Attic/qnx4.c,v 1.2 2000/05/28 17:56:02 tgl Exp $
  *
  * NOTES
  *
@@ -30,7 +30,7 @@ pg_dlopen(char *filename)
    return (void *) NULL;
 }
 
-func_ptr
+PGFunction
 pg_dlsym(void *handle, char *funcname)
 {
    return NULL;
index 6197d09a6fa8506f9f7d5370ff071c39e2b2a48f..6ac94a8206df54e73d270de474b094988aa6ca59 100644 (file)
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *   $Header: /cvsroot/pgsql/src/backend/port/dynloader/Attic/qnx4.h,v 1.1 1999/12/16 01:25:04 momjian Exp $
+ *   $Header: /cvsroot/pgsql/src/backend/port/dynloader/Attic/qnx4.h,v 1.2 2000/05/28 17:56:02 tgl Exp $
  *
  * NOTES
  *
@@ -15,6 +15,6 @@
  */
 /* System includes */
 void      *pg_dlopen(char *filename);
-func_ptr   pg_dlsym(void *handle, char *funcname);
+PGFunction pg_dlsym(void *handle, char *funcname);
 void       pg_dlclose(void *handle);
 char      *pg_dlerror();
index 821f93440e2d9c57196382386053ad31a2d5ab9d..13a07adbd8c864974d8220cc5bfbceab706433de 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *   $Header: /cvsroot/pgsql/src/backend/rewrite/rewriteRemove.c,v 1.36 2000/04/12 17:15:32 momjian Exp $
+ *   $Header: /cvsroot/pgsql/src/backend/rewrite/rewriteRemove.c,v 1.37 2000/05/28 17:56:02 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -23,6 +23,7 @@
 #include "commands/comment.h"
 #include "rewrite/rewriteRemove.h"
 #include "rewrite/rewriteSupport.h"
+#include "utils/fmgroids.h"
 #include "utils/syscache.h"
 
 /*-----------------------------------------------------------------------
index 38961ff34c19032174c9196f5a02c00223f79f86..6f60e902ca833e2a6dbf28057bf1ebf7fbaadbaf 100644 (file)
@@ -9,7 +9,7 @@
  *
  *
  * IDENTIFICATION
- *   $Header: /cvsroot/pgsql/src/backend/storage/large_object/inv_api.c,v 1.67 2000/04/12 17:15:37 momjian Exp $
+ *   $Header: /cvsroot/pgsql/src/backend/storage/large_object/inv_api.c,v 1.68 2000/05/28 17:56:03 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -31,6 +31,7 @@
 #include "miscadmin.h"
 #include "storage/large_object.h"
 #include "storage/smgr.h"
+#include "utils/fmgroids.h"
 #include "utils/relcache.h"
 
 /*
index 2ee1faefcd13f3cdd6b166762e41800c37f873dd..aaeda91f44f95a5fd83e9b8786a7a108676cf4f3 100644 (file)
@@ -4,7 +4,7 @@
 #    Makefile for tcop
 #
 # IDENTIFICATION
-#    $Header: /cvsroot/pgsql/src/backend/tcop/Makefile,v 1.21 2000/01/19 02:58:56 petere Exp $
+#    $Header: /cvsroot/pgsql/src/backend/tcop/Makefile,v 1.22 2000/05/28 17:56:04 tgl Exp $
 #
 #-------------------------------------------------------------------------
 
@@ -29,18 +29,12 @@ SUBSYS.o: $(OBJS)
 # dependencies (because they don't even exist until you make them),
 # they are hardcoded here.
 
-utility.o: ../parse.h ../fmgr.h
-aclchk.o: ../fmgr.h
-fastpath.o: ../fmgr.h
-postgres.o: ../fmgr.h
+utility.o: ../parse.h
 
 ../parse.h: 
    $(MAKE) -C .. parse.h
 
-../fmgr.h: 
-   $(MAKE) -C .. fmgr.h
-
-dep depend: ../parse.h ../fmgr.h
+dep depend: ../parse.h
    $(CC) -MM $(CFLAGS) *.c >depend
 
 clean: 
index 1b38fe7ed08e4098bf99e10abf944c6461f7cc64..60e1c7c44541940c5580b940f8a646851bab304d 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *   $Header: /cvsroot/pgsql/src/backend/tcop/fastpath.c,v 1.38 2000/04/12 17:15:43 momjian Exp $
+ *   $Header: /cvsroot/pgsql/src/backend/tcop/fastpath.c,v 1.39 2000/05/28 17:56:04 tgl Exp $
  *
  * NOTES
  *   This cruft is the server side of PQfn.
  * ----------------
  */
 static void
-SendFunctionResult(Oid fid,        /* function id */
-                  char *retval,/* actual return value */
+SendFunctionResult(Datum retval, /* actual return value */
                   bool retbyval,
-                  int retlen   /* the length according to the catalogs */
-)
+                  int retlen)  /* the length according to the catalogs */
 {
    StringInfoData buf;
 
@@ -93,19 +91,21 @@ SendFunctionResult(Oid fid,     /* function id */
        if (retbyval)
        {                       /* by-value */
            pq_sendint(&buf, retlen, 4);
-           pq_sendint(&buf, (int) (Datum) retval, retlen);
+           pq_sendint(&buf, DatumGetInt32(retval), retlen);
        }
        else
        {                       /* by-reference ... */
            if (retlen < 0)
            {                   /* ... varlena */
-               pq_sendint(&buf, VARSIZE(retval) - VARHDRSZ, VARHDRSZ);
-               pq_sendbytes(&buf, VARDATA(retval), VARSIZE(retval) - VARHDRSZ);
+               struct varlena *v = (struct varlena *) DatumGetPointer(retval);
+
+               pq_sendint(&buf, VARSIZE(v) - VARHDRSZ, VARHDRSZ);
+               pq_sendbytes(&buf, VARDATA(v), VARSIZE(v) - VARHDRSZ);
            }
            else
            {                   /* ... fixed */
                pq_sendint(&buf, retlen, 4);
-               pq_sendbytes(&buf, retval, retlen);
+               pq_sendbytes(&buf, DatumGetPointer(retval), retlen);
            }
        }
    }
@@ -127,12 +127,12 @@ SendFunctionResult(Oid fid,       /* function id */
 struct fp_info
 {
    Oid         funcid;
-   int         nargs;
+   FmgrInfo    flinfo;         /* function lookup info for funcid */
    bool        argbyval[FUNC_MAX_ARGS];
    int32       arglen[FUNC_MAX_ARGS];  /* signed (for varlena) */
    bool        retbyval;
    int32       retlen;         /* signed (for varlena) */
-   TransactionId xid;
+   TransactionId xid;          /* when the lookup was done */
    CommandId   cid;
 };
 
@@ -147,17 +147,17 @@ static struct fp_info last_fp = {InvalidOid};
  * valid_fp_info
  *
  * RETURNS:
- *     1 if the state in 'fip' is valid
- *     0 otherwise
+ *     T if the state in 'fip' is valid for the given func OID
+ *     F otherwise
  *
- * "valid" means:
+ * "invalid" means:
  * The saved state was either uninitialized, for another function,
  * or from a previous command. (Commands can do updates, which
  * may invalidate catalog entries for subsequent commands. This
  * is overly pessimistic but since there is no smarter invalidation
  * scheme...).
  */
-static int
+static bool
 valid_fp_info(Oid func_id, struct fp_info * fip)
 {
    Assert(OidIsValid(func_id));
@@ -212,11 +212,10 @@ update_fp_info(Oid func_id, struct fp_info * fip)
             func_id);
    }
    pp = (Form_pg_proc) GETSTRUCT(func_htp);
-   fip->nargs = pp->pronargs;
    rettype = pp->prorettype;
    argtypes = pp->proargtypes;
 
-   for (i = 0; i < fip->nargs; ++i)
+   for (i = 0; i < fip->flinfo.fn_nargs; ++i)
    {
        if (OidIsValid(argtypes[i]))
        {
@@ -252,6 +251,8 @@ update_fp_info(Oid func_id, struct fp_info * fip)
    fip->xid = GetCurrentTransactionId();
    fip->cid = GetCurrentCommandId();
 
+   fmgr_info(func_id, &fip->flinfo);
+
    /*
     * This must be last!
     */
@@ -279,11 +280,9 @@ HandleFunctionRequest()
    int         argsize;
    int         nargs;
    int         tmp;
-   char       *arg[FUNC_MAX_ARGS];
-   char       *retval;
-   bool        isNull;
+   FunctionCallInfoData fcinfo;
+   Datum       retval;
    int         i;
-   uint32      palloced;
    char       *p;
    struct fp_info *fip;
 
@@ -305,89 +304,81 @@ HandleFunctionRequest()
     * XXX FIXME: elog() here means we lose sync with the frontend, since
     * we have not swallowed all of its input message.  What should happen
     * is we absorb all of the input message per protocol syntax, and
-    * *then* do error checking and elog if appropriate.
+    * *then* do error checking (including lookup of the given function ID)
+    * and elog if appropriate.  Unfortunately, because we cannot even read
+    * the message properly without knowing whether the data types are
+    * pass-by-ref or pass-by-value, it's not all that easy to fix :-(.
+    * This protocol is misdesigned.
     */
 
-   if (fip->nargs != nargs)
+   if (fip->flinfo.fn_nargs != nargs || nargs > FUNC_MAX_ARGS)
    {
        elog(ERROR, "HandleFunctionRequest: actual arguments (%d) != registered arguments (%d)",
-            nargs, fip->nargs);
+            nargs, fip->flinfo.fn_nargs);
    }
 
+   MemSet(&fcinfo, 0, sizeof(fcinfo));
+   fcinfo.flinfo = &fip->flinfo;
+   fcinfo.nargs = nargs;
+
    /*
-    * Copy arguments into arg vector.  If we palloc() an argument, we
-    * need to remember, so that we pfree() it after the call.
+    * Copy supplied arguments into arg vector.  Note there is no way for
+    * frontend to specify a NULL argument --- more misdesign.
     */
-   palloced = 0x0;
-   for (i = 0; i < FUNC_MAX_ARGS; ++i)
+   for (i = 0; i < nargs; ++i)
    {
-       if (i >= nargs)
-           arg[i] = (char *) NULL;
-       else
-       {
-           if (pq_getint(&argsize, 4))
+       if (pq_getint(&argsize, 4))
+           return EOF;
+       if (fip->argbyval[i])
+       {                       /* by-value */
+           if (argsize < 1 || argsize > 4)
+               elog(ERROR, "HandleFunctionRequest: bogus argsize %d",
+                    argsize);
+           /* XXX should we demand argsize == fip->arglen[i] ? */
+           if (pq_getint(&tmp, argsize))
                return EOF;
-
-           Assert(argsize > 0);
-           if (fip->argbyval[i])
-           {                   /* by-value */
-               Assert(argsize <= 4);
-               if (pq_getint(&tmp, argsize))
+           fcinfo.arg[i] = (Datum) tmp;
+       }
+       else
+       {                       /* by-reference ... */
+           if (fip->arglen[i] < 0)
+           {                   /* ... varlena */
+               if (argsize < 0)
+                   elog(ERROR, "HandleFunctionRequest: bogus argsize %d",
+                        argsize);
+               /* I suspect this +1 isn't really needed - tgl 5/2000 */
+               p = palloc(argsize + VARHDRSZ + 1); /* Added +1 to solve
+                                                    * memory leak - Peter
+                                                    * 98 Jan 6 */
+               VARSIZE(p) = argsize + VARHDRSZ;
+               if (pq_getbytes(VARDATA(p), argsize))
                    return EOF;
-               arg[i] = (char *) tmp;
            }
            else
-           {                   /* by-reference ... */
-               if (fip->arglen[i] < 0)
-               {               /* ... varlena */
-                   if (!(p = palloc(argsize + VARHDRSZ + 1)))  /* Added +1 to solve
-                                                                * memory leak - Peter
-                                                                * 98 Jan 6 */
-                       elog(ERROR, "HandleFunctionRequest: palloc failed");
-                   VARSIZE(p) = argsize + VARHDRSZ;
-                   if (pq_getbytes(VARDATA(p), argsize))
-                       return EOF;
-               }
-               else
-               {               /* ... fixed */
-                   /* XXX cross our fingers and trust "argsize" */
-                   if (!(p = palloc(argsize + 1)))
-                       elog(ERROR, "HandleFunctionRequest: palloc failed");
-                   if (pq_getbytes(p, argsize))
-                       return EOF;
-               }
-               palloced |= (1 << i);
-               arg[i] = p;
+           {                   /* ... fixed */
+               if (argsize != fip->arglen[i])
+                   elog(ERROR, "HandleFunctionRequest: bogus argsize %d, should be %d",
+                        argsize, fip->arglen[i]);
+               p = palloc(argsize + 1); /* +1 in case argsize is 0 */
+               if (pq_getbytes(p, argsize))
+                   return EOF;
            }
+           fcinfo.arg[i] = PointerGetDatum(p);
        }
    }
 
-#ifndef NO_FASTPATH
-   retval = fmgr_array_args(fid, nargs, arg, &isNull);
-#else
-   retval = NULL;
-#endif  /* NO_FASTPATH */
-
-   /* free palloc'ed arguments */
-   for (i = 0; i < nargs; ++i)
-   {
-       if (palloced & (1 << i))
-           pfree(arg[i]);
-   }
-
-   /*
-    * If this is an ordinary query (not a retrieve portal p ...), then we
-    * return the data to the user.  If the return value was palloc'ed,
-    * then it must also be freed.
-    */
-#ifndef NO_FASTPATH
-   SendFunctionResult(fid, retval, fip->retbyval, fip->retlen);
+#ifdef NO_FASTPATH
+   /* force a NULL return */
+   retval = (Datum) 0;
+   fcinfo.isnull = true;
 #else
-   SendFunctionResult(fid, retval, fip->retbyval, 0);
+   retval = FunctionCallInvoke(&fcinfo);
 #endif  /* NO_FASTPATH */
 
-   if (!fip->retbyval)
-       pfree(retval);
+   if (fcinfo.isnull)
+       SendFunctionResult(retval, fip->retbyval, 0);
+   else
+       SendFunctionResult(retval, fip->retbyval, fip->retlen);
 
    return 0;
 }
index 975e2a0f9a2866804b27fa8d3cb40a372e372404..f075ac28376bdcec8c7aac270a6a853a0a2645c1 100644 (file)
@@ -1,14 +1,15 @@
 #!/bin/sh
 #-------------------------------------------------------------------------
 #
-# Gen_fmgrtab.sh--
-#    shell script to generate fmgr.h and fmgrtab.c from pg_proc.h
+# Gen_fmgrtab.sh
+#    shell script to generate fmgroids.h and fmgrtab.c from pg_proc.h
 #
-# Copyright (c) 1994, Regents of the University of California
+# Portions Copyright (c) 1996-2000, PostgreSQL, Inc
+# Portions Copyright (c) 1994, Regents of the University of California
 #
 #
 # IDENTIFICATION
-#    $Header: /cvsroot/pgsql/src/backend/utils/Attic/Gen_fmgrtab.sh.in,v 1.21 2000/05/22 02:34:21 momjian Exp $
+#    $Header: /cvsroot/pgsql/src/backend/utils/Attic/Gen_fmgrtab.sh.in,v 1.22 2000/05/28 17:56:05 tgl Exp $
 #
 # NOTES
 #    Passes any -D options on to cpp prior to generating the list
 #
 #-------------------------------------------------------------------------
 
-if [ $? != 0 ]
-then
-   echo `basename $0`: Bad option
-   exit 1
-fi
-
 BKIOPTS=''
 
 #
@@ -32,7 +27,7 @@ for opt in $*
 do
    case $opt in
    -D) BKIOPTS="$BKIOPTS -D$2"; shift; shift;;
-   -D*) BKIOPTS="$BKIOPTS $1";shift;;
+   -D*) BKIOPTS="$BKIOPTS $1"; shift;;
    --) shift; break;;
    -*) shift;;
    esac
@@ -41,8 +36,8 @@ done
 INFILE=$1
 RAWFILE=fmgr.raw
 CPPTMPFILE=fmgrtmp.c
-HFILE=fmgr.h
-TABCFILE=fmgrtab.c
+OIDSFILE=fmgroids.h
+TABLEFILE=fmgrtab.c
 
 #
 # Generate the file containing raw pg_proc tuple data
@@ -63,7 +58,8 @@ sed   -e 's/^.*OID[^=]*=[^0-9]*//' \
    -e 's/[     ]*).*$//' | \
 awk '
 /^#/       { print; next; }
-$4 == "11" { print; next; }' > $CPPTMPFILE
+$4 == "11" { print; next; }
+$4 == "12" { print; next; }' > $CPPTMPFILE
 
 @CPP@ $BKIOPTS $CPPTMPFILE | \
 egrep '^[0-9]' | \
@@ -72,18 +68,21 @@ sort -n > $RAWFILE
 rm -f $CPPTMPFILE
 
 #
-# Generate fmgr.h
+# Generate fmgroids.h
 #
-cat > $HFILE <
+cat > $OIDSFILE <
 /*-------------------------------------------------------------------------
  *
- * $HFILE--
- *    Definitions for using internal procedures.
+ * $OIDSFILE
+ *    Macros that define the OIDs of built-in functions.
  *
+ * These macros can be used to avoid a catalog lookup when a specific
+ * fmgr-callable function needs to be referenced.
  *
- * Copyright (c) 1994, Regents of the University of California
+ * Portions Copyright (c) 1996-2000, PostgreSQL, Inc
+ * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $Id: Gen_fmgrtab.sh.in,v 1.21 2000/05/22 02:34:21 momjian Exp $
+ * $Id: Gen_fmgrtab.sh.in,v 1.22 2000/05/28 17:56:05 tgl Exp $
  *
  * NOTES
  * ******************************
@@ -91,77 +90,12 @@ cat > $HFILE <
  * ******************************
  *
  * It has been GENERATED by $0
- * from $1
+ * from $INFILE
  *
  *-------------------------------------------------------------------------
  */
-#ifndef    FMGR_H
-#define FMGR_H
-
-#include "postgres.h"
-
-typedef struct {
-    char *data[FUNC_MAX_ARGS];
-} FmgrValues;
-
-typedef struct {
-    func_ptr   fn_addr;
-    func_ptr   fn_plhandler;
-    Oid        fn_oid;
-    int        fn_nargs;
-} FmgrInfo;
-
-/*
- * defined in fmgr.c
- */
-extern char *fmgr_c(FmgrInfo *finfo, FmgrValues *values, bool *isNull);
-extern void fmgr_info(Oid procedureId, FmgrInfo *finfo);
-extern char *fmgr(Oid procedureId, ... );
-extern char *fmgr_ptr(FmgrInfo *finfo, ... );
-extern char *fmgr_array_args(Oid procedureId, int nargs, 
-                char *args[], bool *isNull);
-
-/*
- * defined in dfmgr.c
- */
-extern func_ptr fmgr_dynamic(Oid procedureId, int *pronargs);
-extern void load_file(char *filename);
-
-/*
- * For performance reasons, we often want to simply jump through a
- * a function pointer (if it's valid, that is).  These calls have
- * been macroized so we can run them through a routine that does
- * sanity-checking (and so we can track them down more easily when
- * we must).
- */
-
-/* We don't make this static so fmgr_faddr() macros can access it */
-extern FmgrInfo        *fmgr_pl_finfo;
-
-#define fmgr_faddr(finfo) \
-( \
-   fmgr_pl_finfo = (finfo), \
-   (func_ptr)(finfo)->fn_addr \
-)
-
-#ifdef TRACE_FMGR_PTR
-#define    FMGR_PTR2(FINFO, ARG1, ARG2) \
-   fmgr_ptr(FINFO, 2, ARG1, ARG2)
-#else
-#define    FMGR_PTR2(FINFO, ARG1, ARG2) \
-( \
-   ((FINFO)->fn_addr) ? \
-       (*(fmgr_faddr(FINFO)))(ARG1, ARG2) \
-   : \
-       fmgr((FINFO)->fn_oid, ARG1, ARG2) \
-)
-#endif
-
-/*
- * Flags for the builtin oprrest selectivity routines.
- */
-#define    SEL_CONSTANT    1   /* constant does not vary (not a parameter) */
-#define    SEL_RIGHT   2   /* constant appears to right of operator */
+#ifndef    FMGROIDS_H
+#define FMGROIDS_H
 
 /*
  * Constant macros for the OIDs of entries in pg_proc.
@@ -174,30 +108,33 @@ FuNkYfMgRsTuFf
 tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' < $RAWFILE | \
 awk '
 BEGIN  { OFS = ""; }
-   { if (seenit[$2]++ == 0) print "#define F_", $2, " ", $1; }' >> $HFILE
+   { if (seenit[$2]++ == 0) print "#define F_", $2, " ", $1; }' >> $OIDSFILE
 
-cat >> $HFILE <
+cat >> $OIDSFILE <
 
-#endif /* FMGR_H */
+#endif /* FMGROIDS_H */
 FuNkYfMgRsTuFf
 
 #
-# Generate fmgr function table file.
+# Generate fmgr's built-in-function table.
 #
-# Print out the bogus function declarations, then the table that
-# refers to them.
+# Print out the function declarations, then the table that refers to them.
+# NB: the function declarations are bogus in the case of old-style functions,
+# although they should be correct for new-style.  Therefore we need to compile
+# this table definition as a separate C file that won't need to include any
+# "real" declarations for those functions!
 #
-cat > $TABCFILE <
+cat > $TABLEFILE <
 /*-------------------------------------------------------------------------
  *
- * $TABCFILE--
+ * $TABLEFILE
  *    The function manager's table of internal functions.
  *
- * Copyright (c) 1994, Regents of the University of California
- *
+ * Portions Copyright (c) 1996-2000, PostgreSQL, Inc
+ * Portions Copyright (c) 1994, Regents of the University of California
  *
  * IDENTIFICATION
- *    $Header: /cvsroot/pgsql/src/backend/utils/Attic/Gen_fmgrtab.sh.in,v 1.21 2000/05/22 02:34:21 momjian Exp $
+ *    $Header: /cvsroot/pgsql/src/backend/utils/Attic/Gen_fmgrtab.sh.in,v 1.22 2000/05/28 17:56:05 tgl Exp $
  *
  * NOTES
  *
@@ -206,72 +143,41 @@ cat > $TABCFILE <
  * ******************************
  *
  * It has been GENERATED by $0
- * from $1
+ * from $INFILE
  *
- * We lie here to cc about the return type and arguments of the
+ * We lie here to cc about the return type and arguments of old-style
  * builtin functions; all ld cares about is the fact that it
  * will need to resolve an external function reference.
  *
  *-------------------------------------------------------------------------
  */
 
-#include 
 #include "postgres.h"
+
 #include "utils/fmgrtab.h"
 
 FuNkYfMgRtAbStUfF
 
-awk '{ print "extern char *", $(NF-1), "();"; }' $RAWFILE >> $TABCFILE
+awk '{ print "extern Datum", $(NF-1), "(PG_FUNCTION_ARGS);"; }' $RAWFILE >> $TABLEFILE
 
-cat >> $TABCFILE <
+cat >> $TABLEFILE <
 
-static FmgrCall fmgr_builtins[] = {
+const FmgrBuiltin fmgr_builtins[] = {
 FuNkYfMgRtAbStUfF
 
-awk '{ printf ("  {%d, %d, %s, \"%s\" },\n"), $1, $8, $(NF-1), $(NF-1) }' $RAWFILE >> $TABCFILE
+awk '{ printf ("  { %d, \"%s\", %d, %s, %s, %s },\n"), \
+   $1, $(NF-1), $9, \
+   ($8 == "t") ? "true" : "false", \
+   ($4 == "11") ? "true" : "false", \
+   $(NF-1) }' $RAWFILE >> $TABLEFILE
 
-cat >> $TABCFILE <
+cat >> $TABLEFILE <
   /* dummy entry is easier than getting rid of comma after last real one */
-  { 0, 0, (func_ptr) NULL, NULL }
+  { 0, NULL, 0, false, false, (PGFunction) NULL }
 };
 
-/* Note FMGR_NBUILTINS excludes the dummy entry */
-#define FMGR_NBUILTINS  ((sizeof(fmgr_builtins) / sizeof(FmgrCall)) - 1)
-
-FmgrCall *fmgr_isbuiltin(Oid id)
-{
-    int    low = 0;
-    int    high = FMGR_NBUILTINS - 1;
-
-    /* Loop invariant: low is the first index that could contain target
-     * entry, and high is the last index that could contain it.
-     */
-   while (low <= high) {
-       int i = (high + low) / 2;
-       FmgrCall * ptr = &fmgr_builtins[i];
-       if (id == ptr->proid)
-           return ptr;
-       else if (id > ptr->proid)
-           low = i + 1;
-       else
-           high = i - 1;
-   }
-   return (FmgrCall *) NULL;
-}
-
-func_ptr fmgr_lookupByName(char *name) 
-{
-   /* Lookup a builtin by name.  Note there can be more than one entry in
-    * the array matching this name, but they should all point to the same
-    * routine.
-    */
-    int i;
-    for (i=0; i
-       if (strcmp(name, fmgr_builtins[i].funcName) == 0)
-           return fmgr_builtins[i].func;
-    }
-    return (func_ptr) NULL;
-}
+/* Note fmgr_nbuiltins excludes the dummy entry */
+const int fmgr_nbuiltins = (sizeof(fmgr_builtins) / sizeof(FmgrBuiltin)) - 1;
 
 FuNkYfMgRtAbStUfF
 
index e37c85761e684be3e29c532cc1d5b6a25a52fc3d..eba9b13af29671956f2d44deb0dcd366d17208fd 100644 (file)
@@ -4,12 +4,12 @@
 #    Makefile for utils
 #
 # IDENTIFICATION
-#    $Header: /cvsroot/pgsql/src/backend/utils/Makefile,v 1.10 1999/12/13 22:34:28 momjian Exp $
+#    $Header: /cvsroot/pgsql/src/backend/utils/Makefile,v 1.11 2000/05/28 17:56:05 tgl Exp $
 #
 #-------------------------------------------------------------------------
 
 SRCDIR = ../..
-include ../../Makefile.global
+include $(SRCDIR)/Makefile.global
 
 INCLUDE_OPT = -I.. 
 
@@ -35,19 +35,14 @@ SUBSYS.o: $(OBJS)
 submake:
    for i in $(DIRS); do $(MAKE) -C $$i SUBSYS.o; done
 
-fmgrtab.o: ../fmgr.h
-
-../fmgr.h: 
-   $(MAKE) -C .. fmgr.h
-
-fmgr.h fmgrtab.c: ./Gen_fmgrtab.sh ../../include/catalog/pg_proc.h
-   sh $(SHOPTS) Gen_fmgrtab.sh ../../include/catalog/pg_proc.h
+fmgroids.h fmgrtab.c: Gen_fmgrtab.sh $(SRCDIR)/include/catalog/pg_proc.h
+   $(SHELL) $(SHOPTS) Gen_fmgrtab.sh $(SRCDIR)/include/catalog/pg_proc.h
 
 clean:
-   rm -f SUBSYS.o fmgr.h fmgrtab.o fmgrtab.c
+   rm -f SUBSYS.o fmgroids.h fmgrtab.o fmgrtab.c
    for i in $(DIRS); do $(MAKE) -C $$i clean; done
 
-dep depend: fmgr.h fmgrtab.c
+dep depend: fmgroids.h fmgrtab.c
    for i in $(DIRS); do $(MAKE) -C $$i depend; done
 
 ifeq (depend,$(wildcard depend))
index 018352df1ad7b8dd53aa31aedb782fac9e28b080..a30a920b6a46998e718467004c4130f453e173c6 100644 (file)
@@ -3,6 +3,12 @@
  * int8.c
  *   Internal 64-bit integer operations
  *
+ * Portions Copyright (c) 1996-2000, PostgreSQL, Inc
+ * Portions Copyright (c) 1994, Regents of the University of California
+ *
+ * IDENTIFICATION
+ *   $Header: /cvsroot/pgsql/src/backend/utils/adt/int8.c,v 1.19 2000/05/28 17:56:05 tgl Exp $
+ *
  *-------------------------------------------------------------------------
  */
 #include 
 
 #include "utils/int8.h"
 
+/* this should be set in config.h, but just in case it wasn't: */
+#ifndef INT64_FORMAT
+#define INT64_FORMAT "%ld"
+#endif
+
 #define MAXINT8LEN     25
 
 #ifndef INT_MAX
index 4060a8466552c28b4b45541fb7764e5fdde0db9e..6db76ac8c5a49f112baa51f3f547d39ca0e3e890 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *   $Header: /cvsroot/pgsql/src/backend/utils/adt/regproc.c,v 1.54 2000/04/12 17:15:51 momjian Exp $
+ *   $Header: /cvsroot/pgsql/src/backend/utils/adt/regproc.c,v 1.55 2000/05/28 17:56:05 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -22,6 +22,7 @@
 #include "catalog/pg_type.h"
 #include "miscadmin.h"
 #include "utils/builtins.h"
+#include "utils/fmgroids.h"
 #include "utils/syscache.h"
 
 /*****************************************************************************
index 4718dc668a7313fb5a21d6b50c666f0360acf733..c93ef767d8e2f6eaa45fa7c646d4cb4e87223640 100644 (file)
@@ -15,7 +15,7 @@
  *
  *
  * IDENTIFICATION
- *   $Header: /cvsroot/pgsql/src/backend/utils/adt/selfuncs.c,v 1.66 2000/05/26 17:19:15 tgl Exp $
+ *   $Header: /cvsroot/pgsql/src/backend/utils/adt/selfuncs.c,v 1.67 2000/05/28 17:56:06 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -889,17 +889,17 @@ convert_numeric_to_scalar(Datum value, Oid typid)
    switch (typid)
    {
        case BOOLOID:
-           return (double) DatumGetUInt8(value);
+           return (double) DatumGetBool(value);
        case INT2OID:
            return (double) DatumGetInt16(value);
        case INT4OID:
            return (double) DatumGetInt32(value);
        case INT8OID:
-           return (double) (*i8tod((int64 *) DatumGetPointer(value)));
+           return (double) DatumGetInt64(value);
        case FLOAT4OID:
-           return (double) (*DatumGetFloat32(value));
+           return (double) DatumGetFloat4(value);
        case FLOAT8OID:
-           return (double) (*DatumGetFloat64(value));
+           return (double) DatumGetFloat8(value);
        case NUMERICOID:
            return (double) (*numeric_float8((Numeric) DatumGetPointer(value)));
        case OIDOID:
index dbc5ea4b8fadd6b6324e0b75fb4c00b111f5790e..cc629c3ad858a83303082ebc8ddef6dc9064a355 100644 (file)
@@ -10,7 +10,7 @@
  *
  *
  * IDENTIFICATION
- *   $Header: /cvsroot/pgsql/src/backend/utils/adt/Attic/sets.c,v 1.30 2000/01/26 05:57:14 momjian Exp $
+ *   $Header: /cvsroot/pgsql/src/backend/utils/adt/Attic/sets.c,v 1.31 2000/05/28 17:56:06 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -56,8 +56,9 @@ SetDefine(char *querystr, char *typename)
                             "sql",     /* languageName */
                             querystr,  /* sourceCode */
                             fileName,  /* fileName */
-                            false,     /* canCache */
                             true,      /* trusted */
+                            false,     /* canCache XXX appropriate? */
+                            false,     /* isStrict XXX appropriate? */
                             100,       /* byte_pct */
                             0, /* perbyte_cpu */
                             0, /* percall_cpu */
index b593920b1a819a6c7e32178fd2a88d525742424c..e5fb546ca70256f8843fe84618947c6ab6ebeeaf 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *   $Header: /cvsroot/pgsql/src/backend/utils/cache/catcache.c,v 1.63 2000/04/12 17:15:52 momjian Exp $
+ *   $Header: /cvsroot/pgsql/src/backend/utils/cache/catcache.c,v 1.64 2000/05/28 17:56:06 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -24,6 +24,7 @@
 #include "catalog/indexing.h"
 #include "miscadmin.h"
 #include "utils/builtins.h"
+#include "utils/fmgroids.h"
 #include "utils/catcache.h"
 #include "utils/syscache.h"
 
index 26f4cbd8d06d1124010355e84333e3b31715ab00..33528d7bb20b8ff98438bc996b9fb11a89f1ffa0 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *   $Header: /cvsroot/pgsql/src/backend/utils/cache/Attic/fcache.c,v 1.30 2000/04/12 17:15:53 momjian Exp $
+ *   $Header: /cvsroot/pgsql/src/backend/utils/cache/Attic/fcache.c,v 1.31 2000/05/28 17:56:06 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
 
 static Oid GetDynamicFuncArgType(Var *arg, ExprContext *econtext);
 static FunctionCachePtr init_fcache(Oid foid,
-           bool use_syscache,
-           List *argList,
-           ExprContext *econtext);
+                                   List *argList,
+                                   ExprContext *econtext);
 
-/*-----------------------------------------------------------------
- *
- * Initialize the 'FunctionCache' given the PG_PROC oid.
- *
- *
- * NOTE:  This function can be called when the system cache is being
- *       initialized.  Therefore, use_syscache should ONLY be true
- *       when the function return type is interesting (ie: set_fcache).
- *-----------------------------------------------------------------
- */
 #define FuncArgTypeIsDynamic(arg) \
    (IsA(arg,Var) && ((Var*)arg)->varattno == InvalidAttrNumber)
 
@@ -53,7 +42,6 @@ GetDynamicFuncArgType(Var *arg, ExprContext *econtext)
    rtid = ((Var *) arg)->varno;
    relname = (char *) getrelname(rtid, econtext->ecxt_range_table);
 
-
    tup = SearchSysCacheTuple(TYPENAME,
                              PointerGetDatum(relname),
                              0, 0, 0);
@@ -64,9 +52,14 @@ GetDynamicFuncArgType(Var *arg, ExprContext *econtext)
    return tup->t_data->t_oid;
 }
 
+/*-----------------------------------------------------------------
+ *
+ * Initialize a 'FunctionCache' struct given the PG_PROC oid.
+ *
+ *-----------------------------------------------------------------
+ */
 static FunctionCachePtr
 init_fcache(Oid foid,
-           bool use_syscache,
            List *argList,
            ExprContext *econtext)
 {
@@ -79,16 +72,13 @@ init_fcache(Oid foid,
    text       *tmp;
    bool        isNull;
 
+   retval = (FunctionCachePtr) palloc(sizeof(FunctionCache));
+   MemSet(retval, 0, sizeof(FunctionCache));
+
    /* ----------------
     *   get the procedure tuple corresponding to the given functionOid
     * ----------------
     */
-   retval = (FunctionCachePtr) palloc(sizeof(FunctionCache));
-   memset(retval, 0, sizeof(FunctionCache));
-
-   if (!use_syscache)
-       elog(ERROR, "what the ????, init the fcache without the catalogs?");
-
    procedureTuple = SearchSysCacheTuple(PROCOID,
                                         ObjectIdGetDatum(foid),
                                         0, 0, 0);
@@ -114,8 +104,7 @@ init_fcache(Oid foid,
    typeStruct = (Form_pg_type) GETSTRUCT(typeTuple);
 
    /* ----------------
-    *   get the type length and by-value from the type tuple and
-    *   save the information in our one element cache.
+    *   get the type length and by-value flag from the type tuple
     * ----------------
     */
    retval->typlen = typeStruct->typlen;
@@ -136,10 +125,9 @@ init_fcache(Oid foid,
    retval->foid = foid;
    retval->language = procedureStruct->prolang;
    retval->func_state = (char *) NULL;
-   retval->setArg = NULL;
+   retval->setArg = (Datum) 0;
    retval->hasSetArg = false;
    retval->oneResult = !procedureStruct->proretset;
-   retval->istrusted = procedureStruct->proistrusted;
 
    /*
     * If we are returning exactly one result then we have to copy tuples
@@ -162,9 +150,8 @@ init_fcache(Oid foid,
        slot->ttc_tupleDescriptor = (TupleDesc) NULL;
        slot->ttc_buffer = InvalidBuffer;
        slot->ttc_whichplan = -1;
-       retval->funcSlot = (Pointer) slot;
 
-       relationTuple = (HeapTuple)
+       relationTuple =
            SearchSysCacheTuple(RELNAME,
                                PointerGetDatum(&typeStruct->typname),
                                0, 0, 0);
@@ -177,10 +164,12 @@ init_fcache(Oid foid,
        else
            td = CreateTemplateTupleDesc(1);
 
-       ((TupleTableSlot *) retval->funcSlot)->ttc_tupleDescriptor = td;
+       slot->ttc_tupleDescriptor = td;
+
+       retval->funcSlot = (Pointer) slot;
    }
    else
-       retval->funcSlot = (char *) NULL;
+       retval->funcSlot = (Pointer) NULL;
 
    nargs = procedureStruct->pronargs;
    retval->nargs = nargs;
@@ -189,8 +178,6 @@ init_fcache(Oid foid,
    {
        Oid        *argTypes;
 
-       retval->nullVect = (bool *) palloc(retval->nargs * sizeof(bool));
-
        if (retval->language == SQLlanguageId)
        {
            int         i;
@@ -218,7 +205,6 @@ init_fcache(Oid foid,
    else
    {
        retval->argOidVect = (Oid *) NULL;
-       retval->nullVect = (BoolPtr) NULL;
    }
 
    if (procedureStruct->prolang == SQLlanguageId)
@@ -257,7 +243,7 @@ init_fcache(Oid foid,
        retval->nargs = retval->func.fn_nargs;
    }
    else
-       retval->func.fn_addr = (func_ptr) NULL;
+       retval->func.fn_addr = (PGFunction) NULL;
 
    return retval;
 }
@@ -269,7 +255,7 @@ setFcache(Node *node, Oid foid, List *argList, ExprContext *econtext)
    Oper       *onode;
    FunctionCachePtr fcache;
 
-   fcache = init_fcache(foid, true, argList, econtext);
+   fcache = init_fcache(foid, argList, econtext);
 
    if (IsA(node, Oper))
    {
index b9e86d905ecb238617bb6b11a57aa834d005f7c0..30f422de7f076137f6c5d0183745d711a55913f2 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *   $Header: /cvsroot/pgsql/src/backend/utils/cache/relcache.c,v 1.96 2000/05/21 02:28:55 tgl Exp $
+ *   $Header: /cvsroot/pgsql/src/backend/utils/cache/relcache.c,v 1.97 2000/05/28 17:56:06 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -58,6 +58,7 @@
 #include "storage/bufmgr.h"
 #include "storage/smgr.h"
 #include "utils/catcache.h"
+#include "utils/fmgroids.h"
 #include "utils/relcache.h"
 #include "utils/temprel.h"
 
index a460fab05c2c5d28e40c13487bf0f9f43be16860..2dfb54391c319293f4243c99be379ff0c3674768 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *   $Header: /cvsroot/pgsql/src/backend/utils/fmgr/dfmgr.c,v 1.39 2000/04/12 17:15:57 momjian Exp $
+ *   $Header: /cvsroot/pgsql/src/backend/utils/fmgr/dfmgr.c,v 1.40 2000/05/28 17:56:07 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
 
 #include "postgres.h"
 
-#include "utils/dynamic_loader.h"
-
 #include "access/heapam.h"
-#include "catalog/catname.h"
 #include "catalog/pg_proc.h"
 #include "dynloader.h"
 #include "utils/builtins.h"
+#include "utils/dynamic_loader.h"
 #include "utils/syscache.h"
 
+
+/*
+ * List of dynamically loaded files.
+ */
+
+typedef struct df_files
+{
+   struct df_files *next;      /* List link */
+   dev_t       device;         /* Device file is on */
+   ino_t       inode;          /* Inode number of file */
+   void       *handle;         /* a handle for pg_dl* functions */
+   char        filename[1];    /* Full pathname of file */
+   /* we allocate the block big enough for actual length of pathname.
+    * filename[] must be last item in struct!
+    */
+} DynamicFileList;
+
 static DynamicFileList *file_list = (DynamicFileList *) NULL;
 static DynamicFileList *file_tail = (DynamicFileList *) NULL;
 
-#define NOT_EQUAL(A, B) (((A).st_ino != (B).inode) \
-                     || ((A).st_dev != (B).device))
+#define SAME_INODE(A,B) ((A).st_ino == (B).inode && (A).st_dev == (B).device)
 
-static Oid procedureId_save = -1;
-static int pronargs_save;
-static func_ptr user_fn_save = (func_ptr) NULL;
-static func_ptr handle_load(char *filename, char *funcname);
 
-func_ptr
-fmgr_dynamic(Oid procedureId, int *pronargs)
+PGFunction
+fmgr_dynamic(Oid functionId)
 {
    HeapTuple   procedureTuple;
    Form_pg_proc procedureStruct;
    char       *proname,
-              *linksymbol,
+              *prosrcstring,
               *probinstring;
-   char       *prosrcstring = NULL;
-   Datum       probinattr;
-   Datum       prosrcattr;
-   func_ptr    user_fn;
-   Relation    rel;
+   Datum       prosrcattr,
+               probinattr;
+   PGFunction  user_fn;
    bool        isnull;
 
-   /* Implement simple one-element cache for function lookups */
-   if (procedureId == procedureId_save)
-   {
-       *pronargs = pronargs_save;
-       return user_fn_save;
-   }
-
-   /*
-    * The procedure isn't a builtin, so we'll have to do a catalog lookup
-    * to find its pg_proc entry.  Moreover, since probin is varlena,
-    * we're going to have to use heap_getattr, which means we need the
-    * reldesc, which means we need to open the relation.  So we might as
-    * well do that first and get the benefit of SI inval if needed.
-    */
-   rel = heap_openr(ProcedureRelationName, AccessShareLock);
-
    procedureTuple = SearchSysCacheTuple(PROCOID,
-                                        ObjectIdGetDatum(procedureId),
+                                        ObjectIdGetDatum(functionId),
                                         0, 0, 0);
    if (!HeapTupleIsValid(procedureTuple))
-   {
-       elog(ERROR, "fmgr: Cache lookup failed for procedure %u\n",
-            procedureId);
-       return (func_ptr) NULL;
-   }
-
+       elog(ERROR, "fmgr_dynamic: function %u: cache lookup failed",
+            functionId);
    procedureStruct = (Form_pg_proc) GETSTRUCT(procedureTuple);
+
    proname = NameStr(procedureStruct->proname);
-   pronargs_save = *pronargs = procedureStruct->pronargs;
-   probinattr = heap_getattr(procedureTuple,
-                             Anum_pg_proc_probin,
-                             RelationGetDescr(rel), &isnull);
-   if (!PointerIsValid(probinattr) /* || isnull */ )
+
+   prosrcattr = SysCacheGetAttr(PROCOID, procedureTuple,
+                                Anum_pg_proc_prosrc, &isnull);
+   if (isnull || !PointerIsValid(prosrcattr))
    {
-       heap_close(rel, AccessShareLock);
-       elog(ERROR, "fmgr: Could not extract probin for %u from %s",
-            procedureId, ProcedureRelationName);
-       return (func_ptr) NULL;
+       elog(ERROR, "fmgr: Could not extract prosrc for %u from pg_proc",
+            functionId);
    }
-   probinstring = textout((struct varlena *) probinattr);
-
-   prosrcattr = heap_getattr(procedureTuple,
-                             Anum_pg_proc_prosrc,
-                             RelationGetDescr(rel), &isnull);
+   prosrcstring = textout((text *) DatumGetPointer(prosrcattr));
 
-   if (isnull)
-   {                           /* Use the proname for the link symbol */
-       linksymbol = proname;
-   }
-   else if (!PointerIsValid(prosrcattr))
-   {                           /* pg_proc must be messed up! */
-       heap_close(rel, AccessShareLock);
-       elog(ERROR, "fmgr: Could not extract prosrc for %u from %s",
-            procedureId, ProcedureRelationName);
-       return (func_ptr) NULL;
-   }
-   else
-   {                           /* The text in prosrcattr is either "-" or
-                                * a link symbol */
-       prosrcstring = textout((struct varlena *) prosrcattr);
-       if (strcmp(prosrcstring, "-") == 0)
-           linksymbol = proname;
-       else
-           linksymbol = prosrcstring;
+   probinattr = SysCacheGetAttr(PROCOID, procedureTuple,
+                                Anum_pg_proc_probin, &isnull);
+   if (isnull || !PointerIsValid(probinattr))
+   {
+       elog(ERROR, "fmgr: Could not extract probin for %u from pg_proc",
+            functionId);
    }
+   probinstring = textout((text *) DatumGetPointer(probinattr));
 
-   heap_close(rel, AccessShareLock);
-
-   user_fn = handle_load(probinstring, linksymbol);
+   user_fn = load_external_function(probinstring, prosrcstring);
 
+   pfree(prosrcstring);
    pfree(probinstring);
-   if (prosrcstring)
-       pfree(prosrcstring);
-
-   procedureId_save = procedureId;
-   user_fn_save = user_fn;
 
    return user_fn;
 }
 
-static func_ptr
-handle_load(char *filename, char *funcname)
+PGFunction
+load_external_function(char *filename, char *funcname)
 {
-   DynamicFileList *file_scanner = (DynamicFileList *) NULL;
-   func_ptr    retval = (func_ptr) NULL;
+   DynamicFileList *file_scanner;
+   PGFunction  retval;
    char       *load_error;
    struct stat stat_buf;
 
    /*
-    * Do this because loading files may screw up the dynamic function
-    * manager otherwise.
-    */
-   procedureId_save = -1;
-
-   /*
-    * Scan the list of loaded FILES to see if the function has been
-    * loaded.
+    * Scan the list of loaded FILES to see if the file has been loaded.
     */
-
-   if (filename != (char *) NULL)
+   for (file_scanner = file_list;
+        file_scanner != (DynamicFileList *) NULL &&
+            strcmp(filename, file_scanner->filename) != 0;
+        file_scanner = file_scanner->next)
+       ;
+   if (file_scanner == (DynamicFileList *) NULL)
    {
+       /*
+        * Check for same files - different paths (ie, symlink or link)
+        */
+       if (stat(filename, &stat_buf) == -1)
+           elog(ERROR, "stat failed on file '%s': %m", filename);
+
        for (file_scanner = file_list;
-            file_scanner != (DynamicFileList *) NULL
-            && file_scanner->filename != (char *) NULL
-            && strcmp(filename, file_scanner->filename) != 0;
+            file_scanner != (DynamicFileList *) NULL &&
+                !SAME_INODE(stat_buf, *file_scanner);
             file_scanner = file_scanner->next)
            ;
-       if (file_scanner == (DynamicFileList *) NULL)
-       {
-           if (stat(filename, &stat_buf) == -1)
-               elog(ERROR, "stat failed on file '%s': %m", filename);
-
-           for (file_scanner = file_list;
-                file_scanner != (DynamicFileList *) NULL
-                && (NOT_EQUAL(stat_buf, *file_scanner));
-                file_scanner = file_scanner->next)
-               ;
-
-           /*
-            * Same files - different paths (ie, symlink or link)
-            */
-           if (file_scanner != (DynamicFileList *) NULL)
-               strcpy(file_scanner->filename, filename);
-
-       }
    }
-   else
-       file_scanner = (DynamicFileList *) NULL;
-
-   /*
-    * File not loaded yet.
-    */
 
    if (file_scanner == (DynamicFileList *) NULL)
    {
-       if (file_list == (DynamicFileList *) NULL)
-       {
-           file_list = (DynamicFileList *)
-               malloc(sizeof(DynamicFileList));
-           file_scanner = file_list;
-       }
-       else
-       {
-           file_tail->next = (DynamicFileList *)
-               malloc(sizeof(DynamicFileList));
-           file_scanner = file_tail->next;
-       }
-       MemSet((char *) file_scanner, 0, sizeof(DynamicFileList));
+       /*
+        * File not loaded yet.
+        */
+       file_scanner = (DynamicFileList *)
+           malloc(sizeof(DynamicFileList) + strlen(filename));
+       if (file_scanner == NULL)
+           elog(FATAL, "Out of memory in load_external_function");
 
+       MemSet((char *) file_scanner, 0, sizeof(DynamicFileList));
        strcpy(file_scanner->filename, filename);
        file_scanner->device = stat_buf.st_dev;
        file_scanner->inode = stat_buf.st_ino;
@@ -210,42 +147,36 @@ handle_load(char *filename, char *funcname)
        if (file_scanner->handle == (void *) NULL)
        {
            load_error = (char *) pg_dlerror();
-           if (file_scanner == file_list)
-               file_list = (DynamicFileList *) NULL;
-           else
-               file_tail->next = (DynamicFileList *) NULL;
-
            free((char *) file_scanner);
            elog(ERROR, "Load of file %s failed: %s", filename, load_error);
        }
 
-       /*
-        * Just load the file - we are done with that so return.
-        */
+       /* OK to link it into list */
+       if (file_list == (DynamicFileList *) NULL)
+           file_list = file_scanner;
+       else
+           file_tail->next = file_scanner;
        file_tail = file_scanner;
-
-       if (funcname == (char *) NULL)
-           return (func_ptr) NULL;
    }
 
-   retval = (func_ptr) pg_dlsym(file_scanner->handle, funcname);
+   /*
+    * If funcname is NULL, we only wanted to load the file.
+    */
+   if (funcname == (char *) NULL)
+       return (PGFunction) NULL;
+
+   retval = pg_dlsym(file_scanner->handle, funcname);
 
-   if (retval == (func_ptr) NULL)
+   if (retval == (PGFunction) NULL)
        elog(ERROR, "Can't find function %s in file %s", funcname, filename);
 
    return retval;
 }
 
 /*
- * This function loads files by the following:
- *
- * If the file is already loaded:
- * o  Zero out that file's loaded space (so it doesn't screw up linking)
- * o  Free all space associated with that file
- * o  Free that file's descriptor.
- *
- * Now load the file by calling handle_load with a NULL argument as the
- * function.
+ * This function loads a shlib file without looking up any particular
+ * function in it.  If the same shlib has previously been loaded,
+ * unload and reload it.
  */
 void
 load_file(char *filename)
@@ -253,7 +184,6 @@ load_file(char *filename)
    DynamicFileList *file_scanner,
               *p;
    struct stat stat_buf;
-   int         done = 0;
 
    /*
     * We need to do stat() in order to determine whether this is the same
@@ -263,48 +193,32 @@ load_file(char *filename)
    if (stat(filename, &stat_buf) == -1)
        elog(ERROR, "LOAD: could not open file '%s': %m", filename);
 
-   if (file_list != (DynamicFileList *) NULL
-       && !NOT_EQUAL(stat_buf, *file_list))
+   if (file_list != (DynamicFileList *) NULL)
    {
-       file_scanner = file_list;
-       file_list = file_list->next;
-       pg_dlclose(file_scanner->handle);
-       free((char *) file_scanner);
-   }
-   else if (file_list != (DynamicFileList *) NULL)
-   {
-       file_scanner = file_list;
-       while (!done)
+       if (SAME_INODE(stat_buf, *file_list))
        {
-           if (file_scanner->next == (DynamicFileList *) NULL)
-               done = 1;
-           else if (!NOT_EQUAL(stat_buf, *(file_scanner->next)))
-               done = 1;
-           else
-               file_scanner = file_scanner->next;
+           p = file_list;
+           file_list = p->next;
+           pg_dlclose(p->handle);
+           free((char *) p);
        }
-
-       if (file_scanner->next != (DynamicFileList *) NULL)
+       else
        {
-           p = file_scanner->next;
-           file_scanner->next = file_scanner->next->next;
-           pg_dlclose(file_scanner->handle);
-           free((char *) p);
+           for (file_scanner = file_list;
+                file_scanner->next != (DynamicFileList *) NULL;
+                file_scanner = file_scanner->next)
+           {
+               if (SAME_INODE(stat_buf, *(file_scanner->next)))
+               {
+                   p = file_scanner->next;
+                   file_scanner->next = p->next;
+                   pg_dlclose(p->handle);
+                   free((char *) p);
+                   break;
+               }
+           }
        }
    }
-   handle_load(filename, (char *) NULL);
-}
-
-/* Is this used? bjm 1998/10/08   No. tgl 1999/02/07 */
-#ifdef NOT_USED
-func_ptr
-trigger_dynamic(char *filename, char *funcname)
-{
-   func_ptr    trigger_fn;
 
-   trigger_fn = handle_load(filename, funcname);
-
-   return trigger_fn;
+   load_external_function(filename, (char *) NULL);
 }
-
-#endif
index bdac32a2551c029d9c5bcf9f8b22d79d3e243637..793497834fd0f9c9d832862fef9dc40d756f5da5 100644 (file)
@@ -1,14 +1,14 @@
 /*-------------------------------------------------------------------------
  *
  * fmgr.c
- *   Interface routines for the table-driven function manager.
+ *   The Postgres function manager.
  *
  * Portions Copyright (c) 1996-2000, PostgreSQL, Inc
  * Portions Copyright (c) 1994, Regents of the University of California
  *
  *
  * IDENTIFICATION
- *   $Header: /cvsroot/pgsql/src/backend/utils/fmgr/fmgr.c,v 1.39 2000/05/22 02:34:22 momjian Exp $
+ *   $Header: /cvsroot/pgsql/src/backend/utils/fmgr/fmgr.c,v 1.40 2000/05/28 17:56:07 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
 
 #include "catalog/pg_language.h"
 #include "catalog/pg_proc.h"
-#include "commands/trigger.h"
+#include "commands/trigger.h"  /* TEMPORARY: for CurrentTriggerData */
 #include "utils/builtins.h"
 #include "utils/fmgrtab.h"
 #include "utils/syscache.h"
 
+static Datum fmgr_oldstyle(PG_FUNCTION_ARGS);
+static Datum fmgr_untrusted(PG_FUNCTION_ARGS);
+static Datum fmgr_sql(PG_FUNCTION_ARGS);
+
 
 /*
- * Interface for PL functions
- *
- * XXX: use of global fmgr_pl_finfo variable is really ugly.  FIXME
+ * Lookup routines for builtin-function table.  We can search by either Oid
+ * or name, but search by Oid is much faster.
  */
-FmgrInfo        *fmgr_pl_finfo;
 
-static char *
-fmgr_pl(char *arg0,...)
+static const FmgrBuiltin *
+fmgr_isbuiltin(Oid id)
 {
-   va_list     pvar;
-   FmgrValues  values;
-   int         n_arguments = fmgr_pl_finfo->fn_nargs;
-   bool        isNull = false;
-   int         i;
+   int     low = 0;
+   int     high = fmgr_nbuiltins - 1;
 
-   memset(&values, 0, sizeof(values));
+   /* Loop invariant: low is the first index that could contain target
+    * entry, and high is the last index that could contain it.
+    */
+   while (low <= high)
+   {
+       int                 i = (high + low) / 2;
+       const FmgrBuiltin  *ptr = &fmgr_builtins[i];
 
-   if (n_arguments > 0)
+       if (id == ptr->foid)
+           return ptr;
+       else if (id > ptr->foid)
+           low = i + 1;
+       else
+           high = i - 1;
+   }
+   return (const FmgrBuiltin *) NULL;
+}
+
+/*
+ * Lookup a builtin by name.  Note there can be more than one entry in
+ * the array with the same name, but they should all point to the same
+ * routine.
+ */
+static const FmgrBuiltin *
+fmgr_lookupByName(const char *name) 
+{
+   int i;
+
+   for (i = 0; i < fmgr_nbuiltins; i++)
    {
-       values.data[0] = arg0;
-       if (n_arguments > 1)
+       if (strcmp(name, fmgr_builtins[i].funcName) == 0)
+           return fmgr_builtins + i;
+    }
+   return (const FmgrBuiltin *) NULL;
+}
+
+/*
+ * This routine fills a FmgrInfo struct, given the OID
+ * of the function to be called.
+ */
+void
+fmgr_info(Oid functionId, FmgrInfo *finfo)
+{
+   const FmgrBuiltin *fbp;
+   HeapTuple   procedureTuple;
+   Form_pg_proc procedureStruct;
+   HeapTuple   languageTuple;
+   Form_pg_language languageStruct;
+   Oid         language;
+   char       *prosrc;
+
+   finfo->fn_oid = functionId;
+   finfo->fn_extra = NULL;
+
+   if ((fbp = fmgr_isbuiltin(functionId)) != NULL)
+   {
+       /*
+        * Fast path for builtin functions: don't bother consulting pg_proc
+        */
+       finfo->fn_nargs = fbp->nargs;
+       finfo->fn_strict = fbp->strict;
+       if (fbp->oldstyle)
        {
-           if (n_arguments > FUNC_MAX_ARGS)
-               elog(ERROR, "fmgr_pl: function %u: too many arguments (%d > %d)",
-                    fmgr_pl_finfo->fn_oid, n_arguments, FUNC_MAX_ARGS);
-           va_start(pvar, arg0);
-           for (i = 1; i < n_arguments; i++)
-               values.data[i] = va_arg(pvar, char *);
-           va_end(pvar);
+           finfo->fn_addr = fmgr_oldstyle;
+           finfo->fn_extra = (void *) fbp->func;
        }
+       else
+       {
+           finfo->fn_addr = fbp->func;
+       }
+       return;
    }
 
-   /* Call the PL handler */
-   CurrentTriggerData = NULL;
-   return (*(fmgr_pl_finfo->fn_plhandler)) (fmgr_pl_finfo,
-                                            &values,
-                                            &isNull);
-}
+   /* Otherwise we need the pg_proc entry */
+   procedureTuple = SearchSysCacheTuple(PROCOID,
+                                        ObjectIdGetDatum(functionId),
+                                        0, 0, 0);
+   if (!HeapTupleIsValid(procedureTuple))
+       elog(ERROR, "fmgr_info: function %u: cache lookup failed",
+            functionId);
+   procedureStruct = (Form_pg_proc) GETSTRUCT(procedureTuple);
 
+   finfo->fn_nargs = procedureStruct->pronargs;
+   finfo->fn_strict = procedureStruct->proisstrict;
 
-/*
- * Interface for untrusted functions
- */
+   if (!procedureStruct->proistrusted)
+   {
+       finfo->fn_addr = fmgr_untrusted;
+       return;
+   }
 
-static char *
-fmgr_untrusted(char *arg0,...)
-{
+   language = procedureStruct->prolang;
+   switch (language)
+   {
+       case INTERNALlanguageId:
+       case NEWINTERNALlanguageId:
+           /*
+            * For an ordinary builtin function, we should never get
+            * here because the isbuiltin() search above will have
+            * succeeded. However, if the user has done a CREATE
+            * FUNCTION to create an alias for a builtin function, we
+            * can end up here.  In that case we have to look up the
+            * function by name.  The name of the internal function is
+            * stored in prosrc (it doesn't have to be the same as the
+            * name of the alias!)
+            */
+           prosrc = textout(&(procedureStruct->prosrc));
+           fbp = fmgr_lookupByName(prosrc);
+           if (fbp == NULL)
+               elog(ERROR, "fmgr_info: function %s not in internal table",
+                    prosrc);
+           pfree(prosrc);
+           if (fbp->oldstyle)
+           {
+               finfo->fn_addr = fmgr_oldstyle;
+               finfo->fn_extra = (void *) fbp->func;
+           }
+           else
+           {
+               finfo->fn_addr = fbp->func;
+           }
+           break;
 
-   /*
-    * Currently these are unsupported.  Someday we might do something
-    * like forking a subprocess to execute 'em.
-    */
-   elog(ERROR, "Untrusted functions not supported.");
-   return NULL;                /* keep compiler happy */
+       case ClanguageId:
+           finfo->fn_addr = fmgr_oldstyle;
+           finfo->fn_extra = (void *) fmgr_dynamic(functionId);
+           break;
+
+       case NEWClanguageId:
+           finfo->fn_addr = fmgr_dynamic(functionId);
+           break;
+
+       case SQLlanguageId:
+           finfo->fn_addr = fmgr_sql;
+           break;
+
+       default:
+           /*
+            * Might be a created procedural language; try to look it up.
+            */
+           languageTuple = SearchSysCacheTuple(LANGOID,
+                                               ObjectIdGetDatum(language),
+                                               0, 0, 0);
+           if (!HeapTupleIsValid(languageTuple))
+           {
+               elog(ERROR, "fmgr_info: cache lookup for language %u failed",
+                    language);
+           }
+           languageStruct = (Form_pg_language) GETSTRUCT(languageTuple);
+           if (languageStruct->lanispl)
+           {
+               FmgrInfo    plfinfo;
+
+               fmgr_info(languageStruct->lanplcallfoid, &plfinfo);
+               finfo->fn_addr = plfinfo.fn_addr;
+               /*
+                * If lookup of the PL handler function produced nonnull
+                * fn_extra, complain --- it must be an oldstyle function!
+                * We no longer support oldstyle PL handlers.
+                */
+               if (plfinfo.fn_extra != NULL)
+                   elog(ERROR, "fmgr_info: language %u has old-style handler",
+                        language);
+           }
+           else
+           {
+               elog(ERROR, "fmgr_info: function %u: unsupported language %u",
+                    functionId, language);
+           }
+           break;
+   }
 }
 
 
 /*
- * Interface for SQL-language functions
+ * Specialized lookup routine for pg_proc.c: given the alleged name of
+ * an internal function, return the OID of the function's language.
+ * If the name is not known, return InvalidOid.
  */
-
-static char *
-fmgr_sql(char *arg0,...)
+Oid
+fmgr_internal_language(const char *proname)
 {
+   const FmgrBuiltin *fbp = fmgr_lookupByName(proname);
 
-   /*
-    * XXX It'd be really nice to support SQL functions anywhere that
-    * builtins are supported.  What would we have to do?  What pitfalls
-    * are there?
-    */
-   elog(ERROR, "SQL-language function not supported in this context.");
-   return NULL;                /* keep compiler happy */
+   if (fbp == NULL)
+       return InvalidOid;
+   return fbp->oldstyle ? INTERNALlanguageId : NEWINTERNALlanguageId;
 }
 
 
 /*
- * fmgr_c is not really for C functions only; it can be called for functions
- * in any language.  Many parts of the system use this entry point if they
- * want to pass the arguments in an array rather than as explicit arguments.
+ * Handler for old-style internal and "C" language functions
+ *
+ * We expect fmgr_info to have placed the old-style function's address
+ * in fn_extra of *flinfo.  This is a bit of a hack since fn_extra is really
+ * void * which might be a different size than a pointer to function, but
+ * it will work on any machine that our old-style call interface works on...
  */
-
-char *
-fmgr_c(FmgrInfo *finfo,
-      FmgrValues *values,
-      bool *isNull)
+static Datum
+fmgr_oldstyle(PG_FUNCTION_ARGS)
 {
-   char       *returnValue = (char *) NULL;
-   int         n_arguments = finfo->fn_nargs;
-   func_ptr    user_fn = fmgr_faddr(finfo);
+   char       *returnValue = NULL;
+   int         n_arguments = fcinfo->nargs;
+   int         i;
+   bool        isnull;
+   func_ptr    user_fn;
+
+   if (fcinfo->flinfo == NULL || fcinfo->flinfo->fn_extra == NULL)
+       elog(ERROR, "Internal error: fmgr_oldstyle received NULL function pointer");
 
    /*
-    * If finfo contains a PL handler for this function, call that
-    * instead.
+    * Result is NULL if any argument is NULL, but we still call the function
+    * (peculiar, but that's the way it worked before, and after all this is
+    * a backwards-compatibility wrapper).  Note, however, that we'll never
+    * get here with NULL arguments if the function is marked strict.
     */
-   if (finfo->fn_plhandler != NULL)
-       return (*(finfo->fn_plhandler)) (finfo, values, isNull);
+   isnull = false;
+   for (i = 0; i < n_arguments; i++)
+       isnull |= PG_ARGISNULL(i);
+   fcinfo->isnull = isnull;
 
-   if (user_fn == (func_ptr) NULL)
-       elog(ERROR, "Internal error: fmgr_c received NULL function pointer.");
+   user_fn = (func_ptr) fcinfo->flinfo->fn_extra;
 
    switch (n_arguments)
    {
@@ -130,604 +267,1038 @@ fmgr_c(FmgrInfo *finfo,
            returnValue = (*user_fn) ();
            break;
        case 1:
-           /* NullValue() uses isNull to check if args[0] is NULL */
-           returnValue = (*user_fn) (values->data[0], isNull);
+           /*
+            * nullvalue() used to use isNull to check if arg is NULL;
+            * perhaps there are other functions still out there that
+            * also rely on this undocumented hack?
+            */
+           returnValue = (*user_fn) (fcinfo->arg[0], & fcinfo->isnull);
            break;
        case 2:
-           returnValue = (*user_fn) (values->data[0], values->data[1]);
+           returnValue = (*user_fn) (fcinfo->arg[0], fcinfo->arg[1]);
            break;
        case 3:
-           returnValue = (*user_fn) (values->data[0], values->data[1],
-                                     values->data[2]);
+           returnValue = (*user_fn) (fcinfo->arg[0], fcinfo->arg[1],
+                                     fcinfo->arg[2]);
            break;
        case 4:
-           returnValue = (*user_fn) (values->data[0], values->data[1],
-                                     values->data[2], values->data[3]);
+           returnValue = (*user_fn) (fcinfo->arg[0], fcinfo->arg[1],
+                                     fcinfo->arg[2], fcinfo->arg[3]);
            break;
        case 5:
-           returnValue = (*user_fn) (values->data[0], values->data[1],
-                                     values->data[2], values->data[3],
-                                     values->data[4]);
+           returnValue = (*user_fn) (fcinfo->arg[0], fcinfo->arg[1],
+                                     fcinfo->arg[2], fcinfo->arg[3],
+                                     fcinfo->arg[4]);
            break;
        case 6:
-           returnValue = (*user_fn) (values->data[0], values->data[1],
-                                     values->data[2], values->data[3],
-                                     values->data[4], values->data[5]);
+           returnValue = (*user_fn) (fcinfo->arg[0], fcinfo->arg[1],
+                                     fcinfo->arg[2], fcinfo->arg[3],
+                                     fcinfo->arg[4], fcinfo->arg[5]);
            break;
        case 7:
-           returnValue = (*user_fn) (values->data[0], values->data[1],
-                                     values->data[2], values->data[3],
-                                     values->data[4], values->data[5],
-                                     values->data[6]);
+           returnValue = (*user_fn) (fcinfo->arg[0], fcinfo->arg[1],
+                                     fcinfo->arg[2], fcinfo->arg[3],
+                                     fcinfo->arg[4], fcinfo->arg[5],
+                                     fcinfo->arg[6]);
            break;
        case 8:
-           returnValue = (*user_fn) (values->data[0], values->data[1],
-                                     values->data[2], values->data[3],
-                                     values->data[4], values->data[5],
-                                     values->data[6], values->data[7]);
+           returnValue = (*user_fn) (fcinfo->arg[0], fcinfo->arg[1],
+                                     fcinfo->arg[2], fcinfo->arg[3],
+                                     fcinfo->arg[4], fcinfo->arg[5],
+                                     fcinfo->arg[6], fcinfo->arg[7]);
            break;
        case 9:
-           returnValue = (*user_fn) (values->data[0], values->data[1],
-                                     values->data[2], values->data[3],
-                                     values->data[4], values->data[5],
-                                     values->data[6], values->data[7],
-                                     values->data[8]);
+           returnValue = (*user_fn) (fcinfo->arg[0], fcinfo->arg[1],
+                                     fcinfo->arg[2], fcinfo->arg[3],
+                                     fcinfo->arg[4], fcinfo->arg[5],
+                                     fcinfo->arg[6], fcinfo->arg[7],
+                                     fcinfo->arg[8]);
            break;
-#if FUNC_MAX_ARGS >= 10
        case 10:
-           returnValue = (*user_fn) (values->data[0], values->data[1],
-                                     values->data[2], values->data[3],
-                                     values->data[4], values->data[5],
-                                     values->data[6], values->data[7],
-                                     values->data[8], values->data[9]);
+           returnValue = (*user_fn) (fcinfo->arg[0], fcinfo->arg[1],
+                                     fcinfo->arg[2], fcinfo->arg[3],
+                                     fcinfo->arg[4], fcinfo->arg[5],
+                                     fcinfo->arg[6], fcinfo->arg[7],
+                                     fcinfo->arg[8], fcinfo->arg[9]);
            break;
-#endif
-#if FUNC_MAX_ARGS >= 11
        case 11:
-           returnValue = (*user_fn) (values->data[0], values->data[1],
-                                     values->data[2], values->data[3],
-                                     values->data[4], values->data[5],
-                                     values->data[6], values->data[7],
-                                     values->data[8], values->data[9],
-                                     values->data[10]);
+           returnValue = (*user_fn) (fcinfo->arg[0], fcinfo->arg[1],
+                                     fcinfo->arg[2], fcinfo->arg[3],
+                                     fcinfo->arg[4], fcinfo->arg[5],
+                                     fcinfo->arg[6], fcinfo->arg[7],
+                                     fcinfo->arg[8], fcinfo->arg[9],
+                                     fcinfo->arg[10]);
            break;
-#endif
-#if FUNC_MAX_ARGS >= 12
        case 12:
-           returnValue = (*user_fn) (values->data[0], values->data[1],
-                                     values->data[2], values->data[3],
-                                     values->data[4], values->data[5],
-                                     values->data[6], values->data[7],
-                                     values->data[8], values->data[9],
-                                     values->data[10], values->data[11]);
+           returnValue = (*user_fn) (fcinfo->arg[0], fcinfo->arg[1],
+                                     fcinfo->arg[2], fcinfo->arg[3],
+                                     fcinfo->arg[4], fcinfo->arg[5],
+                                     fcinfo->arg[6], fcinfo->arg[7],
+                                     fcinfo->arg[8], fcinfo->arg[9],
+                                     fcinfo->arg[10], fcinfo->arg[11]);
            break;
-#endif
-#if FUNC_MAX_ARGS >= 13
        case 13:
-           returnValue = (*user_fn) (values->data[0], values->data[1],
-                                     values->data[2], values->data[3],
-                                     values->data[4], values->data[5],
-                                     values->data[6], values->data[7],
-                                     values->data[8], values->data[9],
-                                     values->data[10], values->data[11],
-                                     values->data[12]);
+           returnValue = (*user_fn) (fcinfo->arg[0], fcinfo->arg[1],
+                                     fcinfo->arg[2], fcinfo->arg[3],
+                                     fcinfo->arg[4], fcinfo->arg[5],
+                                     fcinfo->arg[6], fcinfo->arg[7],
+                                     fcinfo->arg[8], fcinfo->arg[9],
+                                     fcinfo->arg[10], fcinfo->arg[11],
+                                     fcinfo->arg[12]);
            break;
-#endif
-#if FUNC_MAX_ARGS >= 14
        case 14:
-           returnValue = (*user_fn) (values->data[0], values->data[1],
-                                     values->data[2], values->data[3],
-                                     values->data[4], values->data[5],
-                                     values->data[6], values->data[7],
-                                     values->data[8], values->data[9],
-                                     values->data[10], values->data[11],
-                                     values->data[12], values->data[13]);
+           returnValue = (*user_fn) (fcinfo->arg[0], fcinfo->arg[1],
+                                     fcinfo->arg[2], fcinfo->arg[3],
+                                     fcinfo->arg[4], fcinfo->arg[5],
+                                     fcinfo->arg[6], fcinfo->arg[7],
+                                     fcinfo->arg[8], fcinfo->arg[9],
+                                     fcinfo->arg[10], fcinfo->arg[11],
+                                     fcinfo->arg[12], fcinfo->arg[13]);
            break;
-#endif
-#if FUNC_MAX_ARGS >= 15
        case 15:
-           returnValue = (*user_fn) (values->data[0], values->data[1],
-                                     values->data[2], values->data[3],
-                                     values->data[4], values->data[5],
-                                     values->data[6], values->data[7],
-                                     values->data[8], values->data[9],
-                                     values->data[10], values->data[11],
-                                     values->data[12], values->data[13],
-                                     values->data[14]);
+           returnValue = (*user_fn) (fcinfo->arg[0], fcinfo->arg[1],
+                                     fcinfo->arg[2], fcinfo->arg[3],
+                                     fcinfo->arg[4], fcinfo->arg[5],
+                                     fcinfo->arg[6], fcinfo->arg[7],
+                                     fcinfo->arg[8], fcinfo->arg[9],
+                                     fcinfo->arg[10], fcinfo->arg[11],
+                                     fcinfo->arg[12], fcinfo->arg[13],
+                                     fcinfo->arg[14]);
            break;
-#endif
-#if FUNC_MAX_ARGS >= 16
        case 16:
-           returnValue = (*user_fn) (values->data[0], values->data[1],
-                                     values->data[2], values->data[3],
-                                     values->data[4], values->data[5],
-                                     values->data[6], values->data[7],
-                                     values->data[8], values->data[9],
-                                     values->data[10], values->data[11],
-                                     values->data[12], values->data[13],
-                                     values->data[14], values->data[15]);
-           break;
-#endif
-#if FUNC_MAX_ARGS >= 17
-       case 17:
-           returnValue = (*user_fn) (values->data[0], values->data[1],
-                                     values->data[2], values->data[3],
-                                     values->data[4], values->data[5],
-                                     values->data[6], values->data[7],
-                                     values->data[8], values->data[9],
-                                     values->data[10], values->data[11],
-                                     values->data[12], values->data[13],
-                                     values->data[14], values->data[15],
-                                     values->data[16]);
-           break;
-#endif
-#if FUNC_MAX_ARGS >= 18
-       case 18:
-           returnValue = (*user_fn) (values->data[0], values->data[1],
-                                     values->data[2], values->data[3],
-                                     values->data[4], values->data[5],
-                                     values->data[6], values->data[7],
-                                     values->data[8], values->data[9],
-                                     values->data[10], values->data[11],
-                                     values->data[12], values->data[13],
-                                     values->data[14], values->data[15],
-                                     values->data[16], values->data[17]);
-           break;
-#endif
-#if FUNC_MAX_ARGS >= 19
-       case 19:
-           returnValue = (*user_fn) (values->data[0], values->data[1],
-                                     values->data[2], values->data[3],
-                                     values->data[4], values->data[5],
-                                     values->data[6], values->data[7],
-                                     values->data[8], values->data[9],
-                                     values->data[10], values->data[11],
-                                     values->data[12], values->data[13],
-                                     values->data[14], values->data[15],
-                                     values->data[16], values->data[17],
-                                     values->data[18]);
-           break;
-#endif
-#if FUNC_MAX_ARGS >= 20
-       case 20:
-           returnValue = (*user_fn) (values->data[0], values->data[1],
-                                     values->data[2], values->data[3],
-                                     values->data[4], values->data[5],
-                                     values->data[6], values->data[7],
-                                     values->data[8], values->data[9],
-                                     values->data[10], values->data[11],
-                                     values->data[12], values->data[13],
-                                     values->data[14], values->data[15],
-                                     values->data[16], values->data[17],
-                                     values->data[18], values->data[19]);
-           break;
-#endif
-#if FUNC_MAX_ARGS >= 21
-       case 21:
-           returnValue = (*user_fn) (values->data[0], values->data[1],
-                                     values->data[2], values->data[3],
-                                     values->data[4], values->data[5],
-                                     values->data[6], values->data[7],
-                                     values->data[8], values->data[9],
-                                     values->data[10], values->data[11],
-                                     values->data[12], values->data[13],
-                                     values->data[14], values->data[15],
-                                     values->data[16], values->data[17],
-                                     values->data[18], values->data[19],
-                                     values->data[20]);
-           break;
-#endif
-#if FUNC_MAX_ARGS >= 22
-       case 22:
-           returnValue = (*user_fn) (values->data[0], values->data[1],
-                                     values->data[2], values->data[3],
-                                     values->data[4], values->data[5],
-                                     values->data[6], values->data[7],
-                                     values->data[8], values->data[9],
-                                     values->data[10], values->data[11],
-                                     values->data[12], values->data[13],
-                                     values->data[14], values->data[15],
-                                     values->data[16], values->data[17],
-                                     values->data[18], values->data[19],
-                                     values->data[20], values->data[21]);
-           break;
-#endif
-#if FUNC_MAX_ARGS >= 23
-       case 23:
-           returnValue = (*user_fn) (values->data[0], values->data[1],
-                                     values->data[2], values->data[3],
-                                     values->data[4], values->data[5],
-                                     values->data[6], values->data[7],
-                                     values->data[8], values->data[9],
-                                     values->data[10], values->data[11],
-                                     values->data[12], values->data[13],
-                                     values->data[14], values->data[15],
-                                     values->data[16], values->data[17],
-                                     values->data[18], values->data[19],
-                                     values->data[20], values->data[21],
-                                     values->data[22]);
-           break;
-#endif
-#if FUNC_MAX_ARGS >= 24
-       case 24:
-           returnValue = (*user_fn) (values->data[0], values->data[1],
-                                     values->data[2], values->data[3],
-                                     values->data[4], values->data[5],
-                                     values->data[6], values->data[7],
-                                     values->data[8], values->data[9],
-                                     values->data[10], values->data[11],
-                                     values->data[12], values->data[13],
-                                     values->data[14], values->data[15],
-                                     values->data[16], values->data[17],
-                                     values->data[18], values->data[19],
-                                     values->data[20], values->data[21],
-                                     values->data[22], values->data[23]);
-           break;
-#endif
-#if FUNC_MAX_ARGS >= 25
-       case 25:
-           returnValue = (*user_fn) (values->data[0], values->data[1],
-                                     values->data[2], values->data[3],
-                                     values->data[4], values->data[5],
-                                     values->data[6], values->data[7],
-                                     values->data[8], values->data[9],
-                                     values->data[10], values->data[11],
-                                     values->data[12], values->data[13],
-                                     values->data[14], values->data[15],
-                                     values->data[16], values->data[17],
-                                     values->data[18], values->data[19],
-                                     values->data[20], values->data[21],
-                                     values->data[22], values->data[23],
-                                     values->data[24]);
-           break;
-#endif
-#if FUNC_MAX_ARGS >= 26
-       case 26:
-           returnValue = (*user_fn) (values->data[0], values->data[1],
-                                     values->data[2], values->data[3],
-                                     values->data[4], values->data[5],
-                                     values->data[6], values->data[7],
-                                     values->data[8], values->data[9],
-                                     values->data[10], values->data[11],
-                                     values->data[12], values->data[13],
-                                     values->data[14], values->data[15],
-                                     values->data[16], values->data[17],
-                                     values->data[18], values->data[19],
-                                     values->data[20], values->data[21],
-                                     values->data[22], values->data[23],
-                                     values->data[24], values->data[25]);
+           returnValue = (*user_fn) (fcinfo->arg[0], fcinfo->arg[1],
+                                     fcinfo->arg[2], fcinfo->arg[3],
+                                     fcinfo->arg[4], fcinfo->arg[5],
+                                     fcinfo->arg[6], fcinfo->arg[7],
+                                     fcinfo->arg[8], fcinfo->arg[9],
+                                     fcinfo->arg[10], fcinfo->arg[11],
+                                     fcinfo->arg[12], fcinfo->arg[13],
+                                     fcinfo->arg[14], fcinfo->arg[15]);
            break;
-#endif
-#if FUNC_MAX_ARGS >= 27
-       case 27:
-           returnValue = (*user_fn) (values->data[0], values->data[1],
-                                     values->data[2], values->data[3],
-                                     values->data[4], values->data[5],
-                                     values->data[6], values->data[7],
-                                     values->data[8], values->data[9],
-                                     values->data[10], values->data[11],
-                                     values->data[12], values->data[13],
-                                     values->data[14], values->data[15],
-                                     values->data[16], values->data[17],
-                                     values->data[18], values->data[19],
-                                     values->data[20], values->data[21],
-                                     values->data[22], values->data[23],
-                                     values->data[24], values->data[25],
-                                     values->data[26]);
-           break;
-#endif
-#if FUNC_MAX_ARGS >= 28
-       case 28:
-           returnValue = (*user_fn) (values->data[0], values->data[1],
-                                     values->data[2], values->data[3],
-                                     values->data[4], values->data[5],
-                                     values->data[6], values->data[7],
-                                     values->data[8], values->data[9],
-                                     values->data[10], values->data[11],
-                                     values->data[12], values->data[13],
-                                     values->data[14], values->data[15],
-                                     values->data[16], values->data[17],
-                                     values->data[18], values->data[19],
-                                     values->data[20], values->data[21],
-                                     values->data[22], values->data[23],
-                                     values->data[24], values->data[25],
-                                     values->data[26], values->data[27]);
-           break;
-#endif
-#if FUNC_MAX_ARGS >= 29
-       case 29:
-           returnValue = (*user_fn) (values->data[0], values->data[1],
-                                     values->data[2], values->data[3],
-                                     values->data[4], values->data[5],
-                                     values->data[6], values->data[7],
-                                     values->data[8], values->data[9],
-                                     values->data[10], values->data[11],
-                                     values->data[12], values->data[13],
-                                     values->data[14], values->data[15],
-                                     values->data[16], values->data[17],
-                                     values->data[18], values->data[19],
-                                     values->data[20], values->data[21],
-                                     values->data[22], values->data[23],
-                                     values->data[24], values->data[25],
-                                     values->data[26], values->data[27],
-                                     values->data[28]);
-           break;
-#endif
-#if FUNC_MAX_ARGS >= 30
-       case 30:
-           returnValue = (*user_fn) (values->data[0], values->data[1],
-                                     values->data[2], values->data[3],
-                                     values->data[4], values->data[5],
-                                     values->data[6], values->data[7],
-                                     values->data[8], values->data[9],
-                                     values->data[10], values->data[11],
-                                     values->data[12], values->data[13],
-                                     values->data[14], values->data[15],
-                                     values->data[16], values->data[17],
-                                     values->data[18], values->data[19],
-                                     values->data[20], values->data[21],
-                                     values->data[22], values->data[23],
-                                     values->data[24], values->data[25],
-                                     values->data[26], values->data[27],
-                                     values->data[28], values->data[29]);
-           break;
-#endif
-#if FUNC_MAX_ARGS >= 31
-       case 31:
-           returnValue = (*user_fn) (values->data[0], values->data[1],
-                                     values->data[2], values->data[3],
-                                     values->data[4], values->data[5],
-                                     values->data[6], values->data[7],
-                                     values->data[8], values->data[9],
-                                     values->data[10], values->data[11],
-                                     values->data[12], values->data[13],
-                                     values->data[14], values->data[15],
-                                     values->data[16], values->data[17],
-                                     values->data[18], values->data[19],
-                                     values->data[20], values->data[21],
-                                     values->data[22], values->data[23],
-                                     values->data[24], values->data[25],
-                                     values->data[26], values->data[27],
-                                     values->data[28], values->data[29],
-                                     values->data[30]);
-           break;
-#endif
-#if FUNC_MAX_ARGS >= 32
-       case 32:
-           returnValue = (*user_fn) (values->data[0], values->data[1],
-                                     values->data[2], values->data[3],
-                                     values->data[4], values->data[5],
-                                     values->data[6], values->data[7],
-                                     values->data[8], values->data[9],
-                                     values->data[10], values->data[11],
-                                     values->data[12], values->data[13],
-                                     values->data[14], values->data[15],
-                                     values->data[16], values->data[17],
-                                     values->data[18], values->data[19],
-                                     values->data[20], values->data[21],
-                                     values->data[22], values->data[23],
-                                     values->data[24], values->data[25],
-                                     values->data[26], values->data[27],
-                                     values->data[28], values->data[29],
-                                     values->data[30], values->data[31]);
-           break;
-#endif
        default:
-           elog(ERROR, "fmgr_c: function %u: too many arguments (%d > %d)",
-                finfo->fn_oid, n_arguments, FUNC_MAX_ARGS);
+           /*
+            * Increasing FUNC_MAX_ARGS doesn't automatically add cases
+            * to the above code, so give the actual value in this error
+            * not FUNC_MAX_ARGS.  You could add cases to the above if you
+            * needed to support old-style functions with many arguments,
+            * but making 'em be new-style is probably a better idea.
+            */
+           elog(ERROR, "fmgr_oldstyle: function %u: too many arguments (%d > %d)",
+                fcinfo->flinfo->fn_oid, n_arguments, 16);
            break;
    }
-   return returnValue;
+
+   return (Datum) returnValue;
 }
 
+
 /*
- * Expand a regproc OID into an FmgrInfo cache struct.
+ * Handler for all functions marked "untrusted"
  */
+static Datum
+fmgr_untrusted(PG_FUNCTION_ARGS)
+{
+   /*
+    * Currently these are unsupported.  Someday we might do something
+    * like forking a subprocess to execute 'em.
+    */
+   elog(ERROR, "Untrusted functions not supported");
+   return 0;                   /* keep compiler happy */
+}
 
-void
-fmgr_info(Oid procedureId, FmgrInfo *finfo)
+/*
+ * Handler for SQL-language functions
+ */
+static Datum
+fmgr_sql(PG_FUNCTION_ARGS)
 {
-   FmgrCall   *fcp;
-   HeapTuple   procedureTuple;
-   FormData_pg_proc *procedureStruct;
-   HeapTuple   languageTuple;
-   Form_pg_language languageStruct;
-   Oid         language;
-   char       *prosrc;
+   /*
+    * XXX It'd be really nice to support SQL functions anywhere that
+    * builtins are supported.  What would we have to do?  What pitfalls
+    * are there?
+    */
+   elog(ERROR, "SQL-language function not supported in this context");
+   return 0;                   /* keep compiler happy */
+}
 
-   finfo->fn_addr = NULL;
-   finfo->fn_plhandler = NULL;
-   finfo->fn_oid = procedureId;
+/*
+ * Interface routine for functions using fmgr_faddr
+ */
+FmgrInfo        *fmgr_pl_finfo;    /* should GO AWAY */
 
-   if ((fcp = fmgr_isbuiltin(procedureId)) != NULL)
-   {
+char *
+fmgr_faddr_link(char *arg0, ...)
+{
+   FunctionCallInfoData    fcinfo;
+   int                     n_arguments;
+   Datum                   result;
 
-       /*
-        * Fast path for builtin functions: don't bother consulting
-        * pg_proc
-        */
-       finfo->fn_addr = fcp->func;
-       finfo->fn_nargs = fcp->nargs;
-   }
-   else
+   MemSet(&fcinfo, 0, sizeof(fcinfo));
+   /* We rely on fmgr_faddr macro to have set back-link to FmgrInfo (ugh) */
+    fcinfo.flinfo = fmgr_pl_finfo;
+   fcinfo.nargs = fcinfo.flinfo->fn_nargs;
+   n_arguments = fcinfo.nargs;
+
+   if (n_arguments > 0)
    {
-       procedureTuple = SearchSysCacheTuple(PROCOID,
-                                          ObjectIdGetDatum(procedureId),
-                                            0, 0, 0);
-       if (!HeapTupleIsValid(procedureTuple))
-       {
-           elog(ERROR, "fmgr_info: function %u: cache lookup failed",
-                procedureId);
-       }
-       procedureStruct = (FormData_pg_proc *) GETSTRUCT(procedureTuple);
-       if (!procedureStruct->proistrusted)
-       {
-           finfo->fn_addr = (func_ptr) fmgr_untrusted;
-           finfo->fn_nargs = procedureStruct->pronargs;
-           return;
-       }
-       language = procedureStruct->prolang;
-       switch (language)
+       fcinfo.arg[0] = (Datum) arg0;
+       if (n_arguments > 1)
        {
-           case INTERNALlanguageId:
-
-               /*
-                * For an ordinary builtin function, we should never get
-                * here because the isbuiltin() search above will have
-                * succeeded. However, if the user has done a CREATE
-                * FUNCTION to create an alias for a builtin function, we
-                * end up here.  In that case we have to look up the
-                * function by name.  The name of the internal function is
-                * stored in prosrc (it doesn't have to be the same as the
-                * name of the alias!)
-                */
-               prosrc = textout(&(procedureStruct->prosrc));
-               finfo->fn_addr = fmgr_lookupByName(prosrc);
-               if (!finfo->fn_addr)
-                   elog(ERROR, "fmgr_info: function %s not in internal table",
-                        prosrc);
-               finfo->fn_nargs = procedureStruct->pronargs;
-               pfree(prosrc);
-               break;
-           case ClanguageId:
-               finfo->fn_addr = fmgr_dynamic(procedureId, &(finfo->fn_nargs));
-               break;
-           case SQLlanguageId:
-               finfo->fn_addr = (func_ptr) fmgr_sql;
-               finfo->fn_nargs = procedureStruct->pronargs;
-               break;
-           default:
+           va_list     pvar;
+           int         i;
 
-               /*
-                * Might be a created procedural language Lookup the
-                * syscache for the language and check the lanispl flag If
-                * this is the case, we return a NULL function pointer and
-                * the number of arguments from the procedure.
-                */
-               languageTuple = SearchSysCacheTuple(LANGOID,
-                             ObjectIdGetDatum(procedureStruct->prolang),
-                                                   0, 0, 0);
-               if (!HeapTupleIsValid(languageTuple))
-               {
-                   elog(ERROR, "fmgr_info: %s %u",
-                        "Cache lookup for language failed",
-                        DatumGetObjectId(procedureStruct->prolang));
-               }
-               languageStruct = (Form_pg_language) GETSTRUCT(languageTuple);
-               if (languageStruct->lanispl)
-               {
-                   FmgrInfo    plfinfo;
-
-                   fmgr_info(languageStruct->lanplcallfoid, &plfinfo);
-                   finfo->fn_addr = (func_ptr) fmgr_pl;
-                   finfo->fn_plhandler = plfinfo.fn_addr;
-                   finfo->fn_nargs = procedureStruct->pronargs;
-               }
-               else
-               {
-                   elog(ERROR, "fmgr_info: function %u: unknown language %d",
-                        procedureId, language);
-               }
-               break;
+           if (n_arguments > FUNC_MAX_ARGS)
+               elog(ERROR, "fmgr_faddr_link: function %u: too many arguments (%d > %d)",
+                    fcinfo.flinfo->fn_oid, n_arguments, FUNC_MAX_ARGS);
+           va_start(pvar, arg0);
+           for (i = 1; i < n_arguments; i++)
+               fcinfo.arg[i] = (Datum) va_arg(pvar, char *);
+           va_end(pvar);
        }
    }
+
+   result = FunctionCallInvoke(&fcinfo);
+
+   /* Check for null result, since caller is clearly not expecting one */
+   if (fcinfo.isnull)
+       elog(ERROR, "fmgr_faddr_link: function %u returned NULL",
+            fcinfo.flinfo->fn_oid);
+
+   return (char *) result;
 }
 
 /*
  *     fmgr            - return the value of a function call
  *
- *     If the function is a system routine, it's compiled in, so call
- *     it directly.
- *
- *     Otherwise pass it to the the appropriate 'language' function caller.
- *
- *     Returns the return value of the invoked function if succesful,
- *     0 if unsuccessful.
+ * This is essentially fmgr_info plus call the function.
  */
 char *
 fmgr(Oid procedureId,...)
 {
-   va_list     pvar;
-   int         i;
-   int         pronargs;
-   FmgrValues  values;
-   FmgrInfo    finfo;
-   bool        isNull = false;
+   FmgrInfo                flinfo;
+   FunctionCallInfoData    fcinfo;
+   int                     n_arguments;
+   Datum                   result;
+
+   fmgr_info(procedureId, &flinfo);
+
+   MemSet(&fcinfo, 0, sizeof(fcinfo));
+    fcinfo.flinfo = &flinfo;
+   fcinfo.nargs = flinfo.fn_nargs;
+   n_arguments = fcinfo.nargs;
+
+   if (n_arguments > 0)
+   {
+       va_list     pvar;
+       int         i;
 
-   fmgr_info(procedureId, &finfo);
-   pronargs = finfo.fn_nargs;
+       if (n_arguments > FUNC_MAX_ARGS)
+           elog(ERROR, "fmgr: function %u: too many arguments (%d > %d)",
+                flinfo.fn_oid, n_arguments, FUNC_MAX_ARGS);
+       va_start(pvar, procedureId);
+       for (i = 0; i < n_arguments; i++)
+           fcinfo.arg[i] = (Datum) va_arg(pvar, char *);
+       va_end(pvar);
+   }
 
-   if (pronargs > FUNC_MAX_ARGS)
-       elog(ERROR, "fmgr: function %u: too many arguments (%d > %d)",
-            procedureId, pronargs, FUNC_MAX_ARGS);
+   result = FunctionCallInvoke(&fcinfo);
 
-   va_start(pvar, procedureId);
-   for (i = 0; i < pronargs; ++i)
-       values.data[i] = va_arg(pvar, char *);
-   va_end(pvar);
+   /* Check for null result, since caller is clearly not expecting one */
+   if (fcinfo.isnull)
+       elog(ERROR, "fmgr: function %u returned NULL",
+            flinfo.fn_oid);
 
-   /* XXX see WAY_COOL_ORTHOGONAL_FUNCTIONS */
-   return fmgr_c(&finfo, &values, &isNull);
+   return (char *) result;
 }
 
-/*
- * This is just a version of fmgr() in which the hacker can prepend a C
- * function pointer.  This routine is not normally called; generally,
- * if you have all of this information you're likely to just jump through
- * the pointer, but it's available for use with macros in fmgr.h if you
- * want this routine to do sanity-checking for you.
- *
- * funcinfo, n_arguments, args...
+
+/*-------------------------------------------------------------------------
+ *     Support routines for callers of fmgr-compatible functions
+ *-------------------------------------------------------------------------
  */
-#ifdef TRACE_FMGR_PTR
 
-char *
-fmgr_ptr(FmgrInfo *finfo,...)
+/* These are for invocation of a specifically named function with a
+ * directly-computed parameter list.  Note that neither arguments nor result
+ * are allowed to be NULL.  Also, the function cannot be one that needs to
+ * look at FmgrInfo, since there won't be any.
+ */
+Datum
+DirectFunctionCall1(PGFunction func, Datum arg1)
 {
-   va_list     pvar;
-   int         i;
-   int         n_arguments;
-   FmgrInfo    local_finfo;
-   FmgrValues  values;
-   bool        isNull = false;
-
-   local_finfo->fn_addr = finfo->fn_addr;
-   local_finfo->fn_plhandler = finfo->fn_plhandler;
-   local_finfo->fn_oid = finfo->fn_oid;
-
-   va_start(pvar, finfo);
-   n_arguments = va_arg(pvar, int);
-   local_finfo->fn_nargs = n_arguments;
-   if (n_arguments > FUNC_MAX_ARGS)
-   {
-       elog(ERROR, "fmgr_ptr: function %u: too many arguments (%d > %d)",
-            func_id, n_arguments, FUNC_MAX_ARGS);
-   }
-   for (i = 0; i < n_arguments; ++i)
-       values.data[i] = va_arg(pvar, char *);
-   va_end(pvar);
+   FunctionCallInfoData    fcinfo;
+   Datum                   result;
+
+   MemSet(&fcinfo, 0, sizeof(fcinfo));
+   fcinfo.nargs = 1;
+   fcinfo.arg[0] = arg1;
 
-   /* XXX see WAY_COOL_ORTHOGONAL_FUNCTIONS */
-   return fmgr_c(&local_finfo, &values, &isNull);
+   result = (* func) (&fcinfo);
+
+   /* Check for null result, since caller is clearly not expecting one */
+   if (fcinfo.isnull)
+       elog(ERROR, "DirectFunctionCall1: function %p returned NULL",
+            (void *) func);
+
+   return result;
 }
 
-#endif
+Datum
+DirectFunctionCall2(PGFunction func, Datum arg1, Datum arg2)
+{
+   FunctionCallInfoData    fcinfo;
+   Datum                   result;
 
-/*
- * This routine is not well thought out.  When I get around to adding a
- * function pointer field to FuncIndexInfo, it will be replace by calls
- * to fmgr_c().
+   MemSet(&fcinfo, 0, sizeof(fcinfo));
+   fcinfo.nargs = 2;
+   fcinfo.arg[0] = arg1;
+   fcinfo.arg[1] = arg2;
+
+   result = (* func) (&fcinfo);
+
+   /* Check for null result, since caller is clearly not expecting one */
+   if (fcinfo.isnull)
+       elog(ERROR, "DirectFunctionCall2: function %p returned NULL",
+            (void *) func);
+
+   return result;
+}
+
+Datum
+DirectFunctionCall3(PGFunction func, Datum arg1, Datum arg2,
+                   Datum arg3)
+{
+   FunctionCallInfoData    fcinfo;
+   Datum                   result;
+
+   MemSet(&fcinfo, 0, sizeof(fcinfo));
+   fcinfo.nargs = 3;
+   fcinfo.arg[0] = arg1;
+   fcinfo.arg[1] = arg2;
+   fcinfo.arg[2] = arg3;
+
+   result = (* func) (&fcinfo);
+
+   /* Check for null result, since caller is clearly not expecting one */
+   if (fcinfo.isnull)
+       elog(ERROR, "DirectFunctionCall3: function %p returned NULL",
+            (void *) func);
+
+   return result;
+}
+
+Datum
+DirectFunctionCall4(PGFunction func, Datum arg1, Datum arg2,
+                   Datum arg3, Datum arg4)
+{
+   FunctionCallInfoData    fcinfo;
+   Datum                   result;
+
+   MemSet(&fcinfo, 0, sizeof(fcinfo));
+   fcinfo.nargs = 4;
+   fcinfo.arg[0] = arg1;
+   fcinfo.arg[1] = arg2;
+   fcinfo.arg[2] = arg3;
+   fcinfo.arg[3] = arg4;
+
+   result = (* func) (&fcinfo);
+
+   /* Check for null result, since caller is clearly not expecting one */
+   if (fcinfo.isnull)
+       elog(ERROR, "DirectFunctionCall4: function %p returned NULL",
+            (void *) func);
+
+   return result;
+}
+
+Datum
+DirectFunctionCall5(PGFunction func, Datum arg1, Datum arg2,
+                   Datum arg3, Datum arg4, Datum arg5)
+{
+   FunctionCallInfoData    fcinfo;
+   Datum                   result;
+
+   MemSet(&fcinfo, 0, sizeof(fcinfo));
+   fcinfo.nargs = 5;
+   fcinfo.arg[0] = arg1;
+   fcinfo.arg[1] = arg2;
+   fcinfo.arg[2] = arg3;
+   fcinfo.arg[3] = arg4;
+   fcinfo.arg[4] = arg5;
+
+   result = (* func) (&fcinfo);
+
+   /* Check for null result, since caller is clearly not expecting one */
+   if (fcinfo.isnull)
+       elog(ERROR, "DirectFunctionCall5: function %p returned NULL",
+            (void *) func);
+
+   return result;
+}
+
+Datum
+DirectFunctionCall6(PGFunction func, Datum arg1, Datum arg2,
+                   Datum arg3, Datum arg4, Datum arg5,
+                   Datum arg6)
+{
+   FunctionCallInfoData    fcinfo;
+   Datum                   result;
+
+   MemSet(&fcinfo, 0, sizeof(fcinfo));
+   fcinfo.nargs = 6;
+   fcinfo.arg[0] = arg1;
+   fcinfo.arg[1] = arg2;
+   fcinfo.arg[2] = arg3;
+   fcinfo.arg[3] = arg4;
+   fcinfo.arg[4] = arg5;
+   fcinfo.arg[5] = arg6;
+
+   result = (* func) (&fcinfo);
+
+   /* Check for null result, since caller is clearly not expecting one */
+   if (fcinfo.isnull)
+       elog(ERROR, "DirectFunctionCall6: function %p returned NULL",
+            (void *) func);
+
+   return result;
+}
+
+Datum
+DirectFunctionCall7(PGFunction func, Datum arg1, Datum arg2,
+                   Datum arg3, Datum arg4, Datum arg5,
+                   Datum arg6, Datum arg7)
+{
+   FunctionCallInfoData    fcinfo;
+   Datum                   result;
+
+   MemSet(&fcinfo, 0, sizeof(fcinfo));
+   fcinfo.nargs = 7;
+   fcinfo.arg[0] = arg1;
+   fcinfo.arg[1] = arg2;
+   fcinfo.arg[2] = arg3;
+   fcinfo.arg[3] = arg4;
+   fcinfo.arg[4] = arg5;
+   fcinfo.arg[5] = arg6;
+   fcinfo.arg[6] = arg7;
+
+   result = (* func) (&fcinfo);
+
+   /* Check for null result, since caller is clearly not expecting one */
+   if (fcinfo.isnull)
+       elog(ERROR, "DirectFunctionCall7: function %p returned NULL",
+            (void *) func);
+
+   return result;
+}
+
+Datum
+DirectFunctionCall8(PGFunction func, Datum arg1, Datum arg2,
+                   Datum arg3, Datum arg4, Datum arg5,
+                   Datum arg6, Datum arg7, Datum arg8)
+{
+   FunctionCallInfoData    fcinfo;
+   Datum                   result;
+
+   MemSet(&fcinfo, 0, sizeof(fcinfo));
+   fcinfo.nargs = 8;
+   fcinfo.arg[0] = arg1;
+   fcinfo.arg[1] = arg2;
+   fcinfo.arg[2] = arg3;
+   fcinfo.arg[3] = arg4;
+   fcinfo.arg[4] = arg5;
+   fcinfo.arg[5] = arg6;
+   fcinfo.arg[6] = arg7;
+   fcinfo.arg[7] = arg8;
+
+   result = (* func) (&fcinfo);
+
+   /* Check for null result, since caller is clearly not expecting one */
+   if (fcinfo.isnull)
+       elog(ERROR, "DirectFunctionCall8: function %p returned NULL",
+            (void *) func);
+
+   return result;
+}
+
+Datum
+DirectFunctionCall9(PGFunction func, Datum arg1, Datum arg2,
+                   Datum arg3, Datum arg4, Datum arg5,
+                   Datum arg6, Datum arg7, Datum arg8,
+                   Datum arg9)
+{
+   FunctionCallInfoData    fcinfo;
+   Datum                   result;
+
+   MemSet(&fcinfo, 0, sizeof(fcinfo));
+   fcinfo.nargs = 9;
+   fcinfo.arg[0] = arg1;
+   fcinfo.arg[1] = arg2;
+   fcinfo.arg[2] = arg3;
+   fcinfo.arg[3] = arg4;
+   fcinfo.arg[4] = arg5;
+   fcinfo.arg[5] = arg6;
+   fcinfo.arg[6] = arg7;
+   fcinfo.arg[7] = arg8;
+   fcinfo.arg[8] = arg9;
+
+   result = (* func) (&fcinfo);
+
+   /* Check for null result, since caller is clearly not expecting one */
+   if (fcinfo.isnull)
+       elog(ERROR, "DirectFunctionCall9: function %p returned NULL",
+            (void *) func);
+
+   return result;
+}
+
+
+/* These are for invocation of a previously-looked-up function with a
+ * directly-computed parameter list.  Note that neither arguments nor result
+ * are allowed to be NULL.
  */
-char *
-fmgr_array_args(Oid procedureId, int nargs, char *args[], bool *isNull)
+Datum
+FunctionCall1(FmgrInfo *flinfo, Datum arg1)
+{
+   FunctionCallInfoData    fcinfo;
+   Datum                   result;
+
+   MemSet(&fcinfo, 0, sizeof(fcinfo));
+    fcinfo.flinfo = flinfo;
+   fcinfo.nargs = 1;
+   fcinfo.arg[0] = arg1;
+
+   result = FunctionCallInvoke(&fcinfo);
+
+   /* Check for null result, since caller is clearly not expecting one */
+   if (fcinfo.isnull)
+       elog(ERROR, "FunctionCall1: function %u returned NULL",
+            fcinfo.flinfo->fn_oid);
+
+   return result;
+}
+
+Datum
+FunctionCall2(FmgrInfo *flinfo, Datum arg1, Datum arg2)
+{
+   FunctionCallInfoData    fcinfo;
+   Datum                   result;
+
+   MemSet(&fcinfo, 0, sizeof(fcinfo));
+    fcinfo.flinfo = flinfo;
+   fcinfo.nargs = 2;
+   fcinfo.arg[0] = arg1;
+   fcinfo.arg[1] = arg2;
+
+   result = FunctionCallInvoke(&fcinfo);
+
+   /* Check for null result, since caller is clearly not expecting one */
+   if (fcinfo.isnull)
+       elog(ERROR, "FunctionCall2: function %u returned NULL",
+            fcinfo.flinfo->fn_oid);
+
+   return result;
+}
+
+Datum
+FunctionCall3(FmgrInfo *flinfo, Datum arg1, Datum arg2,
+             Datum arg3)
+{
+   FunctionCallInfoData    fcinfo;
+   Datum                   result;
+
+   MemSet(&fcinfo, 0, sizeof(fcinfo));
+    fcinfo.flinfo = flinfo;
+   fcinfo.nargs = 3;
+   fcinfo.arg[0] = arg1;
+   fcinfo.arg[1] = arg2;
+   fcinfo.arg[2] = arg3;
+
+   result = FunctionCallInvoke(&fcinfo);
+
+   /* Check for null result, since caller is clearly not expecting one */
+   if (fcinfo.isnull)
+       elog(ERROR, "FunctionCall3: function %u returned NULL",
+            fcinfo.flinfo->fn_oid);
+
+   return result;
+}
+
+Datum
+FunctionCall4(FmgrInfo *flinfo, Datum arg1, Datum arg2,
+             Datum arg3, Datum arg4)
+{
+   FunctionCallInfoData    fcinfo;
+   Datum                   result;
+
+   MemSet(&fcinfo, 0, sizeof(fcinfo));
+    fcinfo.flinfo = flinfo;
+   fcinfo.nargs = 4;
+   fcinfo.arg[0] = arg1;
+   fcinfo.arg[1] = arg2;
+   fcinfo.arg[2] = arg3;
+   fcinfo.arg[3] = arg4;
+
+   result = FunctionCallInvoke(&fcinfo);
+
+   /* Check for null result, since caller is clearly not expecting one */
+   if (fcinfo.isnull)
+       elog(ERROR, "FunctionCall4: function %u returned NULL",
+            fcinfo.flinfo->fn_oid);
+
+   return result;
+}
+
+Datum
+FunctionCall5(FmgrInfo *flinfo, Datum arg1, Datum arg2,
+             Datum arg3, Datum arg4, Datum arg5)
+{
+   FunctionCallInfoData    fcinfo;
+   Datum                   result;
+
+   MemSet(&fcinfo, 0, sizeof(fcinfo));
+    fcinfo.flinfo = flinfo;
+   fcinfo.nargs = 5;
+   fcinfo.arg[0] = arg1;
+   fcinfo.arg[1] = arg2;
+   fcinfo.arg[2] = arg3;
+   fcinfo.arg[3] = arg4;
+   fcinfo.arg[4] = arg5;
+
+   result = FunctionCallInvoke(&fcinfo);
+
+   /* Check for null result, since caller is clearly not expecting one */
+   if (fcinfo.isnull)
+       elog(ERROR, "FunctionCall5: function %u returned NULL",
+            fcinfo.flinfo->fn_oid);
+
+   return result;
+}
+
+Datum
+FunctionCall6(FmgrInfo *flinfo, Datum arg1, Datum arg2,
+             Datum arg3, Datum arg4, Datum arg5,
+             Datum arg6)
+{
+   FunctionCallInfoData    fcinfo;
+   Datum                   result;
+
+   MemSet(&fcinfo, 0, sizeof(fcinfo));
+    fcinfo.flinfo = flinfo;
+   fcinfo.nargs = 6;
+   fcinfo.arg[0] = arg1;
+   fcinfo.arg[1] = arg2;
+   fcinfo.arg[2] = arg3;
+   fcinfo.arg[3] = arg4;
+   fcinfo.arg[4] = arg5;
+   fcinfo.arg[5] = arg6;
+
+   result = FunctionCallInvoke(&fcinfo);
+
+   /* Check for null result, since caller is clearly not expecting one */
+   if (fcinfo.isnull)
+       elog(ERROR, "FunctionCall6: function %u returned NULL",
+            fcinfo.flinfo->fn_oid);
+
+   return result;
+}
+
+Datum
+FunctionCall7(FmgrInfo *flinfo, Datum arg1, Datum arg2,
+             Datum arg3, Datum arg4, Datum arg5,
+             Datum arg6, Datum arg7)
 {
-   FmgrInfo    finfo;
+   FunctionCallInfoData    fcinfo;
+   Datum                   result;
+
+   MemSet(&fcinfo, 0, sizeof(fcinfo));
+    fcinfo.flinfo = flinfo;
+   fcinfo.nargs = 7;
+   fcinfo.arg[0] = arg1;
+   fcinfo.arg[1] = arg2;
+   fcinfo.arg[2] = arg3;
+   fcinfo.arg[3] = arg4;
+   fcinfo.arg[4] = arg5;
+   fcinfo.arg[5] = arg6;
+   fcinfo.arg[6] = arg7;
+
+   result = FunctionCallInvoke(&fcinfo);
+
+   /* Check for null result, since caller is clearly not expecting one */
+   if (fcinfo.isnull)
+       elog(ERROR, "FunctionCall7: function %u returned NULL",
+            fcinfo.flinfo->fn_oid);
+
+   return result;
+}
+
+Datum
+FunctionCall8(FmgrInfo *flinfo, Datum arg1, Datum arg2,
+             Datum arg3, Datum arg4, Datum arg5,
+             Datum arg6, Datum arg7, Datum arg8)
+{
+   FunctionCallInfoData    fcinfo;
+   Datum                   result;
+
+   MemSet(&fcinfo, 0, sizeof(fcinfo));
+    fcinfo.flinfo = flinfo;
+   fcinfo.nargs = 8;
+   fcinfo.arg[0] = arg1;
+   fcinfo.arg[1] = arg2;
+   fcinfo.arg[2] = arg3;
+   fcinfo.arg[3] = arg4;
+   fcinfo.arg[4] = arg5;
+   fcinfo.arg[5] = arg6;
+   fcinfo.arg[6] = arg7;
+   fcinfo.arg[7] = arg8;
+
+   result = FunctionCallInvoke(&fcinfo);
+
+   /* Check for null result, since caller is clearly not expecting one */
+   if (fcinfo.isnull)
+       elog(ERROR, "FunctionCall8: function %u returned NULL",
+            fcinfo.flinfo->fn_oid);
+
+   return result;
+}
+
+Datum
+FunctionCall9(FmgrInfo *flinfo, Datum arg1, Datum arg2,
+             Datum arg3, Datum arg4, Datum arg5,
+             Datum arg6, Datum arg7, Datum arg8,
+             Datum arg9)
+{
+   FunctionCallInfoData    fcinfo;
+   Datum                   result;
+
+   MemSet(&fcinfo, 0, sizeof(fcinfo));
+    fcinfo.flinfo = flinfo;
+   fcinfo.nargs = 9;
+   fcinfo.arg[0] = arg1;
+   fcinfo.arg[1] = arg2;
+   fcinfo.arg[2] = arg3;
+   fcinfo.arg[3] = arg4;
+   fcinfo.arg[4] = arg5;
+   fcinfo.arg[5] = arg6;
+   fcinfo.arg[6] = arg7;
+   fcinfo.arg[7] = arg8;
+   fcinfo.arg[8] = arg9;
+
+   result = FunctionCallInvoke(&fcinfo);
+
+   /* Check for null result, since caller is clearly not expecting one */
+   if (fcinfo.isnull)
+       elog(ERROR, "FunctionCall9: function %u returned NULL",
+            fcinfo.flinfo->fn_oid);
 
-   fmgr_info(procedureId, &finfo);
-   finfo.fn_nargs = nargs;
+   return result;
+}
+
+
+/* These are for invocation of a function identified by OID with a
+ * directly-computed parameter list.  Note that neither arguments nor result
+ * are allowed to be NULL.  These are essentially fmgr_info() followed
+ * by FunctionCallN().  If the same function is to be invoked repeatedly,
+ * do the fmgr_info() once and then use FunctionCallN().
+ */
+Datum
+OidFunctionCall1(Oid functionId, Datum arg1)
+{
+   FmgrInfo                flinfo;
+   FunctionCallInfoData    fcinfo;
+   Datum                   result;
+
+   fmgr_info(functionId, &flinfo);
+
+   MemSet(&fcinfo, 0, sizeof(fcinfo));
+    fcinfo.flinfo = &flinfo;
+   fcinfo.nargs = 1;
+   fcinfo.arg[0] = arg1;
+
+   result = FunctionCallInvoke(&fcinfo);
+
+   /* Check for null result, since caller is clearly not expecting one */
+   if (fcinfo.isnull)
+       elog(ERROR, "OidFunctionCall1: function %u returned NULL",
+            flinfo.fn_oid);
+
+   return result;
+}
+
+Datum
+OidFunctionCall2(Oid functionId, Datum arg1, Datum arg2)
+{
+   FmgrInfo                flinfo;
+   FunctionCallInfoData    fcinfo;
+   Datum                   result;
+
+   fmgr_info(functionId, &flinfo);
+
+   MemSet(&fcinfo, 0, sizeof(fcinfo));
+    fcinfo.flinfo = &flinfo;
+   fcinfo.nargs = 2;
+   fcinfo.arg[0] = arg1;
+   fcinfo.arg[1] = arg2;
+
+   result = FunctionCallInvoke(&fcinfo);
+
+   /* Check for null result, since caller is clearly not expecting one */
+   if (fcinfo.isnull)
+       elog(ERROR, "OidFunctionCall2: function %u returned NULL",
+            flinfo.fn_oid);
+
+   return result;
+}
+
+Datum
+OidFunctionCall3(Oid functionId, Datum arg1, Datum arg2,
+                Datum arg3)
+{
+   FmgrInfo                flinfo;
+   FunctionCallInfoData    fcinfo;
+   Datum                   result;
+
+   fmgr_info(functionId, &flinfo);
+
+   MemSet(&fcinfo, 0, sizeof(fcinfo));
+    fcinfo.flinfo = &flinfo;
+   fcinfo.nargs = 3;
+   fcinfo.arg[0] = arg1;
+   fcinfo.arg[1] = arg2;
+   fcinfo.arg[2] = arg3;
+
+   result = FunctionCallInvoke(&fcinfo);
+
+   /* Check for null result, since caller is clearly not expecting one */
+   if (fcinfo.isnull)
+       elog(ERROR, "OidFunctionCall3: function %u returned NULL",
+            flinfo.fn_oid);
+
+   return result;
+}
+
+Datum
+OidFunctionCall4(Oid functionId, Datum arg1, Datum arg2,
+                Datum arg3, Datum arg4)
+{
+   FmgrInfo                flinfo;
+   FunctionCallInfoData    fcinfo;
+   Datum                   result;
+
+   fmgr_info(functionId, &flinfo);
+
+   MemSet(&fcinfo, 0, sizeof(fcinfo));
+    fcinfo.flinfo = &flinfo;
+   fcinfo.nargs = 4;
+   fcinfo.arg[0] = arg1;
+   fcinfo.arg[1] = arg2;
+   fcinfo.arg[2] = arg3;
+   fcinfo.arg[3] = arg4;
+
+   result = FunctionCallInvoke(&fcinfo);
+
+   /* Check for null result, since caller is clearly not expecting one */
+   if (fcinfo.isnull)
+       elog(ERROR, "OidFunctionCall4: function %u returned NULL",
+            flinfo.fn_oid);
+
+   return result;
+}
+
+Datum
+OidFunctionCall5(Oid functionId, Datum arg1, Datum arg2,
+                Datum arg3, Datum arg4, Datum arg5)
+{
+   FmgrInfo                flinfo;
+   FunctionCallInfoData    fcinfo;
+   Datum                   result;
+
+   fmgr_info(functionId, &flinfo);
+
+   MemSet(&fcinfo, 0, sizeof(fcinfo));
+    fcinfo.flinfo = &flinfo;
+   fcinfo.nargs = 5;
+   fcinfo.arg[0] = arg1;
+   fcinfo.arg[1] = arg2;
+   fcinfo.arg[2] = arg3;
+   fcinfo.arg[3] = arg4;
+   fcinfo.arg[4] = arg5;
+
+   result = FunctionCallInvoke(&fcinfo);
+
+   /* Check for null result, since caller is clearly not expecting one */
+   if (fcinfo.isnull)
+       elog(ERROR, "OidFunctionCall5: function %u returned NULL",
+            flinfo.fn_oid);
+
+   return result;
+}
+
+Datum
+OidFunctionCall6(Oid functionId, Datum arg1, Datum arg2,
+                Datum arg3, Datum arg4, Datum arg5,
+                Datum arg6)
+{
+   FmgrInfo                flinfo;
+   FunctionCallInfoData    fcinfo;
+   Datum                   result;
+
+   fmgr_info(functionId, &flinfo);
+
+   MemSet(&fcinfo, 0, sizeof(fcinfo));
+    fcinfo.flinfo = &flinfo;
+   fcinfo.nargs = 6;
+   fcinfo.arg[0] = arg1;
+   fcinfo.arg[1] = arg2;
+   fcinfo.arg[2] = arg3;
+   fcinfo.arg[3] = arg4;
+   fcinfo.arg[4] = arg5;
+   fcinfo.arg[5] = arg6;
+
+   result = FunctionCallInvoke(&fcinfo);
+
+   /* Check for null result, since caller is clearly not expecting one */
+   if (fcinfo.isnull)
+       elog(ERROR, "OidFunctionCall6: function %u returned NULL",
+            flinfo.fn_oid);
+
+   return result;
+}
+
+Datum
+OidFunctionCall7(Oid functionId, Datum arg1, Datum arg2,
+                Datum arg3, Datum arg4, Datum arg5,
+                Datum arg6, Datum arg7)
+{
+   FmgrInfo                flinfo;
+   FunctionCallInfoData    fcinfo;
+   Datum                   result;
+
+   fmgr_info(functionId, &flinfo);
+
+   MemSet(&fcinfo, 0, sizeof(fcinfo));
+    fcinfo.flinfo = &flinfo;
+   fcinfo.nargs = 7;
+   fcinfo.arg[0] = arg1;
+   fcinfo.arg[1] = arg2;
+   fcinfo.arg[2] = arg3;
+   fcinfo.arg[3] = arg4;
+   fcinfo.arg[4] = arg5;
+   fcinfo.arg[5] = arg6;
+   fcinfo.arg[6] = arg7;
+
+   result = FunctionCallInvoke(&fcinfo);
+
+   /* Check for null result, since caller is clearly not expecting one */
+   if (fcinfo.isnull)
+       elog(ERROR, "OidFunctionCall7: function %u returned NULL",
+            flinfo.fn_oid);
+
+   return result;
+}
+
+Datum
+OidFunctionCall8(Oid functionId, Datum arg1, Datum arg2,
+                Datum arg3, Datum arg4, Datum arg5,
+                Datum arg6, Datum arg7, Datum arg8)
+{
+   FmgrInfo                flinfo;
+   FunctionCallInfoData    fcinfo;
+   Datum                   result;
+
+   fmgr_info(functionId, &flinfo);
+
+   MemSet(&fcinfo, 0, sizeof(fcinfo));
+    fcinfo.flinfo = &flinfo;
+   fcinfo.nargs = 8;
+   fcinfo.arg[0] = arg1;
+   fcinfo.arg[1] = arg2;
+   fcinfo.arg[2] = arg3;
+   fcinfo.arg[3] = arg4;
+   fcinfo.arg[4] = arg5;
+   fcinfo.arg[5] = arg6;
+   fcinfo.arg[6] = arg7;
+   fcinfo.arg[7] = arg8;
+
+   result = FunctionCallInvoke(&fcinfo);
+
+   /* Check for null result, since caller is clearly not expecting one */
+   if (fcinfo.isnull)
+       elog(ERROR, "OidFunctionCall8: function %u returned NULL",
+            flinfo.fn_oid);
+
+   return result;
+}
+
+Datum
+OidFunctionCall9(Oid functionId, Datum arg1, Datum arg2,
+                Datum arg3, Datum arg4, Datum arg5,
+                Datum arg6, Datum arg7, Datum arg8,
+                Datum arg9)
+{
+   FmgrInfo                flinfo;
+   FunctionCallInfoData    fcinfo;
+   Datum                   result;
+
+   fmgr_info(functionId, &flinfo);
+
+   MemSet(&fcinfo, 0, sizeof(fcinfo));
+    fcinfo.flinfo = &flinfo;
+   fcinfo.nargs = 9;
+   fcinfo.arg[0] = arg1;
+   fcinfo.arg[1] = arg2;
+   fcinfo.arg[2] = arg3;
+   fcinfo.arg[3] = arg4;
+   fcinfo.arg[4] = arg5;
+   fcinfo.arg[5] = arg6;
+   fcinfo.arg[6] = arg7;
+   fcinfo.arg[7] = arg8;
+   fcinfo.arg[8] = arg9;
+
+   result = FunctionCallInvoke(&fcinfo);
+
+   /* Check for null result, since caller is clearly not expecting one */
+   if (fcinfo.isnull)
+       elog(ERROR, "OidFunctionCall9: function %u returned NULL",
+            flinfo.fn_oid);
+
+   return result;
+}
+
+
+/*-------------------------------------------------------------------------
+ *     Support routines for standard pass-by-reference datatypes
+ *
+ * Note: at some point, at least on some platforms, these might become
+ * pass-by-value types.  Obviously Datum must be >= 8 bytes to allow
+ * int64 or float8 to be pass-by-value.  I think that Float4GetDatum
+ * and Float8GetDatum will need to be out-of-line routines anyway,
+ * since just casting from float to Datum will not do the right thing;
+ * some kind of trick with pointer-casting or a union will be needed.
+ *-------------------------------------------------------------------------
+ */
+
+Datum
+Int64GetDatum(int64 X)
+{
+   int64      *retval = (int64 *) palloc(sizeof(int64));
+
+   *retval = X;
+   return PointerGetDatum(retval);
+}
+
+Datum
+Float4GetDatum(float4 X)
+{
+   float4     *retval = (float4 *) palloc(sizeof(float4));
+
+   *retval = X;
+   return PointerGetDatum(retval);
+}
+
+Datum
+Float8GetDatum(float8 X)
+{
+   float8     *retval = (float8 *) palloc(sizeof(float8));
 
-   /* XXX see WAY_COOL_ORTHOGONAL_FUNCTIONS */
-   return fmgr_c(&finfo,
-                 (FmgrValues *) args,
-                 isNull);
+   *retval = X;
+   return PointerGetDatum(retval);
 }
index c4675a6b57da7efb2ac1b9298c7f33a3254a9f63..68e293ef1daf757e99287e06fb5eefe06bf17af4 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *   $Header: /cvsroot/pgsql/src/backend/utils/init/postinit.c,v 1.57 2000/04/12 17:16:02 momjian Exp $
+ *   $Header: /cvsroot/pgsql/src/backend/utils/init/postinit.c,v 1.58 2000/05/28 17:56:08 tgl Exp $
  *
  *
  *-------------------------------------------------------------------------
@@ -30,6 +30,7 @@
 #include "storage/proc.h"
 #include "storage/sinval.h"
 #include "storage/smgr.h"
+#include "utils/fmgroids.h"
 #include "utils/inval.h"
 #include "utils/portal.h"
 #include "utils/relcache.h"
index 11d439f435feb3fd97ac2dc8048a38d78c0f7902..f2e7f60e12b6b9b82fe5b1bd637ac64775693d24 100644 (file)
@@ -8,7 +8,7 @@
 #
 #
 # IDENTIFICATION
-#    $Header: /cvsroot/pgsql/src/bin/scripts/Attic/createlang.sh,v 1.11 2000/05/15 16:20:45 momjian Exp $
+#    $Header: /cvsroot/pgsql/src/bin/scripts/Attic/createlang.sh,v 1.12 2000/05/28 17:56:08 tgl Exp $
 #
 #-------------------------------------------------------------------------
 
@@ -244,7 +244,7 @@ fi
 # ----------
 # Create the call handler and the language
 # ----------
-$PSQL "CREATE FUNCTION $handler () RETURNS OPAQUE AS '$PGLIB/${langname}__DLSUFFIX__' LANGUAGE 'C'"
+$PSQL "CREATE FUNCTION $handler () RETURNS OPAQUE AS '$PGLIB/${langname}__DLSUFFIX__' LANGUAGE 'newC'"
 if [ $? -ne 0 ]; then
    echo "$CMDNAME: language installation failed"
    exit 1
index 0fa7b0840bb5a6b5f2ce450998bfa80dba96267e..e710ff415af472a38626f3d3cff77ee350e0c742 100644 (file)
@@ -7,7 +7,7 @@
  * Portions Copyright (c) 1996-2000, PostgreSQL, Inc
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $Id: valid.h,v 1.20 2000/01/26 05:57:51 momjian Exp $
+ * $Id: valid.h,v 1.21 2000/05/28 17:56:14 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -58,7 +58,7 @@ do \
            break; \
        } \
  \
-       if (__cur_keys->sk_func.fn_addr == (func_ptr) oideq)    /* optimization */ \
+       if (__cur_keys->sk_func.fn_addr == (PGFunction) oideq)  /* optimization */ \
            __test = (__cur_keys->sk_argument == __atp); \
        else if (__cur_keys->sk_flags & SK_COMMUTE) \
            __test = (long) FMGR_PTR2(&__cur_keys->sk_func, \
index 43c9643fd9b44494c76a121e21c8b48b144375e7..13ac2cfcd1bda9a5efbc267949f3bbd4ebf1e5a2 100644 (file)
@@ -8,7 +8,7 @@
  * Portions Copyright (c) 1996-2000, PostgreSQL, Inc
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $Id: c.h,v 1.69 2000/04/12 17:16:24 momjian Exp $
+ * $Id: c.h,v 1.70 2000/05/28 17:56:09 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -250,6 +250,28 @@ typedef struct
  */
 typedef signed int Offset;
 
+/*
+ * Common Postgres datatypes.
+ */
+typedef int16 int2;
+typedef int32 int4;
+typedef float float4;
+typedef double float8;
+
+#ifdef HAVE_LONG_INT_64
+/* Plain "long int" fits, use it */
+typedef long int int64;
+#else
+#ifdef HAVE_LONG_LONG_INT_64
+/* We have working support for "long long int", use that */
+typedef long long int int64;
+#else
+/* Won't actually work, but fall back to long int so that code compiles */
+typedef long int int64;
+#define INT64_IS_BUSTED
+#endif
+#endif
+
 /* ----------------------------------------------------------------
  *             Section 4:  datum type + support macros
  * ----------------------------------------------------------------
@@ -287,6 +309,24 @@ typedef Datum *DatumPtr;
 #define SET_2_BYTES(value) (((Datum) (value)) & 0x0000ffff)
 #define SET_4_BYTES(value) (((Datum) (value)) & 0xffffffff)
 
+/*
+ * DatumGetBool
+ *     Returns boolean value of a datum.
+ *
+ * Note: any nonzero value will be considered TRUE.
+ */
+
+#define DatumGetBool(X) ((bool) (((Datum) (X)) != 0))
+
+/*
+ * BoolGetDatum
+ *     Returns datum representation for a boolean.
+ *
+ * Note: any nonzero value will be considered TRUE.
+ */
+
+#define BoolGetDatum(X) ((Datum) ((X) ? 1 : 0))
+
 /*
  * DatumGetChar
  *     Returns character value of a datum.
@@ -406,25 +446,112 @@ typedef Datum *DatumPtr;
 
 #define PointerGetDatum(X) ((Datum) (X))
 
+/*
+ * DatumGetCString
+ *     Returns C string (null-terminated string) value of a datum.
+ *
+ * Note: C string is not a full-fledged Postgres type at present,
+ * but type input functions use this conversion for their inputs.
+ */
+
+#define DatumGetCString(X) ((char *) DatumGetPointer(X))
+
+/*
+ * CStringGetDatum
+ *     Returns datum representation for a C string (null-terminated string).
+ *
+ * Note: C string is not a full-fledged Postgres type at present,
+ * but type output functions use this conversion for their outputs.
+ * Note: CString is pass-by-reference; caller must ensure the pointed-to
+ * value has adequate lifetime.
+ */
+
+#define CStringGetDatum(X) PointerGetDatum(X)
+
 /*
  * DatumGetName
  *     Returns name value of a datum.
  */
 
-#define DatumGetName(X) ((Name) DatumGetPointer((Datum) (X)))
+#define DatumGetName(X) ((Name) DatumGetPointer(X))
 
 /*
  * NameGetDatum
  *     Returns datum representation for a name.
+ *
+ * Note: Name is pass-by-reference; caller must ensure the pointed-to
+ * value has adequate lifetime.
  */
 
-#define NameGetDatum(X) PointerGetDatum((Pointer) (X))
+#define NameGetDatum(X) PointerGetDatum(X)
+
+/*
+ * DatumGetInt64
+ *     Returns 64-bit integer value of a datum.
+ *
+ * Note: this macro hides the fact that int64 is currently a
+ * pass-by-reference type.  Someday it may be pass-by-value,
+ * at least on some platforms.
+ */
+
+#define DatumGetInt64(X) (* ((int64 *) DatumGetPointer(X)))
+
+/*
+ * Int64GetDatum
+ *     Returns datum representation for a 64-bit integer.
+ *
+ * Note: this routine returns a reference to palloc'd space.
+ */
+
+extern Datum Int64GetDatum(int64 X);
+
+/*
+ * DatumGetFloat4
+ *     Returns 4-byte floating point value of a datum.
+ *
+ * Note: this macro hides the fact that float4 is currently a
+ * pass-by-reference type.  Someday it may be pass-by-value.
+ */
+
+#define DatumGetFloat4(X) (* ((float4 *) DatumGetPointer(X)))
+
+/*
+ * Float4GetDatum
+ *     Returns datum representation for a 4-byte floating point number.
+ *
+ * Note: this routine returns a reference to palloc'd space.
+ */
+
+extern Datum Float4GetDatum(float4 X);
+
+/*
+ * DatumGetFloat8
+ *     Returns 8-byte floating point value of a datum.
+ *
+ * Note: this macro hides the fact that float8 is currently a
+ * pass-by-reference type.  Someday it may be pass-by-value,
+ * at least on some platforms.
+ */
+
+#define DatumGetFloat8(X) (* ((float8 *) DatumGetPointer(X)))
+
+/*
+ * Float8GetDatum
+ *     Returns datum representation for an 8-byte floating point number.
+ *
+ * Note: this routine returns a reference to palloc'd space.
+ */
+
+extern Datum Float8GetDatum(float8 X);
 
 
 /*
  * DatumGetFloat32
  *     Returns 32-bit floating point value of a datum.
  *     This is really a pointer, of course.
+ *
+ * XXX: this macro is now deprecated in favor of DatumGetFloat4.
+ * It will eventually go away.
  */
 
 #define DatumGetFloat32(X) ((float32) DatumGetPointer(X))
@@ -433,14 +560,20 @@ typedef Datum *DatumPtr;
  * Float32GetDatum
  *     Returns datum representation for a 32-bit floating point number.
  *     This is really a pointer, of course.
+ *
+ * XXX: this macro is now deprecated in favor of Float4GetDatum.
+ * It will eventually go away.
  */
 
-#define Float32GetDatum(X) PointerGetDatum((Pointer) (X))
+#define Float32GetDatum(X) PointerGetDatum(X)
 
 /*
  * DatumGetFloat64
  *     Returns 64-bit floating point value of a datum.
  *     This is really a pointer, of course.
+ *
+ * XXX: this macro is now deprecated in favor of DatumGetFloat8.
+ * It will eventually go away.
  */
 
 #define DatumGetFloat64(X) ((float64) DatumGetPointer(X))
@@ -449,9 +582,12 @@ typedef Datum *DatumPtr;
  * Float64GetDatum
  *     Returns datum representation for a 64-bit floating point number.
  *     This is really a pointer, of course.
+ *
+ * XXX: this macro is now deprecated in favor of Float8GetDatum.
+ * It will eventually go away.
  */
 
-#define Float64GetDatum(X) PointerGetDatum((Pointer) (X))
+#define Float64GetDatum(X) PointerGetDatum(X)
 
 /* ----------------------------------------------------------------
  *             Section 5:  IsValid macros for system types
index 662770ace9c822a072277419ce0503aa1480187b..e8717ddb05c196fab4d327e6e81caee316344e5a 100644 (file)
@@ -37,7 +37,7 @@
  * Portions Copyright (c) 1996-2000, PostgreSQL, Inc
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $Id: catversion.h,v 1.21 2000/05/05 03:10:24 tgl Exp $
+ * $Id: catversion.h,v 1.22 2000/05/28 17:56:16 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -53,6 +53,6 @@
  */
 
 /*                         yyyymmddN */
-#define CATALOG_VERSION_NO 200005041
+#define CATALOG_VERSION_NO 200005281
 
 #endif
index 6edd86b1f2ea6e5f4329a523f68cbf2d345e825f..d3d870a411675fb9203a70bbb94142414a438c4f 100644 (file)
@@ -8,7 +8,7 @@
  * Portions Copyright (c) 1996-2000, PostgreSQL, Inc
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $Id: pg_attribute.h,v 1.55 2000/04/12 17:16:28 momjian Exp $
+ * $Id: pg_attribute.h,v 1.56 2000/05/28 17:56:16 tgl Exp $
  *
  * NOTES
  *   the genbki.sh script reads this file and generates .bki
@@ -294,16 +294,17 @@ DATA(insert OID = 0 ( 1262 cmax               29 0  4  -6 0 -1 -1 t p f i f f));
 { 1255, {"proisinh"},          16, 0,  1,  4, 0, -1, -1, '\001', 'p', '\0', 'c', '\0', '\0' }, \
 { 1255, {"proistrusted"},      16, 0,  1,  5, 0, -1, -1, '\001', 'p', '\0', 'c', '\0', '\0' }, \
 { 1255, {"proiscachable"},     16, 0,  1,  6, 0, -1, -1, '\001', 'p', '\0', 'c', '\0', '\0' }, \
-{ 1255, {"pronargs"},          21, 0,  2,  7, 0, -1, -1, '\001', 'p', '\0', 's', '\0', '\0' }, \
-{ 1255, {"proretset"},         16, 0,  1,  8, 0, -1, -1, '\001', 'p', '\0', 'c', '\0', '\0' }, \
-{ 1255, {"prorettype"},            26, 0,  4,  9, 0, -1, -1, '\001', 'p', '\0', 'i', '\0', '\0' }, \
-{ 1255, {"proargtypes"},       30, 0, INDEX_MAX_KEYS*4, 10, 0, -1, -1, '\0', 'p', '\0', 'i', '\0', '\0' }, \
-{ 1255, {"probyte_pct"},       23, 0,  4, 11, 0, -1, -1, '\001', 'p', '\0', 'i', '\0', '\0' }, \
-{ 1255, {"properbyte_cpu"},        23, 0,  4, 12, 0, -1, -1, '\001', 'p', '\0', 'i', '\0', '\0' }, \
-{ 1255, {"propercall_cpu"},        23, 0,  4, 13, 0, -1, -1, '\001', 'p', '\0', 'i', '\0', '\0' }, \
-{ 1255, {"prooutin_ratio"},        23, 0,  4, 14, 0, -1, -1, '\001', 'p', '\0', 'i', '\0', '\0' }, \
-{ 1255, {"prosrc"},                25, 0, -1,  15, 0, -1, -1, '\0', 'p', '\0', 'i', '\0', '\0' }, \
-{ 1255, {"probin"},                17, 0, -1,  16, 0, -1, -1, '\0', 'p', '\0', 'i', '\0', '\0' }
+{ 1255, {"proisstrict"},       16, 0,  1,  7, 0, -1, -1, '\001', 'p', '\0', 'c', '\0', '\0' }, \
+{ 1255, {"pronargs"},          21, 0,  2,  8, 0, -1, -1, '\001', 'p', '\0', 's', '\0', '\0' }, \
+{ 1255, {"proretset"},         16, 0,  1,  9, 0, -1, -1, '\001', 'p', '\0', 'c', '\0', '\0' }, \
+{ 1255, {"prorettype"},            26, 0,  4, 10, 0, -1, -1, '\001', 'p', '\0', 'i', '\0', '\0' }, \
+{ 1255, {"proargtypes"},       30, 0, INDEX_MAX_KEYS*4, 11, 0, -1, -1, '\0', 'p', '\0', 'i', '\0', '\0' }, \
+{ 1255, {"probyte_pct"},       23, 0,  4, 12, 0, -1, -1, '\001', 'p', '\0', 'i', '\0', '\0' }, \
+{ 1255, {"properbyte_cpu"},        23, 0,  4, 13, 0, -1, -1, '\001', 'p', '\0', 'i', '\0', '\0' }, \
+{ 1255, {"propercall_cpu"},        23, 0,  4, 14, 0, -1, -1, '\001', 'p', '\0', 'i', '\0', '\0' }, \
+{ 1255, {"prooutin_ratio"},        23, 0,  4, 15, 0, -1, -1, '\001', 'p', '\0', 'i', '\0', '\0' }, \
+{ 1255, {"prosrc"},                25, 0, -1, 16, 0, -1, -1, '\0', 'p', '\0', 'i', '\0', '\0' }, \
+{ 1255, {"probin"},                17, 0, -1, 17, 0, -1, -1, '\0', 'p', '\0', 'i', '\0', '\0' }
 
 DATA(insert OID = 0 ( 1255 proname         19 0 NAMEDATALEN   1 0 -1 -1 f p f i f f));
 DATA(insert OID = 0 ( 1255 proowner            23 0  4   2 0 -1 -1 t p f i f f));
@@ -311,16 +312,17 @@ DATA(insert OID = 0 ( 1255 prolang            26 0  4   3 0 -1 -1 t p f i f f));
 DATA(insert OID = 0 ( 1255 proisinh            16 0  1   4 0 -1 -1 t p f c f f));
 DATA(insert OID = 0 ( 1255 proistrusted        16 0  1   5 0 -1 -1 t p f c f f));
 DATA(insert OID = 0 ( 1255 proiscachable   16 0  1   6 0 -1 -1 t p f c f f));
-DATA(insert OID = 0 ( 1255 pronargs            21 0  2   7 0 -1 -1 t p f s f f));
-DATA(insert OID = 0 ( 1255 proretset       16 0  1   8 0 -1 -1 t p f c f f));
-DATA(insert OID = 0 ( 1255 prorettype      26 0  4   9 0 -1 -1 t p f i f f));
-DATA(insert OID = 0 ( 1255 proargtypes     30 0 INDEX_MAX_KEYS*4 10 0 -1 -1 f p f i f f));
-DATA(insert OID = 0 ( 1255 probyte_pct     23 0  4  11 0 -1 -1 t p f i f f));
-DATA(insert OID = 0 ( 1255 properbyte_cpu  23 0  4  12 0 -1 -1 t p f i f f));
-DATA(insert OID = 0 ( 1255 propercall_cpu  23 0  4  13 0 -1 -1 t p f i f f));
-DATA(insert OID = 0 ( 1255 prooutin_ratio  23 0  4  14 0 -1 -1 t p f i f f));
-DATA(insert OID = 0 ( 1255 prosrc          25 0 -1  15 0 -1 -1 f p f i f f));
-DATA(insert OID = 0 ( 1255 probin          17 0 -1  16 0 -1 -1 f p f i f f));
+DATA(insert OID = 0 ( 1255 proisstrict     16 0  1   7 0 -1 -1 t p f c f f));
+DATA(insert OID = 0 ( 1255 pronargs            21 0  2   8 0 -1 -1 t p f s f f));
+DATA(insert OID = 0 ( 1255 proretset       16 0  1   9 0 -1 -1 t p f c f f));
+DATA(insert OID = 0 ( 1255 prorettype      26 0  4  10 0 -1 -1 t p f i f f));
+DATA(insert OID = 0 ( 1255 proargtypes     30 0 INDEX_MAX_KEYS*4 11 0 -1 -1 f p f i f f));
+DATA(insert OID = 0 ( 1255 probyte_pct     23 0  4  12 0 -1 -1 t p f i f f));
+DATA(insert OID = 0 ( 1255 properbyte_cpu  23 0  4  13 0 -1 -1 t p f i f f));
+DATA(insert OID = 0 ( 1255 propercall_cpu  23 0  4  14 0 -1 -1 t p f i f f));
+DATA(insert OID = 0 ( 1255 prooutin_ratio  23 0  4  15 0 -1 -1 t p f i f f));
+DATA(insert OID = 0 ( 1255 prosrc          25 0 -1  16 0 -1 -1 f p f i f f));
+DATA(insert OID = 0 ( 1255 probin          17 0 -1  17 0 -1 -1 f p f i f f));
 DATA(insert OID = 0 ( 1255 ctid                27 0  6  -1 0 -1 -1 f p f i f f));
 DATA(insert OID = 0 ( 1255 oid             26 0  4  -2 0 -1 -1 t p f i f f));
 DATA(insert OID = 0 ( 1255 xmin                28 0  4  -3 0 -1 -1 t p f i f f));
index 7aed094e117b24bbf98baad7d5dfb5aab611b4ff..15c9e9fcd921638e6ccfa5ae23dc315b07467abd 100644 (file)
@@ -8,7 +8,7 @@
  * Portions Copyright (c) 1996-2000, PostgreSQL, Inc
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $Id: pg_class.h,v 1.33 2000/01/26 05:57:57 momjian Exp $
+ * $Id: pg_class.h,v 1.34 2000/05/28 17:56:16 tgl Exp $
  *
  * NOTES
  *   ``pg_relation'' is being replaced by ``pg_class''.  currently
@@ -133,7 +133,7 @@ DATA(insert OID = 1247 (  pg_type 71          PGUID 0 0 0 0 f f r 16 0 0 0 0 0 f f _nu
 DESCR("");
 DATA(insert OID = 1249 (  pg_attribute 75    PGUID 0 0 0 0 f f r 15 0 0 0 0 0 f f _null_ ));
 DESCR("");
-DATA(insert OID = 1255 (  pg_proc 81         PGUID 0 0 0 0 f f r 16 0 0 0 0 0 f f _null_ ));
+DATA(insert OID = 1255 (  pg_proc 81         PGUID 0 0 0 0 f f r 17 0 0 0 0 0 f f _null_ ));
 DESCR("");
 DATA(insert OID = 1259 (  pg_class 83        PGUID 0 0 0 0 f f r 19 0 0 0 0 0 f f _null_ ));
 DESCR("");
index 75186cd45030e44da77fe4876eb78ad8810be0ba..0d597d8c4daf82f28d6c0a733522434340e14dac 100644 (file)
@@ -8,7 +8,7 @@
  * Portions Copyright (c) 1996-2000, PostgreSQL, Inc
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $Id: pg_language.h,v 1.10 2000/01/26 05:57:57 momjian Exp $
+ * $Id: pg_language.h,v 1.11 2000/05/28 17:56:16 tgl Exp $
  *
  * NOTES
  *   the genbki.sh script reads this file and generates .bki
@@ -63,14 +63,20 @@ typedef FormData_pg_language *Form_pg_language;
  * ----------------
  */
 
-DATA(insert OID = 11 ( internal f 0 0 "n/a" ));
-DESCR("");
+DATA(insert OID = 11 ( internal f f 0 "n/a" ));
+DESCR("old-style built-in functions");
 #define INTERNALlanguageId 11
-DATA(insert OID = 13 ( "C" f 0 0 "/bin/cc" ));
-DESCR("");
+DATA(insert OID = 12 ( newinternal f f 0 "n/a" ));
+DESCR("new-style built-in functions");
+#define NEWINTERNALlanguageId 12
+DATA(insert OID = 13 ( "C" f f 0 "/bin/cc" ));
+DESCR("Dynamically-loaded old-style C functions");
 #define ClanguageId 13
-DATA(insert OID = 14 ( "sql" f 0 0 "postgres"));
-DESCR("");
+DATA(insert OID = 10 ( "newC" f f 0 "/bin/cc" ));
+DESCR("Dynamically-loaded new-style C functions");
+#define NEWClanguageId 10
+DATA(insert OID = 14 ( "sql" f f 0 "postgres"));
+DESCR("SQL-language functions");
 #define SQLlanguageId 14
 
 
index 6995587c0cc64a9dd8cd94d17671299c665e7331..2a787f1f37a82e695da94774c0aa1b27e3770dcf 100644 (file)
@@ -7,7 +7,7 @@
  * Portions Copyright (c) 1996-2000, PostgreSQL, Inc
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $Id: pg_proc.h,v 1.133 2000/04/16 04:41:03 tgl Exp $
+ * $Id: pg_proc.h,v 1.134 2000/05/28 17:56:16 tgl Exp $
  *
  * NOTES
  *   The script catalog/genbki.sh reads this file and generates .bki
@@ -45,6 +45,7 @@ CATALOG(pg_proc) BOOTSTRAP
    bool        proisinh;
    bool        proistrusted;
    bool        proiscachable;
+   bool        proisstrict;
    int2        pronargs;
    bool        proretset;
    Oid         prorettype;
@@ -68,23 +69,24 @@ typedef FormData_pg_proc *Form_pg_proc;
  *     compiler constants for pg_proc
  * ----------------
  */
-#define Natts_pg_proc                  16
+#define Natts_pg_proc                  17
 #define Anum_pg_proc_proname           1
 #define Anum_pg_proc_proowner          2
 #define Anum_pg_proc_prolang           3
 #define Anum_pg_proc_proisinh          4
 #define Anum_pg_proc_proistrusted      5
 #define Anum_pg_proc_proiscachable     6
-#define Anum_pg_proc_pronargs          7
-#define Anum_pg_proc_proretset         8
-#define Anum_pg_proc_prorettype            9
-#define Anum_pg_proc_proargtypes       10
-#define Anum_pg_proc_probyte_pct       11
-#define Anum_pg_proc_properbyte_cpu        12
-#define Anum_pg_proc_propercall_cpu        13
-#define Anum_pg_proc_prooutin_ratio        14
-#define Anum_pg_proc_prosrc                15
-#define Anum_pg_proc_probin                16
+#define Anum_pg_proc_proisstrict       7
+#define Anum_pg_proc_pronargs          8
+#define Anum_pg_proc_proretset         9
+#define Anum_pg_proc_prorettype            10
+#define Anum_pg_proc_proargtypes       11
+#define Anum_pg_proc_probyte_pct       12
+#define Anum_pg_proc_properbyte_cpu        13
+#define Anum_pg_proc_propercall_cpu        14
+#define Anum_pg_proc_prooutin_ratio        15
+#define Anum_pg_proc_prosrc                16
+#define Anum_pg_proc_probin                17
 
 /* ----------------
  *     initial contents of pg_proc
@@ -94,2372 +96,2373 @@ typedef FormData_pg_proc *Form_pg_proc;
 /* keep the following ordered by OID so that later changes can be made easier */
 
 /* OIDS 1 - 99 */
-DATA(insert OID = 12  (  update_pg_pwd    PGUID 11 f t f 0 f 0  ""  100 0 0 100  update_pg_pwd - ));
-DESCR("update pg_pwd file");
 
-DATA(insert OID = 1242 (  boolin          PGUID 11 f t t 1 f 16 "0" 100 0 0  100  boolin - ));
+DATA(insert OID = 1242 (  boolin          PGUID 11 f t t 1 f 16 "0" 100 0 0  100  boolin - ));
 DESCR("(internal)");
-DATA(insert OID = 1243 (  boolout         PGUID 11 f t t 1 f 23 "0" 100 0 0 100  boolout - ));
+DATA(insert OID = 1243 (  boolout         PGUID 11 f t t 1 f 23 "0" 100 0 0 100  boolout - ));
 DESCR("(internal)");
-DATA(insert OID = 1244 (  byteain         PGUID 11 f t t 1 f 17 "0" 100 0 0 100  byteain - ));
+DATA(insert OID = 1244 (  byteain         PGUID 11 f t t 1 f 17 "0" 100 0 0 100  byteain - ));
 DESCR("(internal)");
-DATA(insert OID =  31 (  byteaout         PGUID 11 f t t 1 f 23 "0" 100 0 0 100  byteaout - ));
+DATA(insert OID =  31 (  byteaout         PGUID 11 f t t 1 f 23 "0" 100 0 0 100  byteaout - ));
 DESCR("(internal)");
-DATA(insert OID = 1245 (  charin          PGUID 11 f t t 1 f 18 "0" 100 0 0 100  charin - ));
+DATA(insert OID = 1245 (  charin          PGUID 11 f t t 1 f 18 "0" 100 0 0 100  charin - ));
 DESCR("(internal)");
-DATA(insert OID =  33 (  charout          PGUID 11 f t t 1 f 23 "0" 100 0 0 100  charout - ));
+DATA(insert OID =  33 (  charout          PGUID 11 f t t 1 f 23 "0" 100 0 0 100  charout - ));
 DESCR("(internal)");
-DATA(insert OID =  34 (  namein               PGUID 11 f t t 1 f 19 "0" 100 0 0 100  namein - ));
+DATA(insert OID =  34 (  namein               PGUID 11 f t t 1 f 19 "0" 100 0 0 100  namein - ));
 DESCR("(internal)");
-DATA(insert OID =  35 (  nameout          PGUID 11 f t t 1 f 23 "0" 100 0 0 100  nameout - ));
+DATA(insert OID =  35 (  nameout          PGUID 11 f t t 1 f 23 "0" 100 0 0 100  nameout - ));
 DESCR("(internal)");
-DATA(insert OID =  38 (  int2in               PGUID 11 f t t 1 f 21 "0" 100 0 0 100  int2in - ));
+DATA(insert OID =  38 (  int2in               PGUID 11 f t t 1 f 21 "0" 100 0 0 100  int2in - ));
 DESCR("(internal)");
-DATA(insert OID =  39 (  int2out          PGUID 11 f t t 1 f 23 "0" 100 0 0 100  int2out - ));
+DATA(insert OID =  39 (  int2out          PGUID 11 f t t 1 f 23 "0" 100 0 0 100  int2out - ));
 DESCR("(internal)");
-DATA(insert OID =  40 (  int2vectorin     PGUID 11 f t t 1 f 22 "0" 100 0 0 100  int2vectorin - ));
+DATA(insert OID =  40 (  int2vectorin     PGUID 11 f t t 1 f 22 "0" 100 0 0 100  int2vectorin - ));
 DESCR("(internal)");
-DATA(insert OID =  41 (  int2vectorout    PGUID 11 f t t 1 f 23 "0" 100 0 0 100  int2vectorout - ));
+DATA(insert OID =  41 (  int2vectorout    PGUID 11 f t t 1 f 23 "0" 100 0 0 100  int2vectorout - ));
 DESCR("(internal)");
-DATA(insert OID =  42 (  int4in               PGUID 11 f t t 1 f 23 "0" 100 0 0 100  int4in - ));
+DATA(insert OID =  42 (  int4in               PGUID 11 f t t 1 f 23 "0" 100 0 0 100  int4in - ));
 DESCR("(internal)");
-DATA(insert OID =  43 (  int4out          PGUID 11 f t t 1 f 19 "0" 100 0 0 100  int4out - ));
+DATA(insert OID =  43 (  int4out          PGUID 11 f t t 1 f 19 "0" 100 0 0 100  int4out - ));
 DESCR("(internal)");
-DATA(insert OID =  44 (  regprocin        PGUID 11 f t f 1 f 24 "0" 100 0 0 100  regprocin - ));
+DATA(insert OID =  44 (  regprocin        PGUID 11 f t f 1 f 24 "0" 100 0 0 100  regprocin - ));
 DESCR("(internal)");
-DATA(insert OID =  45 (  regprocout           PGUID 11 f t f 1 f 23 "0" 100 0 0 100  regprocout - ));
+DATA(insert OID =  45 (  regprocout           PGUID 11 f t f 1 f 23 "0" 100 0 0 100  regprocout - ));
 DESCR("(internal)");
-DATA(insert OID =  46 (  textin               PGUID 11 f t t 1 f 25 "0" 100 0 0 100  textin - ));
+DATA(insert OID =  46 (  textin               PGUID 11 f t t 1 f 25 "0" 100 0 0 100  textin - ));
 DESCR("(internal)");
-DATA(insert OID =  47 (  textout          PGUID 11 f t t 1 f 23 "0" 100 0 0 100  textout - ));
+DATA(insert OID =  47 (  textout          PGUID 11 f t t 1 f 23 "0" 100 0 0 100  textout - ));
 DESCR("(internal)");
-DATA(insert OID =  48 (  tidin            PGUID 11 f t t 1 f 27 "0" 100 0 0 100  tidin - ));
+DATA(insert OID =  48 (  tidin            PGUID 11 f t t 1 f 27 "0" 100 0 0 100  tidin - ));
 DESCR("(internal)");
-DATA(insert OID =  49 (  tidout               PGUID 11 f t t 1 f 23 "0" 100 0 0 100  tidout - ));
+DATA(insert OID =  49 (  tidout               PGUID 11 f t t 1 f 23 "0" 100 0 0 100  tidout - ));
 DESCR("(internal)");
-DATA(insert OID =  50 (  xidin            PGUID 11 f t t 1 f 28 "0" 100 0 0 100  xidin - ));
+DATA(insert OID =  50 (  xidin            PGUID 11 f t t 1 f 28 "0" 100 0 0 100  xidin - ));
 DESCR("(internal)");
-DATA(insert OID =  51 (  xidout               PGUID 11 f t t 1 f 23 "0" 100 0 0 100  xidout - ));
+DATA(insert OID =  51 (  xidout               PGUID 11 f t t 1 f 23 "0" 100 0 0 100  xidout - ));
 DESCR("(internal)");
-DATA(insert OID =  52 (  cidin            PGUID 11 f t t 1 f 29 "0" 100 0 0 100  cidin - ));
+DATA(insert OID =  52 (  cidin            PGUID 11 f t t 1 f 29 "0" 100 0 0 100  cidin - ));
 DESCR("(internal)");
-DATA(insert OID =  53 (  cidout               PGUID 11 f t t 1 f 23 "0" 100 0 0 100  cidout - ));
+DATA(insert OID =  53 (  cidout               PGUID 11 f t t 1 f 23 "0" 100 0 0 100  cidout - ));
 DESCR("(internal)");
-DATA(insert OID =  54 (  oidvectorin      PGUID 11 f t t 1 f 30 "0" 100 0 0 100  oidvectorin - ));
+DATA(insert OID =  54 (  oidvectorin      PGUID 11 f t t 1 f 30 "0" 100 0 0 100  oidvectorin - ));
 DESCR("(internal)");
-DATA(insert OID =  55 (  oidvectorout     PGUID 11 f t t 1 f 23 "0" 100 0 0 100  oidvectorout - ));
+DATA(insert OID =  55 (  oidvectorout     PGUID 11 f t t 1 f 23 "0" 100 0 0 100  oidvectorout - ));
 DESCR("(internal)");
-DATA(insert OID =  56 (  boollt               PGUID 11 f t t 2 f 16 "16 16" 100 0 0 100  boollt - ));
+DATA(insert OID =  56 (  boollt               PGUID 11 f t t 2 f 16 "16 16" 100 0 0 100  boollt - ));
 DESCR("less-than");
-DATA(insert OID =  57 (  boolgt               PGUID 11 f t t 2 f 16 "16 16" 100 0 0 100  boolgt - ));
+DATA(insert OID =  57 (  boolgt               PGUID 11 f t t 2 f 16 "16 16" 100 0 0 100  boolgt - ));
 DESCR("greater-than");
-DATA(insert OID =  60 (  booleq               PGUID 11 f t t 2 f 16 "16 16" 100 0 0 100  booleq - ));
+DATA(insert OID =  60 (  booleq               PGUID 11 f t t 2 f 16 "16 16" 100 0 0 100  booleq - ));
 DESCR("equal");
-DATA(insert OID =  61 (  chareq               PGUID 11 f t t 2 f 16 "18 18" 100 0 0 100  chareq - ));
+DATA(insert OID =  61 (  chareq               PGUID 11 f t t 2 f 16 "18 18" 100 0 0 100  chareq - ));
 DESCR("equal");
-DATA(insert OID =  62 (  nameeq               PGUID 11 f t t 2 f 16 "19 19" 100 0 0 100  nameeq - ));
+DATA(insert OID =  62 (  nameeq               PGUID 11 f t t 2 f 16 "19 19" 100 0 0 100  nameeq - ));
 DESCR("equal");
-DATA(insert OID =  63 (  int2eq               PGUID 11 f t t 2 f 16 "21 21" 100 0 0 100  int2eq - ));
+DATA(insert OID =  63 (  int2eq               PGUID 11 f t t 2 f 16 "21 21" 100 0 0 100  int2eq - ));
 DESCR("equal");
-DATA(insert OID =  64 (  int2lt               PGUID 11 f t t 2 f 16 "21 21" 100 0 0 100  int2lt - ));
+DATA(insert OID =  64 (  int2lt               PGUID 11 f t t 2 f 16 "21 21" 100 0 0 100  int2lt - ));
 DESCR("less-than");
-DATA(insert OID =  65 (  int4eq               PGUID 11 f t t 2 f 16 "23 23" 100 0 0 100  int4eq - ));
+DATA(insert OID =  65 (  int4eq               PGUID 11 f t t 2 f 16 "23 23" 100 0 0 100  int4eq - ));
 DESCR("equal");
-DATA(insert OID =  66 (  int4lt               PGUID 11 f t t 2 f 16 "23 23" 100 0 0 100  int4lt - ));
+DATA(insert OID =  66 (  int4lt               PGUID 11 f t t 2 f 16 "23 23" 100 0 0 100  int4lt - ));
 DESCR("less-than");
-DATA(insert OID =  67 (  texteq               PGUID 11 f t t 2 f 16 "25 25" 100 0 0 0  texteq - ));
+DATA(insert OID =  67 (  texteq               PGUID 11 f t t t 2 f 16 "25 25" 100 0 0 0    texteq - ));
 DESCR("equal");
-DATA(insert OID =  68 (  xideq            PGUID 11 f t t 2 f 16 "28 28" 100 0 0 100  xideq - ));
+DATA(insert OID =  68 (  xideq            PGUID 11 f t t 2 f 16 "28 28" 100 0 0 100  xideq - ));
 DESCR("equal");
-DATA(insert OID =  69 (  cideq            PGUID 11 f t t 2 f 16 "29 29" 100 0 0 100  cideq - ));
+DATA(insert OID =  69 (  cideq            PGUID 11 f t t 2 f 16 "29 29" 100 0 0 100  cideq - ));
 DESCR("equal");
-DATA(insert OID =  70 (  charne               PGUID 11 f t t 2 f 16 "18 18" 100 0 0 100  charne - ));
+DATA(insert OID =  70 (  charne               PGUID 11 f t t 2 f 16 "18 18" 100 0 0 100  charne - ));
 DESCR("not equal");
-DATA(insert OID = 1246 (  charlt          PGUID 11 f t t 2 f 16 "18 18" 100 0 0 100  charlt - ));
+DATA(insert OID = 1246 (  charlt          PGUID 11 f t t 2 f 16 "18 18" 100 0 0 100  charlt - ));
 DESCR("less-than");
-DATA(insert OID =  72 (  charle               PGUID 11 f t t 2 f 16 "18 18" 100 0 0 100  charle - ));
+DATA(insert OID =  72 (  charle               PGUID 11 f t t 2 f 16 "18 18" 100 0 0 100  charle - ));
 DESCR("less-than-or-equal");
-DATA(insert OID =  73 (  chargt               PGUID 11 f t t 2 f 16 "18 18" 100 0 0 100  chargt - ));
+DATA(insert OID =  73 (  chargt               PGUID 11 f t t 2 f 16 "18 18" 100 0 0 100  chargt - ));
 DESCR("greater-than");
-DATA(insert OID =  74 (  charge               PGUID 11 f t t 2 f 16 "18 18" 100 0 0 100  charge - ));
+DATA(insert OID =  74 (  charge               PGUID 11 f t t 2 f 16 "18 18" 100 0 0 100  charge - ));
 DESCR("greater-than-or-equal");
-DATA(insert OID = 1248 (  charpl          PGUID 11 f t t 2 f 18 "18 18" 100 0 0 100  charpl - ));
+DATA(insert OID = 1248 (  charpl          PGUID 11 f t t 2 f 18 "18 18" 100 0 0 100  charpl - ));
 DESCR("addition");
-DATA(insert OID = 1250 (  charmi          PGUID 11 f t t 2 f 18 "18 18" 100 0 0 100  charmi - ));
+DATA(insert OID = 1250 (  charmi          PGUID 11 f t t 2 f 18 "18 18" 100 0 0 100  charmi - ));
 DESCR("subtract");
-DATA(insert OID =  77 (  charmul          PGUID 11 f t t 2 f 18 "18 18" 100 0 0 100  charmul - ));
+DATA(insert OID =  77 (  charmul          PGUID 11 f t t 2 f 18 "18 18" 100 0 0 100  charmul - ));
 DESCR("multiply");
-DATA(insert OID =  78 (  chardiv          PGUID 11 f t t 2 f 18 "18 18" 100 0 0 100  chardiv - ));
+DATA(insert OID =  78 (  chardiv          PGUID 11 f t t 2 f 18 "18 18" 100 0 0 100  chardiv - ));
 DESCR("divide");
 
-DATA(insert OID =  79 (  nameregexeq      PGUID 11 f t t 2 f 16 "19 25" 100 0 0 100  nameregexeq - ));
+DATA(insert OID =  79 (  nameregexeq      PGUID 11 f t t 2 f 16 "19 25" 100 0 0 100  nameregexeq - ));
 DESCR("matches regex., case-sensitive");
-DATA(insert OID = 1252 (  nameregexne     PGUID 11 f t t 2 f 16 "19 25" 100 0 0 100  nameregexne - ));
+DATA(insert OID = 1252 (  nameregexne     PGUID 11 f 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 11 f t t 2 f 16 "25 25" 100 0 1 0  textregexeq - ));
+DATA(insert OID = 1254 (  textregexeq     PGUID 11 f t t t 2 f 16 "25 25" 100 0 1 0    textregexeq - ));
 DESCR("matches regex., case-sensitive");
-DATA(insert OID = 1256 (  textregexne     PGUID 11 f t t 2 f 16 "25 25" 100 0 1 0  textregexne - ));
+DATA(insert OID = 1256 (  textregexne     PGUID 11 f t t t 2 f 16 "25 25" 100 0 1 0    textregexne - ));
 DESCR("does not match regex., case-sensitive");
-DATA(insert OID = 1257 (  textlen         PGUID 11 f t t 1 f 23 "25" 100 0 1 0  textlen - ));
+DATA(insert OID = 1257 (  textlen         PGUID 11 f t t 1 f 23 "25" 100 0 1 0  textlen - ));
 DESCR("length");
-DATA(insert OID = 1258 (  textcat         PGUID 11 f t t 2 f 25 "25 25" 100 0 1 0  textcat - ));
+DATA(insert OID = 1258 (  textcat         PGUID 11 f t t t 2 f 25 "25 25" 100 0 1 0    textcat - ));
 DESCR("concatenate");
 
-DATA(insert OID =  84 (  boolne               PGUID 11 f t t 2 f 16 "16 16" 100 0 0 100  boolne - ));
+DATA(insert OID =  84 (  boolne               PGUID 11 f t t 2 f 16 "16 16" 100 0 0 100  boolne - ));
 DESCR("not equal");
-DATA(insert OID =  89 (  version          PGUID 11 f t f 0 f 25 "" 100 0 0 100 version - ));
+DATA(insert OID =  89 (  version          PGUID 11 f t f 0 f 25 "" 100 0 0 100 version - ));
 DESCR("PostgreSQL version string");
 
-DATA(insert OID = 1265 (  rtcostestimate   PGUID 11 f t f 7 f 0 "0 0 0 0 0 0 0" 100 0 0 100  rtcostestimate - ));
+DATA(insert OID = 1265 (  rtcostestimate   PGUID 11 f t f 7 f 0 "0 0 0 0 0 0 0" 100 0 0 100  rtcostestimate - ));
 DESCR("r-tree cost estimator");
-DATA(insert OID = 1268 (  btcostestimate   PGUID 11 f t f 7 f 0 "0 0 0 0 0 0 0" 100 0 0 100  btcostestimate - ));
+DATA(insert OID = 1268 (  btcostestimate   PGUID 11 f t f 7 f 0 "0 0 0 0 0 0 0" 100 0 0 100  btcostestimate - ));
 DESCR("btree cost estimator");
 
 /* OIDS 100 - 199 */
 
-DATA(insert OID = 100 (  int8fac          PGUID 11 f t t 1 f 20 "20" 100 0 0 100  int8fac - ));
+DATA(insert OID = 100 (  int8fac          PGUID 11 f t t 1 f 20 "20" 100 0 0 100  int8fac - ));
 DESCR("factorial");
-DATA(insert OID = 101 (  eqsel            PGUID 11 f t f 5 f 701 "26 26 21 0 23" 100 0 0 100  eqsel - ));
+DATA(insert OID = 101 (  eqsel            PGUID 11 f t f 5 f 701 "26 26 21 0 23" 100 0 0 100  eqsel - ));
 DESCR("restriction selectivity of = and related operators");
-DATA(insert OID = 102 (  neqsel               PGUID 11 f t f 5 f 701 "26 26 21 0 23" 100 0 0 100  neqsel - ));
+DATA(insert OID = 102 (  neqsel               PGUID 11 f t f 5 f 701 "26 26 21 0 23" 100 0 0 100  neqsel - ));
 DESCR("restriction selectivity of <> and related operators");
-DATA(insert OID = 103 (  scalarltsel      PGUID 11 f t f 5 f 701 "26 26 21 0 23" 100 0 0 100  scalarltsel - ));
+DATA(insert OID = 103 (  scalarltsel      PGUID 11 f t f 5 f 701 "26 26 21 0 23" 100 0 0 100  scalarltsel - ));
 DESCR("restriction selectivity of < and related operators on scalar datatypes");
-DATA(insert OID = 104 (  scalargtsel      PGUID 11 f t f 5 f 701 "26 26 21 0 23" 100 0 0 100  scalargtsel - ));
+DATA(insert OID = 104 (  scalargtsel      PGUID 11 f t f 5 f 701 "26 26 21 0 23" 100 0 0 100  scalargtsel - ));
 DESCR("restriction selectivity of > and related operators on scalar datatypes");
-DATA(insert OID = 105 (  eqjoinsel        PGUID 11 f t f 5 f 701 "26 26 21 26 21" 100 0 0 100  eqjoinsel - ));
+DATA(insert OID = 105 (  eqjoinsel        PGUID 11 f t f t 5 f 701 "26 26 21 26 21" 100 0 0 100    eqjoinsel - ));
 DESCR("join selectivity of = and related operators");
-DATA(insert OID = 106 (  neqjoinsel           PGUID 11 f t f 5 f 701 "26 26 21 26 21" 100 0 0 100  neqjoinsel - ));
+DATA(insert OID = 106 (  neqjoinsel           PGUID 11 f t f t 5 f 701 "26 26 21 26 21" 100 0 0 100    neqjoinsel - ));
 DESCR("join selectivity of <> and related operators");
-DATA(insert OID = 107 (  scalarltjoinsel   PGUID 11 f t f 5 f 701 "26 26 21 26 21" 100 0 0 100 scalarltjoinsel - ));
+DATA(insert OID = 107 (  scalarltjoinsel   PGUID 11 f t f t 5 f 701 "26 26 21 26 21" 100 0 0 100   scalarltjoinsel - ));
 DESCR("join selectivity of < and related operators on scalar datatypes");
-DATA(insert OID = 108 (  scalargtjoinsel   PGUID 11 f t f 5 f 701 "26 26 21 26 21" 100 0 0 100 scalargtjoinsel - ));
+DATA(insert OID = 108 (  scalargtjoinsel   PGUID 11 f t f t 5 f 701 "26 26 21 26 21" 100 0 0 100   scalargtjoinsel - ));
 DESCR("join selectivity of > and related operators on scalar datatypes");
 
-DATA(insert OID = 112 (  text             PGUID 11 f t t 1 f  25 "23" 100 0 0 100  int4_text - ));
+DATA(insert OID = 112 (  text             PGUID 11 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 11 f t t 1 f  25 "21" 100 0 0 100  int2_text - ));
+DATA(insert OID = 113 (  text             PGUID 11 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 11 f t t 1 f  25 "26" 100 0 0 100  oid_text - ));
+DATA(insert OID = 114 (  text             PGUID 11 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 11 f t t 2 f  16 "603 603" 100 1 0 100  box_above - ));
+DATA(insert OID = 115 (  box_above        PGUID 11 f t t 2 f  16 "603 603" 100 1 0 100  box_above - ));
 DESCR("is above");
-DATA(insert OID = 116 (  box_below        PGUID 11 f t t 2 f  16 "603 603" 100 1 0 100  box_below - ));
+DATA(insert OID = 116 (  box_below        PGUID 11 f t t 2 f  16 "603 603" 100 1 0 100  box_below - ));
 DESCR("is below");
 
-DATA(insert OID = 117 (  point_in         PGUID 11 f t t 1 f 600 "0" 100 0 0 100  point_in - ));
+DATA(insert OID = 117 (  point_in         PGUID 11 f t t 1 f 600 "0" 100 0 0 100  point_in - ));
 DESCR("(internal)");
-DATA(insert OID = 118 (  point_out        PGUID 11 f t t 1 f 23  "0" 100 0 0 100  point_out - ));
+DATA(insert OID = 118 (  point_out        PGUID 11 f t t 1 f 23  "0" 100 0 0 100  point_out - ));
 DESCR("(internal)");
-DATA(insert OID = 119 (  lseg_in          PGUID 11 f t t 1 f 601 "0" 100 0 0 100  lseg_in - ));
+DATA(insert OID = 119 (  lseg_in          PGUID 11 f t t 1 f 601 "0" 100 0 0 100  lseg_in - ));
 DESCR("(internal)");
-DATA(insert OID = 120 (  lseg_out         PGUID 11 f t t 1 f 23  "0" 100 0 0 100  lseg_out - ));
+DATA(insert OID = 120 (  lseg_out         PGUID 11 f t t 1 f 23  "0" 100 0 0 100  lseg_out - ));
 DESCR("(internal)");
-DATA(insert OID = 121 (  path_in          PGUID 11 f t t 1 f 602 "0" 100 0 0 100  path_in - ));
+DATA(insert OID = 121 (  path_in          PGUID 11 f t t 1 f 602 "0" 100 0 0 100  path_in - ));
 DESCR("(internal)");
-DATA(insert OID = 122 (  path_out         PGUID 11 f t t 1 f 23  "0" 100 0 0 100  path_out - ));
+DATA(insert OID = 122 (  path_out         PGUID 11 f t t 1 f 23  "0" 100 0 0 100  path_out - ));
 DESCR("(internal)");
-DATA(insert OID = 123 (  box_in               PGUID 11 f t t 1 f 603 "0" 100 0 0 100  box_in - ));
+DATA(insert OID = 123 (  box_in               PGUID 11 f t t 1 f 603 "0" 100 0 0 100  box_in - ));
 DESCR("(internal)");
-DATA(insert OID = 124 (  box_out          PGUID 11 f t t 1 f 23  "0" 100 0 0 100  box_out - ));
+DATA(insert OID = 124 (  box_out          PGUID 11 f t t 1 f 23  "0" 100 0 0 100  box_out - ));
 DESCR("(internal)");
-DATA(insert OID = 125 (  box_overlap      PGUID 11 f t t 2 f 16 "603 603" 100 1 0 100  box_overlap - ));
+DATA(insert OID = 125 (  box_overlap      PGUID 11 f t t t 2 f 16 "603 603" 100 1 0 100    box_overlap - ));
 DESCR("overlaps");
-DATA(insert OID = 126 (  box_ge               PGUID 11 f t t 2 f 16 "603 603" 100 1 0 100  box_ge - ));
+DATA(insert OID = 126 (  box_ge               PGUID 11 f t t t 2 f 16 "603 603" 100 1 0 100    box_ge - ));
 DESCR("greater-than-or-equal");
-DATA(insert OID = 127 (  box_gt               PGUID 11 f t t 2 f 16 "603 603" 100 1 0 100  box_gt - ));
+DATA(insert OID = 127 (  box_gt               PGUID 11 f t t t 2 f 16 "603 603" 100 1 0 100    box_gt - ));
 DESCR("greater-than");
-DATA(insert OID = 128 (  box_eq               PGUID 11 f t t 2 f 16 "603 603" 100 1 0 100  box_eq - ));
+DATA(insert OID = 128 (  box_eq               PGUID 11 f t t t 2 f 16 "603 603" 100 1 0 100    box_eq - ));
 DESCR("equal");
-DATA(insert OID = 129 (  box_lt               PGUID 11 f t t 2 f 16 "603 603" 100 1 0 100  box_lt - ));
+DATA(insert OID = 129 (  box_lt               PGUID 11 f t t t 2 f 16 "603 603" 100 1 0 100    box_lt - ));
 DESCR("less-than");
-DATA(insert OID = 130 (  box_le               PGUID 11 f t t 2 f 16 "603 603" 100 1 0 100  box_le - ));
+DATA(insert OID = 130 (  box_le               PGUID 11 f t t t 2 f 16 "603 603" 100 1 0 100    box_le - ));
 DESCR("less-than-or-equal");
-DATA(insert OID = 131 (  point_above      PGUID 11 f t t 2 f 16 "600 600" 100 0 0 100  point_above - ));
+DATA(insert OID = 131 (  point_above      PGUID 11 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 11 f t t 2 f 16 "600 600" 100 0 0 100  point_left - ));
+DATA(insert OID = 132 (  point_left           PGUID 11 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 11 f t t 2 f 16 "600 600" 100 0 0 100  point_right - ));
+DATA(insert OID = 133 (  point_right      PGUID 11 f t t t 2 f 16 "600 600" 100 0 0 100    point_right - ));
 DESCR("is left of");
-DATA(insert OID = 134 (  point_below      PGUID 11 f t t 2 f 16 "600 600" 100 0 0 100  point_below - ));
+DATA(insert OID = 134 (  point_below      PGUID 11 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 11 f t t 2 f 16 "600 600" 100 0 0 100  point_eq - ));
+DATA(insert OID = 135 (  point_eq         PGUID 11 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 11 f t t 2 f 16 "600 603" 100 0 0 100  on_pb - ));
+DATA(insert OID = 136 (  on_pb            PGUID 11 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 11 f t t 2 f 16 "600 602" 100 0 1 0  on_ppath - ));
+DATA(insert OID = 137 (  on_ppath         PGUID 11 f t t 2 f 16 "600 602" 100 0 1 0  on_ppath - ));
 DESCR("contained in");
-DATA(insert OID = 138 (  box_center           PGUID 11 f t t 1 f 600 "603" 100 1 0 100  box_center - ));
+DATA(insert OID = 138 (  box_center           PGUID 11 f t t 1 f 600 "603" 100 1 0 100  box_center - ));
 DESCR("center of");
-DATA(insert OID = 139 (  areasel          PGUID 11 f t f 5 f 701 "26 26 21 0 23" 100 0 0 100  areasel - ));
+DATA(insert OID = 139 (  areasel          PGUID 11 f t f 5 f 701 "26 26 21 0 23" 100 0 0 100  areasel - ));
 DESCR("restriction selectivity for area-comparison operators");
-DATA(insert OID = 140 (  areajoinsel      PGUID 11 f t f 5 f 701 "26 26 21 26 21" 100 0 0 100  areajoinsel - ));
+DATA(insert OID = 140 (  areajoinsel      PGUID 11 f t f t 5 f 701 "26 26 21 26 21" 100 0 0 100    areajoinsel - ));
 DESCR("join selectivity for area-comparison operators");
-DATA(insert OID = 141 (  int4mul          PGUID 11 f t t 2 f 23 "23 23" 100 0 0 100  int4mul - ));
+DATA(insert OID = 141 (  int4mul          PGUID 11 f t t 2 f 23 "23 23" 100 0 0 100  int4mul - ));
 DESCR("multiply");
-DATA(insert OID = 142 (  int4fac          PGUID 11 f t t 1 f 23 "23" 100 0 0 100  int4fac - ));
+DATA(insert OID = 142 (  int4fac          PGUID 11 f t t 1 f 23 "23" 100 0 0 100  int4fac - ));
 DESCR("factorial");
-DATA(insert OID = 143 (  pointdist        PGUID 11 f t t 2 f 23 "600 600" 100 0 0 100  pointdist - ));
+DATA(insert OID = 143 (  pointdist        PGUID 11 f t t t 2 f 23 "600 600" 100 0 0 100    pointdist - ));
 DESCR("");
-DATA(insert OID = 144 (  int4ne               PGUID 11 f t t 2 f 16 "23 23" 100 0 0 100  int4ne - ));
+DATA(insert OID = 144 (  int4ne               PGUID 11 f t t 2 f 16 "23 23" 100 0 0 100  int4ne - ));
 DESCR("not equal");
-DATA(insert OID = 145 (  int2ne               PGUID 11 f t t 2 f 16 "21 21" 100 0 0 100  int2ne - ));
+DATA(insert OID = 145 (  int2ne               PGUID 11 f t t 2 f 16 "21 21" 100 0 0 100  int2ne - ));
 DESCR("not equal");
-DATA(insert OID = 146 (  int2gt               PGUID 11 f t t 2 f 16 "21 21" 100 0 0 100  int2gt - ));
+DATA(insert OID = 146 (  int2gt               PGUID 11 f t t 2 f 16 "21 21" 100 0 0 100  int2gt - ));
 DESCR("greater-than");
-DATA(insert OID = 147 (  int4gt               PGUID 11 f t t 2 f 16 "23 23" 100 0 0 100  int4gt - ));
+DATA(insert OID = 147 (  int4gt               PGUID 11 f t t 2 f 16 "23 23" 100 0 0 100  int4gt - ));
 DESCR("greater-than");
-DATA(insert OID = 148 (  int2le               PGUID 11 f t t 2 f 16 "21 21" 100 0 0 100  int2le - ));
+DATA(insert OID = 148 (  int2le               PGUID 11 f t t 2 f 16 "21 21" 100 0 0 100  int2le - ));
 DESCR("less-than-or-equal");
-DATA(insert OID = 149 (  int4le               PGUID 11 f t t 2 f 16 "23 23" 100 0 0 100  int4le - ));
+DATA(insert OID = 149 (  int4le               PGUID 11 f t t 2 f 16 "23 23" 100 0 0 100  int4le - ));
 DESCR("less-than-or-equal");
-DATA(insert OID = 150 (  int4ge               PGUID 11 f t t 2 f 16 "23 23" 100 0 0 100  int4ge - ));
+DATA(insert OID = 150 (  int4ge               PGUID 11 f t t 2 f 16 "23 23" 100 0 0 100  int4ge - ));
 DESCR("greater-than-or-equal");
-DATA(insert OID = 151 (  int2ge               PGUID 11 f t t 2 f 16 "21 21" 100 0 0 100  int2ge - ));
+DATA(insert OID = 151 (  int2ge               PGUID 11 f t t 2 f 16 "21 21" 100 0 0 100  int2ge - ));
 DESCR("greater-than-or-equal");
-DATA(insert OID = 152 (  int2mul          PGUID 11 f t t 2 f 21 "21 21" 100 0 0 100  int2mul - ));
+DATA(insert OID = 152 (  int2mul          PGUID 11 f t t 2 f 21 "21 21" 100 0 0 100  int2mul - ));
 DESCR("multiply");
-DATA(insert OID = 153 (  int2div          PGUID 11 f t t 2 f 21 "21 21" 100 0 0 100  int2div - ));
+DATA(insert OID = 153 (  int2div          PGUID 11 f t t 2 f 21 "21 21" 100 0 0 100  int2div - ));
 DESCR("divide");
-DATA(insert OID = 154 (  int4div          PGUID 11 f t t 2 f 23 "23 23" 100 0 0 100  int4div - ));
+DATA(insert OID = 154 (  int4div          PGUID 11 f t t 2 f 23 "23 23" 100 0 0 100  int4div - ));
 DESCR("divide");
-DATA(insert OID = 155 (  int2mod          PGUID 11 f t t 2 f 21 "21 21" 100 0 0 100  int2mod - ));
+DATA(insert OID = 155 (  int2mod          PGUID 11 f t t 2 f 21 "21 21" 100 0 0 100  int2mod - ));
 DESCR("modulus");
-DATA(insert OID = 156 (  int4mod          PGUID 11 f t t 2 f 23 "23 23" 100 0 0 100  int4mod - ));
+DATA(insert OID = 156 (  int4mod          PGUID 11 f t t 2 f 23 "23 23" 100 0 0 100  int4mod - ));
 DESCR("modulus");
-DATA(insert OID = 157 (  textne               PGUID 11 f t t 2 f 16 "25 25" 100 0 0 0  textne - ));
+DATA(insert OID = 157 (  textne               PGUID 11 f t t t 2 f 16 "25 25" 100 0 0 0    textne - ));
 DESCR("not equal");
-DATA(insert OID = 158 (  int24eq          PGUID 11 f t t 2 f 16 "21 23" 100 0 0 100  int24eq - ));
+DATA(insert OID = 158 (  int24eq          PGUID 11 f t t 2 f 16 "21 23" 100 0 0 100  int24eq - ));
 DESCR("equal");
-DATA(insert OID = 159 (  int42eq          PGUID 11 f t t 2 f 16 "23 21" 100 0 0 100  int42eq - ));
+DATA(insert OID = 159 (  int42eq          PGUID 11 f t t 2 f 16 "23 21" 100 0 0 100  int42eq - ));
 DESCR("equal");
-DATA(insert OID = 160 (  int24lt          PGUID 11 f t t 2 f 16 "21 23" 100 0 0 100  int24lt - ));
+DATA(insert OID = 160 (  int24lt          PGUID 11 f t t 2 f 16 "21 23" 100 0 0 100  int24lt - ));
 DESCR("less-than");
-DATA(insert OID = 161 (  int42lt          PGUID 11 f t t 2 f 16 "23 21" 100 0 0 100  int42lt - ));
+DATA(insert OID = 161 (  int42lt          PGUID 11 f t t 2 f 16 "23 21" 100 0 0 100  int42lt - ));
 DESCR("less-than");
-DATA(insert OID = 162 (  int24gt          PGUID 11 f t t 2 f 16 "21 23" 100 0 0 100  int24gt - ));
+DATA(insert OID = 162 (  int24gt          PGUID 11 f t t 2 f 16 "21 23" 100 0 0 100  int24gt - ));
 DESCR("greater-than");
-DATA(insert OID = 163 (  int42gt          PGUID 11 f t t 2 f 16 "23 21" 100 0 0 100  int42gt - ));
+DATA(insert OID = 163 (  int42gt          PGUID 11 f t t 2 f 16 "23 21" 100 0 0 100  int42gt - ));
 DESCR("greater-than");
-DATA(insert OID = 164 (  int24ne          PGUID 11 f t t 2 f 16 "21 23" 100 0 0 100  int24ne - ));
+DATA(insert OID = 164 (  int24ne          PGUID 11 f t t 2 f 16 "21 23" 100 0 0 100  int24ne - ));
 DESCR("not equal");
-DATA(insert OID = 165 (  int42ne          PGUID 11 f t t 2 f 16 "23 21" 100 0 0 100  int42ne - ));
+DATA(insert OID = 165 (  int42ne          PGUID 11 f t t 2 f 16 "23 21" 100 0 0 100  int42ne - ));
 DESCR("not equal");
-DATA(insert OID = 166 (  int24le          PGUID 11 f t t 2 f 16 "21 23" 100 0 0 100  int24le - ));
+DATA(insert OID = 166 (  int24le          PGUID 11 f t t 2 f 16 "21 23" 100 0 0 100  int24le - ));
 DESCR("less-than-or-equal");
-DATA(insert OID = 167 (  int42le          PGUID 11 f t t 2 f 16 "23 21" 100 0 0 100  int42le - ));
+DATA(insert OID = 167 (  int42le          PGUID 11 f t t 2 f 16 "23 21" 100 0 0 100  int42le - ));
 DESCR("less-than-or-equal");
-DATA(insert OID = 168 (  int24ge          PGUID 11 f t t 2 f 16 "21 23" 100 0 0 100  int24ge - ));
+DATA(insert OID = 168 (  int24ge          PGUID 11 f t t 2 f 16 "21 23" 100 0 0 100  int24ge - ));
 DESCR("greater-than-or-equal");
-DATA(insert OID = 169 (  int42ge          PGUID 11 f t t 2 f 16 "23 21" 100 0 0 100  int42ge - ));
+DATA(insert OID = 169 (  int42ge          PGUID 11 f t t 2 f 16 "23 21" 100 0 0 100  int42ge - ));
 DESCR("greater-than-or-equal");
-DATA(insert OID = 170 (  int24mul         PGUID 11 f t t 2 f 23 "21 23" 100 0 0 100  int24mul - ));
+DATA(insert OID = 170 (  int24mul         PGUID 11 f t t 2 f 23 "21 23" 100 0 0 100  int24mul - ));
 DESCR("multiply");
-DATA(insert OID = 171 (  int42mul         PGUID 11 f t t 2 f 23 "23 21" 100 0 0 100  int42mul - ));
+DATA(insert OID = 171 (  int42mul         PGUID 11 f t t 2 f 23 "23 21" 100 0 0 100  int42mul - ));
 DESCR("multiply");
-DATA(insert OID = 172 (  int24div         PGUID 11 f t t 2 f 23 "21 23" 100 0 0 100  int24div - ));
+DATA(insert OID = 172 (  int24div         PGUID 11 f t t 2 f 23 "21 23" 100 0 0 100  int24div - ));
 DESCR("divide");
-DATA(insert OID = 173 (  int42div         PGUID 11 f t t 2 f 23 "23 21" 100 0 0 100  int42div - ));
+DATA(insert OID = 173 (  int42div         PGUID 11 f t t 2 f 23 "23 21" 100 0 0 100  int42div - ));
 DESCR("divide");
-DATA(insert OID = 174 (  int24mod         PGUID 11 f t t 2 f 23 "21 23" 100 0 0 100  int24mod - ));
+DATA(insert OID = 174 (  int24mod         PGUID 11 f t t 2 f 23 "21 23" 100 0 0 100  int24mod - ));
 DESCR("modulus");
-DATA(insert OID = 175 (  int42mod         PGUID 11 f t t 2 f 23 "23 21" 100 0 0 100  int42mod - ));
+DATA(insert OID = 175 (  int42mod         PGUID 11 f t t 2 f 23 "23 21" 100 0 0 100  int42mod - ));
 DESCR("modulus");
-DATA(insert OID = 176 (  int2pl               PGUID 11 f t t 2 f 21 "21 21" 100 0 0 100  int2pl - ));
+DATA(insert OID = 176 (  int2pl               PGUID 11 f t t 2 f 21 "21 21" 100 0 0 100  int2pl - ));
 DESCR("addition");
-DATA(insert OID = 177 (  int4pl               PGUID 11 f t t 2 f 23 "23 23" 100 0 0 100  int4pl - ));
+DATA(insert OID = 177 (  int4pl               PGUID 11 f t t 2 f 23 "23 23" 100 0 0 100  int4pl - ));
 DESCR("addition");
-DATA(insert OID = 178 (  int24pl          PGUID 11 f t t 2 f 23 "21 23" 100 0 0 100  int24pl - ));
+DATA(insert OID = 178 (  int24pl          PGUID 11 f t t 2 f 23 "21 23" 100 0 0 100  int24pl - ));
 DESCR("addition");
-DATA(insert OID = 179 (  int42pl          PGUID 11 f t t 2 f 23 "23 21" 100 0 0 100  int42pl - ));
+DATA(insert OID = 179 (  int42pl          PGUID 11 f t t 2 f 23 "23 21" 100 0 0 100  int42pl - ));
 DESCR("addition");
-DATA(insert OID = 180 (  int2mi               PGUID 11 f t t 2 f 21 "21 21" 100 0 0 100  int2mi - ));
+DATA(insert OID = 180 (  int2mi               PGUID 11 f t t 2 f 21 "21 21" 100 0 0 100  int2mi - ));
 DESCR("subtract");
-DATA(insert OID = 181 (  int4mi               PGUID 11 f t t 2 f 23 "23 23" 100 0 0 100  int4mi - ));
+DATA(insert OID = 181 (  int4mi               PGUID 11 f t t 2 f 23 "23 23" 100 0 0 100  int4mi - ));
 DESCR("subtract");
-DATA(insert OID = 182 (  int24mi          PGUID 11 f t t 2 f 23 "21 23" 100 0 0 100  int24mi - ));
+DATA(insert OID = 182 (  int24mi          PGUID 11 f t t 2 f 23 "21 23" 100 0 0 100  int24mi - ));
 DESCR("subtract");
-DATA(insert OID = 183 (  int42mi          PGUID 11 f t t 2 f 23 "23 21" 100 0 0 100  int42mi - ));
+DATA(insert OID = 183 (  int42mi          PGUID 11 f t t 2 f 23 "23 21" 100 0 0 100  int42mi - ));
 DESCR("subtract");
-DATA(insert OID = 184 (  oideq            PGUID 11 f t t 2 f 16 "26 26" 100 0 0 100  oideq - ));
+DATA(insert OID = 184 (  oideq            PGUID 11 f t t 2 f 16 "26 26" 100 0 0 100  oideq - ));
 DESCR("equal");
-DATA(insert OID = 185 (  oidne            PGUID 11 f t t 2 f 16 "26 26" 100 0 0 100  oidne - ));
+DATA(insert OID = 185 (  oidne            PGUID 11 f t t 2 f 16 "26 26" 100 0 0 100  oidne - ));
 DESCR("not equal");
-DATA(insert OID = 186 (  box_same         PGUID 11 f t t 2 f 16 "603 603" 100 0 0 100  box_same - ));
+DATA(insert OID = 186 (  box_same         PGUID 11 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 11 f t t 2 f 16 "603 603" 100 0 0 100  box_contain - ));
+DATA(insert OID = 187 (  box_contain      PGUID 11 f t t t 2 f 16 "603 603" 100 0 0 100    box_contain - ));
 DESCR("contains");
-DATA(insert OID = 188 (  box_left         PGUID 11 f t t 2 f 16 "603 603" 100 0 0 100  box_left - ));
+DATA(insert OID = 188 (  box_left         PGUID 11 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 11 f t t 2 f 16 "603 603" 100 0 0 100  box_overleft - ));
+DATA(insert OID = 189 (  box_overleft     PGUID 11 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 11 f t t 2 f 16 "603 603" 100 0 0 100  box_overright - ));
+DATA(insert OID = 190 (  box_overright    PGUID 11 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 11 f t t 2 f 16 "603 603" 100 0 0 100  box_right - ));
+DATA(insert OID = 191 (  box_right        PGUID 11 f t t t 2 f 16 "603 603" 100 0 0 100    box_right - ));
 DESCR("is left of");
-DATA(insert OID = 192 (  box_contained    PGUID 11 f t t 2 f 16 "603 603" 100 0 0 100  box_contained - ));
+DATA(insert OID = 192 (  box_contained    PGUID 11 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 11 f t t 2 f 603 "603 603" 100 0 0 100  rt_box_union - ));
+DATA(insert OID = 193 (  rt_box_union     PGUID 11 f t t 2 f 603 "603 603" 100 0 0 100  rt_box_union - ));
 DESCR("r-tree");
-DATA(insert OID = 194 (  rt_box_inter     PGUID 11 f t t 2 f 603 "603 603" 100 0 0 100  rt_box_inter - ));
+DATA(insert OID = 194 (  rt_box_inter     PGUID 11 f t t 2 f 603 "603 603" 100 0 0 100  rt_box_inter - ));
 DESCR("r-tree");
-DATA(insert OID = 195 (  rt_box_size      PGUID 11 f t t 2 f 700 "603 700" 100 0 0 100  rt_box_size - ));
+DATA(insert OID = 195 (  rt_box_size      PGUID 11 f t t 2 f 700 "603 700" 100 0 0 100  rt_box_size - ));
 DESCR("r-tree");
-DATA(insert OID = 196 (  rt_bigbox_size    PGUID 11 f t t 2 f 700 "603 700" 100 0 0 100  rt_bigbox_size - ));
+DATA(insert OID = 196 (  rt_bigbox_size    PGUID 11 f t t 2 f 700 "603 700" 100 0 0 100  rt_bigbox_size - ));
 DESCR("r-tree");
-DATA(insert OID = 197 (  rt_poly_union    PGUID 11 f t t 2 f 604 "604 604" 100 0 0 100  rt_poly_union - ));
+DATA(insert OID = 197 (  rt_poly_union    PGUID 11 f t t 2 f 604 "604 604" 100 0 0 100  rt_poly_union - ));
 DESCR("r-tree");
-DATA(insert OID = 198 (  rt_poly_inter    PGUID 11 f t t 2 f 604 "604 604" 100 0 0 100  rt_poly_inter - ));
+DATA(insert OID = 198 (  rt_poly_inter    PGUID 11 f t t 2 f 604 "604 604" 100 0 0 100  rt_poly_inter - ));
 DESCR("r-tree");
-DATA(insert OID = 199 (  rt_poly_size     PGUID 11 f t t 2 f 23 "604 23" 100 0 0 100  rt_poly_size - ));
+DATA(insert OID = 199 (  rt_poly_size     PGUID 11 f t t 2 f 23 "604 23" 100 0 0 100  rt_poly_size - ));
 DESCR("r-tree");
 
 /* OIDS 200 - 299 */
 
-DATA(insert OID = 200 (  float4in         PGUID 11 f t t 1 f 700 "0" 100 0 0 100  float4in - ));
+DATA(insert OID = 200 (  float4in         PGUID 11 f t t 1 f 700 "0" 100 0 0 100  float4in - ));
 DESCR("(internal)");
-DATA(insert OID = 201 (  float4out        PGUID 11 f t t 1 f 23  "0" 100 0 0 100  float4out - ));
+DATA(insert OID = 201 (  float4out        PGUID 11 f t t 1 f 23  "0" 100 0 0 100  float4out - ));
 DESCR("(internal)");
-DATA(insert OID = 202 (  float4mul        PGUID 11 f t t 2 f 700 "700 700" 100 0 0 100  float4mul - ));
+DATA(insert OID = 202 (  float4mul        PGUID 11 f t t 2 f 700 "700 700" 100 0 0 100  float4mul - ));
 DESCR("multiply");
-DATA(insert OID = 203 (  float4div        PGUID 11 f t t 2 f 700 "700 700" 100 0 0 100  float4div - ));
+DATA(insert OID = 203 (  float4div        PGUID 11 f t t 2 f 700 "700 700" 100 0 0 100  float4div - ));
 DESCR("divide");
-DATA(insert OID = 204 (  float4pl         PGUID 11 f t t 2 f 700 "700 700" 100 0 0 100  float4pl - ));
+DATA(insert OID = 204 (  float4pl         PGUID 11 f t t 2 f 700 "700 700" 100 0 0 100  float4pl - ));
 DESCR("addition");
-DATA(insert OID = 205 (  float4mi         PGUID 11 f t t 2 f 700 "700 700" 100 0 0 100  float4mi - ));
+DATA(insert OID = 205 (  float4mi         PGUID 11 f t t 2 f 700 "700 700" 100 0 0 100  float4mi - ));
 DESCR("subtract");
-DATA(insert OID = 206 (  float4um         PGUID 11 f t t 1 f 700 "700" 100 0 0 100  float4um - ));
+DATA(insert OID = 206 (  float4um         PGUID 11 f t t 1 f 700 "700" 100 0 0 100  float4um - ));
 DESCR("negate");
-DATA(insert OID = 207 (  float4abs        PGUID 11 f t t 1 f 700 "700" 100 0 0 100  float4abs - ));
+DATA(insert OID = 207 (  float4abs        PGUID 11 f t t 1 f 700 "700" 100 0 0 100  float4abs - ));
 DESCR("absolute value");
-DATA(insert OID = 208 (  float4inc        PGUID 11 f t t 1 f 700 "700" 100 0 0 100  float4inc - ));
+DATA(insert OID = 208 (  float4inc        PGUID 11 f t t 1 f 700 "700" 100 0 0 100  float4inc - ));
 DESCR("increment");
-DATA(insert OID = 209 (  float4larger     PGUID 11 f t t 2 f 700 "700 700" 100 0 0 100  float4larger - ));
+DATA(insert OID = 209 (  float4larger     PGUID 11 f t t 2 f 700 "700 700" 100 0 0 100  float4larger - ));
 DESCR("larger of two");
-DATA(insert OID = 211 (  float4smaller    PGUID 11 f t t 2 f 700 "700 700" 100 0 0 100  float4smaller - ));
+DATA(insert OID = 211 (  float4smaller    PGUID 11 f t t 2 f 700 "700 700" 100 0 0 100  float4smaller - ));
 DESCR("smaller of two");
 
-DATA(insert OID = 212 (  int4um               PGUID 11 f t t 1 f 23 "23" 100 0 0 100  int4um - ));
+DATA(insert OID = 212 (  int4um               PGUID 11 f t t 1 f 23 "23" 100 0 0 100  int4um - ));
 DESCR("negate");
-DATA(insert OID = 213 (  int2um               PGUID 11 f t t 1 f 21 "21" 100 0 0 100  int2um - ));
+DATA(insert OID = 213 (  int2um               PGUID 11 f t t 1 f 21 "21" 100 0 0 100  int2um - ));
 DESCR("negate");
 
-DATA(insert OID = 214 (  float8in         PGUID 11 f t t 1 f 701 "0" 100 0 0 100  float8in - ));
+DATA(insert OID = 214 (  float8in         PGUID 11 f t t 1 f 701 "0" 100 0 0 100  float8in - ));
 DESCR("(internal)");
-DATA(insert OID = 215 (  float8out        PGUID 11 f t t 1 f 23  "0" 100 0 0 100  float8out - ));
+DATA(insert OID = 215 (  float8out        PGUID 11 f t t 1 f 23  "0" 100 0 0 100  float8out - ));
 DESCR("(internal)");
-DATA(insert OID = 216 (  float8mul        PGUID 11 f t t 2 f 701 "701 701" 100 0 0 100  float8mul - ));
+DATA(insert OID = 216 (  float8mul        PGUID 11 f t t 2 f 701 "701 701" 100 0 0 100  float8mul - ));
 DESCR("multiply");
-DATA(insert OID = 217 (  float8div        PGUID 11 f t t 2 f 701 "701 701" 100 0 0 100  float8div - ));
+DATA(insert OID = 217 (  float8div        PGUID 11 f t t 2 f 701 "701 701" 100 0 0 100  float8div - ));
 DESCR("divide");
-DATA(insert OID = 218 (  float8pl         PGUID 11 f t t 2 f 701 "701 701" 100 0 0 100  float8pl - ));
+DATA(insert OID = 218 (  float8pl         PGUID 11 f t t 2 f 701 "701 701" 100 0 0 100  float8pl - ));
 DESCR("addition");
-DATA(insert OID = 219 (  float8mi         PGUID 11 f t t 2 f 701 "701 701" 100 0 0 100  float8mi - ));
+DATA(insert OID = 219 (  float8mi         PGUID 11 f t t 2 f 701 "701 701" 100 0 0 100  float8mi - ));
 DESCR("subtract");
-DATA(insert OID = 220 (  float8um         PGUID 11 f t t 1 f 701 "701" 100 0 0 100  float8um - ));
+DATA(insert OID = 220 (  float8um         PGUID 11 f t t 1 f 701 "701" 100 0 0 100  float8um - ));
 DESCR("negate");
-DATA(insert OID = 221 (  float8abs        PGUID 11 f t t 1 f 701 "701" 100 0 0 100  float8abs - ));
+DATA(insert OID = 221 (  float8abs        PGUID 11 f t t 1 f 701 "701" 100 0 0 100  float8abs - ));
 DESCR("absolute value");
-DATA(insert OID = 222 (  float8inc        PGUID 11 f t t 1 f 701 "701" 100 0 0 100  float8inc - ));
+DATA(insert OID = 222 (  float8inc        PGUID 11 f t t 1 f 701 "701" 100 0 0 100  float8inc - ));
 DESCR("increment");
-DATA(insert OID = 223 (  float8larger     PGUID 11 f t t 2 f 701 "701 701" 100 0 0 100  float8larger - ));
+DATA(insert OID = 223 (  float8larger     PGUID 11 f t t 2 f 701 "701 701" 100 0 0 100  float8larger - ));
 DESCR("larger of two");
-DATA(insert OID = 224 (  float8smaller    PGUID 11 f t t 2 f 701 "701 701" 100 0 0 100  float8smaller - ));
+DATA(insert OID = 224 (  float8smaller    PGUID 11 f t t 2 f 701 "701 701" 100 0 0 100  float8smaller - ));
 DESCR("smaller of two");
 
-DATA(insert OID = 225 (  lseg_center      PGUID 11 f t t 1 f 600 "601" 100 0 0 100  lseg_center - ));
+DATA(insert OID = 225 (  lseg_center      PGUID 11 f t t 1 f 600 "601" 100 0 0 100  lseg_center - ));
 DESCR("center of");
-DATA(insert OID = 226 (  path_center      PGUID 11 f t t 1 f 600 "602" 100 0 0 100  path_center - ));
+DATA(insert OID = 226 (  path_center      PGUID 11 f t t 1 f 600 "602" 100 0 0 100  path_center - ));
 DESCR("center of");
-DATA(insert OID = 227 (  poly_center      PGUID 11 f t t 1 f 600 "604" 100 0 0 100  poly_center - ));
+DATA(insert OID = 227 (  poly_center      PGUID 11 f t t 1 f 600 "604" 100 0 0 100  poly_center - ));
 DESCR("center of");
 
-DATA(insert OID = 228 (  dround               PGUID 11 f t t 1 f 701 "701" 100 0 0 100  dround - ));
+DATA(insert OID = 228 (  dround               PGUID 11 f t t 1 f 701 "701" 100 0 0 100  dround - ));
 DESCR("round to integer");
-DATA(insert OID = 229 (  dtrunc               PGUID 11 f t t 1 f 701 "701" 100 0 0 100  dtrunc - ));
+DATA(insert OID = 229 (  dtrunc               PGUID 11 f t t 1 f 701 "701" 100 0 0 100  dtrunc - ));
 DESCR("truncate to integer");
-DATA(insert OID = 230 (  dsqrt            PGUID 11 f t t 1 f 701 "701" 100 0 0 100  dsqrt - ));
+DATA(insert OID = 230 (  dsqrt            PGUID 11 f t t 1 f 701 "701" 100 0 0 100  dsqrt - ));
 DESCR("square root");
-DATA(insert OID = 231 (  dcbrt            PGUID 11 f t t 1 f 701 "701" 100 0 0 100  dcbrt - ));
+DATA(insert OID = 231 (  dcbrt            PGUID 11 f t t 1 f 701 "701" 100 0 0 100  dcbrt - ));
 DESCR("cube root");
-DATA(insert OID = 232 (  dpow             PGUID 11 f t t 2 f 701 "701 701" 100 0 0 100  dpow - ));
+DATA(insert OID = 232 (  dpow             PGUID 11 f t t 2 f 701 "701 701" 100 0 0 100  dpow - ));
 DESCR("exponentiation (x^y)");
-DATA(insert OID = 233 (  dexp             PGUID 11 f t t 1 f 701 "701" 100 0 0 100  dexp - ));
+DATA(insert OID = 233 (  dexp             PGUID 11 f t t 1 f 701 "701" 100 0 0 100  dexp - ));
 DESCR("natural exponential (e^x)");
-DATA(insert OID = 234 (  dlog1            PGUID 11 f t t 1 f 701 "701" 100 0 0 100  dlog1 - ));
+DATA(insert OID = 234 (  dlog1            PGUID 11 f t t 1 f 701 "701" 100 0 0 100  dlog1 - ));
 DESCR("natural logarithm");
-DATA(insert OID = 235 (  float8               PGUID 11 f t t 1 f 701  "21" 100 0 0 100  i2tod - ));
+DATA(insert OID = 235 (  float8               PGUID 11 f t t 1 f 701  "21" 100 0 0 100  i2tod - ));
 DESCR("convert int2 to float8");
-DATA(insert OID = 236 (  float4               PGUID 11 f t t 1 f 700  "21" 100 0 0 100  i2tof - ));
+DATA(insert OID = 236 (  float4               PGUID 11 f t t 1 f 700  "21" 100 0 0 100  i2tof - ));
 DESCR("convert int2 to float4");
-DATA(insert OID = 237 (  int2             PGUID 11 f t t 1 f  21 "701" 100 0 0 100  dtoi2 - ));
+DATA(insert OID = 237 (  int2             PGUID 11 f t t 1 f  21 "701" 100 0 0 100  dtoi2 - ));
 DESCR("convert float8 to int2");
-DATA(insert OID = 238 (  int2             PGUID 11 f t t 1 f  21 "700" 100 0 0 100  ftoi2 - ));
+DATA(insert OID = 238 (  int2             PGUID 11 f t t 1 f  21 "700" 100 0 0 100  ftoi2 - ));
 DESCR("convert float4 to int2");
-DATA(insert OID = 239 (  line_distance    PGUID 11 f t t 2 f 701 "628 628" 100 0 0 100  line_distance - ));
+DATA(insert OID = 239 (  line_distance    PGUID 11 f t t 2 f 701 "628 628" 100 0 0 100  line_distance - ));
 DESCR("distance between");
 
-DATA(insert OID = 240 (  nabstimein           PGUID 11 f t f 1 f 702 "0" 100 0 0 100  nabstimein - ));
+DATA(insert OID = 240 (  nabstimein           PGUID 11 f t f 1 f 702 "0" 100 0 0 100  nabstimein - ));
 DESCR("(internal)");
-DATA(insert OID = 241 (  nabstimeout      PGUID 11 f t f 1 f 23  "0" 100 0 0 100  nabstimeout - ));
+DATA(insert OID = 241 (  nabstimeout      PGUID 11 f t f 1 f 23  "0" 100 0 0 100  nabstimeout - ));
 DESCR("(internal)");
-DATA(insert OID = 242 (  reltimein        PGUID 11 f t f 1 f 703 "0" 100 0 0 100  reltimein - ));
+DATA(insert OID = 242 (  reltimein        PGUID 11 f t f 1 f 703 "0" 100 0 0 100  reltimein - ));
 DESCR("(internal)");
-DATA(insert OID = 243 (  reltimeout           PGUID 11 f t f 1 f 23  "0" 100 0 0 100  reltimeout - ));
+DATA(insert OID = 243 (  reltimeout           PGUID 11 f t f 1 f 23  "0" 100 0 0 100  reltimeout - ));
 DESCR("(internal)");
-DATA(insert OID = 244 (  timepl               PGUID 11 f t f 2 f 702 "702 703" 100 0 0 100  timepl - ));
+DATA(insert OID = 244 (  timepl               PGUID 11 f t f 2 f 702 "702 703" 100 0 0 100  timepl - ));
 DESCR("addition");
-DATA(insert OID = 245 (  timemi               PGUID 11 f t f 2 f 702 "702 703" 100 0 0 100  timemi - ));
+DATA(insert OID = 245 (  timemi               PGUID 11 f t f 2 f 702 "702 703" 100 0 0 100  timemi - ));
 DESCR("subtract");
-DATA(insert OID = 246 (  tintervalin      PGUID 11 f t f 1 f 704 "0" 100 0 0 100  tintervalin - ));
+DATA(insert OID = 246 (  tintervalin      PGUID 11 f t f 1 f 704 "0" 100 0 0 100  tintervalin - ));
 DESCR("(internal)");
-DATA(insert OID = 247 (  tintervalout     PGUID 11 f t f 1 f 23  "0" 100 0 0 100  tintervalout - ));
+DATA(insert OID = 247 (  tintervalout     PGUID 11 f t f 1 f 23  "0" 100 0 0 100  tintervalout - ));
 DESCR("(internal)");
-DATA(insert OID = 248 (  intinterval      PGUID 11 f t f 2 f 16 "702 704" 100 0 0 100  intinterval - ));
+DATA(insert OID = 248 (  intinterval      PGUID 11 f t f t 2 f 16 "702 704" 100 0 0 100    intinterval - ));
 DESCR("abstime in tinterval");
-DATA(insert OID = 249 (  tintervalrel     PGUID 11 f t f 1 f 703 "704" 100 0 0 100  tintervalrel - ));
+DATA(insert OID = 249 (  tintervalrel     PGUID 11 f t f 1 f 703 "704" 100 0 0 100  tintervalrel - ));
 DESCR("");
-DATA(insert OID = 250 (  timenow          PGUID 11 f t f 0 f 702 "0" 100 0 0 100  timenow - ));
+DATA(insert OID = 250 (  timenow          PGUID 11 f t f 0 f 702 "0" 100 0 0 100  timenow - ));
 DESCR("Current date and time (abstime)");
-DATA(insert OID = 251 (  abstimeeq        PGUID 11 f t f 2 f 16 "702 702" 100 0 0 100  abstimeeq - ));
+DATA(insert OID = 251 (  abstimeeq        PGUID 11 f t f t 2 f 16 "702 702" 100 0 0 100    abstimeeq - ));
 DESCR("equal");
-DATA(insert OID = 252 (  abstimene        PGUID 11 f t f 2 f 16 "702 702" 100 0 0 100  abstimene - ));
+DATA(insert OID = 252 (  abstimene        PGUID 11 f t f t 2 f 16 "702 702" 100 0 0 100    abstimene - ));
 DESCR("not equal");
-DATA(insert OID = 253 (  abstimelt        PGUID 11 f t f 2 f 16 "702 702" 100 0 0 100  abstimelt - ));
+DATA(insert OID = 253 (  abstimelt        PGUID 11 f t f t 2 f 16 "702 702" 100 0 0 100    abstimelt - ));
 DESCR("less-than");
-DATA(insert OID = 254 (  abstimegt        PGUID 11 f t f 2 f 16 "702 702" 100 0 0 100  abstimegt - ));
+DATA(insert OID = 254 (  abstimegt        PGUID 11 f t f t 2 f 16 "702 702" 100 0 0 100    abstimegt - ));
 DESCR("greater-than");
-DATA(insert OID = 255 (  abstimele        PGUID 11 f t f 2 f 16 "702 702" 100 0 0 100  abstimele - ));
+DATA(insert OID = 255 (  abstimele        PGUID 11 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 11 f t f 2 f 16 "702 702" 100 0 0 100  abstimege - ));
+DATA(insert OID = 256 (  abstimege        PGUID 11 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 11 f t t 2 f 16 "703 703" 100 0 0 100  reltimeeq - ));
+DATA(insert OID = 257 (  reltimeeq        PGUID 11 f t t t 2 f 16 "703 703" 100 0 0 100    reltimeeq - ));
 DESCR("equal");
-DATA(insert OID = 258 (  reltimene        PGUID 11 f t t 2 f 16 "703 703" 100 0 0 100  reltimene - ));
+DATA(insert OID = 258 (  reltimene        PGUID 11 f t t t 2 f 16 "703 703" 100 0 0 100    reltimene - ));
 DESCR("not equal");
-DATA(insert OID = 259 (  reltimelt        PGUID 11 f t t 2 f 16 "703 703" 100 0 0 100  reltimelt - ));
+DATA(insert OID = 259 (  reltimelt        PGUID 11 f t t t 2 f 16 "703 703" 100 0 0 100    reltimelt - ));
 DESCR("less-than");
-DATA(insert OID = 260 (  reltimegt        PGUID 11 f t t 2 f 16 "703 703" 100 0 0 100  reltimegt - ));
+DATA(insert OID = 260 (  reltimegt        PGUID 11 f t t t 2 f 16 "703 703" 100 0 0 100    reltimegt - ));
 DESCR("greater-than");
-DATA(insert OID = 261 (  reltimele        PGUID 11 f t t 2 f 16 "703 703" 100 0 0 100  reltimele - ));
+DATA(insert OID = 261 (  reltimele        PGUID 11 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 11 f t t 2 f 16 "703 703" 100 0 0 100  reltimege - ));
+DATA(insert OID = 262 (  reltimege        PGUID 11 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 11 f t f 2 f 16 "704 704" 100 0 0 100  tintervalsame - ));
+DATA(insert OID = 263 (  tintervalsame    PGUID 11 f t f t 2 f 16 "704 704" 100 0 0 100    tintervalsame - ));
 DESCR("same as");
-DATA(insert OID = 264 (  tintervalct      PGUID 11 f t f 2 f 16 "704 704" 100 0 0 100  tintervalct - ));
+DATA(insert OID = 264 (  tintervalct      PGUID 11 f t f t 2 f 16 "704 704" 100 0 0 100    tintervalct - ));
 DESCR("less-than");
-DATA(insert OID = 265 (  tintervalov      PGUID 11 f t f 2 f 16 "704 704" 100 0 0 100  tintervalov - ));
+DATA(insert OID = 265 (  tintervalov      PGUID 11 f t f t 2 f 16 "704 704" 100 0 0 100    tintervalov - ));
 DESCR("overlaps");
-DATA(insert OID = 266 (  tintervalleneq    PGUID 11 f t f 2 f 16 "704 703" 100 0 0 100 tintervalleneq - ));
+DATA(insert OID = 266 (  tintervalleneq    PGUID 11 f t f t 2 f 16 "704 703" 100 0 0 100   tintervalleneq - ));
 DESCR("length equal");
-DATA(insert OID = 267 (  tintervallenne    PGUID 11 f t f 2 f 16 "704 703" 100 0 0 100 tintervallenne - ));
+DATA(insert OID = 267 (  tintervallenne    PGUID 11 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 11 f t f 2 f 16 "704 703" 100 0 0 100 tintervallenlt - ));
+DATA(insert OID = 268 (  tintervallenlt    PGUID 11 f t f t 2 f 16 "704 703" 100 0 0 100   tintervallenlt - ));
 DESCR("length less-than");
-DATA(insert OID = 269 (  tintervallengt    PGUID 11 f t f 2 f 16 "704 703" 100 0 0 100 tintervallengt - ));
+DATA(insert OID = 269 (  tintervallengt    PGUID 11 f t f t 2 f 16 "704 703" 100 0 0 100   tintervallengt - ));
 DESCR("length greater-than");
-DATA(insert OID = 270 (  tintervallenle    PGUID 11 f t f 2 f 16 "704 703" 100 0 0 100 tintervallenle - ));
+DATA(insert OID = 270 (  tintervallenle    PGUID 11 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 11 f t f 2 f 16 "704 703" 100 0 0 100 tintervallenge - ));
+DATA(insert OID = 271 (  tintervallenge    PGUID 11 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 11 f t f 1 f 702 "704" 100 0 0 100  tintervalstart - ));
+DATA(insert OID = 272 (  tintervalstart    PGUID 11 f t f 1 f 702 "704" 100 0 0 100  tintervalstart - ));
 DESCR("start of interval");
-DATA(insert OID = 273 (  tintervalend     PGUID 11 f t f 1 f 702 "704" 100 0 0 100  tintervalend - ));
+DATA(insert OID = 273 (  tintervalend     PGUID 11 f t f 1 f 702 "704" 100 0 0 100  tintervalend - ));
 DESCR("");
-DATA(insert OID = 274 (  timeofday        PGUID 11 f t f 0 f 25 "0" 100 0 0 100  timeofday - ));
+DATA(insert OID = 274 (  timeofday        PGUID 11 f t f 0 f 25 "0" 100 0 0 100  timeofday - ));
 DESCR("Current date and time with microseconds");
-DATA(insert OID = 275 (  isfinite         PGUID 11 f t f 1 f 16 "702" 100 0 0 100  abstime_finite - ));
+DATA(insert OID = 275 (  isfinite         PGUID 11 f t f t 1 f 16 "702" 100 0 0 100    abstime_finite - ));
 DESCR("");
 
-DATA(insert OID = 276 (  int2fac          PGUID 11 f t t 1 f 23 "21" 100 0 0 100  int2fac - ));
+DATA(insert OID = 276 (  int2fac          PGUID 11 f t t 1 f 23 "21" 100 0 0 100  int2fac - ));
 DESCR("");
 
-DATA(insert OID = 277 (  inter_sl         PGUID 11 f t t 2 f 16 "601 628" 100 0 0 100  inter_sl - ));
+DATA(insert OID = 277 (  inter_sl         PGUID 11 f t t t 2 f 16 "601 628" 100 0 0 100    inter_sl - ));
 DESCR("");
-DATA(insert OID = 278 (  inter_lb         PGUID 11 f t t 2 f 16 "628 603" 100 0 0 100  inter_lb - ));
+DATA(insert OID = 278 (  inter_lb         PGUID 11 f t t t 2 f 16 "628 603" 100 0 0 100    inter_lb - ));
 DESCR("");
 
-DATA(insert OID = 279 (  float48mul           PGUID 11 f t t 2 f 701 "700 701" 100 0 0 100  float48mul - ));
+DATA(insert OID = 279 (  float48mul           PGUID 11 f t t 2 f 701 "700 701" 100 0 0 100  float48mul - ));
 DESCR("multiply");
-DATA(insert OID = 280 (  float48div           PGUID 11 f t t 2 f 701 "700 701" 100 0 0 100  float48div - ));
+DATA(insert OID = 280 (  float48div           PGUID 11 f t t 2 f 701 "700 701" 100 0 0 100  float48div - ));
 DESCR("divide");
-DATA(insert OID = 281 (  float48pl        PGUID 11 f t t 2 f 701 "700 701" 100 0 0 100  float48pl - ));
+DATA(insert OID = 281 (  float48pl        PGUID 11 f t t 2 f 701 "700 701" 100 0 0 100  float48pl - ));
 DESCR("addition");
-DATA(insert OID = 282 (  float48mi        PGUID 11 f t t 2 f 701 "700 701" 100 0 0 100  float48mi - ));
+DATA(insert OID = 282 (  float48mi        PGUID 11 f t t 2 f 701 "700 701" 100 0 0 100  float48mi - ));
 DESCR("subtract");
-DATA(insert OID = 283 (  float84mul           PGUID 11 f t t 2 f 701 "701 700" 100 0 0 100  float84mul - ));
+DATA(insert OID = 283 (  float84mul           PGUID 11 f t t 2 f 701 "701 700" 100 0 0 100  float84mul - ));
 DESCR("multiply");
-DATA(insert OID = 284 (  float84div           PGUID 11 f t t 2 f 701 "701 700" 100 0 0 100  float84div - ));
+DATA(insert OID = 284 (  float84div           PGUID 11 f t t 2 f 701 "701 700" 100 0 0 100  float84div - ));
 DESCR("divide");
-DATA(insert OID = 285 (  float84pl        PGUID 11 f t t 2 f 701 "701 700" 100 0 0 100  float84pl - ));
+DATA(insert OID = 285 (  float84pl        PGUID 11 f t t 2 f 701 "701 700" 100 0 0 100  float84pl - ));
 DESCR("addition");
-DATA(insert OID = 286 (  float84mi        PGUID 11 f t t 2 f 701 "701 700" 100 0 0 100  float84mi - ));
+DATA(insert OID = 286 (  float84mi        PGUID 11 f t t 2 f 701 "701 700" 100 0 0 100  float84mi - ));
 DESCR("subtract");
 
-DATA(insert OID = 287 (  float4eq         PGUID 11 f t t 2 f 16 "700 700" 100 0 0 100  float4eq - ));
+DATA(insert OID = 287 (  float4eq         PGUID 11 f t t t 2 f 16 "700 700" 100 0 0 100    float4eq - ));
 DESCR("equal");
-DATA(insert OID = 288 (  float4ne         PGUID 11 f t t 2 f 16 "700 700" 100 0 0 100  float4ne - ));
+DATA(insert OID = 288 (  float4ne         PGUID 11 f t t t 2 f 16 "700 700" 100 0 0 100    float4ne - ));
 DESCR("not equal");
-DATA(insert OID = 289 (  float4lt         PGUID 11 f t t 2 f 16 "700 700" 100 0 0 100  float4lt - ));
+DATA(insert OID = 289 (  float4lt         PGUID 11 f t t t 2 f 16 "700 700" 100 0 0 100    float4lt - ));
 DESCR("less-than");
-DATA(insert OID = 290 (  float4le         PGUID 11 f t t 2 f 16 "700 700" 100 0 0 100  float4le - ));
+DATA(insert OID = 290 (  float4le         PGUID 11 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 11 f t t 2 f 16 "700 700" 100 0 0 100  float4gt - ));
+DATA(insert OID = 291 (  float4gt         PGUID 11 f t t t 2 f 16 "700 700" 100 0 0 100    float4gt - ));
 DESCR("greater-than");
-DATA(insert OID = 292 (  float4ge         PGUID 11 f t t 2 f 16 "700 700" 100 0 0 100  float4ge - ));
+DATA(insert OID = 292 (  float4ge         PGUID 11 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 11 f t t 2 f 16 "701 701" 100 0 0 100  float8eq - ));
+DATA(insert OID = 293 (  float8eq         PGUID 11 f t t t 2 f 16 "701 701" 100 0 0 100    float8eq - ));
 DESCR("equal");
-DATA(insert OID = 294 (  float8ne         PGUID 11 f t t 2 f 16 "701 701" 100 0 0 100  float8ne - ));
+DATA(insert OID = 294 (  float8ne         PGUID 11 f t t t 2 f 16 "701 701" 100 0 0 100    float8ne - ));
 DESCR("not equal");
-DATA(insert OID = 295 (  float8lt         PGUID 11 f t t 2 f 16 "701 701" 100 0 0 100  float8lt - ));
+DATA(insert OID = 295 (  float8lt         PGUID 11 f t t t 2 f 16 "701 701" 100 0 0 100    float8lt - ));
 DESCR("less-than");
-DATA(insert OID = 296 (  float8le         PGUID 11 f t t 2 f 16 "701 701" 100 0 0 100  float8le - ));
+DATA(insert OID = 296 (  float8le         PGUID 11 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 11 f t t 2 f 16 "701 701" 100 0 0 100  float8gt - ));
+DATA(insert OID = 297 (  float8gt         PGUID 11 f t t t 2 f 16 "701 701" 100 0 0 100    float8gt - ));
 DESCR("greater-than");
-DATA(insert OID = 298 (  float8ge         PGUID 11 f t t 2 f 16 "701 701" 100 0 0 100  float8ge - ));
+DATA(insert OID = 298 (  float8ge         PGUID 11 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 11 f t t 2 f 16 "700 701" 100 0 0 100  float48eq - ));
+DATA(insert OID = 299 (  float48eq        PGUID 11 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 11 f t t 2 f 16 "700 701" 100 0 0 100  float48ne - ));
+DATA(insert OID = 300 (  float48ne        PGUID 11 f t t t 2 f 16 "700 701" 100 0 0 100    float48ne - ));
 DESCR("not equal");
-DATA(insert OID = 301 (  float48lt        PGUID 11 f t t 2 f 16 "700 701" 100 0 0 100  float48lt - ));
+DATA(insert OID = 301 (  float48lt        PGUID 11 f t t t 2 f 16 "700 701" 100 0 0 100    float48lt - ));
 DESCR("less-than");
-DATA(insert OID = 302 (  float48le        PGUID 11 f t t 2 f 16 "700 701" 100 0 0 100  float48le - ));
+DATA(insert OID = 302 (  float48le        PGUID 11 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 11 f t t 2 f 16 "700 701" 100 0 0 100  float48gt - ));
+DATA(insert OID = 303 (  float48gt        PGUID 11 f t t t 2 f 16 "700 701" 100 0 0 100    float48gt - ));
 DESCR("greater-than");
-DATA(insert OID = 304 (  float48ge        PGUID 11 f t t 2 f 16 "700 701" 100 0 0 100  float48ge - ));
+DATA(insert OID = 304 (  float48ge        PGUID 11 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 11 f t t 2 f 16 "701 700" 100 0 0 100  float84eq - ));
+DATA(insert OID = 305 (  float84eq        PGUID 11 f t t t 2 f 16 "701 700" 100 0 0 100    float84eq - ));
 DESCR("equal");
-DATA(insert OID = 306 (  float84ne        PGUID 11 f t t 2 f 16 "701 700" 100 0 0 100  float84ne - ));
+DATA(insert OID = 306 (  float84ne        PGUID 11 f t t t 2 f 16 "701 700" 100 0 0 100    float84ne - ));
 DESCR("not equal");
-DATA(insert OID = 307 (  float84lt        PGUID 11 f t t 2 f 16 "701 700" 100 0 0 100  float84lt - ));
+DATA(insert OID = 307 (  float84lt        PGUID 11 f t t t 2 f 16 "701 700" 100 0 0 100    float84lt - ));
 DESCR("less-than");
-DATA(insert OID = 308 (  float84le        PGUID 11 f t t 2 f 16 "701 700" 100 0 0 100  float84le - ));
+DATA(insert OID = 308 (  float84le        PGUID 11 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 11 f t t 2 f 16 "701 700" 100 0 0 100  float84gt - ));
+DATA(insert OID = 309 (  float84gt        PGUID 11 f t t t 2 f 16 "701 700" 100 0 0 100    float84gt - ));
 DESCR("greater-than");
-DATA(insert OID = 310 (  float84ge        PGUID 11 f t t 2 f 16 "701 700" 100 0 0 100  float84ge - ));
+DATA(insert OID = 310 (  float84ge        PGUID 11 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 11 f t t 1 f 701 "700" 100 0 0 100  ftod - ));
+DATA(insert OID = 311 (  float8               PGUID 11 f t t 1 f 701 "700" 100 0 0 100  ftod - ));
 DESCR("convert float4 to float8");
-DATA(insert OID = 312 (  float4               PGUID 11 f t t 1 f 700 "701" 100 0 0 100  dtof - ));
+DATA(insert OID = 312 (  float4               PGUID 11 f t t 1 f 700 "701" 100 0 0 100  dtof - ));
 DESCR("convert float8 to float4");
-DATA(insert OID = 313 (  int4             PGUID 11 f t t 1 f  23  "21" 100 0 0 100  i2toi4 - ));
+DATA(insert OID = 313 (  int4             PGUID 11 f t t 1 f  23  "21" 100 0 0 100  i2toi4 - ));
 DESCR("convert int2 to int4");
-DATA(insert OID = 314 (  int2             PGUID 11 f t t 1 f  21  "23" 100 0 0 100  i4toi2 - ));
+DATA(insert OID = 314 (  int2             PGUID 11 f t t 1 f  21  "23" 100 0 0 100  i4toi2 - ));
 DESCR("convert int4 to int2");
-DATA(insert OID = 315 (  int2vectoreq     PGUID 11 f t t 2 f  16  "22 22" 100 0 0 100  int2vectoreq - ));
+DATA(insert OID = 315 (  int2vectoreq     PGUID 11 f t t t 2 f  16  "22 22" 100 0 0 100    int2vectoreq - ));
 DESCR("equal");
-DATA(insert OID = 316 (  float8               PGUID 11 f t t 1 f 701  "23" 100 0 0 100  i4tod - ));
+DATA(insert OID = 316 (  float8               PGUID 11 f t t 1 f 701  "23" 100 0 0 100  i4tod - ));
 DESCR("convert int4 to float8");
-DATA(insert OID = 317 (  int4             PGUID 11 f t t 1 f  23 "701" 100 0 0 100  dtoi4 - ));
+DATA(insert OID = 317 (  int4             PGUID 11 f t t 1 f  23 "701" 100 0 0 100  dtoi4 - ));
 DESCR("convert float8 to int4");
-DATA(insert OID = 318 (  float4               PGUID 11 f t t 1 f 700  "23" 100 0 0 100  i4tof - ));
+DATA(insert OID = 318 (  float4               PGUID 11 f t t 1 f 700  "23" 100 0 0 100  i4tof - ));
 DESCR("convert int4 to float4");
-DATA(insert OID = 319 (  int4             PGUID 11 f t t 1 f  23 "700" 100 0 0 100  ftoi4 - ));
+DATA(insert OID = 319 (  int4             PGUID 11 f t t 1 f  23 "700" 100 0 0 100  ftoi4 - ));
 DESCR("convert float4 to int4");
 
-DATA(insert OID = 320 (  rtinsert         PGUID 11 f t f 5 f 23 "0" 100 0 0 100  rtinsert - ));
+DATA(insert OID = 320 (  rtinsert         PGUID 11 f t f 5 f 23 "0" 100 0 0 100  rtinsert - ));
 DESCR("r-tree(internal)");
-DATA(insert OID = 321 (  rtdelete         PGUID 11 f t f 2 f 23 "0" 100 0 0 100  rtdelete - ));
+DATA(insert OID = 321 (  rtdelete         PGUID 11 f t f 2 f 23 "0" 100 0 0 100  rtdelete - ));
 DESCR("r-tree(internal)");
-DATA(insert OID = 322 (  rtgettuple           PGUID 11 f t f 2 f 23 "0" 100 0 0 100  rtgettuple - ));
+DATA(insert OID = 322 (  rtgettuple           PGUID 11 f t f 2 f 23 "0" 100 0 0 100  rtgettuple - ));
 DESCR("r-tree(internal)");
-DATA(insert OID = 323 (  rtbuild          PGUID 11 f t f 9 f 23 "0" 100 0 0 100  rtbuild - ));
+DATA(insert OID = 323 (  rtbuild          PGUID 11 f t f 9 f 23 "0" 100 0 0 100  rtbuild - ));
 DESCR("r-tree(internal)");
-DATA(insert OID = 324 (  rtbeginscan      PGUID 11 f t f 4 f 23 "0" 100 0 0 100  rtbeginscan - ));
+DATA(insert OID = 324 (  rtbeginscan      PGUID 11 f t f 4 f 23 "0" 100 0 0 100  rtbeginscan - ));
 DESCR("r-tree(internal)");
-DATA(insert OID = 325 (  rtendscan        PGUID 11 f t f 1 f 23 "0" 100 0 0 100  rtendscan - ));
+DATA(insert OID = 325 (  rtendscan        PGUID 11 f t f 1 f 23 "0" 100 0 0 100  rtendscan - ));
 DESCR("r-tree(internal)");
-DATA(insert OID = 326 (  rtmarkpos        PGUID 11 f t f 1 f 23 "0" 100 0 0 100  rtmarkpos - ));
+DATA(insert OID = 326 (  rtmarkpos        PGUID 11 f t f 1 f 23 "0" 100 0 0 100  rtmarkpos - ));
 DESCR("r-tree(internal)");
-DATA(insert OID = 327 (  rtrestrpos           PGUID 11 f t f 1 f 23 "0" 100 0 0 100  rtrestrpos - ));
+DATA(insert OID = 327 (  rtrestrpos           PGUID 11 f t f 1 f 23 "0" 100 0 0 100  rtrestrpos - ));
 DESCR("r-tree(internal)");
-DATA(insert OID = 328 (  rtrescan         PGUID 11 f t f 3 f 23 "0" 100 0 0 100  rtrescan - ));
+DATA(insert OID = 328 (  rtrescan         PGUID 11 f t f 3 f 23 "0" 100 0 0 100  rtrescan - ));
 DESCR("r-tree(internal)");
 
-DATA(insert OID = 330 (  btgettuple           PGUID 11 f t f 2 f 23 "0" 100 0 0 100  btgettuple - ));
+DATA(insert OID = 330 (  btgettuple           PGUID 11 f t f 2 f 23 "0" 100 0 0 100  btgettuple - ));
 DESCR("btree(internal)");
-DATA(insert OID = 331 (  btinsert         PGUID 11 f t f 5 f 23 "0" 100 0 0 100  btinsert - ));
+DATA(insert OID = 331 (  btinsert         PGUID 11 f t f 5 f 23 "0" 100 0 0 100  btinsert - ));
 DESCR("btree(internal)");
-DATA(insert OID = 332 (  btdelete         PGUID 11 f t f 2 f 23 "0" 100 0 0 100  btdelete - ));
+DATA(insert OID = 332 (  btdelete         PGUID 11 f t f 2 f 23 "0" 100 0 0 100  btdelete - ));
 DESCR("btree(internal)");
-DATA(insert OID = 333 (  btbeginscan      PGUID 11 f t f 4 f 23 "0" 100 0 0 100  btbeginscan - ));
+DATA(insert OID = 333 (  btbeginscan      PGUID 11 f t f 4 f 23 "0" 100 0 0 100  btbeginscan - ));
 DESCR("btree(internal)");
-DATA(insert OID = 334 (  btrescan         PGUID 11 f t f 3 f 23 "0" 100 0 0 100  btrescan - ));
+DATA(insert OID = 334 (  btrescan         PGUID 11 f t f 3 f 23 "0" 100 0 0 100  btrescan - ));
 DESCR("btree(internal)");
-DATA(insert OID = 335 (  btendscan        PGUID 11 f t f 1 f 23 "0" 100 0 0 100  btendscan - ));
+DATA(insert OID = 335 (  btendscan        PGUID 11 f t f 1 f 23 "0" 100 0 0 100  btendscan - ));
 DESCR("btree(internal)");
-DATA(insert OID = 336 (  btmarkpos        PGUID 11 f t f 1 f 23 "0" 100 0 0 100  btmarkpos - ));
+DATA(insert OID = 336 (  btmarkpos        PGUID 11 f t f 1 f 23 "0" 100 0 0 100  btmarkpos - ));
 DESCR("btree(internal)");
-DATA(insert OID = 337 (  btrestrpos           PGUID 11 f t f 1 f 23 "0" 100 0 0 100  btrestrpos - ));
+DATA(insert OID = 337 (  btrestrpos           PGUID 11 f t f 1 f 23 "0" 100 0 0 100  btrestrpos - ));
 DESCR("btree(internal)");
-DATA(insert OID = 338 (  btbuild          PGUID 11 f t f 9 f 23 "0" 100 0 0 100  btbuild - ));
+DATA(insert OID = 338 (  btbuild          PGUID 11 f t f 9 f 23 "0" 100 0 0 100  btbuild - ));
 DESCR("btree(internal)");
 
-DATA(insert OID = 339 (  poly_same        PGUID 11 f t t 2 f 16 "604 604" 100 0 1 0  poly_same - ));
+DATA(insert OID = 339 (  poly_same        PGUID 11 f t t 2 f 16 "604 604" 100 0 1 0  poly_same - ));
 DESCR("same as");
-DATA(insert OID = 340 (  poly_contain     PGUID 11 f t t 2 f 16 "604 604" 100 0 1 0  poly_contain - ));
+DATA(insert OID = 340 (  poly_contain     PGUID 11 f t t 2 f 16 "604 604" 100 0 1 0  poly_contain - ));
 DESCR("contains");
-DATA(insert OID = 341 (  poly_left        PGUID 11 f t t 2 f 16 "604 604" 100 0 1 0  poly_left - ));
+DATA(insert OID = 341 (  poly_left        PGUID 11 f t t 2 f 16 "604 604" 100 0 1 0  poly_left - ));
 DESCR("is left of");
-DATA(insert OID = 342 (  poly_overleft    PGUID 11 f t t 2 f 16 "604 604" 100 0 1 0  poly_overleft - ));
+DATA(insert OID = 342 (  poly_overleft    PGUID 11 f t t 2 f 16 "604 604" 100 0 1 0  poly_overleft - ));
 DESCR("overlaps, but does not extend to right of");
-DATA(insert OID = 343 (  poly_overright    PGUID 11 f t t 2 f 16 "604 604" 100 0 1 0  poly_overright - ));
+DATA(insert OID = 343 (  poly_overright    PGUID 11 f t t 2 f 16 "604 604" 100 0 1 0  poly_overright - ));
 DESCR("overlaps, but does not extend to left of");
-DATA(insert OID = 344 (  poly_right           PGUID 11 f t t 2 f 16 "604 604" 100 0 1 0  poly_right - ));
+DATA(insert OID = 344 (  poly_right           PGUID 11 f t t 2 f 16 "604 604" 100 0 1 0  poly_right - ));
 DESCR("is left of");
-DATA(insert OID = 345 (  poly_contained    PGUID 11 f t t 2 f 16 "604 604" 100 0 1 0  poly_contained - ));
+DATA(insert OID = 345 (  poly_contained    PGUID 11 f t t 2 f 16 "604 604" 100 0 1 0  poly_contained - ));
 DESCR("contained in");
-DATA(insert OID = 346 (  poly_overlap     PGUID 11 f t t 2 f 16 "604 604" 100 0 1 0  poly_overlap - ));
+DATA(insert OID = 346 (  poly_overlap     PGUID 11 f t t 2 f 16 "604 604" 100 0 1 0  poly_overlap - ));
 DESCR("overlaps");
-DATA(insert OID = 347 (  poly_in          PGUID 11 f t t 1 f 604 "0" 100 0 1 0  poly_in - ));
+DATA(insert OID = 347 (  poly_in          PGUID 11 f t t 1 f 604 "0" 100 0 1 0  poly_in - ));
 DESCR("(internal)");
-DATA(insert OID = 348 (  poly_out         PGUID 11 f t t 1 f 23  "0" 100 0 1 0  poly_out - ));
+DATA(insert OID = 348 (  poly_out         PGUID 11 f t t 1 f 23  "0" 100 0 1 0  poly_out - ));
 DESCR("(internal)");
 
-DATA(insert OID = 350 (  btint2cmp        PGUID 11 f t t 2 f 23 "21 21" 100 0 0 100  btint2cmp - ));
+DATA(insert OID = 350 (  btint2cmp        PGUID 11 f t t 2 f 23 "21 21" 100 0 0 100  btint2cmp - ));
 DESCR("btree less-equal-greater");
-DATA(insert OID = 351 (  btint4cmp        PGUID 11 f t t 2 f 23 "23 23" 100 0 0 100  btint4cmp - ));
+DATA(insert OID = 351 (  btint4cmp        PGUID 11 f t t 2 f 23 "23 23" 100 0 0 100  btint4cmp - ));
 DESCR("btree less-equal-greater");
-DATA(insert OID = 842 (  btint8cmp        PGUID 11 f t t 2 f 23 "20 20" 100 0 0 100  btint8cmp - ));
+DATA(insert OID = 842 (  btint8cmp        PGUID 11 f t t 2 f 23 "20 20" 100 0 0 100  btint8cmp - ));
 DESCR("btree less-equal-greater");
-DATA(insert OID = 352 (  btint42cmp           PGUID 11 f t t 2 f 23 "23 21" 100 0 0 100  btint42cmp - ));
+DATA(insert OID = 352 (  btint42cmp           PGUID 11 f t t 2 f 23 "23 21" 100 0 0 100  btint42cmp - ));
 DESCR("btree less-equal-greater");
-DATA(insert OID = 353 (  btint24cmp           PGUID 11 f t t 2 f 23 "21 23" 100 0 0 100  btint24cmp - ));
+DATA(insert OID = 353 (  btint24cmp           PGUID 11 f t t 2 f 23 "21 23" 100 0 0 100  btint24cmp - ));
 DESCR("btree less-equal-greater");
-DATA(insert OID = 354 (  btfloat4cmp      PGUID 11 f t t 2 f 23 "700 700" 100 0 0 100  btfloat4cmp - ));
+DATA(insert OID = 354 (  btfloat4cmp      PGUID 11 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 11 f t t 2 f 23 "701 701" 100 0 0 100  btfloat8cmp - ));
+DATA(insert OID = 355 (  btfloat8cmp      PGUID 11 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 11 f t t 2 f 23 "26 26" 100 0 0 100  btoidcmp - ));
+DATA(insert OID = 356 (  btoidcmp         PGUID 11 f t t 2 f 23 "26 26" 100 0 0 100  btoidcmp - ));
 DESCR("btree less-equal-greater");
-DATA(insert OID = 404 (  btoidvectorcmp    PGUID 11 f t t 2 f 23 "30 30" 100 0 0 100  btoidvectorcmp - ));
+DATA(insert OID = 404 (  btoidvectorcmp    PGUID 11 f t t 2 f 23 "30 30" 100 0 0 100  btoidvectorcmp - ));
 DESCR("btree less-equal-greater");
-DATA(insert OID = 357 (  btabstimecmp     PGUID 11 f t f 2 f 23 "702 702" 100 0 0 100  btabstimecmp - ));
+DATA(insert OID = 357 (  btabstimecmp     PGUID 11 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 11 f t t 2 f 23 "18 18" 100 0 0 100  btcharcmp - ));
+DATA(insert OID = 358 (  btcharcmp        PGUID 11 f t t 2 f 23 "18 18" 100 0 0 100  btcharcmp - ));
 DESCR("btree less-equal-greater");
-DATA(insert OID = 359 (  btnamecmp        PGUID 11 f t t 2 f 23 "19 19" 100 0 0 100  btnamecmp - ));
+DATA(insert OID = 359 (  btnamecmp        PGUID 11 f t t 2 f 23 "19 19" 100 0 0 100  btnamecmp - ));
 DESCR("btree less-equal-greater");
-DATA(insert OID = 360 (  bttextcmp        PGUID 11 f t t 2 f 23 "25 25" 100 0 0 100  bttextcmp - ));
+DATA(insert OID = 360 (  bttextcmp        PGUID 11 f t t 2 f 23 "25 25" 100 0 0 100  bttextcmp - ));
 DESCR("btree less-equal-greater");
 
-DATA(insert OID = 361 (  lseg_distance    PGUID 11 f t t 2 f 701 "601 601" 100 0 0 100  lseg_distance - ));
+DATA(insert OID = 361 (  lseg_distance    PGUID 11 f t t 2 f 701 "601 601" 100 0 0 100  lseg_distance - ));
 DESCR("distance between");
-DATA(insert OID = 362 (  lseg_interpt     PGUID 11 f t t 2 f 600 "601 601" 100 0 0 100  lseg_interpt - ));
+DATA(insert OID = 362 (  lseg_interpt     PGUID 11 f t t 2 f 600 "601 601" 100 0 0 100  lseg_interpt - ));
 DESCR("");
-DATA(insert OID = 363 (  dist_ps          PGUID 11 f t t 2 f 701 "600 601" 100 0 0 100  dist_ps - ));
+DATA(insert OID = 363 (  dist_ps          PGUID 11 f t t 2 f 701 "600 601" 100 0 0 100  dist_ps - ));
 DESCR("distance between");
-DATA(insert OID = 364 (  dist_pb          PGUID 11 f t t 2 f 701 "600 603" 100 0 0 100  dist_pb - ));
+DATA(insert OID = 364 (  dist_pb          PGUID 11 f t t 2 f 701 "600 603" 100 0 0 100  dist_pb - ));
 DESCR("distance between point and box");
-DATA(insert OID = 365 (  dist_sb          PGUID 11 f t t 2 f 701 "601 603" 100 0 0 100  dist_sb - ));
+DATA(insert OID = 365 (  dist_sb          PGUID 11 f t t 2 f 701 "601 603" 100 0 0 100  dist_sb - ));
 DESCR("distance between segment and box");
-DATA(insert OID = 366 (  close_ps         PGUID 11 f t t 2 f 600 "600 601" 100 0 0 100  close_ps - ));
+DATA(insert OID = 366 (  close_ps         PGUID 11 f t t 2 f 600 "600 601" 100 0 0 100  close_ps - ));
 DESCR("closest point on line segment");
-DATA(insert OID = 367 (  close_pb         PGUID 11 f t t 2 f 600 "600 603" 100 0 0 100  close_pb - ));
+DATA(insert OID = 367 (  close_pb         PGUID 11 f t t 2 f 600 "600 603" 100 0 0 100  close_pb - ));
 DESCR("closest point on box");
-DATA(insert OID = 368 (  close_sb         PGUID 11 f t t 2 f 600 "601 603" 100 0 0 100  close_sb - ));
+DATA(insert OID = 368 (  close_sb         PGUID 11 f 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 11 f t t 2 f 16 "600 601" 100 0 0 100  on_ps - ));
+DATA(insert OID = 369 (  on_ps            PGUID 11 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 11 f t t 2 f 701 "602 602" 100 0 1 0  path_distance - ));
+DATA(insert OID = 370 (  path_distance    PGUID 11 f t t 2 f 701 "602 602" 100 0 1 0  path_distance - ));
 DESCR("distance between paths");
-DATA(insert OID = 371 (  dist_ppath           PGUID 11 f t t 2 f 701 "600 602" 100 0 1 0  dist_ppath - ));
+DATA(insert OID = 371 (  dist_ppath           PGUID 11 f t t 2 f 701 "600 602" 100 0 1 0  dist_ppath - ));
 DESCR("distance between point and patch");
-DATA(insert OID = 372 (  on_sb            PGUID 11 f t t 2 f 16 "601 603" 100 0 0 100  on_sb - ));
+DATA(insert OID = 372 (  on_sb            PGUID 11 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 11 f t t 2 f 16 "601 603" 100 0 0 100  inter_sb - ));
+DATA(insert OID = 373 (  inter_sb         PGUID 11 f t t t 2 f 16 "601 603" 100 0 0 100    inter_sb - ));
 DESCR("intersects?");
 
 /* OIDS 400 - 499 */
 
-DATA(insert OID =  406 (  text            PGUID 11 f t t 1 f   25 "19" 100 0 0 100 name_text - ));
+DATA(insert OID =  406 (  text            PGUID 11 f t t t 1 f 25 "19" 100 0 0 100 name_text - ));
 DESCR("convert name to text");
-DATA(insert OID =  407 (  name            PGUID 11 f t t 1 f   19 "25" 100 0 0 100 text_name - ));
+DATA(insert OID =  407 (  name            PGUID 11 f t t t 1 f 19 "25" 100 0 0 100 text_name - ));
 DESCR("convert text to name");
-DATA(insert OID =  408 (  bpchar          PGUID 11 f t t 1 f 1042 "19" 100 0 0 100 name_bpchar - ));
+DATA(insert OID =  408 (  bpchar          PGUID 11 f t t 1 f 1042 "19" 100 0 0 100 name_bpchar - ));
 DESCR("convert name to char()");
-DATA(insert OID =  409 (  name            PGUID 11 f t t 1 f   19 "1042" 100 0 0 100   bpchar_name - ));
+DATA(insert OID =  409 (  name            PGUID 11 f t t t 1 f 19 "1042" 100 0 0 100   bpchar_name - ));
 DESCR("convert char() to name");
 
-DATA(insert OID =  438 (  hashcostestimate PGUID 11 f t f 7 f 0 "0 0 0 0 0 0 0" 100 0 0 100  hashcostestimate - ));
+DATA(insert OID =  438 (  hashcostestimate PGUID 11 f t f 7 f 0 "0 0 0 0 0 0 0" 100 0 0 100  hashcostestimate - ));
 DESCR("hash index cost estimator");
 
-DATA(insert OID = 440 (  hashgettuple     PGUID 11 f t f 2 f 23 "0" 100 0 0 100  hashgettuple - ));
+DATA(insert OID = 440 (  hashgettuple     PGUID 11 f t f 2 f 23 "0" 100 0 0 100  hashgettuple - ));
 DESCR("hash(internal)");
-DATA(insert OID = 441 (  hashinsert           PGUID 11 f t f 5 f 23 "0" 100 0 0 100  hashinsert - ));
+DATA(insert OID = 441 (  hashinsert           PGUID 11 f t f 5 f 23 "0" 100 0 0 100  hashinsert - ));
 DESCR("hash(internal)");
-DATA(insert OID = 442 (  hashdelete           PGUID 11 f t f 2 f 23 "0" 100 0 0 100  hashdelete - ));
+DATA(insert OID = 442 (  hashdelete           PGUID 11 f t f 2 f 23 "0" 100 0 0 100  hashdelete - ));
 DESCR("hash(internal)");
-DATA(insert OID = 443 (  hashbeginscan    PGUID 11 f t f 4 f 23 "0" 100 0 0 100  hashbeginscan - ));
+DATA(insert OID = 443 (  hashbeginscan    PGUID 11 f t f 4 f 23 "0" 100 0 0 100  hashbeginscan - ));
 DESCR("hash(internal)");
-DATA(insert OID = 444 (  hashrescan           PGUID 11 f t f 3 f 23 "0" 100 0 0 100  hashrescan - ));
+DATA(insert OID = 444 (  hashrescan           PGUID 11 f t f 3 f 23 "0" 100 0 0 100  hashrescan - ));
 DESCR("hash(internal)");
-DATA(insert OID = 445 (  hashendscan      PGUID 11 f t f 1 f 23 "0" 100 0 0 100  hashendscan - ));
+DATA(insert OID = 445 (  hashendscan      PGUID 11 f t f 1 f 23 "0" 100 0 0 100  hashendscan - ));
 DESCR("hash(internal)");
-DATA(insert OID = 446 (  hashmarkpos      PGUID 11 f t f 1 f 23 "0" 100 0 0 100  hashmarkpos - ));
+DATA(insert OID = 446 (  hashmarkpos      PGUID 11 f t f 1 f 23 "0" 100 0 0 100  hashmarkpos - ));
 DESCR("hash(internal)");
-DATA(insert OID = 447 (  hashrestrpos     PGUID 11 f t f 1 f 23 "0" 100 0 0 100  hashrestrpos - ));
+DATA(insert OID = 447 (  hashrestrpos     PGUID 11 f t f 1 f 23 "0" 100 0 0 100  hashrestrpos - ));
 DESCR("hash(internal)");
-DATA(insert OID = 448 (  hashbuild        PGUID 11 f t f 9 f 23 "0" 100 0 0 100  hashbuild - ));
+DATA(insert OID = 448 (  hashbuild        PGUID 11 f t f 9 f 23 "0" 100 0 0 100  hashbuild - ));
 DESCR("hash(internal)");
-DATA(insert OID = 449 (  hashint2         PGUID 11 f t t 1 f 23 "21" 100 0 0 100  hashint2 - ));
+DATA(insert OID = 449 (  hashint2         PGUID 11 f t t 1 f 23 "21" 100 0 0 100  hashint2 - ));
 DESCR("hash");
-DATA(insert OID = 450 (  hashint4         PGUID 11 f t t 1 f 23 "23" 100 0 0 100  hashint4 - ));
+DATA(insert OID = 450 (  hashint4         PGUID 11 f t t 1 f 23 "23" 100 0 0 100  hashint4 - ));
 DESCR("hash");
-DATA(insert OID = 949 (  hashint8         PGUID 11 f t t 1 f 23 "20" 100 0 0 100  hashint8 - ));
+DATA(insert OID = 949 (  hashint8         PGUID 11 f t t 1 f 23 "20" 100 0 0 100  hashint8 - ));
 DESCR("hash");
-DATA(insert OID = 451 (  hashfloat4           PGUID 11 f t t 1 f 23 "700" 100 0 0 100  hashfloat4 - ));
+DATA(insert OID = 451 (  hashfloat4           PGUID 11 f t t t 1 f 23 "700" 100 0 0 100    hashfloat4 - ));
 DESCR("hash");
-DATA(insert OID = 452 (  hashfloat8           PGUID 11 f t t 1 f 23 "701" 100 0 0 100  hashfloat8 - ));
+DATA(insert OID = 452 (  hashfloat8           PGUID 11 f t t t 1 f 23 "701" 100 0 0 100    hashfloat8 - ));
 DESCR("hash");
-DATA(insert OID = 453 (  hashoid          PGUID 11 f t t 1 f 23 "26" 100 0 0 100  hashoid - ));
+DATA(insert OID = 453 (  hashoid          PGUID 11 f t t 1 f 23 "26" 100 0 0 100  hashoid - ));
 DESCR("hash");
-DATA(insert OID = 454 (  hashchar         PGUID 11 f t t 1 f 23 "18" 100 0 0 100  hashchar - ));
+DATA(insert OID = 454 (  hashchar         PGUID 11 f t t 1 f 23 "18" 100 0 0 100  hashchar - ));
 DESCR("hash");
-DATA(insert OID = 455 (  hashname         PGUID 11 f t t 1 f 23 "19" 100 0 0 100  hashname - ));
+DATA(insert OID = 455 (  hashname         PGUID 11 f t t 1 f 23 "19" 100 0 0 100  hashname - ));
 DESCR("hash");
-DATA(insert OID = 456 (  hashtext         PGUID 11 f t t 1 f 23 "25" 100 0 0 100  hashtext - ));
+DATA(insert OID = 456 (  hashtext         PGUID 11 f t t 1 f 23 "25" 100 0 0 100  hashtext - ));
 DESCR("hash");
-DATA(insert OID = 457 (  hashoidvector    PGUID 11 f t t 1 f 23 "30" 100 0 0 100  hashoidvector - ));
+DATA(insert OID = 457 (  hashoidvector    PGUID 11 f t t 1 f 23 "30" 100 0 0 100  hashoidvector - ));
 DESCR("hash");
-DATA(insert OID = 458 (  text_larger      PGUID 11 f t t 2 f 25 "25 25" 100 0 0 100  text_larger - ));
+DATA(insert OID = 458 (  text_larger      PGUID 11 f t t 2 f 25 "25 25" 100 0 0 100  text_larger - ));
 DESCR("larger of two");
-DATA(insert OID = 459 (  text_smaller     PGUID 11 f t t 2 f 25 "25 25" 100 0 0 100  text_smaller - ));
+DATA(insert OID = 459 (  text_smaller     PGUID 11 f t t 2 f 25 "25 25" 100 0 0 100  text_smaller - ));
 DESCR("smaller of two");
 
-DATA(insert OID = 460 (  int8in               PGUID 11 f t t 1 f 20 "0" 100 0 0 100  int8in - ));
+DATA(insert OID = 460 (  int8in               PGUID 11 f t t 1 f 20 "0" 100 0 0 100  int8in - ));
 DESCR("(internal)");
-DATA(insert OID = 461 (  int8out          PGUID 11 f t t 1 f 23 "0" 100 0 0 100  int8out - ));
+DATA(insert OID = 461 (  int8out          PGUID 11 f t t 1 f 23 "0" 100 0 0 100  int8out - ));
 DESCR("(internal)");
-DATA(insert OID = 462 (  int8um               PGUID 11 f t t 1 f 20 "20" 100 0 0 100  int8um - ));
+DATA(insert OID = 462 (  int8um               PGUID 11 f t t 1 f 20 "20" 100 0 0 100  int8um - ));
 DESCR("negate");
-DATA(insert OID = 463 (  int8pl               PGUID 11 f t t 2 f 20 "20 20" 100 0 0 100  int8pl - ));
+DATA(insert OID = 463 (  int8pl               PGUID 11 f t t 2 f 20 "20 20" 100 0 0 100  int8pl - ));
 DESCR("addition");
-DATA(insert OID = 464 (  int8mi               PGUID 11 f t t 2 f 20 "20 20" 100 0 0 100  int8mi - ));
+DATA(insert OID = 464 (  int8mi               PGUID 11 f t t 2 f 20 "20 20" 100 0 0 100  int8mi - ));
 DESCR("subtraction");
-DATA(insert OID = 465 (  int8mul          PGUID 11 f t t 2 f 20 "20 20" 100 0 0 100  int8mul - ));
+DATA(insert OID = 465 (  int8mul          PGUID 11 f t t 2 f 20 "20 20" 100 0 0 100  int8mul - ));
 DESCR("multiply");
-DATA(insert OID = 466 (  int8div          PGUID 11 f t t 2 f 20 "20 20" 100 0 0 100  int8div - ));
+DATA(insert OID = 466 (  int8div          PGUID 11 f t t 2 f 20 "20 20" 100 0 0 100  int8div - ));
 DESCR("divide");
-DATA(insert OID = 467 (  int8eq               PGUID 11 f t t 2 f 16 "20 20" 100 0 0 100  int8eq - ));
+DATA(insert OID = 467 (  int8eq               PGUID 11 f t t 2 f 16 "20 20" 100 0 0 100  int8eq - ));
 DESCR("equal");
-DATA(insert OID = 468 (  int8ne               PGUID 11 f t t 2 f 16 "20 20" 100 0 0 100  int8ne - ));
+DATA(insert OID = 468 (  int8ne               PGUID 11 f t t 2 f 16 "20 20" 100 0 0 100  int8ne - ));
 DESCR("not equal");
-DATA(insert OID = 469 (  int8lt               PGUID 11 f t t 2 f 16 "20 20" 100 0 0 100  int8lt - ));
+DATA(insert OID = 469 (  int8lt               PGUID 11 f t t 2 f 16 "20 20" 100 0 0 100  int8lt - ));
 DESCR("less-than");
-DATA(insert OID = 470 (  int8gt               PGUID 11 f t t 2 f 16 "20 20" 100 0 0 100  int8gt - ));
+DATA(insert OID = 470 (  int8gt               PGUID 11 f t t 2 f 16 "20 20" 100 0 0 100  int8gt - ));
 DESCR("greater-than");
-DATA(insert OID = 471 (  int8le               PGUID 11 f t t 2 f 16 "20 20" 100 0 0 100  int8le - ));
+DATA(insert OID = 471 (  int8le               PGUID 11 f t t 2 f 16 "20 20" 100 0 0 100  int8le - ));
 DESCR("less-than-or-equal");
-DATA(insert OID = 472 (  int8ge               PGUID 11 f t t 2 f 16 "20 20" 100 0 0 100  int8ge - ));
+DATA(insert OID = 472 (  int8ge               PGUID 11 f t t 2 f 16 "20 20" 100 0 0 100  int8ge - ));
 DESCR("greater-than-or-equal");
 
-DATA(insert OID = 474 (  int84eq          PGUID 11 f t t 2 f 16 "20 23" 100 0 0 100  int84eq - ));
+DATA(insert OID = 474 (  int84eq          PGUID 11 f t t 2 f 16 "20 23" 100 0 0 100  int84eq - ));
 DESCR("equal");
-DATA(insert OID = 475 (  int84ne          PGUID 11 f t t 2 f 16 "20 23" 100 0 0 100  int84ne - ));
+DATA(insert OID = 475 (  int84ne          PGUID 11 f t t 2 f 16 "20 23" 100 0 0 100  int84ne - ));
 DESCR("not equal");
-DATA(insert OID = 476 (  int84lt          PGUID 11 f t t 2 f 16 "20 23" 100 0 0 100  int84lt - ));
+DATA(insert OID = 476 (  int84lt          PGUID 11 f t t 2 f 16 "20 23" 100 0 0 100  int84lt - ));
 DESCR("less-than");
-DATA(insert OID = 477 (  int84gt          PGUID 11 f t t 2 f 16 "20 23" 100 0 0 100  int84gt - ));
+DATA(insert OID = 477 (  int84gt          PGUID 11 f t t 2 f 16 "20 23" 100 0 0 100  int84gt - ));
 DESCR("greater-than");
-DATA(insert OID = 478 (  int84le          PGUID 11 f t t 2 f 16 "20 23" 100 0 0 100  int84le - ));
+DATA(insert OID = 478 (  int84le          PGUID 11 f t t 2 f 16 "20 23" 100 0 0 100  int84le - ));
 DESCR("less-than-or-equal");
-DATA(insert OID = 479 (  int84ge          PGUID 11 f t t 2 f 16 "20 23" 100 0 0 100  int84ge - ));
+DATA(insert OID = 479 (  int84ge          PGUID 11 f t t 2 f 16 "20 23" 100 0 0 100  int84ge - ));
 DESCR("greater-than-or-equal");
 
-DATA(insert OID = 480 (  int4             PGUID 11 f t t 1 f  23 "20" 100 0 0 100  int84 - ));
+DATA(insert OID = 480 (  int4             PGUID 11 f t t t 1 f  23 "20" 100 0 0 100    int84 - ));
 DESCR("convert int8 to int4");
-DATA(insert OID = 481 (  int8             PGUID 11 f t t 1 f  20 "23" 100 0 0 100  int48 - ));
+DATA(insert OID = 481 (  int8             PGUID 11 f t t t 1 f  20 "23" 100 0 0 100    int48 - ));
 DESCR("convert int4 to int8");
-DATA(insert OID = 482 (  float8               PGUID 11 f t t 1 f 701 "20" 100 0 0 100  i8tod - ));
+DATA(insert OID = 482 (  float8               PGUID 11 f t t t 1 f 701 "20" 100 0 0 100    i8tod - ));
 DESCR("convert int8 to float8");
-DATA(insert OID = 483 (  int8             PGUID 11 f t t 1 f  20 "701" 100 0 0 100  dtoi8 - ));
+DATA(insert OID = 483 (  int8             PGUID 11 f t t 1 f  20 "701" 100 0 0 100  dtoi8 - ));
 DESCR("convert float8 to int8");
 
 /* OIDS 500 - 599 */
 
 /* OIDS 600 - 699 */
 
-DATA(insert OID = 1285 (  int4notin           PGUID 11 f t f 2 f 16 "23 0" 100 0 0 100  int4notin - ));
+DATA(insert OID = 1285 (  int4notin           PGUID 11 f t f 2 f 16 "23 0" 100 0 0 100  int4notin - ));
 DESCR("not in");
-DATA(insert OID = 1286 (  oidnotin        PGUID 11 f t f 2 f 16 "26 0" 100 0 0 100  oidnotin - ));
+DATA(insert OID = 1286 (  oidnotin        PGUID 11 f t f 2 f 16 "26 0" 100 0 0 100  oidnotin - ));
 DESCR("not in");
-DATA(insert OID = 1287 (  int44in         PGUID 11 f t t 1 f 22 "0" 100 0 0 100  int44in - ));
+DATA(insert OID = 1287 (  int44in         PGUID 11 f t t 1 f 22 "0" 100 0 0 100  int44in - ));
 DESCR("(internal)");
-DATA(insert OID = 653 (  int44out         PGUID 11 f t t 1 f 23 "0" 100 0 0 100  int44out - ));
+DATA(insert OID = 653 (  int44out         PGUID 11 f t t 1 f 23 "0" 100 0 0 100  int44out - ));
 DESCR("(internal)");
-DATA(insert OID = 655 (  namelt               PGUID 11 f t t 2 f 16 "19 19" 100 0 0 100  namelt - ));
+DATA(insert OID = 655 (  namelt               PGUID 11 f t t 2 f 16 "19 19" 100 0 0 100  namelt - ));
 DESCR("less-than");
-DATA(insert OID = 656 (  namele               PGUID 11 f t t 2 f 16 "19 19" 100 0 0 100  namele - ));
+DATA(insert OID = 656 (  namele               PGUID 11 f t t 2 f 16 "19 19" 100 0 0 100  namele - ));
 DESCR("less-than-or-equal");
-DATA(insert OID = 657 (  namegt               PGUID 11 f t t 2 f 16 "19 19" 100 0 0 100  namegt - ));
+DATA(insert OID = 657 (  namegt               PGUID 11 f t t 2 f 16 "19 19" 100 0 0 100  namegt - ));
 DESCR("greater-than");
-DATA(insert OID = 658 (  namege               PGUID 11 f t t 2 f 16 "19 19" 100 0 0 100  namege - ));
+DATA(insert OID = 658 (  namege               PGUID 11 f t t 2 f 16 "19 19" 100 0 0 100  namege - ));
 DESCR("greater-than-or-equal");
-DATA(insert OID = 659 (  namene               PGUID 11 f t t 2 f 16 "19 19" 100 0 0 100  namene - ));
+DATA(insert OID = 659 (  namene               PGUID 11 f t t 2 f 16 "19 19" 100 0 0 100  namene - ));
 DESCR("not equal");
 
-DATA(insert OID = 668 (  bpchar               PGUID 11 f t t 2 f 1042 "1042 23" 100 0 0 100  bpchar - ));
+DATA(insert OID = 668 (  bpchar               PGUID 11 f t t 2 f 1042 "1042 23" 100 0 0 100  bpchar - ));
 DESCR("truncate char()");
-DATA(insert OID = 669 (  varchar          PGUID 11 f t t 2 f 1043 "1043 23" 100 0 0 100  varchar - ));
+DATA(insert OID = 669 (  varchar          PGUID 11 f t t 2 f 1043 "1043 23" 100 0 0 100  varchar - ));
 DESCR("truncate varchar()");
 
-DATA(insert OID = 676 (  mktinterval      PGUID 11 f t f 2 f 704 "702 702" 100 0 0 100 mktinterval - ));
+DATA(insert OID = 676 (  mktinterval      PGUID 11 f t f 2 f 704 "702 702" 100 0 0 100 mktinterval - ));
 DESCR("convert to tinterval");
-DATA(insert OID = 619 (  oidvectorne      PGUID 11 f t t 2 f 16 "30 30" 100 0 0 100  oidvectorne - ));
+DATA(insert OID = 619 (  oidvectorne      PGUID 11 f t t 2 f 16 "30 30" 100 0 0 100  oidvectorne - ));
 DESCR("less-than");
-DATA(insert OID = 677 (  oidvectorlt      PGUID 11 f t t 2 f 16 "30 30" 100 0 0 100  oidvectorlt - ));
+DATA(insert OID = 677 (  oidvectorlt      PGUID 11 f t t 2 f 16 "30 30" 100 0 0 100  oidvectorlt - ));
 DESCR("less-than");
-DATA(insert OID = 678 (  oidvectorle      PGUID 11 f t t 2 f 16 "30 30" 100 0 0 100  oidvectorle - ));
+DATA(insert OID = 678 (  oidvectorle      PGUID 11 f t t 2 f 16 "30 30" 100 0 0 100  oidvectorle - ));
 DESCR("less-than-or-equal");
-DATA(insert OID = 679 (  oidvectoreq      PGUID 11 f t t 2 f 16 "30 30" 100 0 0 100  oidvectoreq - ));
+DATA(insert OID = 679 (  oidvectoreq      PGUID 11 f t t 2 f 16 "30 30" 100 0 0 100  oidvectoreq - ));
 DESCR("equal");
-DATA(insert OID = 680 (  oidvectorge      PGUID 11 f t t 2 f 16 "30 30" 100 0 0 100  oidvectorge - ));
+DATA(insert OID = 680 (  oidvectorge      PGUID 11 f t t 2 f 16 "30 30" 100 0 0 100  oidvectorge - ));
 DESCR("greater-than-or-equal");
-DATA(insert OID = 681 (  oidvectorgt      PGUID 11 f t t 2 f 16 "30 30" 100 0 0 100  oidvectorgt - ));
+DATA(insert OID = 681 (  oidvectorgt      PGUID 11 f t t 2 f 16 "30 30" 100 0 0 100  oidvectorgt - ));
 DESCR("greater-than");
 
 /* OIDS 700 - 799 */
-DATA(insert OID = 710 (  getpgusername    PGUID 11 f t f 0 f 19 "0" 100 0 0 100  getpgusername - ));
+DATA(insert OID = 710 (  getpgusername    PGUID 11 f t f 0 f 19 "0" 100 0 0 100  getpgusername - ));
 DESCR("Return username");
-DATA(insert OID = 711 (  userfntest           PGUID 11 f t t 1 f 23 "23" 100 0 0 100  userfntest - ));
+DATA(insert OID = 711 (  userfntest           PGUID 11 f t t 1 f 23 "23" 100 0 0 100  userfntest - ));
 DESCR("");
-DATA(insert OID = 713 (  oidrand          PGUID 11 f t f 2 f 16 "26 23" 100 0 0 100  oidrand - ));
+DATA(insert OID = 713 (  oidrand          PGUID 11 f t f 2 f 16 "26 23" 100 0 0 100  oidrand - ));
 DESCR("random");
-DATA(insert OID = 715 (  oidsrand         PGUID 11 f t f 1 f 16 "23" 100 0 0 100  oidsrand - ));
+DATA(insert OID = 715 (  oidsrand         PGUID 11 f t f 1 f 16 "23" 100 0 0 100  oidsrand - ));
 DESCR("seed random number generator");
-DATA(insert OID = 716 (  oideqint4        PGUID 11 f t t 2 f 16 "26 23" 100 0 0 100  oideqint4 - ));
+DATA(insert OID = 716 (  oideqint4        PGUID 11 f t t 2 f 16 "26 23" 100 0 0 100  oideqint4 - ));
 DESCR("equal");
-DATA(insert OID = 717 (  int4eqoid        PGUID 11 f t t 2 f 16 "23 26" 100 0 0 100  int4eqoid - ));
+DATA(insert OID = 717 (  int4eqoid        PGUID 11 f t t 2 f 16 "23 26" 100 0 0 100  int4eqoid - ));
 DESCR("equal");
 
-DATA(insert OID = 720 (  octet_length     PGUID 11 f t t 1 f 23 "17" 100 0 0 100  byteaoctetlen - ));
+DATA(insert OID = 720 (  octet_length     PGUID 11 f t t 1 f 23 "17" 100 0 0 100  byteaoctetlen - ));
 DESCR("");
-DATA(insert OID = 721 (  get_byte         PGUID 11 f t t 2 f 23 "17 23" 100 0 0 100  byteaGetByte - ));
+DATA(insert OID = 721 (  get_byte         PGUID 11 f t t 2 f 23 "17 23" 100 0 0 100  byteaGetByte - ));
 DESCR("");
-DATA(insert OID = 722 (  set_byte         PGUID 11 f t t 3 f 17 "17 23 23" 100 0 0 100  byteaSetByte - ));
+DATA(insert OID = 722 (  set_byte         PGUID 11 f t t 3 f 17 "17 23 23" 100 0 0 100  byteaSetByte - ));
 DESCR("");
-DATA(insert OID = 723 (  get_bit          PGUID 11 f t t 2 f 23 "17 23" 100 0 0 100  byteaGetBit - ));
+DATA(insert OID = 723 (  get_bit          PGUID 11 f t t 2 f 23 "17 23" 100 0 0 100  byteaGetBit - ));
 DESCR("");
-DATA(insert OID = 724 (  set_bit          PGUID 11 f t t 3 f 17 "17 23 23" 100 0 0 100  byteaSetBit - ));
+DATA(insert OID = 724 (  set_bit          PGUID 11 f t t 3 f 17 "17 23 23" 100 0 0 100  byteaSetBit - ));
 DESCR("");
 
-DATA(insert OID = 725 (  dist_pl          PGUID 11 f t t 2 f 701 "600 628" 100 0 0 100  dist_pl - ));
+DATA(insert OID = 725 (  dist_pl          PGUID 11 f t t 2 f 701 "600 628" 100 0 0 100  dist_pl - ));
 DESCR("distance between point and line");
-DATA(insert OID = 726 (  dist_lb          PGUID 11 f t t 2 f 701 "628 603" 100 0 0 100  dist_lb - ));
+DATA(insert OID = 726 (  dist_lb          PGUID 11 f t t 2 f 701 "628 603" 100 0 0 100  dist_lb - ));
 DESCR("distance between line and box");
-DATA(insert OID = 727 (  dist_sl          PGUID 11 f t t 2 f 701 "601 628" 100 0 0 100  dist_sl - ));
+DATA(insert OID = 727 (  dist_sl          PGUID 11 f t t 2 f 701 "601 628" 100 0 0 100  dist_sl - ));
 DESCR("distance between lseg and line");
-DATA(insert OID = 728 (  dist_cpoly           PGUID 11 f t t 2 f 701 "718 604" 100 0 0 100  dist_cpoly - ));
+DATA(insert OID = 728 (  dist_cpoly           PGUID 11 f t t 2 f 701 "718 604" 100 0 0 100  dist_cpoly - ));
 DESCR("distance between");
-DATA(insert OID = 729 (  poly_distance    PGUID 11 f t t 2 f 701 "604 604" 100 0 0 100  poly_distance - ));
+DATA(insert OID = 729 (  poly_distance    PGUID 11 f t t 2 f 701 "604 604" 100 0 0 100  poly_distance - ));
 DESCR("distance between");
 
-DATA(insert OID = 730 (  pqtest               PGUID 11 f t f 1 f 23 "25" 100 0 0 100  pqtest - ));
+DATA(insert OID = 730 (  pqtest               PGUID 11 f t f 1 f 23 "25" 100 0 0 100  pqtest - ));
 DESCR("");
 
-DATA(insert OID = 740 (  text_lt          PGUID 11 f t t 2 f 16 "25 25" 100 0 0 0  text_lt - ));
+DATA(insert OID = 740 (  text_lt          PGUID 11 f t t t 2 f 16 "25 25" 100 0 0 0    text_lt - ));
 DESCR("less-than");
-DATA(insert OID = 741 (  text_le          PGUID 11 f t t 2 f 16 "25 25" 100 0 0 0  text_le - ));
+DATA(insert OID = 741 (  text_le          PGUID 11 f t t t 2 f 16 "25 25" 100 0 0 0    text_le - ));
 DESCR("less-than-or-equal");
-DATA(insert OID = 742 (  text_gt          PGUID 11 f t t 2 f 16 "25 25" 100 0 0 0  text_gt - ));
+DATA(insert OID = 742 (  text_gt          PGUID 11 f t t t 2 f 16 "25 25" 100 0 0 0    text_gt - ));
 DESCR("greater-than");
-DATA(insert OID = 743 (  text_ge          PGUID 11 f t t 2 f 16 "25 25" 100 0 0 0  text_ge - ));
+DATA(insert OID = 743 (  text_ge          PGUID 11 f t t t 2 f 16 "25 25" 100 0 0 0    text_ge - ));
 DESCR("greater-than-or-equal");
 
-DATA(insert OID = 744 (  array_eq         PGUID 11 f t t 2 f 16 "0 0" 100 0 0 100 array_eq -));
+DATA(insert OID = 744 (  array_eq         PGUID 11 f t t 2 f 16 "0 0" 100 0 0 100 array_eq -));
 DESCR("equal");
-DATA(insert OID = 745 (  array_assgn      PGUID 11 f t t 8 f 23 "0 23 0 0 0 23 23 0" 100 0 0 100 array_assgn -));
+DATA(insert OID = 745 (  array_assgn      PGUID 11 f t t 8 f 23 "0 23 0 0 0 23 23 0" 100 0 0 100 array_assgn -));
 DESCR("array");
-DATA(insert OID = 746 (  array_clip           PGUID 11 f t t 7 f 23 "0 23 0 0 23 23 0" 100 0 0 100 array_clip -));
+DATA(insert OID = 746 (  array_clip           PGUID 11 f t t 7 f 23 "0 23 0 0 23 23 0" 100 0 0 100 array_clip -));
 DESCR("array");
-DATA(insert OID = 747 (  array_dims           PGUID 11 f t t 1 f 25 "0" 100 0 0 100 array_dims -));
+DATA(insert OID = 747 (  array_dims           PGUID 11 f t t 1 f 25 "0" 100 0 0 100 array_dims -));
 DESCR("array(internal)");
-DATA(insert OID = 748 (  array_set        PGUID 11 f t t 8 f 23 "0 23 0 0 23 23 23 0" 100 0 0 100 array_set -));
+DATA(insert OID = 748 (  array_set        PGUID 11 f t t 8 f 23 "0 23 0 0 23 23 23 0" 100 0 0 100 array_set -));
 DESCR("array");
-DATA(insert OID = 749 (  array_ref        PGUID 11 f t t 7 f 23 "0 23 0 23 23 23 0" 100 0 0 100 array_ref -));
+DATA(insert OID = 749 (  array_ref        PGUID 11 f t t 7 f 23 "0 23 0 23 23 23 0" 100 0 0 100 array_ref -));
 DESCR("array");
-DATA(insert OID = 750 (  array_in         PGUID 11 f t t 3 f 23 "0 0 23" 100 0 0 100   array_in - ));
+DATA(insert OID = 750 (  array_in         PGUID 11 f t t t 3 f 23 "0 0 23" 100 0 0 100 array_in - ));
 DESCR("array");
-DATA(insert OID = 751 (  array_out        PGUID 11 f t t 2 f 23 "0 0" 100 0 0 100  array_out - ));
+DATA(insert OID = 751 (  array_out        PGUID 11 f t t t 2 f 23 "0 0" 100 0 0 100    array_out - ));
 DESCR("array");
 
-DATA(insert OID = 752 (  filename_in      PGUID 11 f t t 1 f 605 "0" 100 0 0 100  filename_in - ));
+DATA(insert OID = 752 (  filename_in      PGUID 11 f t t 1 f 605 "0" 100 0 0 100  filename_in - ));
 DESCR("(internal)");
-DATA(insert OID = 753 (  filename_out     PGUID 11 f t t 2 f 19  "0 0" 100 0 0 100  filename_out - ));
+DATA(insert OID = 753 (  filename_out     PGUID 11 f t t 2 f 19  "0 0" 100 0 0 100  filename_out - ));
 DESCR("(internal)");
 
-DATA(insert OID = 760 (  smgrin               PGUID 11 f t f 1 f 210 "0" 100 0 0 100  smgrin - ));
+DATA(insert OID = 760 (  smgrin               PGUID 11 f t f 1 f 210 "0" 100 0 0 100  smgrin - ));
 DESCR("storage manager(internal)");
-DATA(insert OID = 761 (  smgrout          PGUID 11 f t f 1 f 23  "0" 100 0 0 100  smgrout - ));
+DATA(insert OID = 761 (  smgrout          PGUID 11 f t f 1 f 23  "0" 100 0 0 100  smgrout - ));
 DESCR("storage manager(internal)");
-DATA(insert OID = 762 (  smgreq               PGUID 11 f t f 2 f 16 "210 210" 100 0 0 100  smgreq - ));
+DATA(insert OID = 762 (  smgreq               PGUID 11 f t f t 2 f 16 "210 210" 100 0 0 100    smgreq - ));
 DESCR("storage manager");
-DATA(insert OID = 763 (  smgrne               PGUID 11 f t f 2 f 16 "210 210" 100 0 0 100  smgrne - ));
+DATA(insert OID = 763 (  smgrne               PGUID 11 f t f t 2 f 16 "210 210" 100 0 0 100    smgrne - ));
 DESCR("storage manager");
 
-DATA(insert OID = 764 (  lo_import        PGUID 11 f t f 1 f 26 "25" 100 0 0 100  lo_import - ));
+DATA(insert OID = 764 (  lo_import        PGUID 11 f t f 1 f 26 "25" 100 0 0 100  lo_import - ));
 DESCR("large object import");
-DATA(insert OID = 765 (  lo_export        PGUID 11 f t f 2 f 23 "26 25" 100 0 0 100  lo_export - ));
+DATA(insert OID = 765 (  lo_export        PGUID 11 f t f 2 f 23 "26 25" 100 0 0 100  lo_export - ));
 DESCR("large object export");
 
-DATA(insert OID = 766 (  int4inc          PGUID 11 f t t 1 f 23 "23" 100 0 0 100  int4inc - ));
+DATA(insert OID = 766 (  int4inc          PGUID 11 f t t 1 f 23 "23" 100 0 0 100  int4inc - ));
 DESCR("increment");
-DATA(insert OID = 767 (  int2inc          PGUID 11 f t t 1 f 21 "21" 100 0 0 100  int2inc - ));
+DATA(insert OID = 767 (  int2inc          PGUID 11 f t t 1 f 21 "21" 100 0 0 100  int2inc - ));
 DESCR("increment");
-DATA(insert OID = 768 (  int4larger           PGUID 11 f t t 2 f 23 "23 23" 100 0 0 100  int4larger - ));
+DATA(insert OID = 768 (  int4larger           PGUID 11 f t t 2 f 23 "23 23" 100 0 0 100  int4larger - ));
 DESCR("larger of two");
-DATA(insert OID = 769 (  int4smaller      PGUID 11 f t t 2 f 23 "23 23" 100 0 0 100  int4smaller - ));
+DATA(insert OID = 769 (  int4smaller      PGUID 11 f t t 2 f 23 "23 23" 100 0 0 100  int4smaller - ));
 DESCR("smaller of two");
-DATA(insert OID = 770 (  int2larger           PGUID 11 f t t 2 f 21 "21 21" 100 0 0 100  int2larger - ));
+DATA(insert OID = 770 (  int2larger           PGUID 11 f t t 2 f 21 "21 21" 100 0 0 100  int2larger - ));
 DESCR("larger of two");
-DATA(insert OID = 771 (  int2smaller      PGUID 11 f t t 2 f 21 "21 21" 100 0 0 100  int2smaller - ));
+DATA(insert OID = 771 (  int2smaller      PGUID 11 f t t 2 f 21 "21 21" 100 0 0 100  int2smaller - ));
 DESCR("smaller of two");
 
-DATA(insert OID = 772 (  gistcostestimate  PGUID 11 f t f 7 f 0 "0 0 0 0 0 0 0" 100 0 0 100  gistcostestimate - ));
+DATA(insert OID = 772 (  gistcostestimate  PGUID 11 f t f 7 f 0 "0 0 0 0 0 0 0" 100 0 0 100  gistcostestimate - ));
 DESCR("gist cost estimator");
-DATA(insert OID = 774 (  gistgettuple     PGUID 11 f t f 2 f 23 "0" 100 0 0 100  gistgettuple - ));
+DATA(insert OID = 774 (  gistgettuple     PGUID 11 f t f 2 f 23 "0" 100 0 0 100  gistgettuple - ));
 DESCR("gist(internal)");
-DATA(insert OID = 775 (  gistinsert           PGUID 11 f t f 5 f 23 "0" 100 0 0 100  gistinsert - ));
+DATA(insert OID = 775 (  gistinsert           PGUID 11 f t f 5 f 23 "0" 100 0 0 100  gistinsert - ));
 DESCR("gist(internal)");
-DATA(insert OID = 776 (  gistdelete           PGUID 11 f t f 2 f 23 "0" 100 0 0 100  gistdelete - ));
+DATA(insert OID = 776 (  gistdelete           PGUID 11 f t f 2 f 23 "0" 100 0 0 100  gistdelete - ));
 DESCR("gist(internal)");
-DATA(insert OID = 777 (  gistbeginscan    PGUID 11 f t f 4 f 23 "0" 100 0 0 100  gistbeginscan - ));
+DATA(insert OID = 777 (  gistbeginscan    PGUID 11 f t f 4 f 23 "0" 100 0 0 100  gistbeginscan - ));
 DESCR("gist(internal)");
-DATA(insert OID = 778 (  gistrescan           PGUID 11 f t f 3 f 23 "0" 100 0 0 100  gistrescan - ));
+DATA(insert OID = 778 (  gistrescan           PGUID 11 f t f 3 f 23 "0" 100 0 0 100  gistrescan - ));
 DESCR("gist(internal)");
-DATA(insert OID = 779 (  gistendscan      PGUID 11 f t f 1 f 23 "0" 100 0 0 100  gistendscan - ));
+DATA(insert OID = 779 (  gistendscan      PGUID 11 f t f 1 f 23 "0" 100 0 0 100  gistendscan - ));
 DESCR("gist(internal)");
-DATA(insert OID = 780 (  gistmarkpos      PGUID 11 f t f 1 f 23 "0" 100 0 0 100  gistmarkpos - ));
+DATA(insert OID = 780 (  gistmarkpos      PGUID 11 f t f 1 f 23 "0" 100 0 0 100  gistmarkpos - ));
 DESCR("gist(internal)");
-DATA(insert OID = 781 (  gistrestrpos     PGUID 11 f t f 1 f 23 "0" 100 0 0 100  gistrestrpos - ));
+DATA(insert OID = 781 (  gistrestrpos     PGUID 11 f t f 1 f 23 "0" 100 0 0 100  gistrestrpos - ));
 DESCR("gist(internal)");
-DATA(insert OID = 782 (  gistbuild        PGUID 11 f t f 9 f 23 "0" 100 0 0 100  gistbuild - ));
+DATA(insert OID = 782 (  gistbuild        PGUID 11 f t f 9 f 23 "0" 100 0 0 100  gistbuild - ));
 DESCR("gist(internal)");
 
-DATA(insert OID = 784 (  tintervaleq      PGUID 11 f t f 2 f 16 "704 704" 100 0 0 100  tintervaleq - ));
+DATA(insert OID = 784 (  tintervaleq      PGUID 11 f t f t 2 f 16 "704 704" 100 0 0 100    tintervaleq - ));
 DESCR("equal");
-DATA(insert OID = 785 (  tintervalne      PGUID 11 f t f 2 f 16 "704 704" 100 0 0 100  tintervalne - ));
+DATA(insert OID = 785 (  tintervalne      PGUID 11 f t f t 2 f 16 "704 704" 100 0 0 100    tintervalne - ));
 DESCR("not equal");
-DATA(insert OID = 786 (  tintervallt      PGUID 11 f t f 2 f 16 "704 704" 100 0 0 100  tintervallt - ));
+DATA(insert OID = 786 (  tintervallt      PGUID 11 f t f t 2 f 16 "704 704" 100 0 0 100    tintervallt - ));
 DESCR("less-than");
-DATA(insert OID = 787 (  tintervalgt      PGUID 11 f t f 2 f 16 "704 704" 100 0 0 100  tintervalgt - ));
+DATA(insert OID = 787 (  tintervalgt      PGUID 11 f t f t 2 f 16 "704 704" 100 0 0 100    tintervalgt - ));
 DESCR("greater-than");
-DATA(insert OID = 788 (  tintervalle      PGUID 11 f t f 2 f 16 "704 704" 100 0 0 100  tintervalle - ));
+DATA(insert OID = 788 (  tintervalle      PGUID 11 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 11 f t f 2 f 16 "704 704" 100 0 0 100  tintervalge - ));
+DATA(insert OID = 789 (  tintervalge      PGUID 11 f t f t 2 f 16 "704 704" 100 0 0 100    tintervalge - ));
 DESCR("greater-than-or-equal");
 
 /* OIDS 800 - 899 */
 
-DATA(insert OID = 817 (  oid              PGUID 11 f t t 1 f 26 "25" 100 0 0 100  text_oid -));
+DATA(insert OID = 817 (  oid              PGUID 11 f t t 1 f 26 "25" 100 0 0 100  text_oid -));
 DESCR("convert text to oid");
-DATA(insert OID = 818 (  int2             PGUID 11 f t t 1 f 21 "25" 100 0 0 100  text_int2 -));
+DATA(insert OID = 818 (  int2             PGUID 11 f t t 1 f 21 "25" 100 0 0 100  text_int2 -));
 DESCR("convert text to int2");
-DATA(insert OID = 819 (  int4             PGUID 11 f t t 1 f 23 "25" 100 0 0 100  text_int4 -));
+DATA(insert OID = 819 (  int4             PGUID 11 f t t 1 f 23 "25" 100 0 0 100  text_int4 -));
 DESCR("convert text to int4");
 
-DATA(insert OID = 838 (  float8               PGUID 11 f t t 1 f 701 "25" 100 0 0 100  text_float8 -));
+DATA(insert OID = 838 (  float8               PGUID 11 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 11 f t t 1 f 700 "25" 100 0 0 100  text_float4 -));
+DATA(insert OID = 839 (  float4               PGUID 11 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 11 f t t 1 f  25 "701" 100 0 0 100  float8_text -));
+DATA(insert OID = 840 (  text             PGUID 11 f t t 1 f  25 "701" 100 0 0 100  float8_text -));
 DESCR("convert float8 to text");
-DATA(insert OID = 841 (  text             PGUID 11 f t t 1 f  25 "700" 100 0 0 100  float4_text -));
+DATA(insert OID = 841 (  text             PGUID 11 f t t 1 f  25 "700" 100 0 0 100  float4_text -));
 DESCR("convert float4 to text");
 
-DATA(insert OID =  846 (  cash_mul_flt4    PGUID 11 f t t 2 f 790 "790 700" 100 0 0 100  cash_mul_flt4 - ));
+DATA(insert OID =  846 (  cash_mul_flt4    PGUID 11 f t t 2 f 790 "790 700" 100 0 0 100  cash_mul_flt4 - ));
 DESCR("multiply");
-DATA(insert OID =  847 (  cash_div_flt4    PGUID 11 f t t 2 f 790 "790 700" 100 0 0 100  cash_div_flt4 - ));
+DATA(insert OID =  847 (  cash_div_flt4    PGUID 11 f t t 2 f 790 "790 700" 100 0 0 100  cash_div_flt4 - ));
 DESCR("divide");
-DATA(insert OID =  848 (  flt4_mul_cash    PGUID 11 f t t 2 f 790 "700 790" 100 0 0 100  flt4_mul_cash - ));
+DATA(insert OID =  848 (  flt4_mul_cash    PGUID 11 f t t 2 f 790 "700 790" 100 0 0 100  flt4_mul_cash - ));
 DESCR("multiply");
 
-DATA(insert OID =  849 (  position        PGUID 11 f t t 2 f 23 "25 25" 100 0 1 0 textpos - ));
+DATA(insert OID =  849 (  position        PGUID 11 f t t 2 f 23 "25 25" 100 0 1 0 textpos - ));
 DESCR("return position of substring");
-DATA(insert OID =  850 (  textlike        PGUID 11 f t t 2 f 16 "25 25" 100 0 1 0 textlike - ));
+DATA(insert OID =  850 (  textlike        PGUID 11 f t t 2 f 16 "25 25" 100 0 1 0 textlike - ));
 DESCR("matches LIKE expression");
-DATA(insert OID =  851 (  textnlike           PGUID 11 f t t 2 f 16 "25 25" 100 0 1 0 textnlike - ));
+DATA(insert OID =  851 (  textnlike           PGUID 11 f t t 2 f 16 "25 25" 100 0 1 0 textnlike - ));
 DESCR("does not match LIKE expression");
 
-DATA(insert OID =  852 (  int48eq         PGUID 11 f t t 2 f 16 "23 20" 100 0 0 100  int48eq - ));
+DATA(insert OID =  852 (  int48eq         PGUID 11 f t t 2 f 16 "23 20" 100 0 0 100  int48eq - ));
 DESCR("equal");
-DATA(insert OID =  853 (  int48ne         PGUID 11 f t t 2 f 16 "23 20" 100 0 0 100  int48ne - ));
+DATA(insert OID =  853 (  int48ne         PGUID 11 f t t 2 f 16 "23 20" 100 0 0 100  int48ne - ));
 DESCR("not equal");
-DATA(insert OID =  854 (  int48lt         PGUID 11 f t t 2 f 16 "23 20" 100 0 0 100  int48lt - ));
+DATA(insert OID =  854 (  int48lt         PGUID 11 f t t 2 f 16 "23 20" 100 0 0 100  int48lt - ));
 DESCR("less-than");
-DATA(insert OID =  855 (  int48gt         PGUID 11 f t t 2 f 16 "23 20" 100 0 0 100  int48gt - ));
+DATA(insert OID =  855 (  int48gt         PGUID 11 f t t 2 f 16 "23 20" 100 0 0 100  int48gt - ));
 DESCR("greater-than");
-DATA(insert OID =  856 (  int48le         PGUID 11 f t t 2 f 16 "23 20" 100 0 0 100  int48le - ));
+DATA(insert OID =  856 (  int48le         PGUID 11 f t t 2 f 16 "23 20" 100 0 0 100  int48le - ));
 DESCR("less-than-or-equal");
-DATA(insert OID =  857 (  int48ge         PGUID 11 f t t 2 f 16 "23 20" 100 0 0 100  int48ge - ));
+DATA(insert OID =  857 (  int48ge         PGUID 11 f t t 2 f 16 "23 20" 100 0 0 100  int48ge - ));
 DESCR("greater-than-or-equal");
 
-DATA(insert OID =  858 (  namelike        PGUID 11 f t t 2 f 16 "19 25" 100 0 0 100  namelike - ));
+DATA(insert OID =  858 (  namelike        PGUID 11 f t t 2 f 16 "19 25" 100 0 0 100  namelike - ));
 DESCR("matches LIKE expression");
-DATA(insert OID =  859 (  namenlike           PGUID 11 f t t 2 f 16 "19 25" 100 0 0 100  namenlike - ));
+DATA(insert OID =  859 (  namenlike           PGUID 11 f t t 2 f 16 "19 25" 100 0 0 100  namenlike - ));
 DESCR("does not match LIKE expression");
 
-DATA(insert OID =  860 (  bpchar          PGUID 11 f t t 1 f 1042 "18" 100 0 0 100  char_bpchar - ));
+DATA(insert OID =  860 (  bpchar          PGUID 11 f t t 1 f 1042 "18" 100 0 0 100  char_bpchar - ));
 DESCR("convert char to char()");
-DATA(insert OID =  861 (  char            PGUID 11 f t t 1 f   18 "1042" 100 0 0 100  bpchar_char - ));
+DATA(insert OID =  861 (  char            PGUID 11 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 11 f t t 2 f 790 "23 790" 100 0 0 100  int4_mul_cash - ));
+DATA(insert OID =  862 (  int4_mul_cash           PGUID 11 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 11 f t t 2 f 790 "21 790" 100 0 0 100  int2_mul_cash - ));
+DATA(insert OID =  863 (  int2_mul_cash           PGUID 11 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 11 f t t 2 f 790 "790 23" 100 0 0 100  cash_mul_int4 - ));
+DATA(insert OID =  864 (  cash_mul_int4           PGUID 11 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 11 f t t 2 f 790 "790 23" 100 0 0 100  cash_div_int4 - ));
+DATA(insert OID =  865 (  cash_div_int4           PGUID 11 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 11 f t t 2 f 790 "790 21" 100 0 0 100  cash_mul_int2 - ));
+DATA(insert OID =  866 (  cash_mul_int2           PGUID 11 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 11 f t t 2 f 790 "790 21" 100 0 0 100  cash_div_int2 - ));
+DATA(insert OID =  867 (  cash_div_int2           PGUID 11 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 11 f t t 1 f 790 "0" 100 0 0 100  cash_in - ));
+DATA(insert OID =  886 (  cash_in         PGUID 11 f t t 1 f 790 "0" 100 0 0 100  cash_in - ));
 DESCR("(internal)");
-DATA(insert OID =  887 (  cash_out        PGUID 11 f t t 1 f  23 "0" 100 0 0 100  cash_out - ));
+DATA(insert OID =  887 (  cash_out        PGUID 11 f t t 1 f  23 "0" 100 0 0 100  cash_out - ));
 DESCR("(internal)");
-DATA(insert OID =  1273 (  cash_words_out  PGUID 11 f t t 1 f  25 "790" 100 0 0 100  cash_words_out - ));
+DATA(insert OID =  1273 (  cash_words_out  PGUID 11 f t t 1 f  25 "790" 100 0 0 100  cash_words_out - ));
 DESCR("output amount as words");
-DATA(insert OID =  888 (  cash_eq         PGUID 11 f t t 2 f  16 "790 790" 100 0 0 100  cash_eq - ));
+DATA(insert OID =  888 (  cash_eq         PGUID 11 f t t 2 f  16 "790 790" 100 0 0 100  cash_eq - ));
 DESCR("equal");
-DATA(insert OID =  889 (  cash_ne         PGUID 11 f t t 2 f  16 "790 790" 100 0 0 100  cash_ne - ));
+DATA(insert OID =  889 (  cash_ne         PGUID 11 f t t 2 f  16 "790 790" 100 0 0 100  cash_ne - ));
 DESCR("not equal");
-DATA(insert OID =  890 (  cash_lt         PGUID 11 f t t 2 f  16 "790 790" 100 0 0 100  cash_lt - ));
+DATA(insert OID =  890 (  cash_lt         PGUID 11 f t t 2 f  16 "790 790" 100 0 0 100  cash_lt - ));
 DESCR("less-than");
-DATA(insert OID =  891 (  cash_le         PGUID 11 f t t 2 f  16 "790 790" 100 0 0 100  cash_le - ));
+DATA(insert OID =  891 (  cash_le         PGUID 11 f t t 2 f  16 "790 790" 100 0 0 100  cash_le - ));
 DESCR("less-than-or-equal");
-DATA(insert OID =  892 (  cash_gt         PGUID 11 f t t 2 f  16 "790 790" 100 0 0 100  cash_gt - ));
+DATA(insert OID =  892 (  cash_gt         PGUID 11 f t t 2 f  16 "790 790" 100 0 0 100  cash_gt - ));
 DESCR("greater-than");
-DATA(insert OID =  893 (  cash_ge         PGUID 11 f t t 2 f  16 "790 790" 100 0 0 100  cash_ge - ));
+DATA(insert OID =  893 (  cash_ge         PGUID 11 f t t 2 f  16 "790 790" 100 0 0 100  cash_ge - ));
 DESCR("greater-than-or-equal");
-DATA(insert OID =  894 (  cash_pl         PGUID 11 f t t 2 f 790 "790 790" 100 0 0 100  cash_pl - ));
+DATA(insert OID =  894 (  cash_pl         PGUID 11 f t t 2 f 790 "790 790" 100 0 0 100  cash_pl - ));
 DESCR("addition");
-DATA(insert OID =  895 (  cash_mi         PGUID 11 f t t 2 f 790 "790 790" 100 0 0 100  cash_mi - ));
+DATA(insert OID =  895 (  cash_mi         PGUID 11 f t t 2 f 790 "790 790" 100 0 0 100  cash_mi - ));
 DESCR("subtract");
-DATA(insert OID =  896 (  cash_mul_flt8           PGUID 11 f t t 2 f 790 "790 701" 100 0 0 100  cash_mul_flt8 - ));
+DATA(insert OID =  896 (  cash_mul_flt8           PGUID 11 f t t 2 f 790 "790 701" 100 0 0 100  cash_mul_flt8 - ));
 DESCR("multiply");
-DATA(insert OID =  897 (  cash_div_flt8           PGUID 11 f t t 2 f 790 "790 701" 100 0 0 100  cash_div_flt8 - ));
+DATA(insert OID =  897 (  cash_div_flt8           PGUID 11 f t t 2 f 790 "790 701" 100 0 0 100  cash_div_flt8 - ));
 DESCR("divide");
-DATA(insert OID =  898 (  cashlarger      PGUID 11 f t t 2 f 790 "790 790" 100 0 0 100  cashlarger - ));
+DATA(insert OID =  898 (  cashlarger      PGUID 11 f t t 2 f 790 "790 790" 100 0 0 100  cashlarger - ));
 DESCR("larger of two");
-DATA(insert OID =  899 (  cashsmaller     PGUID 11 f t t 2 f 790 "790 790" 100 0 0 100  cashsmaller - ));
+DATA(insert OID =  899 (  cashsmaller     PGUID 11 f t t 2 f 790 "790 790" 100 0 0 100  cashsmaller - ));
 DESCR("smaller of two");
 
-DATA(insert OID =  919 (  flt8_mul_cash           PGUID 11 f t t 2 f 790 "701 790" 100 0 0 100  flt8_mul_cash - ));
+DATA(insert OID =  919 (  flt8_mul_cash           PGUID 11 f t t 2 f 790 "701 790" 100 0 0 100  flt8_mul_cash - ));
 DESCR("multiply");
 
 /* OIDS 900 - 999 */
 
 /* isoldpath, upgradepath, upgradepoly, revertpoly are used to update pre-v6.1 to v6.1 - tgl 97/06/03 */
-DATA(insert OID = 936 (  isoldpath        PGUID 11 f t f 1 f  16 "602" 100 0 0 100  isoldpath - ));
+DATA(insert OID = 936 (  isoldpath        PGUID 11 f t f 1 f  16 "602" 100 0 0 100  isoldpath - ));
 DESCR("");
-DATA(insert OID = 937 (  upgradepath      PGUID 11 f t f 1 f 602 "602" 100 0 0 100  upgradepath - ));
+DATA(insert OID = 937 (  upgradepath      PGUID 11 f t f 1 f 602 "602" 100 0 0 100  upgradepath - ));
 DESCR("");
-DATA(insert OID = 938 (  upgradepoly      PGUID 11 f t f 1 f 604 "604" 100 0 0 100  upgradepoly - ));
+DATA(insert OID = 938 (  upgradepoly      PGUID 11 f t f 1 f 604 "604" 100 0 0 100  upgradepoly - ));
 DESCR("");
-DATA(insert OID = 939 (  revertpoly           PGUID 11 f t f 1 f 604 "604" 100 0 0 100  revertpoly - ));
+DATA(insert OID = 939 (  revertpoly           PGUID 11 f t f 1 f 604 "604" 100 0 0 100  revertpoly - ));
 DESCR("");
 
-DATA(insert OID = 940 (  mod              PGUID 11 f t t 2 f 21 "21 21" 100 0 0 100  int2mod - ));
+DATA(insert OID = 940 (  mod              PGUID 11 f t t 2 f 21 "21 21" 100 0 0 100  int2mod - ));
 DESCR("modulus");
-DATA(insert OID = 941 (  mod              PGUID 11 f t t 2 f 23 "23 23" 100 0 0 100  int4mod - ));
+DATA(insert OID = 941 (  mod              PGUID 11 f t t 2 f 23 "23 23" 100 0 0 100  int4mod - ));
 DESCR("modulus");
-DATA(insert OID = 942 (  mod              PGUID 11 f t t 2 f 23 "21 23" 100 0 0 100  int24mod - ));
+DATA(insert OID = 942 (  mod              PGUID 11 f t t 2 f 23 "21 23" 100 0 0 100  int24mod - ));
 DESCR("modulus");
-DATA(insert OID = 943 (  mod              PGUID 11 f t t 2 f 23 "23 21" 100 0 0 100  int42mod - ));
+DATA(insert OID = 943 (  mod              PGUID 11 f t t 2 f 23 "23 21" 100 0 0 100  int42mod - ));
 DESCR("modulus");
 
-DATA(insert OID = 945 (  int8mod          PGUID 11 f t t 2 f 20 "20 20" 100 0 0 100  int8mod - ));
+DATA(insert OID = 945 (  int8mod          PGUID 11 f t t 2 f 20 "20 20" 100 0 0 100  int8mod - ));
 DESCR("modulus");
-DATA(insert OID = 947 (  mod              PGUID 11 f t t 2 f 20 "20 20" 100 0 0 100  int8mod - ));
+DATA(insert OID = 947 (  mod              PGUID 11 f t t 2 f 20 "20 20" 100 0 0 100  int8mod - ));
 DESCR("modulus");
 
-DATA(insert OID = 944 (  char             PGUID 11 f t t 1 f 18 "25" 100 0 0 100  text_char - ));
+DATA(insert OID = 944 (  char             PGUID 11 f t t 1 f 18 "25" 100 0 0 100  text_char - ));
 DESCR("convert text to char");
-DATA(insert OID = 946 (  text             PGUID 11 f t t 1 f 25 "18" 100 0 0 100  char_text - ));
+DATA(insert OID = 946 (  text             PGUID 11 f t t 1 f 25 "18" 100 0 0 100  char_text - ));
 DESCR("convert char to text");
-DATA(insert OID = 948 (  varchar          PGUID 11 f t t 1 f 25 "1043" 100 0 0 100  bpchar_char - ));
+DATA(insert OID = 948 (  varchar          PGUID 11 f t t 1 f 25 "1043" 100 0 0 100  bpchar_char - ));
 DESCR("convert varchar() to text");
 
-DATA(insert OID = 950 (  istrue               PGUID 11 f t t 1 f 16 "16" 100 0 0 100  istrue - ));
+DATA(insert OID = 950 (  istrue               PGUID 11 f t t 1 f 16 "16" 100 0 0 100  istrue - ));
 DESCR("");
-DATA(insert OID = 951 (  isfalse          PGUID 11 f t t 1 f 16 "16" 100 0 0 100  isfalse - ));
+DATA(insert OID = 951 (  isfalse          PGUID 11 f t t 1 f 16 "16" 100 0 0 100  isfalse - ));
 DESCR("");
 
-DATA(insert OID = 952 (  lo_open          PGUID 11 f t f 2 f 23 "26 23" 100 0 0 100  lo_open - ));
+DATA(insert OID = 952 (  lo_open          PGUID 11 f t f 2 f 23 "26 23" 100 0 0 100  lo_open - ));
 DESCR("large object open");
-DATA(insert OID = 953 (  lo_close         PGUID 11 f t f 1 f 23 "23" 100 0 0 100  lo_close - ));
+DATA(insert OID = 953 (  lo_close         PGUID 11 f t f 1 f 23 "23" 100 0 0 100  lo_close - ));
 DESCR("large object close");
-DATA(insert OID = 954 (  loread               PGUID 11 f t f 2 f 17 "23 23" 100 0 0 100  loread - ));
+DATA(insert OID = 954 (  loread               PGUID 11 f t f 2 f 17 "23 23" 100 0 0 100  loread - ));
 DESCR("large object read");
-DATA(insert OID = 955 (  lowrite          PGUID 11 f t f 2 f 23 "23 17" 100 0 0 100  lowrite - ));
+DATA(insert OID = 955 (  lowrite          PGUID 11 f t f 2 f 23 "23 17" 100 0 0 100  lowrite - ));
 DESCR("large object write");
-DATA(insert OID = 956 (  lo_lseek         PGUID 11 f t f 3 f 23 "23 23 23" 100 0 0 100  lo_lseek - ));
+DATA(insert OID = 956 (  lo_lseek         PGUID 11 f t f 3 f 23 "23 23 23" 100 0 0 100  lo_lseek - ));
 DESCR("large object seek");
-DATA(insert OID = 957 (  lo_creat         PGUID 11 f t f 1 f 26 "23" 100 0 0 100  lo_creat - ));
+DATA(insert OID = 957 (  lo_creat         PGUID 11 f t f 1 f 26 "23" 100 0 0 100  lo_creat - ));
 DESCR("large object create");
-DATA(insert OID = 958 (  lo_tell          PGUID 11 f t f 1 f 23 "23" 100 0 0 100  lo_tell - ));
+DATA(insert OID = 958 (  lo_tell          PGUID 11 f t f 1 f 23 "23" 100 0 0 100  lo_tell - ));
 DESCR("large object position");
 
-DATA(insert OID = 959 (  on_pl            PGUID 11 f t t 2 f  16 "600 628" 100 0 10 100  on_pl - ));
+DATA(insert OID = 959 (  on_pl            PGUID 11 f t t 2 f  16 "600 628" 100 0 10 100  on_pl - ));
 DESCR("point on line?");
-DATA(insert OID = 960 (  on_sl            PGUID 11 f t t 2 f  16 "601 628" 100 0 10 100  on_sl - ));
+DATA(insert OID = 960 (  on_sl            PGUID 11 f t t 2 f  16 "601 628" 100 0 10 100  on_sl - ));
 DESCR("lseg on line?");
-DATA(insert OID = 961 (  close_pl         PGUID 11 f t t 2 f 600 "600 628" 100 0 10 100  close_pl - ));
+DATA(insert OID = 961 (  close_pl         PGUID 11 f t t 2 f 600 "600 628" 100 0 10 100  close_pl - ));
 DESCR("closest point on line");
-DATA(insert OID = 962 (  close_sl         PGUID 11 f t t 2 f 600 "601 628" 100 0 10 100  close_sl - ));
+DATA(insert OID = 962 (  close_sl         PGUID 11 f t t 2 f 600 "601 628" 100 0 10 100  close_sl - ));
 DESCR("closest point to line segment on line");
-DATA(insert OID = 963 (  close_lb         PGUID 11 f t t 2 f 600 "628 603" 100 0 10 100  close_lb - ));
+DATA(insert OID = 963 (  close_lb         PGUID 11 f t t 2 f 600 "628 603" 100 0 10 100  close_lb - ));
 DESCR("closest point to line on box");
 
-DATA(insert OID = 964 (  lo_unlink        PGUID 11 f t f 1 f  23 "26" 100 0 0 100  lo_unlink - ));
+DATA(insert OID = 964 (  lo_unlink        PGUID 11 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 11 f t t 1 f  26 "24" 100 0 0 100  regproctooid - ));
+DATA(insert OID = 972 (  regproctooid     PGUID 11 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 11 f t t 2 f  16 "602 602" 100 0 10 100  path_inter - ));
+DATA(insert OID = 973 (  path_inter           PGUID 11 f t t 2 f  16 "602 602" 100 0 10 100  path_inter - ));
 DESCR("paths intersect?");
-DATA(insert OID = 975 (  area             PGUID 11 f t t 1 f 701 "603" 100 0 0 100  box_area - ));
+DATA(insert OID = 975 (  area             PGUID 11 f t t 1 f 701 "603" 100 0 0 100  box_area - ));
 DESCR("box area");
-DATA(insert OID = 976 (  width            PGUID 11 f t t 1 f 701 "603" 100 0 0 100  box_width - ));
+DATA(insert OID = 976 (  width            PGUID 11 f t t 1 f 701 "603" 100 0 0 100  box_width - ));
 DESCR("box width");
-DATA(insert OID = 977 (  height               PGUID 11 f t t 1 f 701 "603" 100 0 0 100  box_height - ));
+DATA(insert OID = 977 (  height               PGUID 11 f t t 1 f 701 "603" 100 0 0 100  box_height - ));
 DESCR("box height");
-DATA(insert OID = 978 (  box_distance     PGUID 11 f t t 2 f 701 "603 603" 100 0 0 100  box_distance - ));
+DATA(insert OID = 978 (  box_distance     PGUID 11 f t t 2 f 701 "603 603" 100 0 0 100  box_distance - ));
 DESCR("distance between boxes");
-DATA(insert OID = 980 (  box_intersect    PGUID 11 f t t 2 f 603 "603 603" 100 0 0 100  box_intersect - ));
+DATA(insert OID = 980 (  box_intersect    PGUID 11 f t t 2 f 603 "603 603" 100 0 0 100  box_intersect - ));
 DESCR("box intersection (another box)");
-DATA(insert OID = 981 (  diagonal         PGUID 11 f t t 1 f 601 "603" 100 0 0 100  box_diagonal - ));
+DATA(insert OID = 981 (  diagonal         PGUID 11 f t t 1 f 601 "603" 100 0 0 100  box_diagonal - ));
 DESCR("box diagonal");
-DATA(insert OID = 982 (  path_n_lt        PGUID 11 f t t 2 f 16 "602 602" 100 0 0 100  path_n_lt - ));
+DATA(insert OID = 982 (  path_n_lt        PGUID 11 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 11 f t t 2 f 16 "602 602" 100 0 0 100  path_n_gt - ));
+DATA(insert OID = 983 (  path_n_gt        PGUID 11 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 11 f t t 2 f 16 "602 602" 100 0 0 100  path_n_eq - ));
+DATA(insert OID = 984 (  path_n_eq        PGUID 11 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 11 f t t 2 f 16 "602 602" 100 0 0 100  path_n_le - ));
+DATA(insert OID = 985 (  path_n_le        PGUID 11 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 11 f t t 2 f 16 "602 602" 100 0 0 100  path_n_ge - ));
+DATA(insert OID = 986 (  path_n_ge        PGUID 11 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 11 f t t 1 f 701 "602" 100 0 1 0  path_length - ));
+DATA(insert OID = 987 (  path_length      PGUID 11 f t t 1 f 701 "602" 100 0 1 0  path_length - ));
 DESCR("sum of path segments");
-DATA(insert OID = 988 (  point_ne         PGUID 11 f t t 2 f 16 "600 600" 100 0 0 100  point_ne - ));
+DATA(insert OID = 988 (  point_ne         PGUID 11 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 11 f t t 2 f 16 "600 600" 100 0 0 100  point_vert - ));
+DATA(insert OID = 989 (  point_vert           PGUID 11 f t t t 2 f 16 "600 600" 100 0 0 100    point_vert - ));
 DESCR("vertical?");
-DATA(insert OID = 990 (  point_horiz      PGUID 11 f t t 2 f 16 "600 600" 100 0 0 100  point_horiz - ));
+DATA(insert OID = 990 (  point_horiz      PGUID 11 f t t t 2 f 16 "600 600" 100 0 0 100    point_horiz - ));
 DESCR("horizontal?");
-DATA(insert OID = 991 (  point_distance    PGUID 11 f t t 2 f 701 "600 600" 100 0 0 100  point_distance - ));
+DATA(insert OID = 991 (  point_distance    PGUID 11 f t t 2 f 701 "600 600" 100 0 0 100  point_distance - ));
 DESCR("distance between");
-DATA(insert OID = 992 (  slope            PGUID 11 f t t 2 f 701 "600 600" 100 0 0 100  point_slope - ));
+DATA(insert OID = 992 (  slope            PGUID 11 f t t 2 f 701 "600 600" 100 0 0 100  point_slope - ));
 DESCR("slope between points");
-DATA(insert OID = 993 (  lseg             PGUID 11 f t t 2 f 601 "600 600" 100 0 0 100  lseg_construct - ));
+DATA(insert OID = 993 (  lseg             PGUID 11 f 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 11 f t t 2 f 16 "601 601" 100 0 0 100 lseg_intersect - ));
+DATA(insert OID = 994 (  lseg_intersect    PGUID 11 f t t t 2 f 16 "601 601" 100 0 0 100   lseg_intersect - ));
 DESCR("intersects?");
-DATA(insert OID = 995 (  lseg_parallel    PGUID 11 f t t 2 f 16 "601 601" 100 0 0 100  lseg_parallel - ));
+DATA(insert OID = 995 (  lseg_parallel    PGUID 11 f t t t 2 f 16 "601 601" 100 0 0 100    lseg_parallel - ));
 DESCR("parallel?");
-DATA(insert OID = 996 (  lseg_perp        PGUID 11 f t t 2 f 16 "601 601" 100 0 0 100  lseg_perp - ));
+DATA(insert OID = 996 (  lseg_perp        PGUID 11 f t t t 2 f 16 "601 601" 100 0 0 100    lseg_perp - ));
 DESCR("perpendicular?");
-DATA(insert OID = 997 (  lseg_vertical    PGUID 11 f t t 1 f 16 "601" 100 0 0 100  lseg_vertical - ));
+DATA(insert OID = 997 (  lseg_vertical    PGUID 11 f t t t 1 f 16 "601" 100 0 0 100    lseg_vertical - ));
 DESCR("vertical?");
-DATA(insert OID = 998 (  lseg_horizontal   PGUID 11 f t t 1 f 16 "601" 100 0 0 100 lseg_horizontal - ));
+DATA(insert OID = 998 (  lseg_horizontal   PGUID 11 f t t t 1 f 16 "601" 100 0 0 100   lseg_horizontal - ));
 DESCR("horizontal?");
-DATA(insert OID = 999 (  lseg_eq          PGUID 11 f t t 2 f 16 "601 601" 100 0 0 100  lseg_eq - ));
+DATA(insert OID = 999 (  lseg_eq          PGUID 11 f t t t 2 f 16 "601 601" 100 0 0 100    lseg_eq - ));
 DESCR("equal");
 
 /* OIDS 1000 - 1999 */
 
-DATA(insert OID = 1029 (  nullvalue           PGUID 11 f t t 1 f 16 "0" 100 0 0 100  nullvalue - ));
+DATA(insert OID = 1029 (  nullvalue           PGUID 11 f t t 1 f 16 "0" 100 0 0 100  nullvalue - ));
 DESCR("(internal)");
-DATA(insert OID = 1030 (  nonnullvalue    PGUID 11 f t t 1 f 16 "0" 100 0 0 100  nonnullvalue - ));
+DATA(insert OID = 1030 (  nonnullvalue    PGUID 11 f t t 1 f 16 "0" 100 0 0 100  nonnullvalue - ));
 DESCR("(internal)");
-DATA(insert OID = 1031 (  aclitemin           PGUID 11 f t f 1 f 1033 "0" 100 0 0 100  aclitemin - ));
+DATA(insert OID = 1031 (  aclitemin           PGUID 11 f t f t 1 f 1033 "0" 100 0 0 100    aclitemin - ));
 DESCR("(internal)");
-DATA(insert OID = 1032 (  aclitemout      PGUID 11 f t f 1 f 23 "0" 100 0 0 100  aclitemout - ));
+DATA(insert OID = 1032 (  aclitemout      PGUID 11 f t f 1 f 23 "0" 100 0 0 100  aclitemout - ));
 DESCR("(internal)");
-DATA(insert OID = 1035 (  aclinsert           PGUID 11 f t f 2 f 1034 "1034 1033" 100 0 0 100  aclinsert - ));
+DATA(insert OID = 1035 (  aclinsert           PGUID 11 f t f t 2 f 1034 "1034 1033" 100 0 0 100    aclinsert - ));
 DESCR("addition");
-DATA(insert OID = 1036 (  aclremove           PGUID 11 f t f 2 f 1034 "1034 1033" 100 0 0 100  aclremove - ));
+DATA(insert OID = 1036 (  aclremove           PGUID 11 f t f t 2 f 1034 "1034 1033" 100 0 0 100    aclremove - ));
 DESCR("subtract");
-DATA(insert OID = 1037 (  aclcontains     PGUID 11 f t f 2 f 16 "1034 1033" 100 0 0 100  aclcontains - ));
+DATA(insert OID = 1037 (  aclcontains     PGUID 11 f t f 2 f 16 "1034 1033" 100 0 0 100  aclcontains - ));
 DESCR("matches regex., case-sensitive");
-DATA(insert OID = 1038 (  seteval         PGUID 11 f t f 1 f 23 "26" 100 0 0 100  seteval - ));
+DATA(insert OID = 1038 (  seteval         PGUID 11 f t f 1 f 23 "26" 100 0 0 100  seteval - ));
 DESCR("");
-DATA(insert OID = 1044 (  bpcharin        PGUID 11 f t t 3 f 1042 "0 0 23" 100 0 0 100 bpcharin - ));
+DATA(insert OID = 1044 (  bpcharin        PGUID 11 f t t 3 f 1042 "0 0 23" 100 0 0 100 bpcharin - ));
 DESCR("(internal)");
-DATA(insert OID = 1045 (  bpcharout           PGUID 11 f t t 1 f 23 "0" 100 0 0 100  bpcharout - ));
+DATA(insert OID = 1045 (  bpcharout           PGUID 11 f t t 1 f 23 "0" 100 0 0 100  bpcharout - ));
 DESCR("(internal)");
-DATA(insert OID = 1046 (  varcharin           PGUID 11 f t t 3 f 1043 "0 0 23" 100 0 0 100 varcharin - ));
+DATA(insert OID = 1046 (  varcharin           PGUID 11 f t t 3 f 1043 "0 0 23" 100 0 0 100 varcharin - ));
 DESCR("(internal)");
-DATA(insert OID = 1047 (  varcharout      PGUID 11 f t t 1 f 23 "0" 100 0 0 100  varcharout - ));
+DATA(insert OID = 1047 (  varcharout      PGUID 11 f t t 1 f 23 "0" 100 0 0 100  varcharout - ));
 DESCR("(internal)");
-DATA(insert OID = 1048 (  bpchareq        PGUID 11 f t t 2 f 16 "1042 1042" 100 0 0 100  bpchareq - ));
+DATA(insert OID = 1048 (  bpchareq        PGUID 11 f t t 2 f 16 "1042 1042" 100 0 0 100  bpchareq - ));
 DESCR("equal");
-DATA(insert OID = 1049 (  bpcharlt        PGUID 11 f t t 2 f 16 "1042 1042" 100 0 0 100  bpcharlt - ));
+DATA(insert OID = 1049 (  bpcharlt        PGUID 11 f t t 2 f 16 "1042 1042" 100 0 0 100  bpcharlt - ));
 DESCR("less-than");
-DATA(insert OID = 1050 (  bpcharle        PGUID 11 f t t 2 f 16 "1042 1042" 100 0 0 100  bpcharle - ));
+DATA(insert OID = 1050 (  bpcharle        PGUID 11 f t t 2 f 16 "1042 1042" 100 0 0 100  bpcharle - ));
 DESCR("less-than-or-equal");
-DATA(insert OID = 1051 (  bpchargt        PGUID 11 f t t 2 f 16 "1042 1042" 100 0 0 100  bpchargt - ));
+DATA(insert OID = 1051 (  bpchargt        PGUID 11 f t t 2 f 16 "1042 1042" 100 0 0 100  bpchargt - ));
 DESCR("greater-than");
-DATA(insert OID = 1052 (  bpcharge        PGUID 11 f t t 2 f 16 "1042 1042" 100 0 0 100  bpcharge - ));
+DATA(insert OID = 1052 (  bpcharge        PGUID 11 f t t 2 f 16 "1042 1042" 100 0 0 100  bpcharge - ));
 DESCR("greater-than-or-equal");
-DATA(insert OID = 1053 (  bpcharne        PGUID 11 f t t 2 f 16 "1042 1042" 100 0 0 100  bpcharne - ));
+DATA(insert OID = 1053 (  bpcharne        PGUID 11 f t t 2 f 16 "1042 1042" 100 0 0 100  bpcharne - ));
 DESCR("not equal");
-DATA(insert OID = 1070 (  varchareq           PGUID 11 f t t 2 f 16 "1043 1043" 100 0 0 100  varchareq - ));
+DATA(insert OID = 1070 (  varchareq           PGUID 11 f t t 2 f 16 "1043 1043" 100 0 0 100  varchareq - ));
 DESCR("equal");
-DATA(insert OID = 1071 (  varcharlt           PGUID 11 f t t 2 f 16 "1043 1043" 100 0 0 100  varcharlt - ));
+DATA(insert OID = 1071 (  varcharlt           PGUID 11 f t t 2 f 16 "1043 1043" 100 0 0 100  varcharlt - ));
 DESCR("less-than");
-DATA(insert OID = 1072 (  varcharle           PGUID 11 f t t 2 f 16 "1043 1043" 100 0 0 100  varcharle - ));
+DATA(insert OID = 1072 (  varcharle           PGUID 11 f t t 2 f 16 "1043 1043" 100 0 0 100  varcharle - ));
 DESCR("less-than-or-equal");
-DATA(insert OID = 1073 (  varchargt           PGUID 11 f t t 2 f 16 "1043 1043" 100 0 0 100  varchargt - ));
+DATA(insert OID = 1073 (  varchargt           PGUID 11 f t t 2 f 16 "1043 1043" 100 0 0 100  varchargt - ));
 DESCR("greater-than");
-DATA(insert OID = 1074 (  varcharge           PGUID 11 f t t 2 f 16 "1043 1043" 100 0 0 100  varcharge - ));
+DATA(insert OID = 1074 (  varcharge           PGUID 11 f t t 2 f 16 "1043 1043" 100 0 0 100  varcharge - ));
 DESCR("greater-than-or-equal");
-DATA(insert OID = 1075 (  varcharne           PGUID 11 f t t 2 f 16 "1043 1043" 100 0 0 100  varcharne - ));
+DATA(insert OID = 1075 (  varcharne           PGUID 11 f t t 2 f 16 "1043 1043" 100 0 0 100  varcharne - ));
 DESCR("not equal");
-DATA(insert OID = 1078 (  bpcharcmp           PGUID 11 f t t 2 f 23 "1042 1042" 100 0 0 100  bpcharcmp - ));
+DATA(insert OID = 1078 (  bpcharcmp           PGUID 11 f t t 2 f 23 "1042 1042" 100 0 0 100  bpcharcmp - ));
 DESCR("less-equal-greater");
-DATA(insert OID = 1079 (  varcharcmp      PGUID 11 f t t 2 f 23 "1043 1043" 100 0 0 100  varcharcmp - ));
+DATA(insert OID = 1079 (  varcharcmp      PGUID 11 f t t 2 f 23 "1043 1043" 100 0 0 100  varcharcmp - ));
 DESCR("less-equal-greater");
-DATA(insert OID = 1080 (  hashbpchar      PGUID 11 f t t 1 f 23 "1042" 100 0 0 100  hashbpchar - ));
+DATA(insert OID = 1080 (  hashbpchar      PGUID 11 f t t 1 f 23 "1042" 100 0 0 100  hashbpchar - ));
 DESCR("hash");
-DATA(insert OID = 1081 (  hashvarchar     PGUID 11 f t t 1 f 23 "1043" 100 0 0 100  hashvarchar - ));
+DATA(insert OID = 1081 (  hashvarchar     PGUID 11 f t t 1 f 23 "1043" 100 0 0 100  hashvarchar - ));
 DESCR("hash");
 
-DATA(insert OID = 1084 (  date_in         PGUID 11 f t f 1 f 1082 "0" 100 0 0 100  date_in - ));
+DATA(insert OID = 1084 (  date_in         PGUID 11 f t f t 1 f 1082 "0" 100 0 0 100    date_in - ));
 DESCR("(internal)");
-DATA(insert OID = 1085 (  date_out        PGUID 11 f t f 1 f 23 "0" 100 0 0 100  date_out - ));
+DATA(insert OID = 1085 (  date_out        PGUID 11 f t f 1 f 23 "0" 100 0 0 100  date_out - ));
 DESCR("(internal)");
-DATA(insert OID = 1086 (  date_eq         PGUID 11 f t t 2 f 16 "1082 1082" 100 0 0 100  date_eq - ));
+DATA(insert OID = 1086 (  date_eq         PGUID 11 f t t 2 f 16 "1082 1082" 100 0 0 100  date_eq - ));
 DESCR("equal");
-DATA(insert OID = 1087 (  date_lt         PGUID 11 f t t 2 f 16 "1082 1082" 100 0 0 100  date_lt - ));
+DATA(insert OID = 1087 (  date_lt         PGUID 11 f t t 2 f 16 "1082 1082" 100 0 0 100  date_lt - ));
 DESCR("less-than");
-DATA(insert OID = 1088 (  date_le         PGUID 11 f t t 2 f 16 "1082 1082" 100 0 0 100  date_le - ));
+DATA(insert OID = 1088 (  date_le         PGUID 11 f 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 11 f t t 2 f 16 "1082 1082" 100 0 0 100  date_gt - ));
+DATA(insert OID = 1089 (  date_gt         PGUID 11 f t t 2 f 16 "1082 1082" 100 0 0 100  date_gt - ));
 DESCR("greater-than");
-DATA(insert OID = 1090 (  date_ge         PGUID 11 f t t 2 f 16 "1082 1082" 100 0 0 100  date_ge - ));
+DATA(insert OID = 1090 (  date_ge         PGUID 11 f 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 11 f t t 2 f 16 "1082 1082" 100 0 0 100  date_ne - ));
+DATA(insert OID = 1091 (  date_ne         PGUID 11 f t t 2 f 16 "1082 1082" 100 0 0 100  date_ne - ));
 DESCR("not equal");
-DATA(insert OID = 1092 (  date_cmp        PGUID 11 f t t 2 f 23 "1082 1082" 100 0 0 100  date_cmp - ));
+DATA(insert OID = 1092 (  date_cmp        PGUID 11 f 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 11 f t t 2 f 16 "1083 1083" 100 0 0 100  time_lt - ));
+DATA(insert OID = 1102 (  time_lt         PGUID 11 f t t 2 f 16 "1083 1083" 100 0 0 100  time_lt - ));
 DESCR("less-than");
-DATA(insert OID = 1103 (  time_le         PGUID 11 f t t 2 f 16 "1083 1083" 100 0 0 100  time_le - ));
+DATA(insert OID = 1103 (  time_le         PGUID 11 f 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 11 f t t 2 f 16 "1083 1083" 100 0 0 100  time_gt - ));
+DATA(insert OID = 1104 (  time_gt         PGUID 11 f t t 2 f 16 "1083 1083" 100 0 0 100  time_gt - ));
 DESCR("greater-than");
-DATA(insert OID = 1105 (  time_ge         PGUID 11 f t t 2 f 16 "1083 1083" 100 0 0 100  time_ge - ));
+DATA(insert OID = 1105 (  time_ge         PGUID 11 f 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 11 f t t 2 f 16 "1083 1083" 100 0 0 100  time_ne - ));
+DATA(insert OID = 1106 (  time_ne         PGUID 11 f t t 2 f 16 "1083 1083" 100 0 0 100  time_ne - ));
 DESCR("not equal");
-DATA(insert OID = 1107 (  time_cmp        PGUID 11 f t t 2 f 23 "1083 1083" 100 0 0 100  time_cmp - ));
+DATA(insert OID = 1107 (  time_cmp        PGUID 11 f t t 2 f 23 "1083 1083" 100 0 0 100  time_cmp - ));
 DESCR("less-equal-greater");
-DATA(insert OID = 1138 (  date_larger     PGUID 11 f t t 2 f 1082 "1082 1082" 100 0 0 100  date_larger - ));
+DATA(insert OID = 1138 (  date_larger     PGUID 11 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 11 f t t 2 f 1082 "1082 1082" 100 0 0 100  date_smaller - ));
+DATA(insert OID = 1139 (  date_smaller    PGUID 11 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 11 f t t 2 f 23 "1082 1082" 100 0 0 100  date_mi - ));
+DATA(insert OID = 1140 (  date_mi         PGUID 11 f t t 2 f 23 "1082 1082" 100 0 0 100  date_mi - ));
 DESCR("subtract");
-DATA(insert OID = 1141 (  date_pli        PGUID 11 f t t 2 f 1082 "1082 23" 100 0 0 100  date_pli - ));
+DATA(insert OID = 1141 (  date_pli        PGUID 11 f t t 2 f 1082 "1082 23" 100 0 0 100  date_pli - ));
 DESCR("addition");
-DATA(insert OID = 1142 (  date_mii        PGUID 11 f t t 2 f 1082 "1082 23" 100 0 0 100  date_mii - ));
+DATA(insert OID = 1142 (  date_mii        PGUID 11 f t t 2 f 1082 "1082 23" 100 0 0 100  date_mii - ));
 DESCR("subtract");
-DATA(insert OID = 1143 (  time_in         PGUID 11 f t f 1 f 1083 "0" 100 0 0 100  time_in - ));
+DATA(insert OID = 1143 (  time_in         PGUID 11 f t f t 1 f 1083 "0" 100 0 0 100    time_in - ));
 DESCR("(internal)");
-DATA(insert OID = 1144 (  time_out        PGUID 11 f t f 1 f 23 "0" 100 0 0 100  time_out - ));
+DATA(insert OID = 1144 (  time_out        PGUID 11 f t f 1 f 23 "0" 100 0 0 100  time_out - ));
 DESCR("(internal)");
-DATA(insert OID = 1145 (  time_eq         PGUID 11 f t t 2 f 16 "1083 1083" 100 0 0 100  time_eq - ));
+DATA(insert OID = 1145 (  time_eq         PGUID 11 f t t 2 f 16 "1083 1083" 100 0 0 100  time_eq - ));
 DESCR("equal");
 
-DATA(insert OID = 1146 (  circle_add_pt    PGUID 11 f t t 2 f 718 "718 600" 100 0 0 100  circle_add_pt - ));
+DATA(insert OID = 1146 (  circle_add_pt    PGUID 11 f t t 2 f 718 "718 600" 100 0 0 100  circle_add_pt - ));
 DESCR("addition");
-DATA(insert OID = 1147 (  circle_sub_pt    PGUID 11 f t t 2 f 718 "718 600" 100 0 0 100  circle_sub_pt - ));
+DATA(insert OID = 1147 (  circle_sub_pt    PGUID 11 f t t 2 f 718 "718 600" 100 0 0 100  circle_sub_pt - ));
 DESCR("subtract");
-DATA(insert OID = 1148 (  circle_mul_pt    PGUID 11 f t t 2 f 718 "718 600" 100 0 0 100  circle_mul_pt - ));
+DATA(insert OID = 1148 (  circle_mul_pt    PGUID 11 f t t 2 f 718 "718 600" 100 0 0 100  circle_mul_pt - ));
 DESCR("multiply");
-DATA(insert OID = 1149 (  circle_div_pt    PGUID 11 f t t 2 f 718 "718 600" 100 0 0 100  circle_div_pt - ));
+DATA(insert OID = 1149 (  circle_div_pt    PGUID 11 f t t 2 f 718 "718 600" 100 0 0 100  circle_div_pt - ));
 DESCR("divide");
 
-DATA(insert OID = 1150 (  timestamp_in    PGUID 11 f t f 1 f 1184 "0" 100 0 0 100  timestamp_in - ));
+DATA(insert OID = 1150 (  timestamp_in    PGUID 11 f t f t 1 f 1184 "0" 100 0 0 100    timestamp_in - ));
 DESCR("(internal)");
-DATA(insert OID = 1151 (  timestamp_out    PGUID 11 f t f 1 f  23 "0" 100 0 0 100  timestamp_out - ));
+DATA(insert OID = 1151 (  timestamp_out    PGUID 11 f t f t 1 f    23 "0" 100 0 0 100  timestamp_out - ));
 DESCR("(internal)");
-DATA(insert OID = 1152 (  timestamp_eq    PGUID 11 f t f 2 f   16 "1184 1184" 100 0 0 100  timestamp_eq - ));
+DATA(insert OID = 1152 (  timestamp_eq    PGUID 11 f t f t 2 f 16 "1184 1184" 100 0 0 100  timestamp_eq - ));
 DESCR("equal");
-DATA(insert OID = 1153 (  timestamp_ne    PGUID 11 f t f 2 f   16 "1184 1184" 100 0 0 100  timestamp_ne - ));
+DATA(insert OID = 1153 (  timestamp_ne    PGUID 11 f t f t 2 f 16 "1184 1184" 100 0 0 100  timestamp_ne - ));
 DESCR("not equal");
-DATA(insert OID = 1154 (  timestamp_lt    PGUID 11 f t f 2 f   16 "1184 1184" 100 0 0 100  timestamp_lt - ));
+DATA(insert OID = 1154 (  timestamp_lt    PGUID 11 f t f t 2 f 16 "1184 1184" 100 0 0 100  timestamp_lt - ));
 DESCR("less-than");
-DATA(insert OID = 1155 (  timestamp_le    PGUID 11 f t f 2 f   16 "1184 1184" 100 0 0 100  timestamp_le - ));
+DATA(insert OID = 1155 (  timestamp_le    PGUID 11 f t f t 2 f 16 "1184 1184" 100 0 0 100  timestamp_le - ));
 DESCR("less-than-or-equal");
-DATA(insert OID = 1156 (  timestamp_ge    PGUID 11 f t f 2 f   16 "1184 1184" 100 0 0 100  timestamp_ge - ));
+DATA(insert OID = 1156 (  timestamp_ge    PGUID 11 f t f t 2 f 16 "1184 1184" 100 0 0 100  timestamp_ge - ));
 DESCR("greater-than-or-equal");
-DATA(insert OID = 1157 (  timestamp_gt    PGUID 11 f t f 2 f   16 "1184 1184" 100 0 0 100  timestamp_gt - ));
+DATA(insert OID = 1157 (  timestamp_gt    PGUID 11 f t f t 2 f 16 "1184 1184" 100 0 0 100  timestamp_gt - ));
 DESCR("greater-than");
-DATA(insert OID = 1159 (  timezone        PGUID 11 f t f 2 f   25 "25 1184" 100 0 0 100  timestamp_zone - ));
+DATA(insert OID = 1159 (  timezone        PGUID 11 f t f t 2 f 25 "25 1184" 100 0 0 100  timestamp_zone - ));
 DESCR("time zone");
 
-DATA(insert OID = 1160 (  interval_in     PGUID 11 f t f 1 f 1186 "0" 100 0 0 100  interval_in - ));
+DATA(insert OID = 1160 (  interval_in     PGUID 11 f t f t 1 f 1186 "0" 100 0 0 100    interval_in - ));
 DESCR("(internal)");
-DATA(insert OID = 1161 (  interval_out    PGUID 11 f t f 1 f 23 "0" 100 0 0 100  interval_out - ));
+DATA(insert OID = 1161 (  interval_out    PGUID 11 f t f 1 f 23 "0" 100 0 0 100  interval_out - ));
 DESCR("(internal)");
-DATA(insert OID = 1162 (  interval_eq     PGUID 11 f t f 2 f 16 "1186 1186" 100 0 0 100  interval_eq - ));
+DATA(insert OID = 1162 (  interval_eq     PGUID 11 f t f 2 f 16 "1186 1186" 100 0 0 100  interval_eq - ));
 DESCR("equal");
-DATA(insert OID = 1163 (  interval_ne     PGUID 11 f t f 2 f 16 "1186 1186" 100 0 0 100  interval_ne - ));
+DATA(insert OID = 1163 (  interval_ne     PGUID 11 f t f 2 f 16 "1186 1186" 100 0 0 100  interval_ne - ));
 DESCR("not equal");
-DATA(insert OID = 1164 (  interval_lt     PGUID 11 f t f 2 f 16 "1186 1186" 100 0 0 100  interval_lt - ));
+DATA(insert OID = 1164 (  interval_lt     PGUID 11 f t f 2 f 16 "1186 1186" 100 0 0 100  interval_lt - ));
 DESCR("less-than");
-DATA(insert OID = 1165 (  interval_le     PGUID 11 f t f 2 f 16 "1186 1186" 100 0 0 100  interval_le - ));
+DATA(insert OID = 1165 (  interval_le     PGUID 11 f t f 2 f 16 "1186 1186" 100 0 0 100  interval_le - ));
 DESCR("less-than-or-equal");
-DATA(insert OID = 1166 (  interval_ge     PGUID 11 f t f 2 f 16 "1186 1186" 100 0 0 100  interval_ge - ));
+DATA(insert OID = 1166 (  interval_ge     PGUID 11 f t f 2 f 16 "1186 1186" 100 0 0 100  interval_ge - ));
 DESCR("greater-than-or-equal");
-DATA(insert OID = 1167 (  interval_gt     PGUID 11 f t f 2 f 16 "1186 1186" 100 0 0 100  interval_gt - ));
+DATA(insert OID = 1167 (  interval_gt     PGUID 11 f t f 2 f 16 "1186 1186" 100 0 0 100  interval_gt - ));
 DESCR("greater-than");
-DATA(insert OID = 1168 (  interval_um     PGUID 11 f t f 1 f 1186 "1186" 100 0 0 100  interval_um - ));
+DATA(insert OID = 1168 (  interval_um     PGUID 11 f t f 1 f 1186 "1186" 100 0 0 100  interval_um - ));
 DESCR("subtract");
-DATA(insert OID = 1169 (  interval_pl     PGUID 11 f t f 2 f 1186 "1186 1186" 100 0 0 100  interval_pl - ));
+DATA(insert OID = 1169 (  interval_pl     PGUID 11 f t f t 2 f 1186 "1186 1186" 100 0 0 100    interval_pl - ));
 DESCR("addition");
-DATA(insert OID = 1170 (  interval_mi     PGUID 11 f t f 2 f 1186 "1186 1186" 100 0 0 100  interval_mi - ));
+DATA(insert OID = 1170 (  interval_mi     PGUID 11 f t f t 2 f 1186 "1186 1186" 100 0 0 100    interval_mi - ));
 DESCR("subtract");
-DATA(insert OID = 1171 (  date_part           PGUID 11 f t f 2 f  701 "25 1184" 100 0 0 100  timestamp_part - ));
+DATA(insert OID = 1171 (  date_part           PGUID 11 f t f 2 f  701 "25 1184" 100 0 0 100  timestamp_part - ));
 DESCR("extract field from timestamp");
-DATA(insert OID = 1172 (  date_part           PGUID 11 f t f 2 f  701 "25 1186" 100 0 0 100  interval_part - ));
+DATA(insert OID = 1172 (  date_part           PGUID 11 f t f 2 f  701 "25 1186" 100 0 0 100  interval_part - ));
 DESCR("extract field from interval");
 
-DATA(insert OID = 1173 (  timestamp           PGUID 11 f t f 1 f 1184  "702" 100 0 0 100  abstime_timestamp - ));
+DATA(insert OID = 1173 (  timestamp           PGUID 11 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 11 f t f 1 f 1184 "1082" 100 0 0 100  date_timestamp - ));
+DATA(insert OID = 1174 (  timestamp           PGUID 11 f t f 1 f 1184 "1082" 100 0 0 100  date_timestamp - ));
 DESCR("convert date to timestamp");
-DATA(insert OID = 1176 (  timestamp           PGUID 11 f t f 2 f 1184 "1082 1083" 100 0 0 100  datetime_timestamp - ));
+DATA(insert OID = 1176 (  timestamp           PGUID 11 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 11 f t f 1 f 1186  "703" 100 0 0 100  reltime_interval - ));
+DATA(insert OID = 1177 (  interval        PGUID 11 f t f t 1 f 1186    "703" 100 0 0 100  reltime_interval - ));
 DESCR("convert reltime to interval");
-DATA(insert OID = 1178 (  date            PGUID 11 f t f 1 f 1082 "1184" 100 0 0 100  timestamp_date - ));
+DATA(insert OID = 1178 (  date            PGUID 11 f t f 1 f 1082 "1184" 100 0 0 100  timestamp_date - ));
 DESCR("convert timestamp to date");
-DATA(insert OID = 1179 (  date            PGUID 11 f t f 1 f 1082  "702" 100 0 0 100  abstime_date - ));
+DATA(insert OID = 1179 (  date            PGUID 11 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 11 f t f 1 f  702 "1184" 100 0 0 100  timestamp_abstime - ));
+DATA(insert OID = 1180 (  abstime         PGUID 11 f t f 1 f  702 "1184" 100 0 0 100  timestamp_abstime - ));
 DESCR("convert timestamp to abstime");
 
-DATA(insert OID = 1188 (  timestamp_mi     PGUID 11 f t f 2 f 1186 "1184 1184" 100 0 0 100  timestamp_mi - ));
+DATA(insert OID = 1188 (  timestamp_mi     PGUID 11 f t f 2 f 1186 "1184 1184" 100 0 0 100  timestamp_mi - ));
 DESCR("subtract");
-DATA(insert OID = 1189 (  timestamp_pl_span PGUID 11 f t f 2 f 1184 "1184 1186" 100 0 0 100  timestamp_pl_span - ));
+DATA(insert OID = 1189 (  timestamp_pl_span PGUID 11 f t f 2 f 1184 "1184 1186" 100 0 0 100  timestamp_pl_span - ));
 DESCR("plus");
-DATA(insert OID = 1190 (  timestamp_mi_span PGUID 11 f t f 2 f 1184 "1184 1186" 100 0 0 100  timestamp_mi_span - ));
+DATA(insert OID = 1190 (  timestamp_mi_span PGUID 11 f t f 2 f 1184 "1184 1186" 100 0 0 100  timestamp_mi_span - ));
 DESCR("minus");
-DATA(insert OID = 1191 (  timestamp            PGUID 11 f t f 1 f 1184 "25" 100 0 0 100  text_timestamp - ));
+DATA(insert OID = 1191 (  timestamp            PGUID 11 f t f 1 f 1184 "25" 100 0 0 100  text_timestamp - ));
 DESCR("convert text to timestamp");
-DATA(insert OID = 1192 (  text             PGUID 11 f t f 1 f   25 "1184" 100 0 0 100  timestamp_text - ));
+DATA(insert OID = 1192 (  text             PGUID 11 f t f t 1 f     25 "1184" 100 0 0 100  timestamp_text - ));
 DESCR("convert timestamp to text");
-DATA(insert OID = 1193 (  text             PGUID 11 f t f 1 f   25 "1186" 100 0 0 100  interval_text - ));
+DATA(insert OID = 1193 (  text             PGUID 11 f t f t 1 f     25 "1186" 100 0 0 100  interval_text - ));
 DESCR("convert interval to text");
-DATA(insert OID = 1194 (  reltime          PGUID 11 f t f 1 f  703 "1186" 100 0 0 100  interval_reltime - ));
+DATA(insert OID = 1194 (  reltime          PGUID 11 f t f t 1 f    703 "1186" 100 0 0 100  interval_reltime - ));
 DESCR("convert interval to reltime");
-DATA(insert OID = 1195 (  timestamp_smaller PGUID 11 f t f 2 f 1184 "1184 1184" 100 0 0 100  timestamp_smaller - ));
+DATA(insert OID = 1195 (  timestamp_smaller PGUID 11 f t f 2 f 1184 "1184 1184" 100 0 0 100  timestamp_smaller - ));
 DESCR("smaller of two");
-DATA(insert OID = 1196 (  timestamp_larger PGUID 11 f t f 2 f 1184 "1184 1184" 100 0 0 100  timestamp_larger - ));
+DATA(insert OID = 1196 (  timestamp_larger PGUID 11 f t f 2 f 1184 "1184 1184" 100 0 0 100  timestamp_larger - ));
 DESCR("larger of two");
-DATA(insert OID = 1197 (  interval_smaller PGUID 11 f t f 2 f 1186 "1186 1186" 100 0 0 100  interval_smaller - ));
+DATA(insert OID = 1197 (  interval_smaller PGUID 11 f t f 2 f 1186 "1186 1186" 100 0 0 100  interval_smaller - ));
 DESCR("smaller of two");
-DATA(insert OID = 1198 (  interval_larger  PGUID 11 f t f 2 f 1186 "1186 1186" 100 0 0 100  interval_larger - ));
+DATA(insert OID = 1198 (  interval_larger  PGUID 11 f t f 2 f 1186 "1186 1186" 100 0 0 100  interval_larger - ));
 DESCR("larger of two");
-DATA(insert OID = 1199 (  age              PGUID 11 f t f 2 f 1186 "1184 1184" 100 0 0 100  timestamp_age - ));
+DATA(insert OID = 1199 (  age              PGUID 11 f t f 2 f 1186 "1184 1184" 100 0 0 100  timestamp_age - ));
 DESCR("date difference preserving months and years");
 
 /* OIDS 1200 - 1299 */
 
-DATA(insert OID = 1200 (  reltime         PGUID 11 f t t 1 f  703 "23" 100 0 0 100  int4reltime - ));
+DATA(insert OID = 1200 (  reltime         PGUID 11 f t t 1 f  703 "23" 100 0 0 100  int4reltime - ));
 DESCR("convert int4 to reltime");
 
-DATA(insert OID = 1217 (  date_trunc      PGUID 11 f t f 2 f 1184 "25 1184" 100 0 0 100  timestamp_trunc - ));
+DATA(insert OID = 1217 (  date_trunc      PGUID 11 f t f 2 f 1184 "25 1184" 100 0 0 100  timestamp_trunc - ));
 DESCR("truncate timestamp to specified units");
-DATA(insert OID = 1218 (  date_trunc      PGUID 11 f t f 2 f 1186 "25 1186" 100 0 0 100  interval_trunc - ));
+DATA(insert OID = 1218 (  date_trunc      PGUID 11 f t f 2 f 1186 "25 1186" 100 0 0 100  interval_trunc - ));
 DESCR("truncate interval to specified units");
 
-DATA(insert OID = 1230 (  int8abs         PGUID 11 f t t 1 f 20 "20" 100 0 0 100  int8abs - ));
+DATA(insert OID = 1230 (  int8abs         PGUID 11 f t t 1 f 20 "20" 100 0 0 100  int8abs - ));
 DESCR("absolute value");
 
-DATA(insert OID = 1236 (  int8larger      PGUID 11 f t t 2 f 20 "20 20" 100 0 0 100  int8larger - ));
+DATA(insert OID = 1236 (  int8larger      PGUID 11 f t t 2 f 20 "20 20" 100 0 0 100  int8larger - ));
 DESCR("larger of two");
-DATA(insert OID = 1237 (  int8smaller     PGUID 11 f t t 2 f 20 "20 20" 100 0 0 100  int8smaller - ));
+DATA(insert OID = 1237 (  int8smaller     PGUID 11 f t t 2 f 20 "20 20" 100 0 0 100  int8smaller - ));
 DESCR("smaller of two");
 
-DATA(insert OID = 1238 (  texticregexeq    PGUID 11 f t t 2 f 16 "25 25" 100 0 1 0 texticregexeq - ));
+DATA(insert OID = 1238 (  texticregexeq    PGUID 11 f t t t 2 f 16 "25 25" 100 0 1 0   texticregexeq - ));
 DESCR("matches regex., case-insensitive");
-DATA(insert OID = 1239 (  texticregexne    PGUID 11 f t t 2 f 16 "25 25" 100 0 1 0 texticregexne - ));
+DATA(insert OID = 1239 (  texticregexne    PGUID 11 f t t t 2 f 16 "25 25" 100 0 1 0   texticregexne - ));
 DESCR("does not match regex., case-insensitive");
-DATA(insert OID = 1240 (  nameicregexeq    PGUID 11 f t t 2 f 16 "19 25" 100 0 0 100  nameicregexeq - ));
+DATA(insert OID = 1240 (  nameicregexeq    PGUID 11 f t t 2 f 16 "19 25" 100 0 0 100  nameicregexeq - ));
 DESCR("matches regex., case-insensitive");
-DATA(insert OID = 1241 (  nameicregexne    PGUID 11 f t t 2 f 16 "19 25" 100 0 0 100  nameicregexne - ));
+DATA(insert OID = 1241 (  nameicregexne    PGUID 11 f 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 11 f t t 1 f 23 "23" 100 0 0 100  int4abs - ));
+DATA(insert OID = 1251 (  int4abs         PGUID 11 f t t 1 f 23 "23" 100 0 0 100  int4abs - ));
 DESCR("absolute value");
-DATA(insert OID = 1253 (  int2abs         PGUID 11 f t t 1 f 21 "21" 100 0 0 100  int2abs - ));
+DATA(insert OID = 1253 (  int2abs         PGUID 11 f t t 1 f 21 "21" 100 0 0 100  int2abs - ));
 DESCR("absolute value");
 
-DATA(insert OID = 1263 (  interval        PGUID 11 f t f 1 f 1186 "25" 100 0 0 100  text_interval - ));
+DATA(insert OID = 1263 (  interval        PGUID 11 f t f 1 f 1186 "25" 100 0 0 100  text_interval - ));
 DESCR("convert text to interval");
 
-DATA(insert OID = 1271 (  overlaps        PGUID 11 f t t 4 f 16 "1266 1266 1266 1266" 100 0 1 0  overlaps_timetz - ));
+DATA(insert OID = 1271 (  overlaps        PGUID 11 f t t 4 f 16 "1266 1266 1266 1266" 100 0 1 0  overlaps_timetz - ));
 DESCR("SQL92 interval comparison");
-DATA(insert OID = 1272 (  datetime_pl     PGUID 11 f t f 2 f 1184 "1082 1083" 100 0 0 100  datetime_timestamp - ));
+DATA(insert OID = 1272 (  datetime_pl     PGUID 11 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 = 1274 (  int84pl         PGUID 11 f t t 2 f 20 "20 23" 100 0 0 100  int84pl - ));
+DATA(insert OID = 1274 (  int84pl         PGUID 11 f t t 2 f 20 "20 23" 100 0 0 100  int84pl - ));
 DESCR("addition");
-DATA(insert OID = 1275 (  int84mi         PGUID 11 f t t 2 f 20 "20 23" 100 0 0 100  int84mi - ));
+DATA(insert OID = 1275 (  int84mi         PGUID 11 f t t 2 f 20 "20 23" 100 0 0 100  int84mi - ));
 DESCR("subtraction");
-DATA(insert OID = 1276 (  int84mul        PGUID 11 f t t 2 f 20 "20 23" 100 0 0 100  int84mul - ));
+DATA(insert OID = 1276 (  int84mul        PGUID 11 f t t 2 f 20 "20 23" 100 0 0 100  int84mul - ));
 DESCR("multiply");
-DATA(insert OID = 1277 (  int84div        PGUID 11 f t t 2 f 20 "20 23" 100 0 0 100  int84div - ));
+DATA(insert OID = 1277 (  int84div        PGUID 11 f t t 2 f 20 "20 23" 100 0 0 100  int84div - ));
 DESCR("divide");
-DATA(insert OID = 1278 (  int48pl         PGUID 11 f t t 2 f 20 "23 20" 100 0 0 100  int48pl - ));
+DATA(insert OID = 1278 (  int48pl         PGUID 11 f t t 2 f 20 "23 20" 100 0 0 100  int48pl - ));
 DESCR("addition");
-DATA(insert OID = 1279 (  int48mi         PGUID 11 f t t 2 f 20 "23 20" 100 0 0 100  int48mi - ));
+DATA(insert OID = 1279 (  int48mi         PGUID 11 f t t 2 f 20 "23 20" 100 0 0 100  int48mi - ));
 DESCR("subtraction");
-DATA(insert OID = 1280 (  int48mul        PGUID 11 f t t 2 f 20 "23 20" 100 0 0 100  int48mul - ));
+DATA(insert OID = 1280 (  int48mul        PGUID 11 f t t 2 f 20 "23 20" 100 0 0 100  int48mul - ));
 DESCR("multiply");
-DATA(insert OID = 1281 (  int48div        PGUID 11 f t t 2 f 20 "23 20" 100 0 0 100  int48div - ));
+DATA(insert OID = 1281 (  int48div        PGUID 11 f t t 2 f 20 "23 20" 100 0 0 100  int48div - ));
 DESCR("divide");
 
-DATA(insert OID = 1288 (  text            PGUID 11 f t t 1 f 25 "20" 100 0 0 100  int8_text - ));
+DATA(insert OID = 1288 (  text            PGUID 11 f t t 1 f 25 "20" 100 0 0 100  int8_text - ));
 DESCR("convert int8 to text");
-DATA(insert OID = 1289 (  int8            PGUID 11 f t t 1 f 20 "25" 100 0 0 100  text_int8 - ));
+DATA(insert OID = 1289 (  int8            PGUID 11 f t t 1 f 20 "25" 100 0 0 100  text_int8 - ));
 DESCR("convert text to int8");
 
-DATA(insert OID = 1290 (  _bpchar         PGUID 11 f t t 2 f 1014 "1014 23" 100 0 0 100  _bpchar - ));
+DATA(insert OID = 1290 (  _bpchar         PGUID 11 f t t 2 f 1014 "1014 23" 100 0 0 100  _bpchar - ));
 DESCR("truncate _char()");
-DATA(insert OID = 1291 (  _varchar        PGUID 11 f t t 2 f 1015 "1015 23" 100 0 0 100  _varchar - ));
+DATA(insert OID = 1291 (  _varchar        PGUID 11 f t t 2 f 1015 "1015 23" 100 0 0 100  _varchar - ));
 DESCR("truncate _varchar()");
 
-DATA(insert OID = 1292 ( tideq            PGUID 11 f t f 2 f 16 "27 27" 100 0 0 100  tideq - ));
+DATA(insert OID = 1292 ( tideq            PGUID 11 f t f 2 f 16 "27 27" 100 0 0 100  tideq - ));
 DESCR("equal");
-DATA(insert OID = 1293 ( currtid          PGUID 11 f t f 2 f 27 "26 27" 100 0 0 100  currtid_byreloid - ));
+DATA(insert OID = 1293 ( currtid          PGUID 11 f t f 2 f 27 "26 27" 100 0 0 100  currtid_byreloid - ));
 DESCR("latest tid of a tuple");
-DATA(insert OID = 1294 ( currtid2         PGUID 11 f t f 2 f 27 "25 27" 100 0 0 100  currtid_byrelname - ));
+DATA(insert OID = 1294 ( currtid2         PGUID 11 f t f 2 f 27 "25 27" 100 0 0 100  currtid_byrelname - ));
 DESCR("latest tid of a tuple");
 
-DATA(insert OID = 1296 (  timedate_pl     PGUID 14 f t f 2 f 1184 "1083 1082" 100 0 0 100  "select datetime_pl($2, $1)" - ));
+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)" - ));
 DESCR("convert time and date to timestamp");
-DATA(insert OID = 1297 (  datetimetz_pl    PGUID 11 f t f 2 f 1184 "1082 1266" 100 0 0 100 datetimetz_timestamp - ));
+DATA(insert OID = 1297 (  datetimetz_pl    PGUID 11 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 2 f 1184 "1266 1082" 100 0 0 100 "select datetimetz_pl($2, $1)" - ));
+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)" - ));
 DESCR("convert time with time zone and date to timestamp");
-DATA(insert OID = 1299 (  now             PGUID 11 f t f 0 f 1184 "0" 100 0 0 100  now - ));
+DATA(insert OID = 1299 (  now             PGUID 11 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 11 f t f 5 f 701 "26 26 21 0 23" 100 0 0 100  positionsel - ));
+DATA(insert OID = 1300 (  positionsel         PGUID 11 f t f 5 f 701 "26 26 21 0 23" 100 0 0 100  positionsel - ));
 DESCR("restriction selectivity for position-comparison operators");
-DATA(insert OID = 1301 (  positionjoinsel     PGUID 11 f t f 5 f 701 "26 26 21 26 21" 100 0 0 100  positionjoinsel - ));
+DATA(insert OID = 1301 (  positionjoinsel     PGUID 11 f t f t 5 f 701 "26 26 21 26 21" 100 0 0 100    positionjoinsel - ));
 DESCR("join selectivity for position-comparison operators");
-DATA(insert OID = 1302 (  contsel         PGUID 11 f t f 5 f 701 "26 26 21 0 23" 100 0 0 100  contsel - ));
+DATA(insert OID = 1302 (  contsel         PGUID 11 f t f 5 f 701 "26 26 21 0 23" 100 0 0 100  contsel - ));
 DESCR("restriction selectivity for containment comparison operators");
-DATA(insert OID = 1303 (  contjoinsel     PGUID 11 f t f 5 f 701 "26 26 21 26 21" 100 0 0 100  contjoinsel - ));
+DATA(insert OID = 1303 (  contjoinsel     PGUID 11 f t f t 5 f 701 "26 26 21 26 21" 100 0 0 100    contjoinsel - ));
 DESCR("join selectivity for containment comparison operators");
 
-DATA(insert OID = 1304 ( overlaps           PGUID 11 f t t 4 f 16 "1184 1184 1184 1184" 100 0 1 0  overlaps_timestamp - ));
+DATA(insert OID = 1304 ( overlaps           PGUID 11 f t t t 4 f 16 "1184 1184 1184 1184" 100 0 1 0    overlaps_timestamp - ));
 DESCR("SQL92 interval comparison");
-DATA(insert OID = 1305 ( overlaps           PGUID 14 f t t 4 f 16 "1184 1186 1184 1186" 100 0 1 0  "select overlaps($1, ($1 + $2), $3, ($3 + $4))" - ));
+DATA(insert OID = 1305 ( overlaps           PGUID 14 f t t t 4 f 16 "1184 1186 1184 1186" 100 0 1 0    "select overlaps($1, ($1 + $2), $3, ($3 + $4))" - ));
 DESCR("SQL92 interval comparison");
-DATA(insert OID = 1306 ( overlaps           PGUID 14 f t t 4 f 16 "1184 1184 1184 1186" 100 0 1 0  "select overlaps($1, $2, $3, ($3 + $4))" - ));
+DATA(insert OID = 1306 ( overlaps           PGUID 14 f t t t 4 f 16 "1184 1184 1184 1186" 100 0 1 0    "select overlaps($1, $2, $3, ($3 + $4))" - ));
 DESCR("SQL92 interval comparison");
-DATA(insert OID = 1307 ( overlaps           PGUID 14 f t t 4 f 16 "1184 1186 1184 1184" 100 0 1 0  "select overlaps($1, ($1 + $2), $3, $4)" - ));
+DATA(insert OID = 1307 ( overlaps           PGUID 14 f t t t 4 f 16 "1184 1186 1184 1184" 100 0 1 0    "select overlaps($1, ($1 + $2), $3, $4)" - ));
 DESCR("SQL92 interval comparison");
 
-DATA(insert OID = 1308 ( overlaps           PGUID 11 f t t 4 f 16 "1083 1083 1083 1083" 100 0 1 0  overlaps_time - ));
+DATA(insert OID = 1308 ( overlaps           PGUID 11 f t t t 4 f 16 "1083 1083 1083 1083" 100 0 1 0    overlaps_time - ));
 DESCR("SQL92 interval comparison");
-DATA(insert OID = 1309 ( overlaps           PGUID 14 f t t 4 f 16 "1083 1186 1083 1186" 100 0 1 0  "select overlaps($1, ($1 + $2), $3, ($3 + $4))" - ));
+DATA(insert OID = 1309 ( overlaps           PGUID 14 f t t t 4 f 16 "1083 1186 1083 1186" 100 0 1 0    "select overlaps($1, ($1 + $2), $3, ($3 + $4))" - ));
 DESCR("SQL92 interval comparison");
-DATA(insert OID = 1310 ( overlaps           PGUID 14 f t t 4 f 16 "1083 1083 1083 1186" 100 0 1 0  "select overlaps($1, $2, $3, ($3 + $4))" - ));
+DATA(insert OID = 1310 ( overlaps           PGUID 14 f t t t 4 f 16 "1083 1083 1083 1186" 100 0 1 0    "select overlaps($1, $2, $3, ($3 + $4))" - ));
 DESCR("SQL92 interval comparison");
-DATA(insert OID = 1311 ( overlaps           PGUID 14 f t t 4 f 16 "1083 1186 1083 1083" 100 0 1 0  "select overlaps($1, ($1 + $2), $3, $4)" - ));
+DATA(insert OID = 1311 ( overlaps           PGUID 14 f t t t 4 f 16 "1083 1186 1083 1083" 100 0 1 0    "select overlaps($1, ($1 + $2), $3, $4)" - ));
 DESCR("SQL92 interval comparison");
 
-DATA(insert OID = 1314 (  timestamp_cmp         PGUID 11 f t f 2 f   23 "1184 1184" 100 0 0 100  timestamp_cmp - ));
+DATA(insert OID = 1314 (  timestamp_cmp         PGUID 11 f t f 2 f   23 "1184 1184" 100 0 0 100  timestamp_cmp - ));
 DESCR("less-equal-greater");
-DATA(insert OID = 1315 (  interval_cmp      PGUID 11 f t f 2 f   23 "1186 1186" 100 0 0 100  interval_cmp - ));
+DATA(insert OID = 1315 (  interval_cmp      PGUID 11 f t f 2 f   23 "1186 1186" 100 0 0 100  interval_cmp - ));
 DESCR("less-equal-greater");
-DATA(insert OID = 1316 (  time              PGUID 11 f t f 1 f 1083 "1184" 100 0 0 100  timestamp_time - ));
+DATA(insert OID = 1316 (  time              PGUID 11 f t f 1 f 1083 "1184" 100 0 0 100  timestamp_time - ));
 DESCR("convert timestamp to time");
 
-DATA(insert OID = 1317 (  length            PGUID 11 f t t 1 f   23 "25" 100 0 1 0  textlen - ));
+DATA(insert OID = 1317 (  length            PGUID 11 f t t 1 f   23 "25" 100 0 1 0  textlen - ));
 DESCR("length");
-DATA(insert OID = 1318 (  length            PGUID 11 f t t 1 f   23 "1042" 100 0 0 100  bpcharlen - ));
+DATA(insert OID = 1318 (  length            PGUID 11 f t t 1 f   23 "1042" 100 0 0 100  bpcharlen - ));
 DESCR("character length");
-DATA(insert OID = 1319 (  length            PGUID 11 f t t 1 f   23 "1043" 100 0 0 100  varcharlen - ));
+DATA(insert OID = 1319 (  length            PGUID 11 f t t 1 f   23 "1043" 100 0 0 100  varcharlen - ));
 DESCR("character length");
 
-DATA(insert OID = 1326 (  interval_div      PGUID 11 f t f 2 f 1186 "1186 701" 100 0 0 100  interval_div - ));
+DATA(insert OID = 1326 (  interval_div      PGUID 11 f t f 2 f 1186 "1186 701" 100 0 0 100  interval_div - ));
 DESCR("divide");
 
-DATA(insert OID = 1339 (  dlog10            PGUID 11 f t t 1 f 701 "701" 100 0 0 100  dlog10 - ));
+DATA(insert OID = 1339 (  dlog10            PGUID 11 f t t 1 f 701 "701" 100 0 0 100  dlog10 - ));
 DESCR("base 10 logarithm");
-DATA(insert OID = 1340 (  log               PGUID 11 f t t 1 f 701 "701" 100 0 0 100  dlog10 - ));
+DATA(insert OID = 1340 (  log               PGUID 11 f t t 1 f 701 "701" 100 0 0 100  dlog10 - ));
 DESCR("base 10 logarithm");
-DATA(insert OID = 1341 (  ln                PGUID 11 f t t 1 f 701 "701" 100 0 0 100  dlog1 - ));
+DATA(insert OID = 1341 (  ln                PGUID 11 f t t 1 f 701 "701" 100 0 0 100  dlog1 - ));
 DESCR("natural logarithm");
-DATA(insert OID = 1342 (  round                 PGUID 11 f t t 1 f 701 "701" 100 0 0 100  dround - ));
+DATA(insert OID = 1342 (  round                 PGUID 11 f t t 1 f 701 "701" 100 0 0 100  dround - ));
 DESCR("round to integral part");
-DATA(insert OID = 1343 (  trunc                 PGUID 11 f t t 1 f 701 "701" 100 0 0 100  dtrunc - ));
+DATA(insert OID = 1343 (  trunc                 PGUID 11 f t t 1 f 701 "701" 100 0 0 100  dtrunc - ));
 DESCR("truncate to integral part");
-DATA(insert OID = 1344 (  sqrt              PGUID 11 f t t 1 f 701 "701" 100 0 0 100  dsqrt - ));
+DATA(insert OID = 1344 (  sqrt              PGUID 11 f t t 1 f 701 "701" 100 0 0 100  dsqrt - ));
 DESCR("square root");
-DATA(insert OID = 1345 (  cbrt              PGUID 11 f t t 1 f 701 "701" 100 0 0 100  dcbrt - ));
+DATA(insert OID = 1345 (  cbrt              PGUID 11 f t t 1 f 701 "701" 100 0 0 100  dcbrt - ));
 DESCR("cube root");
-DATA(insert OID = 1346 (  pow               PGUID 11 f t t 2 f 701 "701 701" 100 0 0 100  dpow - ));
+DATA(insert OID = 1346 (  pow               PGUID 11 f t t 2 f 701 "701 701" 100 0 0 100  dpow - ));
 DESCR("exponentiation");
-DATA(insert OID = 1347 (  exp               PGUID 11 f t t 1 f 701 "701" 100 0 0 100  dexp - ));
+DATA(insert OID = 1347 (  exp               PGUID 11 f t t 1 f 701 "701" 100 0 0 100  dexp - ));
 DESCR("exponential");
 
-DATA(insert OID = 1348 (  obj_description   PGUID 14 f t f 1 f   25 "26" 100 0 0 100  "select description from pg_description where objoid = $1" - ));
+DATA(insert OID = 1348 (  obj_description   PGUID 14 f t f 1 f   25 "26" 100 0 0 100  "select description from pg_description where objoid = $1" - ));
 DESCR("get description for object id");
-DATA(insert OID = 1349 (  oidvectortypes    PGUID 11 f t f 1 f   25 "30" 100 0 0 100  oidvectortypes - ));
+DATA(insert OID = 1349 (  oidvectortypes    PGUID 11 f t f 1 f   25 "30" 100 0 0 100  oidvectortypes - ));
 DESCR("print type names of oidvector field");
 
 
-DATA(insert OID = 1350 (  timetz_in           PGUID 11 f t f 1 f 1266 "0" 100 0 0 100  timetz_in - ));
+DATA(insert OID = 1350 (  timetz_in           PGUID 11 f t f t 1 f 1266 "0" 100 0 0 100    timetz_in - ));
 DESCR("(internal)");
-DATA(insert OID = 1351 (  timetz_out      PGUID 11 f t f 1 f 23 "0" 100 0 0 100  timetz_out - ));
+DATA(insert OID = 1351 (  timetz_out      PGUID 11 f t f 1 f 23 "0" 100 0 0 100  timetz_out - ));
 DESCR("(internal)");
-DATA(insert OID = 1352 (  timetz_eq           PGUID 11 f t t 2 f 16 "1266 1266" 100 0 0 100  timetz_eq - ));
+DATA(insert OID = 1352 (  timetz_eq           PGUID 11 f t t 2 f 16 "1266 1266" 100 0 0 100  timetz_eq - ));
 DESCR("equal");
-DATA(insert OID = 1353 (  timetz_ne           PGUID 11 f t t 2 f 16 "1266 1266" 100 0 0 100  timetz_ne - ));
+DATA(insert OID = 1353 (  timetz_ne           PGUID 11 f t t 2 f 16 "1266 1266" 100 0 0 100  timetz_ne - ));
 DESCR("not equal");
-DATA(insert OID = 1354 (  timetz_lt           PGUID 11 f t t 2 f 16 "1266 1266" 100 0 0 100  timetz_lt - ));
+DATA(insert OID = 1354 (  timetz_lt           PGUID 11 f t t 2 f 16 "1266 1266" 100 0 0 100  timetz_lt - ));
 DESCR("less-than");
-DATA(insert OID = 1355 (  timetz_le           PGUID 11 f t t 2 f 16 "1266 1266" 100 0 0 100  timetz_le - ));
+DATA(insert OID = 1355 (  timetz_le           PGUID 11 f 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 11 f t t 2 f 16 "1266 1266" 100 0 0 100  timetz_ge - ));
+DATA(insert OID = 1356 (  timetz_ge           PGUID 11 f 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 11 f t t 2 f 16 "1266 1266" 100 0 0 100  timetz_gt - ));
+DATA(insert OID = 1357 (  timetz_gt           PGUID 11 f t t 2 f 16 "1266 1266" 100 0 0 100  timetz_gt - ));
 DESCR("greater-than");
-DATA(insert OID = 1358 (  timetz_cmp      PGUID 11 f t t 2 f 23 "1266 1266" 100 0 0 100  timetz_cmp - ));
+DATA(insert OID = 1358 (  timetz_cmp      PGUID 11 f t t 2 f 23 "1266 1266" 100 0 0 100  timetz_cmp - ));
 DESCR("less-equal-greater");
-DATA(insert OID = 1359 (  timestamp           PGUID 11 f t f 2 f 1184 "1082 1266" 100 0 0 100  datetimetz_timestamp - ));
+DATA(insert OID = 1359 (  timestamp           PGUID 11 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 = 1362 (  time              PGUID 14 f t t 1 f 1083 "1083" 100 0 0 100  "select $1" - ));
+DATA(insert OID = 1362 (  time              PGUID 14 f t t 1 f 1083 "1083" 100 0 0 100  "select $1" - ));
 DESCR("convert (noop)");
-DATA(insert OID = 1364 (  time              PGUID 14 f t f 1 f 1083 "702" 100 0 0 100  "select time(timestamp($1))" - ));
+DATA(insert OID = 1364 (  time              PGUID 14 f t f 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 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 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 1 f 1184 "1184" 100 0 0 100  "select $1" - ));
+DATA(insert OID = 1368 (  timestamp             PGUID 14 f t f 1 f 1184 "1184" 100 0 0 100  "select $1" - ));
 DESCR("convert (noop)");
-DATA(insert OID = 1369 (  interval          PGUID 14 f t t 1 f 1186 "1186" 100 0 0 100  "select $1" - ));
+DATA(insert OID = 1369 (  interval          PGUID 14 f t t 1 f 1186 "1186" 100 0 0 100  "select $1" - ));
 DESCR("convert (noop)");
-DATA(insert OID = 1370 (  interval          PGUID 11 f t f 1 f 1186 "1083" 100 0 0 100  time_interval - ));
+DATA(insert OID = 1370 (  interval          PGUID 11 f t f 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 1 f 1082 "1082" 100 0 0 100  "select $1" - ));
+DATA(insert OID = 1371 (  date              PGUID 14 f t t 1 f 1082 "1082" 100 0 0 100  "select $1" - ));
 DESCR("convert (noop)");
-DATA(insert OID = 1372 (  char_length       PGUID 11 f t t 1 f   23   "1042" 100 0 0 100  bpcharlen - ));
+DATA(insert OID = 1372 (  char_length       PGUID 11 f t t 1 f   23   "1042" 100 0 0 100  bpcharlen - ));
 DESCR("character length");
-DATA(insert OID = 1373 (  char_length       PGUID 11 f t t 1 f   23   "1043" 100 0 0 100  varcharlen - ));
+DATA(insert OID = 1373 (  char_length       PGUID 11 f t t 1 f   23   "1043" 100 0 0 100  varcharlen - ));
 DESCR("character length");
 
-DATA(insert OID = 1374 (  octet_length          PGUID 11 f t t 1 f   23   "25" 100 0 0 100  textoctetlen - ));
+DATA(insert OID = 1374 (  octet_length          PGUID 11 f t t 1 f   23   "25" 100 0 0 100  textoctetlen - ));
 DESCR("octet length");
-DATA(insert OID = 1375 (  octet_length          PGUID 11 f t t 1 f   23   "1042" 100 0 0 100  bpcharoctetlen - ));
+DATA(insert OID = 1375 (  octet_length          PGUID 11 f t t 1 f   23   "1042" 100 0 0 100  bpcharoctetlen - ));
 DESCR("octet length");
-DATA(insert OID = 1376 (  octet_length          PGUID 11 f t t 1 f   23   "1043" 100 0 0 100  varcharoctetlen - ));
+DATA(insert OID = 1376 (  octet_length          PGUID 11 f t t 1 f   23   "1043" 100 0 0 100  varcharoctetlen - ));
 DESCR("octet length");
 
-DATA(insert OID = 1377 (  time_larger     PGUID 11 f t t 2 f 1083 "1083 1083" 100 0 0 100  time_larger - ));
+DATA(insert OID = 1377 (  time_larger     PGUID 11 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 11 f t t 2 f 1083 "1083 1083" 100 0 0 100  time_smaller - ));
+DATA(insert OID = 1378 (  time_smaller    PGUID 11 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 11 f t t 2 f 1083 "1266 1266" 100 0 0 100 timetz_larger - ));
+DATA(insert OID = 1379 (  timetz_larger    PGUID 11 f t t t 2 f 1083 "1266 1266" 100 0 0 100   timetz_larger - ));
 DESCR("larger of two");
-DATA(insert OID = 1380 (  timetz_smaller   PGUID 11 f t t 2 f 1083 "1266 1266" 100 0 0 100 timetz_smaller - ));
+DATA(insert OID = 1380 (  timetz_smaller   PGUID 11 f t t t 2 f 1083 "1266 1266" 100 0 0 100   timetz_smaller - ));
 DESCR("smaller of two");
 
-DATA(insert OID = 1381 (  char_length     PGUID 11 f t t 1 f 23 "25" 100 0 1 0  textlen - ));
+DATA(insert OID = 1381 (  char_length     PGUID 11 f t t 1 f 23 "25" 100 0 1 0  textlen - ));
 DESCR("length");
 
-DATA(insert OID = 1382 (  date_part    PGUID 14 f t f 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 2 f  701 "25 702" 100 0 0 100  "select date_part($1, timestamp($2))" - ));
 DESCR("extract field from abstime");
-DATA(insert OID = 1383 (  date_part    PGUID 14 f t f 2 f  701 "25 703" 100 0 0 100  "select date_part($1, interval($2))" - ));
+DATA(insert OID = 1383 (  date_part    PGUID 14 f t f 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 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 f 2 f  701 "25 1082" 100 0 0 100  "select date_part($1, timestamp($2))" - ));
 DESCR("extract field from date");
-DATA(insert OID = 1385 (  date_part    PGUID 14 f t f 2 f  701 "25 1083" 100 0 0 100  "select date_part($1, interval($2))" - ));
+DATA(insert OID = 1385 (  date_part    PGUID 14 f t f 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 1 f 1186 "1184" 100 0 0 100  "select age(\'today\', $1)" - ));
+DATA(insert OID = 1386 (  age         PGUID 14 f t f 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 1 f 1266 "1266" 100 0 0 100  "select $1" - ));
+DATA(insert OID = 1387 (  timetz          PGUID 14 f t f 1 f 1266 "1266" 100 0 0 100  "select $1" - ));
 DESCR("noop conversion");
-DATA(insert OID = 1388 (  timetz          PGUID 11 f t f 1 f 1266 "1184" 100 0 0 100  timestamp_timetz - ));
+DATA(insert OID = 1388 (  timetz          PGUID 11 f t f 1 f 1266 "1184" 100 0 0 100  timestamp_timetz - ));
 DESCR("convert timestamp to time");
 
-DATA(insert OID = 1389 (  isfinite    PGUID 11 f t f 1 f   16 "1184" 100 0 0 100  timestamp_finite - ));
+DATA(insert OID = 1389 (  isfinite    PGUID 11 f t f t 1 f 16 "1184" 100 0 0 100  timestamp_finite - ));
 DESCR("boolean test");
-DATA(insert OID = 1390 (  isfinite    PGUID 11 f t f 1 f   16 "1186" 100 0 0 100  interval_finite - ));
+DATA(insert OID = 1390 (  isfinite    PGUID 11 f t f t 1 f 16 "1186" 100 0 0 100  interval_finite - ));
 DESCR("boolean test");
 
 
-DATA(insert OID = 1391 (  factorial           PGUID 11 f t t 1 f 23 "21" 100 0 0 100  int2fac - ));
+DATA(insert OID = 1391 (  factorial           PGUID 11 f t t 1 f 23 "21" 100 0 0 100  int2fac - ));
 DESCR("factorial");
-DATA(insert OID = 1392 (  factorial           PGUID 11 f t t 1 f 23 "23" 100 0 0 100  int4fac - ));
+DATA(insert OID = 1392 (  factorial           PGUID 11 f t t 1 f 23 "23" 100 0 0 100  int4fac - ));
 DESCR("factorial");
-DATA(insert OID = 1393 (  factorial           PGUID 11 f t t 1 f 20 "20" 100 0 0 100  int8fac - ));
+DATA(insert OID = 1393 (  factorial           PGUID 11 f t t 1 f 20 "20" 100 0 0 100  int8fac - ));
 DESCR("factorial");
-DATA(insert OID = 1394 (  abs             PGUID 11 f t t 1 f 700 "700" 100 0 0 100  float4abs - ));
+DATA(insert OID = 1394 (  abs             PGUID 11 f t t 1 f 700 "700" 100 0 0 100  float4abs - ));
 DESCR("absolute value");
-DATA(insert OID = 1395 (  abs             PGUID 11 f t t 1 f 701 "701" 100 0 0 100  float8abs - ));
+DATA(insert OID = 1395 (  abs             PGUID 11 f t t 1 f 701 "701" 100 0 0 100  float8abs - ));
 DESCR("absolute value");
-DATA(insert OID = 1396 (  abs             PGUID 11 f t t 1 f 20 "20" 100 0 0 100  int8abs - ));
+DATA(insert OID = 1396 (  abs             PGUID 11 f t t 1 f 20 "20" 100 0 0 100  int8abs - ));
 DESCR("absolute value");
-DATA(insert OID = 1397 (  abs             PGUID 11 f t t 1 f 23 "23" 100 0 0 100  int4abs - ));
+DATA(insert OID = 1397 (  abs             PGUID 11 f t t 1 f 23 "23" 100 0 0 100  int4abs - ));
 DESCR("absolute value");
-DATA(insert OID = 1398 (  abs             PGUID 11 f t t 1 f 21 "21" 100 0 0 100  int2abs - ));
+DATA(insert OID = 1398 (  abs             PGUID 11 f t t 1 f 21 "21" 100 0 0 100  int2abs - ));
 DESCR("absolute value");
 
 /* OIDS 1400 - 1499 */
 
-DATA(insert OID = 1400 (  name        PGUID 11 f t t 1 f   19 "1043" 100 0 0 100  text_name - ));
+DATA(insert OID = 1400 (  name        PGUID 11 f t t t 1 f 19 "1043" 100 0 0 100  text_name - ));
 DESCR("convert varchar to name");
-DATA(insert OID = 1401 (  varchar     PGUID 11 f t t 1 f 1043 "19" 100 0 0 100  name_text - ));
+DATA(insert OID = 1401 (  varchar     PGUID 11 f t t 1 f 1043 "19" 100 0 0 100  name_text - ));
 DESCR("convert convert name to varchar");
 
-DATA(insert OID = 1402 (  float4      PGUID 14 f t t 1 f  700  "700" 100 0 0 100  "select $1" - ));
+DATA(insert OID = 1402 (  float4      PGUID 14 f t t t 1 f  700    "700" 100 0 0 100  "select $1" - ));
 DESCR("convert float4 to float4 (no-op)");
-DATA(insert OID = 1403 (  int2        PGUID 14 f t t 1 f   21   "21" 100 0 0 100  "select $1" - ));
+DATA(insert OID = 1403 (  int2        PGUID 14 f t t t 1 f 21   "21" 100 0 0 100  "select $1" - ));
 DESCR("convert (no-op)");
-DATA(insert OID = 1404 (  float8      PGUID 14 f t t 1 f  701  "701" 100 0 0 100  "select $1" - ));
+DATA(insert OID = 1404 (  float8      PGUID 14 f t t t 1 f  701    "701" 100 0 0 100  "select $1" - ));
 DESCR("convert (no-op)");
-DATA(insert OID = 1405 (  int4        PGUID 14 f t t 1 f   23   "23" 100 0 0 100  "select $1" - ));
+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 11 f t t 2 f  16 "600 600" 100 0 0 100    point_vert - ));
+DATA(insert OID = 1406 (  isvertical       PGUID 11 f t t t 2 f    16 "600 600" 100 0 0 100    point_vert - ));
 DESCR("vertical?");
-DATA(insert OID = 1407 (  ishorizontal     PGUID 11 f t t 2 f  16 "600 600" 100 0 0 100    point_horiz - ));
+DATA(insert OID = 1407 (  ishorizontal     PGUID 11 f t t t 2 f    16 "600 600" 100 0 0 100    point_horiz - ));
 DESCR("horizontal?");
-DATA(insert OID = 1408 (  isparallel       PGUID 11 f t t 2 f  16 "601 601" 100 0 0 100    lseg_parallel - ));
+DATA(insert OID = 1408 (  isparallel       PGUID 11 f t t t 2 f    16 "601 601" 100 0 0 100    lseg_parallel - ));
 DESCR("parallel?");
-DATA(insert OID = 1409 (  isperp           PGUID 11 f t t 2 f  16 "601 601" 100 0 0 100    lseg_perp - ));
+DATA(insert OID = 1409 (  isperp           PGUID 11 f t t t 2 f    16 "601 601" 100 0 0 100    lseg_perp - ));
 DESCR("perpendicular?");
-DATA(insert OID = 1410 (  isvertical       PGUID 11 f t t 1 f  16 "601" 100 0 0 100    lseg_vertical - ));
+DATA(insert OID = 1410 (  isvertical       PGUID 11 f t t t 1 f    16 "601" 100 0 0 100    lseg_vertical - ));
 DESCR("vertical?");
-DATA(insert OID = 1411 (  ishorizontal     PGUID 11 f t t 1 f  16 "601" 100 0 0 100    lseg_horizontal - ));
+DATA(insert OID = 1411 (  ishorizontal     PGUID 11 f t t t 1 f    16 "601" 100 0 0 100    lseg_horizontal - ));
 DESCR("horizontal?");
-DATA(insert OID = 1412 (  isparallel       PGUID 11 f t t 2 f  16 "628 628" 100 0 0 100  line_parallel - ));
+DATA(insert OID = 1412 (  isparallel       PGUID 11 f t t t 2 f    16 "628 628" 100 0 0 100  line_parallel - ));
 DESCR("lines parallel?");
-DATA(insert OID = 1413 (  isperp           PGUID 11 f t t 2 f  16 "628 628" 100 0 0 100  line_perp - ));
+DATA(insert OID = 1413 (  isperp           PGUID 11 f t t t 2 f    16 "628 628" 100 0 0 100  line_perp - ));
 DESCR("lines perpendicular?");
-DATA(insert OID = 1414 (  isvertical       PGUID 11 f t t 1 f  16 "628" 100 0 0 100  line_vertical - ));
+DATA(insert OID = 1414 (  isvertical       PGUID 11 f t t t 1 f    16 "628" 100 0 0 100  line_vertical - ));
 DESCR("lines vertical?");
-DATA(insert OID = 1415 (  ishorizontal     PGUID 11 f t t 1 f  16 "628" 100 0 0 100  line_horizontal - ));
+DATA(insert OID = 1415 (  ishorizontal     PGUID 11 f t t t 1 f    16 "628" 100 0 0 100  line_horizontal - ));
 DESCR("lines horizontal?");
-DATA(insert OID = 1416 (  point                PGUID 11 f t t 1 f 600 "718" 100 0 1 0  circle_center - ));
+DATA(insert OID = 1416 (  point                PGUID 11 f t t t 1 f 600 "718" 100 0 1 0    circle_center - ));
 DESCR("center of");
 
-DATA(insert OID = 1421 (  box              PGUID 11 f t t 2 f 603 "600 600" 100 0 0 100  box - ));
+DATA(insert OID = 1421 (  box              PGUID 11 f t t 2 f 603 "600 600" 100 0 0 100  box - ));
 DESCR("convert points to box");
-DATA(insert OID = 1422 (  box_add          PGUID 11 f t t 2 f 603 "603 600" 100 0 0 100  box_add - ));
+DATA(insert OID = 1422 (  box_add          PGUID 11 f 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 11 f t t 2 f 603 "603 600" 100 0 0 100  box_sub - ));
+DATA(insert OID = 1423 (  box_sub          PGUID 11 f 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 11 f t t 2 f 603 "603 600" 100 0 0 100  box_mul - ));
+DATA(insert OID = 1424 (  box_mul          PGUID 11 f 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 11 f t t 2 f 603 "603 600" 100 0 0 100  box_div - ));
+DATA(insert OID = 1425 (  box_div          PGUID 11 f 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 2 f  16 "602 600" 100 0 0 100  "select on_ppath($2, $1)" - ));
+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?");
-DATA(insert OID = 1428 (  poly_contain_pt  PGUID 11 f t t 2 f  16 "604 600" 100 0 0 100  poly_contain_pt - ));
+DATA(insert OID = 1428 (  poly_contain_pt  PGUID 11 f t t t 2 f    16 "604 600" 100 0 0 100  poly_contain_pt - ));
 DESCR("polygon contains point?");
-DATA(insert OID = 1429 (  pt_contained_poly PGUID 11 f t t 2 f 16 "600 604" 100 0 0 100  pt_contained_poly - ));
+DATA(insert OID = 1429 (  pt_contained_poly PGUID 11 f t t t 2 f   16 "600 604" 100 0 0 100  pt_contained_poly - ));
 DESCR("point contained by polygon?");
 
-DATA(insert OID = 1430 (  isclosed         PGUID 11 f t t 1 f  16 "602" 100 0 0 100  path_isclosed - ));
+DATA(insert OID = 1430 (  isclosed         PGUID 11 f t t t 1 f    16 "602" 100 0 0 100  path_isclosed - ));
 DESCR("path closed?");
-DATA(insert OID = 1431 (  isopen           PGUID 11 f t t 1 f  16 "602" 100 0 0 100  path_isopen - ));
+DATA(insert OID = 1431 (  isopen           PGUID 11 f t t t 1 f    16 "602" 100 0 0 100  path_isopen - ));
 DESCR("path open?");
-DATA(insert OID = 1432 (  path_npoints     PGUID 11 f t t 1 f  23 "602" 100 0 0 100  path_npoints - ));
+DATA(insert OID = 1432 (  path_npoints     PGUID 11 f t t t 1 f    23 "602" 100 0 0 100  path_npoints - ));
 DESCR("# points in path");
 
 /* pclose and popen might better be named close and open, but that crashes initdb.
  * - thomas 97/04/20
  */
 
-DATA(insert OID = 1433 (  pclose           PGUID 11 f t t 1 f 602 "602" 100 0 0 100  path_close - ));
+DATA(insert OID = 1433 (  pclose           PGUID 11 f t t 1 f 602 "602" 100 0 0 100  path_close - ));
 DESCR("close path");
-DATA(insert OID = 1434 (  popen                PGUID 11 f t t 1 f 602 "602" 100 0 0 100  path_open - ));
+DATA(insert OID = 1434 (  popen                PGUID 11 f t t 1 f 602 "602" 100 0 0 100  path_open - ));
 DESCR("open path");
-DATA(insert OID = 1435 (  path_add         PGUID 11 f t t 2 f 602 "602 602" 100 0 0 100  path_add - ));
+DATA(insert OID = 1435 (  path_add         PGUID 11 f t t 2 f 602 "602 602" 100 0 0 100  path_add - ));
 DESCR("addition");
-DATA(insert OID = 1436 (  path_add_pt      PGUID 11 f t t 2 f 602 "602 600" 100 0 0 100  path_add_pt - ));
+DATA(insert OID = 1436 (  path_add_pt      PGUID 11 f t t 2 f 602 "602 600" 100 0 0 100  path_add_pt - ));
 DESCR("addition");
-DATA(insert OID = 1437 (  path_sub_pt      PGUID 11 f t t 2 f 602 "602 600" 100 0 0 100  path_sub_pt - ));
+DATA(insert OID = 1437 (  path_sub_pt      PGUID 11 f t t 2 f 602 "602 600" 100 0 0 100  path_sub_pt - ));
 DESCR("subtract");
-DATA(insert OID = 1438 (  path_mul_pt      PGUID 11 f t t 2 f 602 "602 600" 100 0 0 100  path_mul_pt - ));
+DATA(insert OID = 1438 (  path_mul_pt      PGUID 11 f t t 2 f 602 "602 600" 100 0 0 100  path_mul_pt - ));
 DESCR("multiply");
-DATA(insert OID = 1439 (  path_div_pt      PGUID 11 f t t 2 f 602 "602 600" 100 0 0 100  path_div_pt - ));
+DATA(insert OID = 1439 (  path_div_pt      PGUID 11 f t t 2 f 602 "602 600" 100 0 0 100  path_div_pt - ));
 DESCR("divide");
 
-DATA(insert OID = 1440 (  point                PGUID 11 f t t 2 f 600 "701 701" 100 0 0 100  point - ));
+DATA(insert OID = 1440 (  point                PGUID 11 f t t 2 f 600 "701 701" 100 0 0 100  point - ));
 DESCR("convert x, y to point");
-DATA(insert OID = 1441 (  point_add            PGUID 11 f t t 2 f 600 "600 600" 100 0 0 100  point_add - ));
+DATA(insert OID = 1441 (  point_add            PGUID 11 f t t 2 f 600 "600 600" 100 0 0 100  point_add - ));
 DESCR("add points (translate)");
-DATA(insert OID = 1442 (  point_sub            PGUID 11 f t t 2 f 600 "600 600" 100 0 0 100  point_sub - ));
+DATA(insert OID = 1442 (  point_sub            PGUID 11 f t t 2 f 600 "600 600" 100 0 0 100  point_sub - ));
 DESCR("subtract points (translate)");
-DATA(insert OID = 1443 (  point_mul            PGUID 11 f t t 2 f 600 "600 600" 100 0 0 100  point_mul - ));
+DATA(insert OID = 1443 (  point_mul            PGUID 11 f 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 11 f t t 2 f 600 "600 600" 100 0 0 100  point_div - ));
+DATA(insert OID = 1444 (  point_div            PGUID 11 f 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 11 f t t 1 f  23 "604" 100 0 0 100  poly_npoints - ));
+DATA(insert OID = 1445 (  poly_npoints     PGUID 11 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 11 f t t 1 f 603 "604" 100 0 0 100  poly_box - ));
+DATA(insert OID = 1446 (  box              PGUID 11 f t t 1 f 603 "604" 100 0 0 100  poly_box - ));
 DESCR("convert polygon to bounding box");
-DATA(insert OID = 1447 (  path             PGUID 11 f t t 1 f 602 "604" 100 0 0 100  poly_path - ));
+DATA(insert OID = 1447 (  path             PGUID 11 f t t 1 f 602 "604" 100 0 0 100  poly_path - ));
 DESCR("convert polygon to path");
-DATA(insert OID = 1448 (  polygon          PGUID 11 f t t 1 f 604 "603" 100 0 0 100  box_poly - ));
+DATA(insert OID = 1448 (  polygon          PGUID 11 f t t 1 f 604 "603" 100 0 0 100  box_poly - ));
 DESCR("convert box to polygon");
-DATA(insert OID = 1449 (  polygon          PGUID 11 f t t 1 f 604 "602" 100 0 0 100  path_poly - ));
+DATA(insert OID = 1449 (  polygon          PGUID 11 f t t 1 f 604 "602" 100 0 0 100  path_poly - ));
 DESCR("convert path to polygon");
 
-DATA(insert OID = 1450 (  circle_in            PGUID 11 f t t 1 f 718 "0" 100 0 1 0  circle_in - ));
+DATA(insert OID = 1450 (  circle_in            PGUID 11 f t t 1 f 718 "0" 100 0 1 0  circle_in - ));
 DESCR("(internal)");
-DATA(insert OID = 1451 (  circle_out       PGUID 11 f t t 1 f  23  "0" 100 0 1 0  circle_out - ));
+DATA(insert OID = 1451 (  circle_out       PGUID 11 f t t t 1 f    23  "0" 100 0 1 0  circle_out - ));
 DESCR("(internal)");
-DATA(insert OID = 1452 (  circle_same      PGUID 11 f t t 2 f  16 "718 718" 100 0 1 0  circle_same - ));
+DATA(insert OID = 1452 (  circle_same      PGUID 11 f t t t 2 f    16 "718 718" 100 0 1 0  circle_same - ));
 DESCR("same as");
-DATA(insert OID = 1453 (  circle_contain   PGUID 11 f t t 2 f  16 "718 718" 100 0 1 0  circle_contain - ));
+DATA(insert OID = 1453 (  circle_contain   PGUID 11 f t t t 2 f    16 "718 718" 100 0 1 0  circle_contain - ));
 DESCR("contains");
-DATA(insert OID = 1454 (  circle_left      PGUID 11 f t t 2 f  16 "718 718" 100 0 1 0  circle_left - ));
+DATA(insert OID = 1454 (  circle_left      PGUID 11 f t t t 2 f    16 "718 718" 100 0 1 0  circle_left - ));
 DESCR("is left of");
-DATA(insert OID = 1455 (  circle_overleft  PGUID 11 f t t 2 f  16 "718 718" 100 0 1 0  circle_overleft - ));
+DATA(insert OID = 1455 (  circle_overleft  PGUID 11 f t t t 2 f    16 "718 718" 100 0 1 0  circle_overleft - ));
 DESCR("overlaps, but does not extend to right of");
-DATA(insert OID = 1456 (  circle_overright PGUID 11 f t t 2 f  16 "718 718" 100 0 1 0  circle_overright - ));
+DATA(insert OID = 1456 (  circle_overright PGUID 11 f t t t 2 f    16 "718 718" 100 0 1 0  circle_overright - ));
 DESCR("");
-DATA(insert OID = 1457 (  circle_right     PGUID 11 f t t 2 f  16 "718 718" 100 0 1 0  circle_right - ));
+DATA(insert OID = 1457 (  circle_right     PGUID 11 f t t t 2 f    16 "718 718" 100 0 1 0  circle_right - ));
 DESCR("is left of");
-DATA(insert OID = 1458 (  circle_contained PGUID 11 f t t 2 f  16 "718 718" 100 0 1 0  circle_contained - ));
+DATA(insert OID = 1458 (  circle_contained PGUID 11 f t t t 2 f    16 "718 718" 100 0 1 0  circle_contained - ));
 DESCR("");
-DATA(insert OID = 1459 (  circle_overlap   PGUID 11 f t t 2 f  16 "718 718" 100 0 1 0  circle_overlap - ));
+DATA(insert OID = 1459 (  circle_overlap   PGUID 11 f t t t 2 f    16 "718 718" 100 0 1 0  circle_overlap - ));
 DESCR("overlaps");
-DATA(insert OID = 1460 (  circle_below     PGUID 11 f t t 2 f  16 "718 718" 100 0 1 0  circle_below - ));
+DATA(insert OID = 1460 (  circle_below     PGUID 11 f t t t 2 f    16 "718 718" 100 0 1 0  circle_below - ));
 DESCR("is below");
-DATA(insert OID = 1461 (  circle_above     PGUID 11 f t t 2 f  16 "718 718" 100 0 1 0  circle_above - ));
+DATA(insert OID = 1461 (  circle_above     PGUID 11 f t t t 2 f    16 "718 718" 100 0 1 0  circle_above - ));
 DESCR("is above");
-DATA(insert OID = 1462 (  circle_eq            PGUID 11 f t t 2 f  16 "718 718" 100 0 1 0  circle_eq - ));
+DATA(insert OID = 1462 (  circle_eq            PGUID 11 f t t t 2 f    16 "718 718" 100 0 1 0  circle_eq - ));
 DESCR("equal");
-DATA(insert OID = 1463 (  circle_ne            PGUID 11 f t t 2 f  16 "718 718" 100 0 1 0  circle_ne - ));
+DATA(insert OID = 1463 (  circle_ne            PGUID 11 f t t t 2 f    16 "718 718" 100 0 1 0  circle_ne - ));
 DESCR("not equal");
-DATA(insert OID = 1464 (  circle_lt            PGUID 11 f t t 2 f  16 "718 718" 100 0 1 0  circle_lt - ));
+DATA(insert OID = 1464 (  circle_lt            PGUID 11 f t t t 2 f    16 "718 718" 100 0 1 0  circle_lt - ));
 DESCR("less-than");
-DATA(insert OID = 1465 (  circle_gt            PGUID 11 f t t 2 f  16 "718 718" 100 0 1 0  circle_gt - ));
+DATA(insert OID = 1465 (  circle_gt            PGUID 11 f t t t 2 f    16 "718 718" 100 0 1 0  circle_gt - ));
 DESCR("greater-than");
-DATA(insert OID = 1466 (  circle_le            PGUID 11 f t t 2 f  16 "718 718" 100 0 1 0  circle_le - ));
+DATA(insert OID = 1466 (  circle_le            PGUID 11 f t t t 2 f    16 "718 718" 100 0 1 0  circle_le - ));
 DESCR("less-than-or-equal");
-DATA(insert OID = 1467 (  circle_ge            PGUID 11 f t t 2 f  16 "718 718" 100 0 1 0  circle_ge - ));
+DATA(insert OID = 1467 (  circle_ge            PGUID 11 f t t t 2 f    16 "718 718" 100 0 1 0  circle_ge - ));
 DESCR("greater-than-or-equal");
-DATA(insert OID = 1468 (  area             PGUID 11 f t t 1 f 701 "718" 100 0 1 0  circle_area - ));
+DATA(insert OID = 1468 (  area             PGUID 11 f t t t 1 f 701 "718" 100 0 1 0    circle_area - ));
 DESCR("area of circle");
-DATA(insert OID = 1469 (  diameter         PGUID 11 f t t 1 f 701 "718" 100 0 1 0  circle_diameter - ));
+DATA(insert OID = 1469 (  diameter         PGUID 11 f t t t 1 f 701 "718" 100 0 1 0    circle_diameter - ));
 DESCR("diameter of circle");
-DATA(insert OID = 1470 (  radius           PGUID 11 f t t 1 f 701 "718" 100 0 1 0  circle_radius - ));
+DATA(insert OID = 1470 (  radius           PGUID 11 f t t t 1 f 701 "718" 100 0 1 0    circle_radius - ));
 DESCR("radius of circle");
-DATA(insert OID = 1471 (  circle_distance  PGUID 11 f t t 2 f 701 "718 718" 100 0 1 0  circle_distance - ));
+DATA(insert OID = 1471 (  circle_distance  PGUID 11 f t t t 2 f 701 "718 718" 100 0 1 0    circle_distance - ));
 DESCR("distance between");
-DATA(insert OID = 1472 (  circle_center        PGUID 11 f t t 1 f 600 "718" 100 0 1 0  circle_center - ));
+DATA(insert OID = 1472 (  circle_center        PGUID 11 f t t t 1 f 600 "718" 100 0 1 0    circle_center - ));
 DESCR("center of");
-DATA(insert OID = 1473 (  circle           PGUID 11 f t t 2 f 718 "600 701" 100 0 1 0  circle - ));
+DATA(insert OID = 1473 (  circle           PGUID 11 f t t t 2 f 718 "600 701" 100 0 1 0    circle - ));
 DESCR("convert point and radius to circle");
-DATA(insert OID = 1474 (  circle           PGUID 11 f t t 1 f 718 "604" 100 0 1 0  poly_circle - ));
+DATA(insert OID = 1474 (  circle           PGUID 11 f t t t 1 f 718 "604" 100 0 1 0    poly_circle - ));
 DESCR("convert polygon to circle");
-DATA(insert OID = 1475 (  polygon          PGUID 11 f t t 2 f 604 "23 718" 100 0 1 0  circle_poly - ));
+DATA(insert OID = 1475 (  polygon          PGUID 11 f t t 2 f 604 "23 718" 100 0 1 0  circle_poly - ));
 DESCR("convert vertex count and circle to polygon");
-DATA(insert OID = 1476 (  dist_pc          PGUID 11 f t t 2 f 701 "600 718" 100 0 1 0  dist_pc - ));
+DATA(insert OID = 1476 (  dist_pc          PGUID 11 f t t t 2 f 701 "600 718" 100 0 1 0    dist_pc - ));
 DESCR("distance between point and circle");
-DATA(insert OID = 1477 (  circle_contain_pt PGUID 11 f t t 2 f 16 "718 600" 100 0 0 100  circle_contain_pt - ));
+DATA(insert OID = 1477 (  circle_contain_pt PGUID 11 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 11 f t t 2 f  16 "600 718" 100 0 0 100  pt_contained_circle - ));
+DATA(insert OID = 1478 (  pt_contained_circle  PGUID 11 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 11 f t t 1 f 718 "603" 100 0 1 0  box_circle - ));
+DATA(insert OID = 1479 (  circle           PGUID 11 f t t t 1 f 718 "603" 100 0 1 0    box_circle - ));
 DESCR("convert box to circle");
-DATA(insert OID = 1480 (  box              PGUID 11 f t t 1 f 603 "718" 100 0 1 0  circle_box - ));
+DATA(insert OID = 1480 (  box              PGUID 11 f t t t 1 f 603 "718" 100 0 1 0    circle_box - ));
 DESCR("convert circle to box");
-DATA(insert OID = 1481 (  tinterval             PGUID 11 f t f 2 f 704 "702 702" 100 0 0 100 mktinterval - ));
+DATA(insert OID = 1481 (  tinterval             PGUID 11 f t f 2 f 704 "702 702" 100 0 0 100 mktinterval - ));
 DESCR("convert to tinterval");
 
-DATA(insert OID = 1482 (  lseg_ne          PGUID 11 f t t 2 f  16 "601 601" 100 0 0 100  lseg_ne - ));
+DATA(insert OID = 1482 (  lseg_ne          PGUID 11 f t t t 2 f    16 "601 601" 100 0 0 100  lseg_ne - ));
 DESCR("not equal");
-DATA(insert OID = 1483 (  lseg_lt          PGUID 11 f t t 2 f  16 "601 601" 100 0 0 100  lseg_lt - ));
+DATA(insert OID = 1483 (  lseg_lt          PGUID 11 f t t t 2 f    16 "601 601" 100 0 0 100  lseg_lt - ));
 DESCR("less-than");
-DATA(insert OID = 1484 (  lseg_le          PGUID 11 f t t 2 f  16 "601 601" 100 0 0 100  lseg_le - ));
+DATA(insert OID = 1484 (  lseg_le          PGUID 11 f t t t 2 f    16 "601 601" 100 0 0 100  lseg_le - ));
 DESCR("less-than-or-equal");
-DATA(insert OID = 1485 (  lseg_gt          PGUID 11 f t t 2 f  16 "601 601" 100 0 0 100  lseg_gt - ));
+DATA(insert OID = 1485 (  lseg_gt          PGUID 11 f t t t 2 f    16 "601 601" 100 0 0 100  lseg_gt - ));
 DESCR("greater-than");
-DATA(insert OID = 1486 (  lseg_ge          PGUID 11 f t t 2 f  16 "601 601" 100 0 0 100  lseg_ge - ));
+DATA(insert OID = 1486 (  lseg_ge          PGUID 11 f t t t 2 f    16 "601 601" 100 0 0 100  lseg_ge - ));
 DESCR("greater-than-or-equal");
-DATA(insert OID = 1487 (  lseg_length      PGUID 11 f t t 1 f 701 "601" 100 0 1 0  lseg_length - ));
+DATA(insert OID = 1487 (  lseg_length      PGUID 11 f t t t 1 f 701 "601" 100 0 1 0    lseg_length - ));
 DESCR("distance between endpoints");
-DATA(insert OID = 1488 (  close_ls         PGUID 11 f t t 2 f 600 "628 601" 100 0 10 100  close_ls - ));
+DATA(insert OID = 1488 (  close_ls         PGUID 11 f t t 2 f 600 "628 601" 100 0 10 100  close_ls - ));
 DESCR("closest point to line on line segment");
-DATA(insert OID = 1489 (  close_lseg       PGUID 11 f t t 2 f 600 "601 601" 100 0 10 100  close_lseg - ));
+DATA(insert OID = 1489 (  close_lseg       PGUID 11 f t t 2 f 600 "601 601" 100 0 10 100  close_lseg - ));
 DESCR("closest point to line segment on line segment");
 
-DATA(insert OID = 1490 (  line_in          PGUID 11 f t t 1 f 628 "0" 100 0 0 100  line_in - ));
+DATA(insert OID = 1490 (  line_in          PGUID 11 f t t t 1 f 628 "0" 100 0 0 100    line_in - ));
 DESCR("(internal)");
-DATA(insert OID = 1491 (  line_out         PGUID 11 f t t 1 f 23  "0" 100 0 0 100  line_out - ));
+DATA(insert OID = 1491 (  line_out         PGUID 11 f t t t 1 f 23  "0" 100 0 0 100    line_out - ));
 DESCR("(internal)");
-DATA(insert OID = 1492 (  line_eq          PGUID 11 f t t 2 f  16 "628 628" 100 0 0 100  line_eq - ));
+DATA(insert OID = 1492 (  line_eq          PGUID 11 f t t t 2 f    16 "628 628" 100 0 0 100  line_eq - ));
 DESCR("lines equal?");
-DATA(insert OID = 1493 (  line             PGUID 11 f t t 2 f 628 "600 600" 100 0 0 100  line_construct_pp - ));
+DATA(insert OID = 1493 (  line             PGUID 11 f 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 11 f t t 2 f 600 "628 628" 100 0 0 100  line_interpt - ));
+DATA(insert OID = 1494 (  line_interpt     PGUID 11 f t t 2 f 600 "628 628" 100 0 0 100  line_interpt - ));
 DESCR("intersection point");
-DATA(insert OID = 1495 (  line_intersect   PGUID 11 f t t 2 f  16 "628 628" 100 0 0 100  line_intersect - ));
+DATA(insert OID = 1495 (  line_intersect   PGUID 11 f t t t 2 f    16 "628 628" 100 0 0 100  line_intersect - ));
 DESCR("lines intersect?");
-DATA(insert OID = 1496 (  line_parallel        PGUID 11 f t t 2 f  16 "628 628" 100 0 0 100  line_parallel - ));
+DATA(insert OID = 1496 (  line_parallel        PGUID 11 f t t t 2 f    16 "628 628" 100 0 0 100  line_parallel - ));
 DESCR("lines parallel?");
-DATA(insert OID = 1497 (  line_perp            PGUID 11 f t t 2 f  16 "628 628" 100 0 0 100  line_perp - ));
+DATA(insert OID = 1497 (  line_perp            PGUID 11 f t t t 2 f    16 "628 628" 100 0 0 100  line_perp - ));
 DESCR("lines perpendicular?");
-DATA(insert OID = 1498 (  line_vertical        PGUID 11 f t t 1 f  16 "628" 100 0 0 100  line_vertical - ));
+DATA(insert OID = 1498 (  line_vertical        PGUID 11 f t t t 1 f    16 "628" 100 0 0 100  line_vertical - ));
 DESCR("lines vertical?");
-DATA(insert OID = 1499 (  line_horizontal  PGUID 11 f t t 1 f  16 "628" 100 0 0 100  line_horizontal - ));
+DATA(insert OID = 1499 (  line_horizontal  PGUID 11 f t t t 1 f    16 "628" 100 0 0 100  line_horizontal - ));
 DESCR("lines horizontal?");
 
 /* OIDS 1500 - 1599 */
 
-DATA(insert OID = 1530 (  length           PGUID 11 f t t 1 f 701 "601" 100 0 1 0  lseg_length - ));
+DATA(insert OID = 1530 (  length           PGUID 11 f t t t 1 f 701 "601" 100 0 1 0    lseg_length - ));
 DESCR("distance between endpoints");
-DATA(insert OID = 1531 (  length           PGUID 11 f t t 1 f 701 "602" 100 0 1 0  path_length - ));
+DATA(insert OID = 1531 (  length           PGUID 11 f t t t 1 f 701 "602" 100 0 1 0    path_length - ));
 DESCR("sum of path segments");
 
 
-DATA(insert OID = 1532 (  point                PGUID 11 f t t 1 f 600 "601" 100 0 0 100  lseg_center - ));
+DATA(insert OID = 1532 (  point                PGUID 11 f t t 1 f 600 "601" 100 0 0 100  lseg_center - ));
 DESCR("center of");
-DATA(insert OID = 1533 (  point                PGUID 11 f t t 1 f 600 "602" 100 0 0 100  path_center - ));
+DATA(insert OID = 1533 (  point                PGUID 11 f t t 1 f 600 "602" 100 0 0 100  path_center - ));
 DESCR("center of");
-DATA(insert OID = 1534 (  point                PGUID 11 f t t 1 f 600 "603" 100 1 0 100  box_center - ));
+DATA(insert OID = 1534 (  point                PGUID 11 f t t 1 f 600 "603" 100 1 0 100  box_center - ));
 DESCR("center of");
-DATA(insert OID = 1540 (  point                PGUID 11 f t t 1 f 600 "604" 100 0 0 100  poly_center - ));
+DATA(insert OID = 1540 (  point                PGUID 11 f t t 1 f 600 "604" 100 0 0 100  poly_center - ));
 DESCR("center of");
-DATA(insert OID = 1541 (  lseg             PGUID 11 f t t 1 f 601 "603" 100 0 0 100  box_diagonal - ));
+DATA(insert OID = 1541 (  lseg             PGUID 11 f t t 1 f 601 "603" 100 0 0 100  box_diagonal - ));
 DESCR("");
-DATA(insert OID = 1542 (  center           PGUID 11 f t t 1 f 600 "603" 100 1 0 100  box_center - ));
+DATA(insert OID = 1542 (  center           PGUID 11 f t t 1 f 600 "603" 100 1 0 100  box_center - ));
 DESCR("center of");
-DATA(insert OID = 1543 (  center           PGUID 11 f t t 1 f 600 "718" 100 0 1 0  circle_center - ));
+DATA(insert OID = 1543 (  center           PGUID 11 f t t t 1 f 600 "718" 100 0 1 0    circle_center - ));
 DESCR("center of");
-DATA(insert OID = 1544 (  polygon          PGUID 14 f t t 1 f 604 "718" 100 0 0 100  "select polygon(12, $1)" - ));
+DATA(insert OID = 1544 (  polygon          PGUID 14 f 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 11 f t t 1 f  23 "602" 100 0 0 100  path_npoints - ));
+DATA(insert OID = 1545 (  npoints          PGUID 11 f t t t 1 f    23 "602" 100 0 0 100  path_npoints - ));
 DESCR("# points in path");
-DATA(insert OID = 1556 (  npoints          PGUID 11 f t t 1 f  23 "604" 100 0 0 100  poly_npoints - ));
+DATA(insert OID = 1556 (  npoints          PGUID 11 f t t t 1 f    23 "604" 100 0 0 100  poly_npoints - ));
 DESCR("number of points in polygon");
 
-DATA(insert OID = 1564 (  zpbit_in         PGUID 11 f t t 1 f 1560 "0" 100 0 0 100  zpbit_in - ));
+DATA(insert OID = 1564 (  zpbit_in         PGUID 11 f t t 1 f 1560 "0" 100 0 0 100  zpbit_in - ));
 DESCR("(internal)");
-DATA(insert OID = 1565 (  zpbit_out            PGUID 11 f t t 1 f   23 "0" 100 0 0 100  zpbit_out - ));
+DATA(insert OID = 1565 (  zpbit_out            PGUID 11 f t t t 1 f     23 "0" 100 0 0 100  zpbit_out - ));
 DESCR("(internal)");
 
-DATA(insert OID = 1569 (  like             PGUID 11 f t t 2 f 16 "25 25" 100 0 1 0  textlike - ));
+DATA(insert OID = 1569 (  like             PGUID 11 f t t 2 f 16 "25 25" 100 0 1 0  textlike - ));
 DESCR("matches LIKE expression");
-DATA(insert OID = 1570 (  notlike          PGUID 11 f t t 2 f 16 "25 25" 100 0 1 0  textnlike - ));
+DATA(insert OID = 1570 (  notlike          PGUID 11 f t t 2 f 16 "25 25" 100 0 1 0  textnlike - ));
 DESCR("does not match LIKE expression");
-DATA(insert OID = 1571 (  like             PGUID 11 f t t 2 f 16 "19 25" 100 0 0 100  namelike - ));
+DATA(insert OID = 1571 (  like             PGUID 11 f t t 2 f 16 "19 25" 100 0 0 100  namelike - ));
 DESCR("matches LIKE expression");
-DATA(insert OID = 1572 (  notlike          PGUID 11 f t t 2 f 16 "19 25" 100 0 0 100  namenlike - ));
+DATA(insert OID = 1572 (  notlike          PGUID 11 f t t 2 f 16 "19 25" 100 0 0 100  namenlike - ));
 DESCR("does not match LIKE expression");
-DATA(insert OID = 1573 (  int8             PGUID 14 f t t 1 f  20 "20" 100 0 0 100  "select $1" - ));
+DATA(insert OID = 1573 (  int8             PGUID 14 f t t t 1 f    20 "20" 100 0 0 100  "select $1" - ));
 DESCR("convert int8 to int8 (no-op)");
 
 
 /* SEQUENCEs nextval & currval functions */
-DATA(insert OID = 1574 (  nextval          PGUID 11 f t f 1 f 23 "25" 100 0 0 100  nextval - ));
+DATA(insert OID = 1574 (  nextval          PGUID 11 f t f t 1 f 23 "25" 100 0 0 100    nextval - ));
 DESCR("sequence next value");
-DATA(insert OID = 1575 (  currval          PGUID 11 f t f 1 f 23 "25" 100 0 0 100  currval - ));
+DATA(insert OID = 1575 (  currval          PGUID 11 f t f t 1 f 23 "25" 100 0 0 100    currval - ));
 DESCR("sequence current value");
-DATA(insert OID = 1576 (  setval           PGUID 11 f t f 2 f 23 "25 23" 100 0 0 100  setval - ));
+DATA(insert OID = 1576 (  setval           PGUID 11 f t f 2 f 23 "25 23" 100 0 0 100  setval - ));
 DESCR("sequence set value");
 
-DATA(insert OID = 1579 (  varbit_in            PGUID 11 f t t 1 f 1562 "0" 100 0 0 100  varbit_in - ));
+DATA(insert OID = 1579 (  varbit_in            PGUID 11 f t t 1 f 1562 "0" 100 0 0 100  varbit_in - ));
 DESCR("(internal)");
-DATA(insert OID = 1580 (  varbit_out       PGUID 11 f t t 1 f   23 "0" 100 0 0 100  varbit_out - ));
+DATA(insert OID = 1580 (  varbit_out       PGUID 11 f t t t 1 f     23 "0" 100 0 0 100  varbit_out - ));
 DESCR("(internal)");
 
-DATA(insert OID = 1581 (  biteq                PGUID 11 f t t 2 f 16 "1560 1560" 100 0 1 0  biteq - ));
+DATA(insert OID = 1581 (  biteq                PGUID 11 f t t 2 f 16 "1560 1560" 100 0 1 0  biteq - ));
 DESCR("equal");
-DATA(insert OID = 1582 (  bitne                PGUID 11 f t t 2 f 16 "1560 1560" 100 0 1 0  bitne - ));
+DATA(insert OID = 1582 (  bitne                PGUID 11 f t t 2 f 16 "1560 1560" 100 0 1 0  bitne - ));
 DESCR("not equal");
-DATA(insert OID = 1592 (  bitge                PGUID 11 f t t 2 f 16 "1560 1560" 100 0 1 0  bitge - ));
+DATA(insert OID = 1592 (  bitge                PGUID 11 f t t 2 f 16 "1560 1560" 100 0 1 0  bitge - ));
 DESCR("greater than or equal");
-DATA(insert OID = 1593 (  bitgt                PGUID 11 f t t 2 f 16 "1560 1560" 100 0 1 0  bitgt - ));
+DATA(insert OID = 1593 (  bitgt                PGUID 11 f t t 2 f 16 "1560 1560" 100 0 1 0  bitgt - ));
 DESCR("greater than");
-DATA(insert OID = 1594 (  bitle                PGUID 11 f t t 2 f 16 "1560 1560" 100 0 1 0  bitle - ));
+DATA(insert OID = 1594 (  bitle                PGUID 11 f t t 2 f 16 "1560 1560" 100 0 1 0  bitle - ));
 DESCR("less than or equal");
-DATA(insert OID = 1595 (  bitlt                PGUID 11 f t t 2 f 16 "1560 1560" 100 0 1 0  bitlt - ));
+DATA(insert OID = 1595 (  bitlt                PGUID 11 f t t 2 f 16 "1560 1560" 100 0 1 0  bitlt - ));
 DESCR("less than");
-DATA(insert OID = 1596 (  bitcmp           PGUID 11 f t t 2 f 23 "1560 1560" 100 0 1 0  bitcmp - ));
+DATA(insert OID = 1596 (  bitcmp           PGUID 11 f t t 2 f 23 "1560 1560" 100 0 1 0  bitcmp - ));
 DESCR("compare");
 
-DATA(insert OID = 1598 (  random           PGUID 11 f t f 0 f 701 "0" 100 0 0 100  drandom - ));
+DATA(insert OID = 1598 (  random           PGUID 11 f t f t 0 f 701 "0" 100 0 0 100    drandom - ));
 DESCR("radians to degrees");
-DATA(insert OID = 1599 (  setseed          PGUID 11 f t t 1 f  23 "701" 100 0 0 100  setseed - ));
+DATA(insert OID = 1599 (  setseed          PGUID 11 f t t t 1 f    23 "701" 100 0 0 100  setseed - ));
 DESCR("radians to degrees");
 
 /* OIDS 1600 - 1699 */
 
-DATA(insert OID = 1600 (  asin             PGUID 11 f t t 1 f 701 "701" 100 0 0 100  dasin - ));
+DATA(insert OID = 1600 (  asin             PGUID 11 f t t 1 f 701 "701" 100 0 0 100  dasin - ));
 DESCR("arcsine");
-DATA(insert OID = 1601 (  acos             PGUID 11 f t t 1 f 701 "701" 100 0 0 100  dacos - ));
+DATA(insert OID = 1601 (  acos             PGUID 11 f t t 1 f 701 "701" 100 0 0 100  dacos - ));
 DESCR("arcsine");
-DATA(insert OID = 1602 (  atan             PGUID 11 f t t 1 f 701 "701" 100 0 0 100  datan - ));
+DATA(insert OID = 1602 (  atan             PGUID 11 f t t 1 f 701 "701" 100 0 0 100  datan - ));
 DESCR("arctangent");
-DATA(insert OID = 1603 (  atan2                PGUID 11 f t t 2 f 701 "701 701" 100 0 0 100  datan2 - ));
+DATA(insert OID = 1603 (  atan2                PGUID 11 f t t 2 f 701 "701 701" 100 0 0 100  datan2 - ));
 DESCR("arctangent, two arguments");
-DATA(insert OID = 1604 (  sin              PGUID 11 f t t 1 f 701 "701" 100 0 0 100  dsin - ));
+DATA(insert OID = 1604 (  sin              PGUID 11 f t t 1 f 701 "701" 100 0 0 100  dsin - ));
 DESCR("sine");
-DATA(insert OID = 1605 (  cos              PGUID 11 f t t 1 f 701 "701" 100 0 0 100  dcos - ));
+DATA(insert OID = 1605 (  cos              PGUID 11 f t t 1 f 701 "701" 100 0 0 100  dcos - ));
 DESCR("cosine");
-DATA(insert OID = 1606 (  tan              PGUID 11 f t t 1 f 701 "701" 100 0 0 100  dtan - ));
+DATA(insert OID = 1606 (  tan              PGUID 11 f t t 1 f 701 "701" 100 0 0 100  dtan - ));
 DESCR("tangent");
-DATA(insert OID = 1607 (  cot              PGUID 11 f t t 1 f 701 "701" 100 0 0 100  dcot - ));
+DATA(insert OID = 1607 (  cot              PGUID 11 f t t 1 f 701 "701" 100 0 0 100  dcot - ));
 DESCR("cotangent");
-DATA(insert OID = 1608 (  degrees          PGUID 11 f t t 1 f 701 "701" 100 0 0 100  degrees - ));
+DATA(insert OID = 1608 (  degrees          PGUID 11 f t t 1 f 701 "701" 100 0 0 100  degrees - ));
 DESCR("radians to degrees");
-DATA(insert OID = 1609 (  radians          PGUID 11 f t t 1 f 701 "701" 100 0 0 100  radians - ));
+DATA(insert OID = 1609 (  radians          PGUID 11 f t t 1 f 701 "701" 100 0 0 100  radians - ));
 DESCR("radians to degrees");
-DATA(insert OID = 1610 (  pi               PGUID 11 f t t 0 f 701 "0" 100 0 0 100  dpi - ));
+DATA(insert OID = 1610 (  pi               PGUID 11 f t t t 0 f 701 "0" 100 0 0 100    dpi - ));
 DESCR("PI");
 
-DATA(insert OID = 1618 (  interval_mul     PGUID 11 f t t 2 f 1186 "1186 701" 100 0 0 100  interval_mul - ));
+DATA(insert OID = 1618 (  interval_mul     PGUID 11 f t t t 2 f 1186 "1186 701" 100 0 0 100    interval_mul - ));
 DESCR("multiply interval");
-DATA(insert OID = 1619 (  varchar          PGUID 11 f t t 1 f 1043 "23" 100 0 0 100  int4_text - ));
+DATA(insert OID = 1619 (  varchar          PGUID 11 f t t 1 f 1043 "23" 100 0 0 100  int4_text - ));
 DESCR("convert int4 to varchar");
 
-DATA(insert OID = 1620 (  ascii                PGUID 11 f t t 1 f 23 "25" 100 0 0 100  ascii - ));
+DATA(insert OID = 1620 (  ascii                PGUID 11 f t t t 1 f 23 "25" 100 0 0 100    ascii - ));
 DESCR("convert first char to int4");
-DATA(insert OID = 1621 (  ichar                PGUID 11 f t t 1 f 25 "23" 100 0 0 100  ichar - ));
+DATA(insert OID = 1621 (  ichar                PGUID 11 f t t t 1 f 25 "23" 100 0 0 100    ichar - ));
 DESCR("convert int4 to char");
-DATA(insert OID = 1622 (  repeat           PGUID 11 f t t 2 f 25 "25 23" 100 0 0 100  repeat - ));
+DATA(insert OID = 1622 (  repeat           PGUID 11 f t t 2 f 25 "25 23" 100 0 0 100  repeat - ));
 DESCR("replicate string int4 times");
 
-DATA(insert OID = 1623 (  varchar          PGUID 11 f t t 1 f 1043 "20" 100 0 0 100  int8_text - ));
+DATA(insert OID = 1623 (  varchar          PGUID 11 f 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 11 f t t 2 f 1186 "701 1186" 100 0 0 100  mul_d_interval - ));
+DATA(insert OID = 1624 (  mul_d_interval   PGUID 11 f t t t 2 f 1186 "701 1186" 100 0 0 100    mul_d_interval - ));
 
 /* OID's 1625 - 1639 LZTEXT data type */
-DATA(insert OID = 1626 ( lztextin            PGUID 11 f t t 1 f 1625 "0" 100 0 0 100  lztextin - ));
+DATA(insert OID = 1626 ( lztextin            PGUID 11 f t t 1 f 1625 "0" 100 0 0 100  lztextin - ));
 DESCR("(internal)");
-DATA(insert OID = 1627 ( lztextout           PGUID 11 f t t 1 f 23 "0" 100 0 0 100  lztextout - ));
+DATA(insert OID = 1627 ( lztextout           PGUID 11 f t t 1 f 23 "0" 100 0 0 100  lztextout - ));
 DESCR("(internal)");
-DATA(insert OID = 1629 ( text                PGUID 11 f t t 1 f 25 "1625" 100 0 0 100  lztext_text -));
+DATA(insert OID = 1629 ( text                PGUID 11 f t t t 1 f 25 "1625" 100 0 0 100    lztext_text -));
 DESCR("convert lztext to text");
-DATA(insert OID = 1631 ( lztext                  PGUID 11 f t t 1 f 1625 "25" 100 0 0 100  text_lztext -));
+DATA(insert OID = 1631 ( lztext                  PGUID 11 f t t t 1 f 1625 "25" 100 0 0 100    text_lztext -));
 DESCR("convert text to lztext");
-DATA(insert OID = 1632 ( lztext                  PGUID 14 f t t 1 f 1625 "1625" 100 0 0 100  "select $1" -));
+DATA(insert OID = 1632 ( lztext                  PGUID 14 f t t 1 f 1625 "1625" 100 0 0 100  "select $1" -));
 DESCR("convert text to lztext");
-DATA(insert OID = 1633 ( char_length         PGUID 11 f t t 1 f 23 "1625" 100 0 1 0  lztextlen - ));
+DATA(insert OID = 1633 ( char_length         PGUID 11 f t t 1 f 23 "1625" 100 0 1 0  lztextlen - ));
 DESCR("length");
-DATA(insert OID = 1634 ( length                  PGUID 11 f t t 1 f 23 "1625" 100 0 1 0  lztextlen - ));
+DATA(insert OID = 1634 ( length                  PGUID 11 f t t 1 f 23 "1625" 100 0 1 0  lztextlen - ));
 DESCR("length");
-DATA(insert OID = 1635 ( octet_length        PGUID 11 f t t 1 f 23 "1625" 100 0 1 0  lztextoctetlen - ));
+DATA(insert OID = 1635 ( octet_length        PGUID 11 f t t 1 f 23 "1625" 100 0 1 0  lztextoctetlen - ));
 DESCR("octet length");
-DATA(insert OID = 1636 ( lztext_cmp              PGUID 11 f t t 2 f 23 "1625 1625" 100 0 1 0  lztext_cmp - ));
+DATA(insert OID = 1636 ( lztext_cmp              PGUID 11 f t t 2 f 23 "1625 1625" 100 0 1 0  lztext_cmp - ));
 DESCR("compare lztext");
-DATA(insert OID = 1637 ( lztext_eq           PGUID 11 f t t 2 f 16 "1625 1625" 100 0 1 0  lztext_eq - ));
+DATA(insert OID = 1637 ( lztext_eq           PGUID 11 f t t 2 f 16 "1625 1625" 100 0 1 0  lztext_eq - ));
 DESCR("equal");
-DATA(insert OID = 1638 ( lztext_ne           PGUID 11 f t t 2 f 16 "1625 1625" 100 0 1 0  lztext_ne - ));
+DATA(insert OID = 1638 ( lztext_ne           PGUID 11 f t t 2 f 16 "1625 1625" 100 0 1 0  lztext_ne - ));
 DESCR("not equal");
-DATA(insert OID = 1639 ( lztext_gt           PGUID 11 f t t 2 f 16 "1625 1625" 100 0 1 0  lztext_gt - ));
+DATA(insert OID = 1639 ( lztext_gt           PGUID 11 f t t 2 f 16 "1625 1625" 100 0 1 0  lztext_gt - ));
 DESCR("greater-than");
-DATA(insert OID = 1664 ( lztext_ge           PGUID 11 f t t 2 f 16 "1625 1625" 100 0 1 0  lztext_ge - ));
+DATA(insert OID = 1664 ( lztext_ge           PGUID 11 f t t 2 f 16 "1625 1625" 100 0 1 0  lztext_ge - ));
 DESCR("greater-than-or-equal");
-DATA(insert OID = 1665 ( lztext_lt           PGUID 11 f t t 2 f 16 "1625 1625" 100 0 1 0  lztext_lt - ));
+DATA(insert OID = 1665 ( lztext_lt           PGUID 11 f t t 2 f 16 "1625 1625" 100 0 1 0  lztext_lt - ));
 DESCR("less-than");
-DATA(insert OID = 1656 ( lztext_le           PGUID 11 f t t 2 f 16 "1625 1625" 100 0 1 0  lztext_le - ));
+DATA(insert OID = 1656 ( lztext_le           PGUID 11 f t t 2 f 16 "1625 1625" 100 0 1 0  lztext_le - ));
 DESCR("less-than-or-equal");
 
+DATA(insert OID = 1689 (  update_pg_pwd       PGUID 11 f t f t 0 f 0  ""  100 0 0 100  update_pg_pwd - ));
+DESCR("update pg_pwd file");
+
 /* Oracle Compatibility Related Functions - By Edmund Mergl  */
-DATA(insert OID =  868 (  strpos      PGUID 11 f t t 2 f 23 "25 25" 100 0 0 100  textpos - ));
+DATA(insert OID =  868 (  strpos      PGUID 11 f t t 2 f 23 "25 25" 100 0 0 100  textpos - ));
 DESCR("find position of substring");
-DATA(insert OID =  870 (  lower           PGUID 11 f t t 1 f 25 "25" 100 0 0 100  lower - ));
+DATA(insert OID =  870 (  lower           PGUID 11 f t t 1 f 25 "25" 100 0 0 100  lower - ));
 DESCR("lowercase");
-DATA(insert OID =  871 (  upper           PGUID 11 f t t 1 f 25 "25" 100 0 0 100  upper - ));
+DATA(insert OID =  871 (  upper           PGUID 11 f t t 1 f 25 "25" 100 0 0 100  upper - ));
 DESCR("uppercase");
-DATA(insert OID =  872 (  initcap     PGUID 11 f t t 1 f 25 "25" 100 0 0 100  initcap - ));
+DATA(insert OID =  872 (  initcap     PGUID 11 f t t 1 f 25 "25" 100 0 0 100  initcap - ));
 DESCR("capitalize each word");
-DATA(insert OID =  873 (  lpad        PGUID 11 f t t 3 f 25 "25 23 25" 100 0 0 100  lpad - ));
+DATA(insert OID =  873 (  lpad        PGUID 11 f t t 3 f 25 "25 23 25" 100 0 0 100  lpad - ));
 DESCR("left-pad string to length");
-DATA(insert OID =  874 (  rpad        PGUID 11 f t t 3 f 25 "25 23 25" 100 0 0 100  rpad - ));
+DATA(insert OID =  874 (  rpad        PGUID 11 f 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 11 f t t 2 f 25 "25 25" 100 0 0 100  ltrim - ));
+DATA(insert OID =  875 (  ltrim           PGUID 11 f t t 2 f 25 "25 25" 100 0 0 100  ltrim - ));
 DESCR("left-pad string to length");
-DATA(insert OID =  876 (  rtrim           PGUID 11 f t t 2 f 25 "25 25" 100 0 0 100  rtrim - ));
+DATA(insert OID =  876 (  rtrim           PGUID 11 f t t 2 f 25 "25 25" 100 0 0 100  rtrim - ));
 DESCR("right-pad string to length");
-DATA(insert OID =  877 (  substr      PGUID 11 f t t 3 f 25 "25 23 23" 100 0 0 100  text_substr - ));
+DATA(insert OID =  877 (  substr      PGUID 11 f 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 11 f t t 3 f 25 "25 25 25" 100 0 0 100  translate - ));
+DATA(insert OID =  878 (  translate    PGUID 11 f t t 3 f 25 "25 25 25" 100 0 0 100  translate - ));
 DESCR("modify string by substring replacement");
-DATA(insert OID =  879 (  lpad        PGUID 14 f 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 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 2 f 25 "25 23" 100 0 0 100  "select rpad($1, $2, \' \')" - ));
+DATA(insert OID =  880 (  rpad        PGUID 14 f 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 1 f 25 "25" 100 0 0 100  "select ltrim($1, \' \')" - ));
+DATA(insert OID =  881 (  ltrim           PGUID 14 f 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 1 f 25 "25" 100 0 0 100  "select rtrim($1, \' \')" - ));
+DATA(insert OID =  882 (  rtrim           PGUID 14 f 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 2 f 25 "25 23" 100 0 0 100  "select substr($1, $2, -1)" - ));
+DATA(insert OID =  883 (  substr      PGUID 14 f 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 11 f t t 2 f 25 "25 25" 100 0 0 100  btrim - ));
+DATA(insert OID =  884 (  btrim           PGUID 11 f 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 1 f 25 "25" 100 0 0 100  "select btrim($1, \' \')" - ));
+DATA(insert OID =  885 (  btrim           PGUID 14 f t t 1 f 25 "25" 100 0 0 100  "select btrim($1, \' \')" - ));
 DESCR("trim both ends of string");
 
 /* for multi-byte support */
-DATA(insert OID = 1039 (  getdatabaseencoding     PGUID 11 f t f 0 f 19 "0" 100 0 0 100  getdatabaseencoding - ));
+DATA(insert OID = 1039 (  getdatabaseencoding     PGUID 11 f t f 0 f 19 "0" 100 0 0 100  getdatabaseencoding - ));
 DESCR("encoding name of current database");
 
-DATA(insert OID = 1295 (  pg_char_to_encoding     PGUID 11 f t f 1 f 23 "19" 100 0 0 100  pg_char_to_encoding - ));
+DATA(insert OID = 1295 (  pg_char_to_encoding     PGUID 11 f t f 1 f 23 "19" 100 0 0 100  pg_char_to_encoding - ));
 DESCR("convert encoding name to encoding id");
 
-DATA(insert OID = 1597 (  pg_encoding_to_char     PGUID 11 f t f 1 f 19 "23" 100 0 0 100  pg_encoding_to_char - ));
+DATA(insert OID = 1597 (  pg_encoding_to_char     PGUID 11 f t f 1 f 19 "23" 100 0 0 100  pg_encoding_to_char - ));
 DESCR("convert encoding id to encoding name");
 
 /* System-view support functions */
-DATA(insert OID = 1640 (  pg_get_ruledef      PGUID 11 f t f 1 f 25 "19" 100 0 0 100  pg_get_ruledef - ));
+DATA(insert OID = 1640 (  pg_get_ruledef      PGUID 11 f t f 1 f 25 "19" 100 0 0 100  pg_get_ruledef - ));
 DESCR("source text of a rule");
-DATA(insert OID = 1641 (  pg_get_viewdef      PGUID 11 f t f 1 f 25 "19" 100 0 0 100  pg_get_viewdef - ));
+DATA(insert OID = 1641 (  pg_get_viewdef      PGUID 11 f t f 1 f 25 "19" 100 0 0 100  pg_get_viewdef - ));
 DESCR("select statement of a view");
-DATA(insert OID = 1642 (  pg_get_userbyid     PGUID 11 f t f 1 f 19 "23" 100 0 0 100  pg_get_userbyid - ));
+DATA(insert OID = 1642 (  pg_get_userbyid     PGUID 11 f t f 1 f 19 "23" 100 0 0 100  pg_get_userbyid - ));
 DESCR("user name by UID (with fallback)");
-DATA(insert OID = 1643 (  pg_get_indexdef     PGUID 11 f t f 1 f 25 "26" 100 0 0 100  pg_get_indexdef - ));
+DATA(insert OID = 1643 (  pg_get_indexdef     PGUID 11 f t f 1 f 25 "26" 100 0 0 100  pg_get_indexdef - ));
 DESCR("index description");
 
 /* Generic referential integrity constraint triggers */
-DATA(insert OID = 1644 (  RI_FKey_check_ins        PGUID 11 f t f 0 f 0 "" 100 0 0 100  RI_FKey_check_ins - ));
+DATA(insert OID = 1644 (  RI_FKey_check_ins        PGUID 11 f t f 0 f 0 "" 100 0 0 100  RI_FKey_check_ins - ));
 DESCR("referential integrity FOREIGN KEY ... REFERENCES");
-DATA(insert OID = 1645 (  RI_FKey_check_upd        PGUID 11 f t f 0 f 0 "" 100 0 0 100  RI_FKey_check_upd - ));
+DATA(insert OID = 1645 (  RI_FKey_check_upd        PGUID 11 f t f 0 f 0 "" 100 0 0 100  RI_FKey_check_upd - ));
 DESCR("referential integrity FOREIGN KEY ... REFERENCES");
-DATA(insert OID = 1646 (  RI_FKey_cascade_del  PGUID 11 f t f 0 f 0 "" 100 0 0 100  RI_FKey_cascade_del - ));
+DATA(insert OID = 1646 (  RI_FKey_cascade_del  PGUID 11 f t f 0 f 0 "" 100 0 0 100  RI_FKey_cascade_del - ));
 DESCR("referential integrity ON DELETE CASCADE");
-DATA(insert OID = 1647 (  RI_FKey_cascade_upd  PGUID 11 f t f 0 f 0 "" 100 0 0 100  RI_FKey_cascade_upd - ));
+DATA(insert OID = 1647 (  RI_FKey_cascade_upd  PGUID 11 f t f 0 f 0 "" 100 0 0 100  RI_FKey_cascade_upd - ));
 DESCR("referential integrity ON UPDATE CASCADE");
-DATA(insert OID = 1648 (  RI_FKey_restrict_del PGUID 11 f t f 0 f 0 "" 100 0 0 100  RI_FKey_restrict_del - ));
+DATA(insert OID = 1648 (  RI_FKey_restrict_del PGUID 11 f t f 0 f 0 "" 100 0 0 100  RI_FKey_restrict_del - ));
 DESCR("referential integrity ON DELETE RESTRICT");
-DATA(insert OID = 1649 (  RI_FKey_restrict_upd PGUID 11 f t f 0 f 0 "" 100 0 0 100  RI_FKey_restrict_upd - ));
+DATA(insert OID = 1649 (  RI_FKey_restrict_upd PGUID 11 f t f 0 f 0 "" 100 0 0 100  RI_FKey_restrict_upd - ));
 DESCR("referential integrity ON UPDATE RESTRICT");
-DATA(insert OID = 1650 (  RI_FKey_setnull_del  PGUID 11 f t f 0 f 0 "" 100 0 0 100  RI_FKey_setnull_del - ));
+DATA(insert OID = 1650 (  RI_FKey_setnull_del  PGUID 11 f t f 0 f 0 "" 100 0 0 100  RI_FKey_setnull_del - ));
 DESCR("referential integrity ON DELETE SET NULL");
-DATA(insert OID = 1651 (  RI_FKey_setnull_upd  PGUID 11 f t f 0 f 0 "" 100 0 0 100  RI_FKey_setnull_upd - ));
+DATA(insert OID = 1651 (  RI_FKey_setnull_upd  PGUID 11 f t f 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 11 f t f 0 f 0 "" 100 0 0 100  RI_FKey_setdefault_del - ));
+DATA(insert OID = 1652 (  RI_FKey_setdefault_del PGUID 11 f t f 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 11 f t f 0 f 0 "" 100 0 0 100  RI_FKey_setdefault_upd - ));
+DATA(insert OID = 1653 (  RI_FKey_setdefault_upd PGUID 11 f t f 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 11 f t f 0 f 0 "" 100 0 0 100 RI_FKey_noaction_del - ));
+DATA(insert OID = 1654 (  RI_FKey_noaction_del PGUID 11 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 11 f t f 0 f 0 "" 100 0 0 100 RI_FKey_noaction_upd - ));
+DATA(insert OID = 1655 (  RI_FKey_noaction_upd PGUID 11 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 11 f t t 2 f 16 "1562 1562" 100 0 1 0  varbiteq - ));
+DATA(insert OID = 1666 (  varbiteq         PGUID 11 f t t 2 f 16 "1562 1562" 100 0 1 0  varbiteq - ));
 DESCR("equal");
-DATA(insert OID = 1667 (  varbitne         PGUID 11 f t t 2 f 16 "1562 1562" 100 0 1 0  varbitne - ));
+DATA(insert OID = 1667 (  varbitne         PGUID 11 f t t 2 f 16 "1562 1562" 100 0 1 0  varbitne - ));
 DESCR("not equal");
-DATA(insert OID = 1668 (  varbitge         PGUID 11 f t t 2 f 16 "1562 1562" 100 0 1 0  varbitge - ));
+DATA(insert OID = 1668 (  varbitge         PGUID 11 f t t 2 f 16 "1562 1562" 100 0 1 0  varbitge - ));
 DESCR("greater than or equal");
-DATA(insert OID = 1669 (  varbitgt         PGUID 11 f t t 2 f 16 "1562 1562" 100 0 1 0  varbitgt - ));
+DATA(insert OID = 1669 (  varbitgt         PGUID 11 f t t 2 f 16 "1562 1562" 100 0 1 0  varbitgt - ));
 DESCR("greater than");
-DATA(insert OID = 1670 (  varbitle         PGUID 11 f t t 2 f 16 "1562 1562" 100 0 1 0  varbitle - ));
+DATA(insert OID = 1670 (  varbitle         PGUID 11 f t t 2 f 16 "1562 1562" 100 0 1 0  varbitle - ));
 DESCR("less than or equal");
-DATA(insert OID = 1671 (  varbitlt         PGUID 11 f t t 2 f 16 "1562 1562" 100 0 1 0  varbitlt - ));
+DATA(insert OID = 1671 (  varbitlt         PGUID 11 f t t 2 f 16 "1562 1562" 100 0 1 0  varbitlt - ));
 DESCR("less than");
-DATA(insert OID = 1672 (  varbitcmp            PGUID 11 f t t 2 f 23 "1562 1562" 100 0 1 0  varbitcmp - ));
+DATA(insert OID = 1672 (  varbitcmp            PGUID 11 f t t 2 f 23 "1562 1562" 100 0 1 0  varbitcmp - ));
 DESCR("compare");
 
-DATA(insert OID = 1673 (  bitand           PGUID 11 f t t 2 f 1560 "1560 1560" 100 0 1 0  bitand - ));
+DATA(insert OID = 1673 (  bitand           PGUID 11 f t t 2 f 1560 "1560 1560" 100 0 1 0  bitand - ));
 DESCR("bitwise and");
-DATA(insert OID = 1674 (  bitor                PGUID 11 f t t 2 f 1560 "1560 1560" 100 0 1 0  bitor - ));
+DATA(insert OID = 1674 (  bitor                PGUID 11 f t t 2 f 1560 "1560 1560" 100 0 1 0  bitor - ));
 DESCR("bitwise or");
-DATA(insert OID = 1675 (  bitxor           PGUID 11 f t t 2 f 1560 "1560 1560" 100 0 1 0  bitxor - ));
+DATA(insert OID = 1675 (  bitxor           PGUID 11 f t t 2 f 1560 "1560 1560" 100 0 1 0  bitxor - ));
 DESCR("bitwise exclusive or");
-DATA(insert OID = 1676 (  bitnot           PGUID 11 f t t 2 f 1560 "1560 1560" 100 0 1 0  bitnot - ));
+DATA(insert OID = 1676 (  bitnot           PGUID 11 f t t 2 f 1560 "1560 1560" 100 0 1 0  bitnot - ));
 DESCR("bitwise negation");
-DATA(insert OID = 1677 (  bitshiftright        PGUID 11 f t t 2 f 1560 "1560 1560" 100 0 1 0  bitshiftright - ));
+DATA(insert OID = 1677 (  bitshiftright        PGUID 11 f t t 2 f 1560 "1560 1560" 100 0 1 0  bitshiftright - ));
 DESCR("bitwise right shift");
-DATA(insert OID = 1678 (  bitshiftleft     PGUID 11 f t t 2 f 1560 "1560 1560" 100 0 1 0  bitshiftleft - ));
+DATA(insert OID = 1678 (  bitshiftleft     PGUID 11 f t t 2 f 1560 "1560 1560" 100 0 1 0  bitshiftleft - ));
 DESCR("bitwise left shift");
-DATA(insert OID = 1679 (  bitcat           PGUID 11 f t t 2 f 1560 "1560 1560" 100 0 1 0  bitcat - ));
+DATA(insert OID = 1679 (  bitcat           PGUID 11 f t t 2 f 1560 "1560 1560" 100 0 1 0  bitcat - ));
 DESCR("bitwise concatenation");
-DATA(insert OID = 1680 (  bitsubstr            PGUID 11 f t t 2 f 1560 "1560 1560" 100 0 1 0  bitsubstr - ));
+DATA(insert OID = 1680 (  bitsubstr            PGUID 11 f t t 2 f 1560 "1560 1560" 100 0 1 0  bitsubstr - ));
 DESCR("bitwise field");
 
-DATA(insert OID = 1681 (  varbitand            PGUID 11 f t t 2 f 1562 "1562 1562" 100 0 1 0  varbitand - ));
+DATA(insert OID = 1681 (  varbitand            PGUID 11 f t t 2 f 1562 "1562 1562" 100 0 1 0  varbitand - ));
 DESCR("bitwise and");
-DATA(insert OID = 1682 (  varbitor         PGUID 11 f t t 2 f 1562 "1562 1562" 100 0 1 0  varbitor - ));
+DATA(insert OID = 1682 (  varbitor         PGUID 11 f t t 2 f 1562 "1562 1562" 100 0 1 0  varbitor - ));
 DESCR("bitwise or");
-DATA(insert OID = 1683 (  varbitxor            PGUID 11 f t t 2 f 1562 "1562 1562" 100 0 1 0  varbitxor - ));
+DATA(insert OID = 1683 (  varbitxor            PGUID 11 f t t 2 f 1562 "1562 1562" 100 0 1 0  varbitxor - ));
 DESCR("bitwise exclusive or");
-DATA(insert OID = 1684 (  varbitnot            PGUID 11 f t t 2 f 1562 "1562 1562" 100 0 1 0  varbitnot - ));
+DATA(insert OID = 1684 (  varbitnot            PGUID 11 f t t 2 f 1562 "1562 1562" 100 0 1 0  varbitnot - ));
 DESCR("bitwise negation");
-DATA(insert OID = 1685 (  varbitshiftright PGUID 11 f t t 2 f 1562 "1562 1562" 100 0 1 0  varbitshiftright - ));
+DATA(insert OID = 1685 (  varbitshiftright PGUID 11 f t t 2 f 1562 "1562 1562" 100 0 1 0  varbitshiftright - ));
 DESCR("bitwise right shift");
-DATA(insert OID = 1686 (  varbitshiftleft  PGUID 11 f t t 2 f 1562 "1562 1562" 100 0 1 0  varbitshiftleft - ));
+DATA(insert OID = 1686 (  varbitshiftleft  PGUID 11 f t t 2 f 1562 "1562 1562" 100 0 1 0  varbitshiftleft - ));
 DESCR("bitwise left shift");
-DATA(insert OID = 1687 (  varbitcat            PGUID 11 f t t 2 f 1562 "1562 1562" 100 0 1 0  varbitcat - ));
+DATA(insert OID = 1687 (  varbitcat            PGUID 11 f t t 2 f 1562 "1562 1562" 100 0 1 0  varbitcat - ));
 DESCR("bitwise concatenation");
-DATA(insert OID = 1688 (  varbitsubstr     PGUID 11 f t t 2 f 1562 "1562 1562" 100 0 1 0  varbitsubstr - ));
+DATA(insert OID = 1688 (  varbitsubstr     PGUID 11 f t t 2 f 1562 "1562 1562" 100 0 1 0  varbitsubstr - ));
 DESCR("bitwise field");
 
 /* for mac type support */
-DATA(insert OID = 436 (  macaddr_in            PGUID 11 f t t 1 f 829 "0" 100 0 0 100  macaddr_in - ));
+DATA(insert OID = 436 (  macaddr_in            PGUID 11 f t t t 1 f 829 "0" 100 0 0 100    macaddr_in - ));
 DESCR("(internal)");
-DATA(insert OID = 437 (  macaddr_out       PGUID 11 f t t 1 f 23 "0" 100 0 0 100  macaddr_out - ));
+DATA(insert OID = 437 (  macaddr_out       PGUID 11 f t t 1 f 23 "0" 100 0 0 100  macaddr_out - ));
 DESCR("(internal)");
 
-DATA(insert OID = 830 (  macaddr_eq           PGUID 11 f t t 2 f 16 "829 829" 100 0 0 100  macaddr_eq - ));
+DATA(insert OID = 830 (  macaddr_eq           PGUID 11 f t t t 2 f 16 "829 829" 100 0 0 100    macaddr_eq - ));
 DESCR("equal");
-DATA(insert OID = 831 (  macaddr_lt           PGUID 11 f t t 2 f 16 "829 829" 100 0 0 100  macaddr_lt - ));
+DATA(insert OID = 831 (  macaddr_lt           PGUID 11 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 11 f t t 2 f 16 "829 829" 100 0 0 100  macaddr_le - ));
+DATA(insert OID = 832 (  macaddr_le           PGUID 11 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 11 f t t 2 f 16 "829 829" 100 0 0 100  macaddr_gt - ));
+DATA(insert OID = 833 (  macaddr_gt           PGUID 11 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 11 f t t 2 f 16 "829 829" 100 0 0 100  macaddr_ge - ));
+DATA(insert OID = 834 (  macaddr_ge           PGUID 11 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 11 f t t 2 f 16 "829 829" 100 0 0 100  macaddr_ne - ));
+DATA(insert OID = 835 (  macaddr_ne           PGUID 11 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 11 f t t 2 f 23 "829 829" 100 0 0 100  macaddr_cmp - ));
+DATA(insert OID = 836 (  macaddr_cmp      PGUID 11 f t t t 2 f 23 "829 829" 100 0 0 100    macaddr_cmp - ));
 DESCR("less-equal-greater");
-DATA(insert OID = 837 (  macaddr_manuf    PGUID 11 f t t 1 f 25 "829" 100 0 0 100  macaddr_manuf - ));
+DATA(insert OID = 837 (  macaddr_manuf    PGUID 11 f t t t 1 f 25 "829" 100 0 0 100    macaddr_manuf - ));
 DESCR("MAC manufacturer");
 
 /* for inet type support */
-DATA(insert OID = 910 (  inet_in           PGUID 11 f t t 1 f 869 "0" 100 0 0 100  inet_in - ));
+DATA(insert OID = 910 (  inet_in           PGUID 11 f t t t 1 f 869 "0" 100 0 0 100    inet_in - ));
 DESCR("(internal)");
-DATA(insert OID = 911 (  inet_out          PGUID 11 f t t 1 f 23 "0" 100 0 0 100  inet_out - ));
+DATA(insert OID = 911 (  inet_out          PGUID 11 f 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 11 f t t 1 f 650 "0" 100 0 0 100  cidr_in - ));
+DATA(insert OID = 1267 (  cidr_in          PGUID 11 f t t t 1 f 650 "0" 100 0 0 100    cidr_in - ));
 DESCR("(internal)");
-DATA(insert OID = 1427 (  cidr_out         PGUID 11 f t t 1 f 23 "0" 100 0 0 100  cidr_out - ));
+DATA(insert OID = 1427 (  cidr_out         PGUID 11 f 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 11 f t t 2 f 16 "869 869" 100 0 0 100  network_eq - ));
+DATA(insert OID = 920 (  network_eq           PGUID 11 f t t t 2 f 16 "869 869" 100 0 0 100    network_eq - ));
 DESCR("equal");
-DATA(insert OID = 921 (  network_lt           PGUID 11 f t t 2 f 16 "869 869" 100 0 0 100  network_lt - ));
+DATA(insert OID = 921 (  network_lt           PGUID 11 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 11 f t t 2 f 16 "869 869" 100 0 0 100  network_le - ));
+DATA(insert OID = 922 (  network_le           PGUID 11 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 11 f t t 2 f 16 "869 869" 100 0 0 100  network_gt - ));
+DATA(insert OID = 923 (  network_gt           PGUID 11 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 11 f t t 2 f 16 "869 869" 100 0 0 100  network_ge - ));
+DATA(insert OID = 924 (  network_ge           PGUID 11 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 11 f t t 2 f 16 "869 869" 100 0 0 100  network_ne - ));
+DATA(insert OID = 925 (  network_ne           PGUID 11 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 11 f t t 2 f 23 "869 869" 100 0 0 100  network_cmp - ));
+DATA(insert OID = 926 (  network_cmp          PGUID 11 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 11 f t t 2 f 16 "869 869" 100 0 0 100  network_sub - ));
+DATA(insert OID = 927 (  network_sub          PGUID 11 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 11 f t t 2 f 16 "869 869" 100 0 0 100  network_subeq - ));
+DATA(insert OID = 928 (  network_subeq        PGUID 11 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 11 f t t 2 f 16 "869 869" 100 0 0 100  network_sup - ));
+DATA(insert OID = 929 (  network_sup          PGUID 11 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 11 f t t 2 f 16 "869 869" 100 0 0 100  network_supeq - ));
+DATA(insert OID = 930 (  network_supeq        PGUID 11 f t t t 2 f 16 "869 869" 100 0 0 100    network_supeq - ));
 DESCR("is-supernet-or-equal");
 
 /* inet/cidr versions */
-DATA(insert OID = 696 (  netmask               PGUID 11 f t t 1 f 25 "869" 100 0 0 100  network_netmask - ));
+DATA(insert OID = 696 (  netmask               PGUID 11 f t t 1 f 25 "869" 100 0 0 100  network_netmask - ));
 DESCR("netmask of address");
-DATA(insert OID = 697 (  masklen               PGUID 11 f t t 1 f 23 "869" 100 0 0 100  network_masklen - ));
+DATA(insert OID = 697 (  masklen               PGUID 11 f t t 1 f 23 "869" 100 0 0 100  network_masklen - ));
 DESCR("netmask length");
-DATA(insert OID = 698 (  broadcast             PGUID 11 f t t 1 f 25 "869" 100 0 0 100  network_broadcast - ));
+DATA(insert OID = 698 (  broadcast             PGUID 11 f t t 1 f 25 "869" 100 0 0 100  network_broadcast - ));
 DESCR("broadcast address");
-DATA(insert OID = 699 (  host                  PGUID 11 f t t 1 f 25 "869" 100 0 0 100  network_host - ));
+DATA(insert OID = 699 (  host                  PGUID 11 f t t 1 f 25 "869" 100 0 0 100  network_host - ));
 DESCR("host address");
-DATA(insert OID = 683 (  network               PGUID 11 f t t 1 f 25 "869" 100 0 0 100  network_network - ));
+DATA(insert OID = 683 (  network               PGUID 11 f t t 1 f 25 "869" 100 0 0 100  network_network - ));
 DESCR("network address");
 
-DATA(insert OID =  1691 (  boolle             PGUID 11 f t t 2 f 16 "16 16" 100 0 0 100  boolle - ));
+DATA(insert OID =  1691 (  boolle             PGUID 11 f t t 2 f 16 "16 16" 100 0 0 100  boolle - ));
 DESCR("less-than-or-equal");
-DATA(insert OID =  1692 (  boolge             PGUID 11 f t t 2 f 16 "16 16" 100 0 0 100  boolge - ));
+DATA(insert OID =  1692 (  boolge             PGUID 11 f t t 2 f 16 "16 16" 100 0 0 100  boolge - ));
 DESCR("greater-than-or-equal");
-DATA(insert OID = 1693 (  btboolcmp               PGUID 11 f t t 2 f 23 "16 16" 100 0 0 100  btboolcmp - ));
+DATA(insert OID = 1693 (  btboolcmp               PGUID 11 f t t 2 f 23 "16 16" 100 0 0 100  btboolcmp - ));
 DESCR("btree less-equal-greater");
 
 /* OID's 1700 - 1799 NUMERIC data type */
-DATA(insert OID = 1701 ( numeric_in                PGUID 11 f t t 3 f 1700 "0 0 23" 100 0 0 100  numeric_in - ));
+DATA(insert OID = 1701 ( numeric_in                PGUID 11 f t t 3 f 1700 "0 0 23" 100 0 0 100  numeric_in - ));
 DESCR("(internal)");
-DATA(insert OID = 1702 ( numeric_out           PGUID 11 f t t 1 f 23 "0" 100 0 0 100  numeric_out - ));
+DATA(insert OID = 1702 ( numeric_out           PGUID 11 f t t 1 f 23 "0" 100 0 0 100  numeric_out - ));
 DESCR("(internal)");
-DATA(insert OID = 1703 ( numeric               PGUID 11 f t t 2 f 1700 "1700 23" 100 0 0 100  numeric - ));
+DATA(insert OID = 1703 ( numeric               PGUID 11 f t t 2 f 1700 "1700 23" 100 0 0 100  numeric - ));
 DESCR("(internal)");
-DATA(insert OID = 1704 ( numeric_abs           PGUID 11 f t t 1 f 1700 "1700" 100 0 0 100  numeric_abs - ));
+DATA(insert OID = 1704 ( numeric_abs           PGUID 11 f t t t 1 f 1700 "1700" 100 0 0 100    numeric_abs - ));
 DESCR("absolute value");
-DATA(insert OID = 1705 ( abs                   PGUID 11 f t t 1 f 1700 "1700" 100 0 0 100  numeric_abs - ));
+DATA(insert OID = 1705 ( abs                   PGUID 11 f t t t 1 f 1700 "1700" 100 0 0 100    numeric_abs - ));
 DESCR("absolute value");
-DATA(insert OID = 1706 ( sign                  PGUID 11 f t t 1 f 1700 "1700" 100 0 0 100  numeric_sign - ));
+DATA(insert OID = 1706 ( sign                  PGUID 11 f t t t 1 f 1700 "1700" 100 0 0 100    numeric_sign - ));
 DESCR("sign of value");
-DATA(insert OID = 1707 ( round                 PGUID 11 f t t 2 f 1700 "1700 23" 100 0 0 100  numeric_round - ));
+DATA(insert OID = 1707 ( round                 PGUID 11 f 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 1 f 1700 "1700" 100 0 0 100  "select numeric_round($1,0)" - ));
+DATA(insert OID = 1708 ( round                 PGUID 14 f t t t 1 f 1700 "1700" 100 0 0 100    "select numeric_round($1,0)" - ));
 DESCR("value rounded to 'scale' of zero");
-DATA(insert OID = 1709 ( trunc                 PGUID 11 f t t 2 f 1700 "1700 23" 100 0 0 100  numeric_trunc - ));
+DATA(insert OID = 1709 ( trunc                 PGUID 11 f 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 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 11 f t t 1 f 1700 "1700" 100 0 0 100  numeric_ceil - ));
+DATA(insert OID = 1711 ( ceil                  PGUID 11 f t t t 1 f 1700 "1700" 100 0 0 100    numeric_ceil - ));
 DESCR("smallest integer >= value");
-DATA(insert OID = 1712 ( floor                 PGUID 11 f t t 1 f 1700 "1700" 100 0 0 100  numeric_floor - ));
+DATA(insert OID = 1712 ( floor                 PGUID 11 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 11 f t t 2 f 16 "1700 1700" 100 0 0 100  numeric_eq - ));
+DATA(insert OID = 1718 ( numeric_eq                PGUID 11 f t t 2 f 16 "1700 1700" 100 0 0 100  numeric_eq - ));
 DESCR("equal");
-DATA(insert OID = 1719 ( numeric_ne                PGUID 11 f t t 2 f 16 "1700 1700" 100 0 0 100  numeric_ne - ));
+DATA(insert OID = 1719 ( numeric_ne                PGUID 11 f t t 2 f 16 "1700 1700" 100 0 0 100  numeric_ne - ));
 DESCR("not equal");
-DATA(insert OID = 1720 ( numeric_gt                PGUID 11 f t t 2 f 16 "1700 1700" 100 0 0 100  numeric_gt - ));
+DATA(insert OID = 1720 ( numeric_gt                PGUID 11 f t t 2 f 16 "1700 1700" 100 0 0 100  numeric_gt - ));
 DESCR("greater-than");
-DATA(insert OID = 1721 ( numeric_ge                PGUID 11 f t t 2 f 16 "1700 1700" 100 0 0 100  numeric_ge - ));
+DATA(insert OID = 1721 ( numeric_ge                PGUID 11 f t t 2 f 16 "1700 1700" 100 0 0 100  numeric_ge - ));
 DESCR("greater-than-or-equal");
-DATA(insert OID = 1722 ( numeric_lt                PGUID 11 f t t 2 f 16 "1700 1700" 100 0 0 100  numeric_lt - ));
+DATA(insert OID = 1722 ( numeric_lt                PGUID 11 f t t 2 f 16 "1700 1700" 100 0 0 100  numeric_lt - ));
 DESCR("lower-than");
-DATA(insert OID = 1723 ( numeric_le                PGUID 11 f t t 2 f 16 "1700 1700" 100 0 0 100  numeric_le - ));
+DATA(insert OID = 1723 ( numeric_le                PGUID 11 f t t 2 f 16 "1700 1700" 100 0 0 100  numeric_le - ));
 DESCR("lower-than-or-equal");
-DATA(insert OID = 1724 ( numeric_add           PGUID 11 f t t 2 f 1700 "1700 1700" 100 0 0 100  numeric_add - ));
+DATA(insert OID = 1724 ( numeric_add           PGUID 11 f t t 2 f 1700 "1700 1700" 100 0 0 100  numeric_add - ));
 DESCR("addition");
-DATA(insert OID = 1725 ( numeric_sub           PGUID 11 f t t 2 f 1700 "1700 1700" 100 0 0 100  numeric_sub - ));
+DATA(insert OID = 1725 ( numeric_sub           PGUID 11 f t t 2 f 1700 "1700 1700" 100 0 0 100  numeric_sub - ));
 DESCR("subtract");
-DATA(insert OID = 1726 ( numeric_mul           PGUID 11 f t t 2 f 1700 "1700 1700" 100 0 0 100  numeric_mul - ));
+DATA(insert OID = 1726 ( numeric_mul           PGUID 11 f t t 2 f 1700 "1700 1700" 100 0 0 100  numeric_mul - ));
 DESCR("multiply");
-DATA(insert OID = 1727 ( numeric_div           PGUID 11 f t t 2 f 1700 "1700 1700" 100 0 0 100  numeric_div - ));
+DATA(insert OID = 1727 ( numeric_div           PGUID 11 f t t 2 f 1700 "1700 1700" 100 0 0 100  numeric_div - ));
 DESCR("divide");
-DATA(insert OID = 1728 ( mod                   PGUID 11 f t t 2 f 1700 "1700 1700" 100 0 0 100  numeric_mod - ));
+DATA(insert OID = 1728 ( mod                   PGUID 11 f t t 2 f 1700 "1700 1700" 100 0 0 100  numeric_mod - ));
 DESCR("modulus");
-DATA(insert OID = 1729 ( numeric_mod           PGUID 11 f t t 2 f 1700 "1700 1700" 100 0 0 100  numeric_mod - ));
+DATA(insert OID = 1729 ( numeric_mod           PGUID 11 f t t 2 f 1700 "1700 1700" 100 0 0 100  numeric_mod - ));
 DESCR("modulus");
-DATA(insert OID = 1730 ( sqrt                  PGUID 11 f t t 1 f 1700 "1700" 100 0 0 100  numeric_sqrt - ));
+DATA(insert OID = 1730 ( sqrt                  PGUID 11 f t t t 1 f 1700 "1700" 100 0 0 100    numeric_sqrt - ));
 DESCR("square root");
-DATA(insert OID = 1731 ( numeric_sqrt          PGUID 11 f t t 1 f 1700 "1700" 100 0 0 100  numeric_sqrt - ));
+DATA(insert OID = 1731 ( numeric_sqrt          PGUID 11 f t t t 1 f 1700 "1700" 100 0 0 100    numeric_sqrt - ));
 DESCR("square root");
-DATA(insert OID = 1732 ( exp                   PGUID 11 f t t 1 f 1700 "1700" 100 0 0 100  numeric_exp - ));
+DATA(insert OID = 1732 ( exp                   PGUID 11 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 11 f t t 1 f 1700 "1700" 100 0 0 100  numeric_exp - ));
+DATA(insert OID = 1733 ( numeric_exp           PGUID 11 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 11 f t t 1 f 1700 "1700" 100 0 0 100  numeric_ln - ));
+DATA(insert OID = 1734 ( ln                        PGUID 11 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 11 f t t 1 f 1700 "1700" 100 0 0 100  numeric_ln - ));
+DATA(insert OID = 1735 ( numeric_ln                PGUID 11 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 11 f t t 2 f 1700 "1700 1700" 100 0 0 100  numeric_log - ));
+DATA(insert OID = 1736 ( log                   PGUID 11 f t t 2 f 1700 "1700 1700" 100 0 0 100  numeric_log - ));
 DESCR("logarithm base m of n");
-DATA(insert OID = 1737 ( numeric_log           PGUID 11 f t t 2 f 1700 "1700 1700" 100 0 0 100  numeric_log - ));
+DATA(insert OID = 1737 ( numeric_log           PGUID 11 f t t 2 f 1700 "1700 1700" 100 0 0 100  numeric_log - ));
 DESCR("logarithm base m of n");
-DATA(insert OID = 1738 ( pow                   PGUID 11 f t t 2 f 1700 "1700 1700" 100 0 0 100  numeric_power - ));
+DATA(insert OID = 1738 ( pow                   PGUID 11 f t t 2 f 1700 "1700 1700" 100 0 0 100  numeric_power - ));
 DESCR("m raised to the power of n");
-DATA(insert OID = 1739 ( numeric_power         PGUID 11 f t t 2 f 1700 "1700 1700" 100 0 0 100  numeric_power - ));
+DATA(insert OID = 1739 ( numeric_power         PGUID 11 f 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 11 f t t 1 f 1700 "23" 100 0 0 100  int4_numeric - ));
+DATA(insert OID = 1740 ( numeric               PGUID 11 f t t 1 f 1700 "23" 100 0 0 100  int4_numeric - ));
 DESCR("(internal)");
-DATA(insert OID = 1741 ( log                   PGUID 14 f 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 11 f t t 1 f 1700 "700" 100 0 0 100  float4_numeric - ));
+DATA(insert OID = 1742 ( numeric               PGUID 11 f t t 1 f 1700 "700" 100 0 0 100  float4_numeric - ));
 DESCR("(internal)");
-DATA(insert OID = 1743 ( numeric               PGUID 11 f t t 1 f 1700 "701" 100 0 0 100  float8_numeric - ));
+DATA(insert OID = 1743 ( numeric               PGUID 11 f t t 1 f 1700 "701" 100 0 0 100  float8_numeric - ));
 DESCR("(internal)");
-DATA(insert OID = 1744 ( int4                  PGUID 11 f t t 1 f 23 "1700" 100 0 0 100  numeric_int4 - ));
+DATA(insert OID = 1744 ( int4                  PGUID 11 f t t 1 f 23 "1700" 100 0 0 100  numeric_int4 - ));
 DESCR("(internal)");
-DATA(insert OID = 1745 ( float4                    PGUID 11 f t t 1 f 700 "1700" 100 0 0 100  numeric_float4 - ));
+DATA(insert OID = 1745 ( float4                    PGUID 11 f t t 1 f 700 "1700" 100 0 0 100  numeric_float4 - ));
 DESCR("(internal)");
-DATA(insert OID = 1746 ( float8                    PGUID 11 f t t 1 f 701 "1700" 100 0 0 100  numeric_float8 - ));
+DATA(insert OID = 1746 ( float8                    PGUID 11 f t t 1 f 701 "1700" 100 0 0 100  numeric_float8 - ));
 DESCR("(internal)");
-DATA(insert OID = 1764 ( numeric_inc           PGUID 11 f t t 1 f 1700 "1700" 100 0 0 100  numeric_inc - ));
+DATA(insert OID = 1764 ( numeric_inc           PGUID 11 f t t t 1 f 1700 "1700" 100 0 0 100    numeric_inc - ));
 DESCR("increment by one");
-DATA(insert OID = 1765 ( numeric_dec           PGUID 11 f t t 1 f 1700 "1700" 100 0 0 100  numeric_dec - ));
+DATA(insert OID = 1765 ( numeric_dec           PGUID 11 f t t t 1 f 1700 "1700" 100 0 0 100    numeric_dec - ));
 DESCR("decrement by one");
-DATA(insert OID = 1766 ( numeric_smaller       PGUID 11 f t t 2 f 1700 "1700 1700" 100 0 0 100  numeric_smaller - ));
+DATA(insert OID = 1766 ( numeric_smaller       PGUID 11 f t t 2 f 1700 "1700 1700" 100 0 0 100  numeric_smaller - ));
 DESCR("smaller of two numbers");
-DATA(insert OID = 1767 ( numeric_larger            PGUID 11 f t t 2 f 1700 "1700 1700" 100 0 0 100  numeric_larger - ));
+DATA(insert OID = 1767 ( numeric_larger            PGUID 11 f t t 2 f 1700 "1700 1700" 100 0 0 100  numeric_larger - ));
 DESCR("larger of two numbers");
-DATA(insert OID = 1769 ( numeric_cmp           PGUID 11 f t t 2 f 23 "1700 1700" 100 0 0 100  numeric_cmp - ));
+DATA(insert OID = 1769 ( numeric_cmp           PGUID 11 f t t 2 f 23 "1700 1700" 100 0 0 100  numeric_cmp - ));
 DESCR("compare two numbers");
-DATA(insert OID = 1771 ( numeric_uminus            PGUID 11 f t t 1 f 1700 "1700" 100 0 0 100  numeric_uminus - ));
+DATA(insert OID = 1771 ( numeric_uminus            PGUID 11 f t t t 1 f 1700 "1700" 100 0 0 100    numeric_uminus - ));
 DESCR("negate");
-DATA(insert OID = 1779 ( int8                  PGUID 11 f t t 1 f 20 "1700" 100 0 0 100  numeric_int8 - ));
+DATA(insert OID = 1779 ( int8                  PGUID 11 f t t 1 f 20 "1700" 100 0 0 100  numeric_int8 - ));
 DESCR("(internal)");
-DATA(insert OID = 1781 ( numeric               PGUID 11 f t t 1 f 1700 "20" 100 0 0 100  int8_numeric - ));
+DATA(insert OID = 1781 ( numeric               PGUID 11 f t t 1 f 1700 "20" 100 0 0 100  int8_numeric - ));
 DESCR("(internal)");
-DATA(insert OID = 1782 ( numeric               PGUID 11 f t t 1 f 1700 "21" 100 0 0 100  int2_numeric - ));
+DATA(insert OID = 1782 ( numeric               PGUID 11 f t t 1 f 1700 "21" 100 0 0 100  int2_numeric - ));
 DESCR("(internal)");
-DATA(insert OID = 1783 ( int2                  PGUID 11 f t t 1 f 21 "1700" 100 0 0 100  numeric_int2 - ));
+DATA(insert OID = 1783 ( int2                  PGUID 11 f t t 1 f 21 "1700" 100 0 0 100  numeric_int2 - ));
 DESCR("(internal)");
 
 /* formatting */
-DATA(insert OID = 1770 ( to_char           PGUID 11 f t f 2 f  25 "1184 25" 100 0 0 100  timestamp_to_char - ));
+DATA(insert OID = 1770 ( to_char           PGUID 11 f t f t 2 f    25 "1184 25" 100 0 0 100  timestamp_to_char - ));
 DESCR("format timestamp to text");
-DATA(insert OID = 1772 ( to_char           PGUID 11 f t f 2 f  25 "1700 25" 100 0 0 100  numeric_to_char - ));
+DATA(insert OID = 1772 ( to_char           PGUID 11 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 11 f t f 2 f  25 "23 25" 100 0 0 100  int4_to_char - ));
+DATA(insert OID = 1773 ( to_char           PGUID 11 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 11 f t f 2 f  25 "20 25" 100 0 0 100  int8_to_char - ));
+DATA(insert OID = 1774 ( to_char           PGUID 11 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 11 f t f 2 f  25 "700 25" 100 0 0 100  float4_to_char - ));
+DATA(insert OID = 1775 ( to_char           PGUID 11 f t f t 2 f    25 "700 25" 100 0 0 100  float4_to_char - ));
 DESCR("format float4 to text");
-DATA(insert OID = 1776 ( to_char           PGUID 11 f t f 2 f  25 "701 25" 100 0 0 100  float8_to_char - ));
+DATA(insert OID = 1776 ( to_char           PGUID 11 f t f t 2 f    25 "701 25" 100 0 0 100  float8_to_char - ));
 DESCR("format float8 to text");
-DATA(insert OID = 1777 ( to_number         PGUID 11 f t f 2 f  1700 "25 25" 100 0 0 100  numeric_to_number - ));
+DATA(insert OID = 1777 ( to_number         PGUID 11 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 11 f t f 2 f  1184 "25 25" 100 0 0 100  to_timestamp - ));
+DATA(insert OID = 1778 ( to_timestamp      PGUID 11 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 11 f t f 2 f  1082 "25 25" 100 0 0 100  to_date - ));
+DATA(insert OID = 1780 ( to_date           PGUID 11 f t f t 2 f    1082 "25 25" 100 0 0 100  to_date - ));
 DESCR("convert text to date");
 
 /* Selectivity estimators for LIKE and related operators */
-DATA(insert OID = 1818 ( regexeqsel            PGUID 11 f t f 5 f 701 "26 26 21 0 23" 100 0 0 100  regexeqsel - ));
+DATA(insert OID = 1818 ( regexeqsel            PGUID 11 f t f 5 f 701 "26 26 21 0 23" 100 0 0 100  regexeqsel - ));
 DESCR("restriction selectivity of regex match");
-DATA(insert OID = 1819 ( likesel           PGUID 11 f t f 5 f 701 "26 26 21 0 23" 100 0 0 100  likesel - ));
+DATA(insert OID = 1819 ( likesel           PGUID 11 f t f 5 f 701 "26 26 21 0 23" 100 0 0 100  likesel - ));
 DESCR("restriction selectivity of LIKE");
-DATA(insert OID = 1820 ( icregexeqsel      PGUID 11 f t f 5 f 701 "26 26 21 0 23" 100 0 0 100  icregexeqsel - ));
+DATA(insert OID = 1820 ( icregexeqsel      PGUID 11 f t f 5 f 701 "26 26 21 0 23" 100 0 0 100  icregexeqsel - ));
 DESCR("restriction selectivity of case-insensitive regex match");
-DATA(insert OID = 1821 ( regexnesel            PGUID 11 f t f 5 f 701 "26 26 21 0 23" 100 0 0 100  regexnesel - ));
+DATA(insert OID = 1821 ( regexnesel            PGUID 11 f t f 5 f 701 "26 26 21 0 23" 100 0 0 100  regexnesel - ));
 DESCR("restriction selectivity of regex non-match");
-DATA(insert OID = 1822 ( nlikesel          PGUID 11 f t f 5 f 701 "26 26 21 0 23" 100 0 0 100  nlikesel - ));
+DATA(insert OID = 1822 ( nlikesel          PGUID 11 f t f 5 f 701 "26 26 21 0 23" 100 0 0 100  nlikesel - ));
 DESCR("restriction selectivity of NOT LIKE");
-DATA(insert OID = 1823 ( icregexnesel      PGUID 11 f t f 5 f 701 "26 26 21 0 23" 100 0 0 100  icregexnesel - ));
+DATA(insert OID = 1823 ( icregexnesel      PGUID 11 f t f 5 f 701 "26 26 21 0 23" 100 0 0 100  icregexnesel - ));
 DESCR("restriction selectivity of case-insensitive regex non-match");
-DATA(insert OID = 1824 ( regexeqjoinsel        PGUID 11 f t f 5 f 701 "26 26 21 26 21" 100 0 0 100 regexeqjoinsel - ));
+DATA(insert OID = 1824 ( regexeqjoinsel        PGUID 11 f t f t 5 f 701 "26 26 21 26 21" 100 0 0 100   regexeqjoinsel - ));
 DESCR("join selectivity of regex match");
-DATA(insert OID = 1825 ( likejoinsel       PGUID 11 f t f 5 f 701 "26 26 21 26 21" 100 0 0 100 likejoinsel - ));
+DATA(insert OID = 1825 ( likejoinsel       PGUID 11 f t f t 5 f 701 "26 26 21 26 21" 100 0 0 100   likejoinsel - ));
 DESCR("join selectivity of LIKE");
-DATA(insert OID = 1826 ( icregexeqjoinsel  PGUID 11 f t f 5 f 701 "26 26 21 26 21" 100 0 0 100 icregexeqjoinsel - ));
+DATA(insert OID = 1826 ( icregexeqjoinsel  PGUID 11 f t f t 5 f 701 "26 26 21 26 21" 100 0 0 100   icregexeqjoinsel - ));
 DESCR("join selectivity of case-insensitive regex match");
-DATA(insert OID = 1827 ( regexnejoinsel        PGUID 11 f t f 5 f 701 "26 26 21 26 21" 100 0 0 100 regexnejoinsel - ));
+DATA(insert OID = 1827 ( regexnejoinsel        PGUID 11 f t f t 5 f 701 "26 26 21 26 21" 100 0 0 100   regexnejoinsel - ));
 DESCR("join selectivity of regex non-match");
-DATA(insert OID = 1828 ( nlikejoinsel      PGUID 11 f t f 5 f 701 "26 26 21 26 21" 100 0 0 100 nlikejoinsel - ));
+DATA(insert OID = 1828 ( nlikejoinsel      PGUID 11 f t f t 5 f 701 "26 26 21 26 21" 100 0 0 100   nlikejoinsel - ));
 DESCR("join selectivity of NOT LIKE");
-DATA(insert OID = 1829 ( icregexnejoinsel  PGUID 11 f t f 5 f 701 "26 26 21 26 21" 100 0 0 100 icregexnejoinsel - ));
+DATA(insert OID = 1829 ( icregexnejoinsel  PGUID 11 f t f t 5 f 701 "26 26 21 26 21" 100 0 0 100   icregexnejoinsel - ));
 DESCR("join selectivity of case-insensitive regex non-match");
 
 
@@ -2472,8 +2475,9 @@ extern Oid ProcedureCreate(char *procedureName,
                char *languageName,
                char *prosrc,
                char *probin,
-               bool canCache,
                bool trusted,
+               bool canCache,
+               bool isStrict,
                int32 byte_pct,
                int32 perbyte_cpu,
                int32 percall_cpu,
index 1c64712ebe32e1379da5af90a8e07809fccad3ee..26f2daac535eb7a0fd3103151145d67fc474b774 100644 (file)
@@ -7,7 +7,7 @@
  * Portions Copyright (c) 1996-2000, PostgreSQL, Inc
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $Id: functions.h,v 1.11 2000/01/26 05:58:05 momjian Exp $
+ * $Id: functions.h,v 1.12 2000/05/28 17:56:18 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
 #include "utils/syscache.h"
 
 extern Datum ProjectAttribute(TupleDesc TD, TargetEntry *tlist,
-                HeapTuple tup, bool *isnullP);
+                             HeapTuple tup, bool *isnullP);
 
-extern Datum postquel_function(Func *funcNode, char **args,
-                 bool *isNull, bool *isDone);
+extern Datum postquel_function(FunctionCallInfo fcinfo,
+                              FunctionCachePtr fcache,
+                              List *func_tlist,
+                              bool *isDone);
 
 #endif  /* FUNCTIONS_H */
diff --git a/src/include/fmgr.h b/src/include/fmgr.h
new file mode 100644 (file)
index 0000000..18b01f7
--- /dev/null
@@ -0,0 +1,301 @@
+/*-------------------------------------------------------------------------
+ *
+ * fmgr.h
+ *    Definitions for the Postgres function manager and function-call
+ *    interface.
+ *
+ * This file must be included by all Postgres modules that either define
+ * or call fmgr-callable functions.
+ *
+ *
+ * Portions Copyright (c) 1996-2000, PostgreSQL, Inc
+ * Portions Copyright (c) 1994, Regents of the University of California
+ *
+ * $Id: fmgr.h,v 1.1 2000/05/28 17:56:12 tgl Exp $
+ *
+ *-------------------------------------------------------------------------
+ */
+#ifndef    FMGR_H
+#define FMGR_H
+
+
+/*
+ * All functions that can be called directly by fmgr must have this signature.
+ * (Other functions can be called by using a handler that does have this
+ * signature.)
+ */
+
+typedef struct FunctionCallInfoData    *FunctionCallInfo;
+
+typedef Datum (*PGFunction) (FunctionCallInfo fcinfo);
+
+/*
+ * This struct holds the system-catalog information that must be looked up
+ * before a function can be called through fmgr.  If the same function is
+ * to be called multiple times, the lookup need be done only once and the
+ * info struct saved for re-use.
+ */
+typedef struct
+{
+    PGFunction  fn_addr;    /* pointer to function or handler to be called */
+    Oid         fn_oid;     /* OID of function (NOT of handler, if any) */
+    short       fn_nargs;   /* 0..FUNC_MAX_ARGS, or -1 if variable arg count */
+    bool        fn_strict;  /* function is "strict" (NULL in => NULL out) */
+    void       *fn_extra;   /* extra space for use by handler */
+} FmgrInfo;
+
+/*
+ * This struct is the data actually passed to an fmgr-called function.
+ */
+typedef struct FunctionCallInfoData
+{
+    FmgrInfo   *flinfo;            /* ptr to lookup info used for this call */
+    struct Node *context;      /* pass info about context of call */
+    struct Node *resultinfo;   /* pass or return extra info about result */
+    bool        isnull;         /* function must set true if result is NULL */
+   short       nargs;          /* # arguments actually passed */
+    Datum       arg[FUNC_MAX_ARGS];    /* Arguments passed to function */
+    bool        argnull[FUNC_MAX_ARGS];    /* T if arg[i] is actually NULL */
+} FunctionCallInfoData;
+
+/*
+ * This routine fills a FmgrInfo struct, given the OID
+ * of the function to be called.
+ */
+extern void fmgr_info(Oid functionId, FmgrInfo *finfo);
+
+/*
+ * This macro invokes a function given a filled-in FunctionCallInfoData
+ * struct.  The macro result is the returned Datum --- but note that
+ * caller must still check fcinfo->isnull!  Also, if function is strict,
+ * it is caller's responsibility to verify that no null arguments are present
+ * before calling.
+ */
+#define FunctionCallInvoke(fcinfo)  ((* (fcinfo)->flinfo->fn_addr) (fcinfo))
+
+
+/*-------------------------------------------------------------------------
+ *     Support macros to ease writing fmgr-compatible functions
+ *
+ * A C-coded fmgr-compatible function should be declared as
+ *
+ *     Datum
+ *     function_name(PG_FUNCTION_ARGS)
+ *     {
+ *         ...
+ *     }
+ *
+ * It should access its arguments using appropriate PG_GETARG_xxx macros
+ * and should return its result using PG_RETURN_xxx.
+ *
+ *-------------------------------------------------------------------------
+ */
+
+/* Standard parameter list for fmgr-compatible functions */
+#define PG_FUNCTION_ARGS   FunctionCallInfo fcinfo
+
+/* If function is not marked "proisstrict" in pg_proc, it must check for
+ * null arguments using this macro.  Do not try to GETARG a null argument!
+ */
+#define PG_ARGISNULL(n)  (fcinfo->argnull[n])
+
+/* Macros for fetching arguments of standard types */
+
+#define PG_GETARG_INT32(n)   DatumGetInt32(fcinfo->arg[n])
+#define PG_GETARG_INT16(n)   DatumGetInt16(fcinfo->arg[n])
+#define PG_GETARG_CHAR(n)    DatumGetChar(fcinfo->arg[n])
+#define PG_GETARG_BOOL(n)    DatumGetBool(fcinfo->arg[n])
+#define PG_GETARG_OID(n)     DatumGetObjectId(fcinfo->arg[n])
+#define PG_GETARG_POINTER(n) DatumGetPointer(fcinfo->arg[n])
+/* these macros hide the pass-by-reference-ness of the datatype: */
+#define PG_GETARG_FLOAT4(n)  DatumGetFloat4(fcinfo->arg[n])
+#define PG_GETARG_FLOAT8(n)  DatumGetFloat8(fcinfo->arg[n])
+#define PG_GETARG_INT64(n)   DatumGetInt64(fcinfo->arg[n])
+/* use this if you want the raw, possibly-toasted input datum: */
+#define PG_GETARG_RAW_VARLENA_P(n)  ((struct varlena *) PG_GETARG_POINTER(n))
+/* use this if you want the input datum de-toasted: */
+#define PG_GETARG_VARLENA_P(n)  \
+   (VARATT_IS_EXTENDED(PG_GETARG_RAW_VARLENA_P(n)) ?  \
+    (struct varlena *) heap_tuple_untoast_attr((varattrib *) PG_GETARG_RAW_VARLENA_P(n)) :  \
+    PG_GETARG_RAW_VARLENA_P(n))
+/* GETARG macros for varlena types will typically look like this: */
+#define PG_GETARG_TEXT_P(n) ((text *) PG_GETARG_VARLENA_P(n))
+
+/* To return a NULL do this: */
+#define PG_RETURN_NULL()  \
+   do { fcinfo->isnull = true; return (Datum) 0; } while (0)
+
+/* Macros for returning results of standard types */
+
+#define PG_RETURN_INT32(x)   return Int32GetDatum(x)
+#define PG_RETURN_INT16(x)   return Int16GetDatum(x)
+#define PG_RETURN_CHAR(x)    return CharGetDatum(x)
+#define PG_RETURN_BOOL(x)    return BoolGetDatum(x)
+#define PG_RETURN_OID(x)     return ObjectIdGetDatum(x)
+#define PG_RETURN_POINTER(x) return PointerGetDatum(x)
+/* these macros hide the pass-by-reference-ness of the datatype: */
+#define PG_RETURN_FLOAT4(x)  return Float4GetDatum(x)
+#define PG_RETURN_FLOAT8(x)  return Float8GetDatum(x)
+#define PG_RETURN_INT64(x)   return Int64GetDatum(x)
+/* RETURN macros for other pass-by-ref types will typically look like this: */
+#define PG_RETURN_TEXT_P(x)  PG_RETURN_POINTER(x)
+
+
+/*-------------------------------------------------------------------------
+ *     Support routines and macros for callers of fmgr-compatible functions
+ *-------------------------------------------------------------------------
+ */
+
+/* These are for invocation of a specifically named function with a
+ * directly-computed parameter list.  Note that neither arguments nor result
+ * are allowed to be NULL.
+ */
+extern Datum DirectFunctionCall1(PGFunction func, Datum arg1);
+extern Datum DirectFunctionCall2(PGFunction func, Datum arg1, Datum arg2);
+extern Datum DirectFunctionCall3(PGFunction func, Datum arg1, Datum arg2,
+                                Datum arg3);
+extern Datum DirectFunctionCall4(PGFunction func, Datum arg1, Datum arg2,
+                                Datum arg3, Datum arg4);
+extern Datum DirectFunctionCall5(PGFunction func, Datum arg1, Datum arg2,
+                                Datum arg3, Datum arg4, Datum arg5);
+extern Datum DirectFunctionCall6(PGFunction func, Datum arg1, Datum arg2,
+                                Datum arg3, Datum arg4, Datum arg5,
+                                Datum arg6);
+extern Datum DirectFunctionCall7(PGFunction func, Datum arg1, Datum arg2,
+                                Datum arg3, Datum arg4, Datum arg5,
+                                Datum arg6, Datum arg7);
+extern Datum DirectFunctionCall8(PGFunction func, Datum arg1, Datum arg2,
+                                Datum arg3, Datum arg4, Datum arg5,
+                                Datum arg6, Datum arg7, Datum arg8);
+extern Datum DirectFunctionCall9(PGFunction func, Datum arg1, Datum arg2,
+                                Datum arg3, Datum arg4, Datum arg5,
+                                Datum arg6, Datum arg7, Datum arg8,
+                                Datum arg9);
+
+/* These are for invocation of a previously-looked-up function with a
+ * directly-computed parameter list.  Note that neither arguments nor result
+ * are allowed to be NULL.
+ */
+extern Datum FunctionCall1(FmgrInfo *flinfo, Datum arg1);
+extern Datum FunctionCall2(FmgrInfo *flinfo, Datum arg1, Datum arg2);
+extern Datum FunctionCall3(FmgrInfo *flinfo, Datum arg1, Datum arg2,
+                          Datum arg3);
+extern Datum FunctionCall4(FmgrInfo *flinfo, Datum arg1, Datum arg2,
+                          Datum arg3, Datum arg4);
+extern Datum FunctionCall5(FmgrInfo *flinfo, Datum arg1, Datum arg2,
+                          Datum arg3, Datum arg4, Datum arg5);
+extern Datum FunctionCall6(FmgrInfo *flinfo, Datum arg1, Datum arg2,
+                          Datum arg3, Datum arg4, Datum arg5,
+                          Datum arg6);
+extern Datum FunctionCall7(FmgrInfo *flinfo, Datum arg1, Datum arg2,
+                          Datum arg3, Datum arg4, Datum arg5,
+                          Datum arg6, Datum arg7);
+extern Datum FunctionCall8(FmgrInfo *flinfo, Datum arg1, Datum arg2,
+                          Datum arg3, Datum arg4, Datum arg5,
+                          Datum arg6, Datum arg7, Datum arg8);
+extern Datum FunctionCall9(FmgrInfo *flinfo, Datum arg1, Datum arg2,
+                          Datum arg3, Datum arg4, Datum arg5,
+                          Datum arg6, Datum arg7, Datum arg8,
+                          Datum arg9);
+
+/* These are for invocation of a function identified by OID with a
+ * directly-computed parameter list.  Note that neither arguments nor result
+ * are allowed to be NULL.  These are essentially FunctionLookup() followed
+ * by FunctionCallN().  If the same function is to be invoked repeatedly,
+ * do the FunctionLookup() once and then use FunctionCallN().
+ */
+extern Datum OidFunctionCall1(Oid functionId, Datum arg1);
+extern Datum OidFunctionCall2(Oid functionId, Datum arg1, Datum arg2);
+extern Datum OidFunctionCall3(Oid functionId, Datum arg1, Datum arg2,
+                             Datum arg3);
+extern Datum OidFunctionCall4(Oid functionId, Datum arg1, Datum arg2,
+                             Datum arg3, Datum arg4);
+extern Datum OidFunctionCall5(Oid functionId, Datum arg1, Datum arg2,
+                             Datum arg3, Datum arg4, Datum arg5);
+extern Datum OidFunctionCall6(Oid functionId, Datum arg1, Datum arg2,
+                             Datum arg3, Datum arg4, Datum arg5,
+                             Datum arg6);
+extern Datum OidFunctionCall7(Oid functionId, Datum arg1, Datum arg2,
+                             Datum arg3, Datum arg4, Datum arg5,
+                             Datum arg6, Datum arg7);
+extern Datum OidFunctionCall8(Oid functionId, Datum arg1, Datum arg2,
+                             Datum arg3, Datum arg4, Datum arg5,
+                             Datum arg6, Datum arg7, Datum arg8);
+extern Datum OidFunctionCall9(Oid functionId, Datum arg1, Datum arg2,
+                             Datum arg3, Datum arg4, Datum arg5,
+                             Datum arg6, Datum arg7, Datum arg8,
+                             Datum arg9);
+
+
+/*
+ * Routines in fmgr.c
+ */
+extern Oid fmgr_internal_language(const char *proname);
+
+/*
+ * Routines in dfmgr.c
+ */
+extern PGFunction fmgr_dynamic(Oid functionId);
+extern PGFunction load_external_function(char *filename, char *funcname);
+extern void load_file(char *filename);
+
+
+/*-------------------------------------------------------------------------
+ *
+ * !!! OLD INTERFACE !!!
+ *
+ * All the definitions below here are associated with the old fmgr API.
+ * They will go away as soon as we have converted all call points to use
+ * the new API.  Note that old-style callee functions do not depend on
+ * these definitions, so we don't need to have converted all of them before
+ * dropping the old API ... just all the old-style call points.
+ *
+ *-------------------------------------------------------------------------
+ */
+
+/* ptr to func returning (char *) */
+#if defined(__mc68000__) && defined(__ELF__)
+/* The m68k SVR4 ABI defines that pointers are returned in %a0 instead of
+ * %d0. So if a function pointer is declared to return a pointer, the
+ * compiler may look only into %a0, but if the called function was declared
+ * to return return an integer type, it puts its value only into %d0. So the
+ * caller doesn't pink up the correct return value. The solution is to
+ * declare the function pointer to return int, so the compiler picks up the
+ * return value from %d0. (Functions returning pointers put their value
+ * *additionally* into %d0 for compability.) The price is that there are
+ * some warnings about int->pointer conversions...
+ */
+typedef int32 ((*func_ptr) ());
+#else
+typedef char *((*func_ptr) ());
+#endif
+
+typedef struct {
+    char *data[FUNC_MAX_ARGS];
+} FmgrValues;
+
+/*
+ * defined in fmgr.c
+ */
+extern char *fmgr(Oid procedureId, ... );
+extern char *fmgr_faddr_link(char *arg0, ...);
+
+/*
+ * Macros for calling through the result of fmgr_info.
+ */
+
+/* We don't make this static so fmgr_faddr() macros can access it */
+extern FmgrInfo        *fmgr_pl_finfo;
+
+#define fmgr_faddr(finfo) (fmgr_pl_finfo = (finfo), (func_ptr) fmgr_faddr_link)
+
+#define    FMGR_PTR2(FINFO, ARG1, ARG2)  ((*(fmgr_faddr(FINFO))) (ARG1, ARG2))
+
+/*
+ * Flags for the builtin oprrest selectivity routines.
+ *  XXX These do not belong here ... put 'em in some planner/optimizer header.
+ */
+#define    SEL_CONSTANT    1       /* operator's non-var arg is a constant */
+#define    SEL_RIGHT   2           /* operator's non-var arg is on the right */
+
+#endif /* FMGR_H */
index 0d16c553527f33533cab3d09c115b7c7de83bfb0..ee02a3c0c38a77331bcdd860420bc88a829801d6 100644 (file)
@@ -7,7 +7,7 @@
  * Portions Copyright (c) 1996-2000, PostgreSQL, Inc
  * Portions Copyright (c) 1995, Regents of the University of California
  *
- * $Id: postgres.h,v 1.38 2000/04/12 17:16:24 momjian Exp $
+ * $Id: postgres.h,v 1.39 2000/05/28 17:56:12 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
  * ----------------------------------------------------------------
  */
 
-typedef int16 int2;
-typedef int32 int4;
-typedef float float4;
-typedef double float8;
-
 typedef int4 aclitem;
 
 #define InvalidOid     0
@@ -61,26 +56,6 @@ typedef int4 aclitem;
 typedef Oid regproc;
 typedef Oid RegProcedure;
 
-/* ptr to func returning (char *) */
-#if defined(__mc68000__) && defined(__ELF__)
-/* The m68k SVR4 ABI defines that pointers are returned in %a0 instead of
- * %d0. So if a function pointer is declared to return a pointer, the
- * compiler may look only into %a0, but if the called function was declared
- * to return return an integer type, it puts its value only into %d0. So the
- * caller doesn't pink up the correct return value. The solution is to
- * declare the function pointer to return int, so the compiler picks up the
- * return value from %d0. (Functions returning pointers put their value
- * *additionally* into %d0 for compability.) The price is that there are
- * some warnings about int->pointer conversions...
- */
-typedef int32 ((*func_ptr) ());
-
-#else
-typedef char *((*func_ptr) ());
-
-#endif
-
-
 #define RegProcedureIsValid(p) OidIsValid(p)
 
 /* ----------------------------------------------------------------
index a83baae40eb1c37f2c13b0253008c8852619fb38..535d5c6d3acbb0c8f53b5c6031406031341797f7 100644 (file)
@@ -7,7 +7,7 @@
  * Portions Copyright (c) 1996-2000, PostgreSQL, Inc
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $Id: dynamic_loader.h,v 1.14 2000/01/26 05:58:37 momjian Exp $
+ * $Id: dynamic_loader.h,v 1.15 2000/05/28 17:56:20 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
 /* we need this include because port files use them */
 #include "postgres.h"
 
-#ifdef MIN
-#undef MIN
-#undef MAX
-#endif  /* MIN */
+/* and this one for typedef PGFunction */
+#include "fmgr.h"
 
-/*
- * List of dynamically loaded files.
- */
-
-typedef struct df_files
-{
-   char        filename[MAXPGPATH];    /* Full pathname of file */
-   dev_t       device;         /* Device file is on */
-   ino_t       inode;          /* Inode number of file */
-   void       *handle;         /* a handle for pg_dl* functions */
-   struct df_files *next;
-} DynamicFileList;
 
 extern void *pg_dlopen(char *filename);
-extern func_ptr pg_dlsym(void *handle, char *funcname);
+extern PGFunction pg_dlsym(void *handle, char *funcname);
 extern void pg_dlclose(void *handle);
 extern char *pg_dlerror(void);
 
index 24e6db1f0c8bd4b0c2b17aa5e140b7bad205bda2..db3a05baf4b8c37ae560b4214b7f6762254ce3cf 100644 (file)
@@ -7,7 +7,7 @@
  * Portions Copyright (c) 1996-2000, PostgreSQL, Inc
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $Id: fcache.h,v 1.10 2000/01/26 05:58:38 momjian Exp $
+ * $Id: fcache.h,v 1.11 2000/05/28 17:56:20 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
 
 typedef struct
 {
-   int         typlen;         /* length of the return type */
-   int         typbyval;       /* true if return type is pass by value */
-   FmgrInfo    func;           /* address of function to call (for c
-                                * funcs) */
+   FmgrInfo    func;           /* info for fmgr call mechanism */
    Oid         foid;           /* oid of the function in pg_proc */
    Oid         language;       /* oid of the language in pg_language */
-   int         nargs;          /* number of arguments */
-
-   /* Might want to make these two arrays of size MAXFUNCARGS */
-
-   Oid        *argOidVect;     /* oids of all the arguments */
-   bool       *nullVect;       /* keep track of null arguments */
-
-   char       *src;            /* source code of the function */
-   char       *bin;            /* binary object code ?? */
-   char       *func_state;     /* fuction_state struct for execution */
+   int         typlen;         /* length of the return type */
+   bool        typbyval;       /* true if return type is pass by value */
 
    bool        oneResult;      /* true we only want 1 result from the
                                 * function */
@@ -42,17 +31,23 @@ typedef struct
                                 * expr whose argument is func returning a
                                 * set ugh! */
 
+   int         nargs;          /* actual number of arguments */
+   Oid        *argOidVect;     /* oids of all the argument types */
+
+   char       *src;            /* source code of the function */
+   char       *bin;            /* binary object code ?? */
+   char       *func_state;     /* function_state struct for execution */
+
    Pointer     funcSlot;       /* if one result we need to copy it before
                                 * we end execution of the function and
                                 * free stuff */
 
-   char       *setArg;         /* current argument for nested dot
+   Datum       setArg;         /* current argument for nested dot
                                 * execution Nested dot expressions mean
                                 * we have funcs whose argument is a set
                                 * of tuples */
+} FunctionCache;
 
-   bool        istrusted;      /* trusted fn? */
-} FunctionCache,
-          *FunctionCachePtr;
+typedef FunctionCache *FunctionCachePtr;
 
 #endif  /* FCACHE_H */
index 21e28904d53383d8f3ae6a7a23a817ce82214ee9..e6cfe519650c41689d569e3dcfdf34f3530ef0dd 100644 (file)
@@ -1,30 +1,39 @@
 /*-------------------------------------------------------------------------
  *
  * fmgrtab.h
- *
- *
+ *    The function manager's table of internal functions.
  *
  * Portions Copyright (c) 1996-2000, PostgreSQL, Inc
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $Id: fmgrtab.h,v 1.12 2000/01/26 05:58:38 momjian Exp $
+ * $Id: fmgrtab.h,v 1.13 2000/05/28 17:56:20 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
 #ifndef FMGRTAB_H
 #define FMGRTAB_H
 
+#include "fmgr.h"
+
+
+/*
+ * This table stores info about all the built-in functions (ie, functions
+ * that are compiled into the Postgres executable).  The table entries are
+ * required to appear in Oid order, so that binary search can be used.
+ */
 
 typedef struct
 {
-   Oid         proid;
-   int         nargs;
-   func_ptr    func;
-   char       *funcName;
-} FmgrCall;
+   Oid         foid;           /* OID of the function */
+   const char *funcName;       /* C name of the function */
+    short       nargs;         /* 0..FUNC_MAX_ARGS, or -1 if variable count */
+    bool        strict;            /* T if function is "strict" */
+   bool        oldstyle;       /* T if function uses old fmgr interface */
+    PGFunction  func;          /* pointer to compiled function */
+} FmgrBuiltin;
+
+extern const FmgrBuiltin fmgr_builtins[];
 
-extern FmgrCall *fmgr_isbuiltin(Oid id);
-extern func_ptr fmgr_lookupByName(char *name);
-extern void load_file(char *filename);
+extern const int fmgr_nbuiltins; /* number of entries in table */
 
 #endif  /* FMGRTAB_H */
index dab1e0addd1c60cc83c26e5dd613c6c23cfeb868..b8ad531ab28932f327352e9c9599296795e2f165 100644 (file)
@@ -7,7 +7,7 @@
  * Portions Copyright (c) 1996-2000, PostgreSQL, Inc
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $Id: int8.h,v 1.20 2000/04/12 17:16:55 momjian Exp $
+ * $Id: int8.h,v 1.21 2000/05/28 17:56:20 tgl Exp $
  *
  * NOTES
  * These data types are supported on all 64-bit architectures, and may
 #ifndef INT8_H
 #define INT8_H
 
-#ifdef HAVE_LONG_INT_64
-/* Plain "long int" fits, use it */
-typedef long int int64;
-
-#else
-#ifdef HAVE_LONG_LONG_INT_64
-/* We have working support for "long long int", use that */
-typedef long long int int64;
-
-#else
-/* Won't actually work, but fall back to long int so that int8.c compiles */
-typedef long int int64;
-
-#define INT64_IS_BUSTED
-#endif
-#endif
-
-/* this should be set in config.h: */
-#ifndef INT64_FORMAT
-#define INT64_FORMAT "%ld"
-#endif
-
 
 extern int64 *int8in(char *str);
 extern char *int8out(int64 *val);
index 7e384345929cb36f7ced82f8f07f6d1b7684ce18..a5c43a451246d2aba98ad00a7090aff2759efdc0 100644 (file)
@@ -6,7 +6,7 @@
 # Copyright (c) 1994, Regents of the University of California
 #
 # IDENTIFICATION
-#    $Header: /cvsroot/pgsql/src/interfaces/libpq/Attic/Makefile.in,v 1.57 2000/05/27 04:13:05 momjian Exp $
+#    $Header: /cvsroot/pgsql/src/interfaces/libpq/Attic/Makefile.in,v 1.58 2000/05/28 17:56:25 tgl Exp $
 #
 #-------------------------------------------------------------------------
 
@@ -70,15 +70,6 @@ big5.c: $(SRCDIR)/backend/utils/mb/big5.c
 endif
 
 
-# The following rules cause dependencies in the backend directory to 
-# get made if they don't exist, but don't cause them to get remade if they
-# are out of date.
-fe-lobj.o: $(SRCDIR)/backend/fmgr.h
-
-$(SRCDIR)/backend/fmgr.h:
-   $(MAKE) -C $(SRCDIR)/backend fmgr.h
-
-
 .PHONY: install install-headers
 
 install: install-headers install-lib $(install-shlib-dep)
index 86ffbb265f9528ce69a8e7bc4ef50cc68d29e889..b440be12de8aa0624c23044baa45b1cc70f99741 100644 (file)
@@ -32,6 +32,9 @@
  *   OBLIGATION   TO   PROVIDE   MAINTENANCE,   SUPPORT,  UPDATES,
  *   ENHANCEMENTS, OR MODIFICATIONS.
  *
+ * IDENTIFICATION
+ *   $Header: /cvsroot/pgsql/src/pl/plperl/plperl.c,v 1.7 2000/05/28 17:56:26 tgl Exp $
+ *
  **********************************************************************/
 
 
@@ -130,17 +133,15 @@ static Tcl_HashTable *plperl_query_hash = NULL;
 static void plperl_init_all(void);
 static void plperl_init_safe_interp(void);
 
-Datum plperl_call_handler(FmgrInfo *proinfo,
-                   FmgrValues *proargs, bool *isNull);
+Datum plperl_call_handler(PG_FUNCTION_ARGS);
 
-static Datum plperl_func_handler(FmgrInfo *proinfo,
-                   FmgrValues *proargs, bool *isNull);
+static Datum plperl_func_handler(PG_FUNCTION_ARGS);
 
 static SV  *plperl_build_tuple_argument(HeapTuple tuple, TupleDesc tupdesc);
 static void plperl_init_shared_libs(void);
 
 #ifdef REALLYHAVEITONTHEBALL
-static HeapTuple plperl_trigger_handler(FmgrInfo *proinfo);
+static HeapTuple plperl_trigger_handler(PG_FUNCTION_ARGS);
 
 static int plperl_elog(ClientData cdata, Tcl_Interp *interp,
            int argc, char *argv[]);
@@ -258,9 +259,7 @@ plperl_init_safe_interp(void)
 
 /* keep non-static */
 Datum
-plperl_call_handler(FmgrInfo *proinfo,
-                   FmgrValues *proargs,
-                   bool *isNull)
+plperl_call_handler(PG_FUNCTION_ARGS)
 {
    Datum       retval;
 
@@ -285,13 +284,13 @@ plperl_call_handler(FmgrInfo *proinfo,
     * call appropriate subhandler
     ************************************************************/
    if (CurrentTriggerData == NULL)
-       retval = plperl_func_handler(proinfo, proargs, isNull);
+       retval = plperl_func_handler(fcinfo);
    else
    {
        elog(ERROR, "plperl: can't use perl in triggers yet.");
 
        /*
-        * retval = (Datum) plperl_trigger_handler(proinfo);
+        * retval = (Datum) plperl_trigger_handler(fcinfo);
         */
        /* make the compiler happy */
        retval = (Datum) 0;
@@ -390,7 +389,7 @@ plperl_init_shared_libs(void)
  **********************************************************************/
 static
 SV *
-plperl_call_perl_func(plperl_proc_desc * desc, FmgrValues *pargs)
+plperl_call_perl_func(plperl_proc_desc * desc, FunctionCallInfo fcinfo)
 {
    dSP;
 
@@ -407,25 +406,34 @@ plperl_call_perl_func(plperl_proc_desc * desc, FmgrValues *pargs)
    {
        if (desc->arg_is_rel[i])
        {
+           TupleTableSlot *slot = (TupleTableSlot *) fcinfo->arg[i];
+           SV         *hashref;
 
+           Assert(slot != NULL && ! fcinfo->argnull[i]);
            /*
             * plperl_build_tuple_argument better return a mortal SV.
             */
-           SV         *hashref = plperl_build_tuple_argument(
-                             ((TupleTableSlot *) (pargs->data[i]))->val,
-            ((TupleTableSlot *) (pargs->data[i]))->ttc_tupleDescriptor);
-
+           hashref = plperl_build_tuple_argument(slot->val,
+                                                 slot->ttc_tupleDescriptor);
            XPUSHs(hashref);
        }
        else
        {
-           char       *tmp = (*fmgr_faddr(&(desc->arg_out_func[i])))
-           (pargs->data[i],
-            desc->arg_out_elem[i],
-            desc->arg_out_len[i]);
-
-           XPUSHs(sv_2mortal(newSVpv(tmp, 0)));
-           pfree(tmp);
+           if (fcinfo->argnull[i])
+           {
+               XPUSHs(&PL_sv_undef);
+           }
+           else
+           {
+               char       *tmp;
+
+               tmp = (*fmgr_faddr(&(desc->arg_out_func[i])))
+                   (fcinfo->arg[i],
+                    desc->arg_out_elem[i],
+                    desc->arg_out_len[i]);
+               XPUSHs(sv_2mortal(newSVpv(tmp, 0)));
+               pfree(tmp);
+           }
        }
    }
    PUTBACK;
@@ -466,14 +474,11 @@ plperl_call_perl_func(plperl_proc_desc * desc, FmgrValues *pargs)
  * plperl_func_handler()       - Handler for regular function calls
  **********************************************************************/
 static Datum
-plperl_func_handler(FmgrInfo *proinfo,
-                   FmgrValues *proargs,
-                   bool *isNull)
+plperl_func_handler(PG_FUNCTION_ARGS)
 {
    int         i;
    char        internal_proname[512];
    int         proname_len;
-   char       *stroid;
    plperl_proc_desc *prodesc;
    SV         *perlret;
    Datum       retval;
@@ -482,10 +487,7 @@ plperl_func_handler(FmgrInfo *proinfo,
    /************************************************************
     * Build our internal proc name from the functions Oid
     ************************************************************/
-   stroid = oidout(proinfo->fn_oid);
-   strcpy(internal_proname, "__PLperl_proc_");
-   strcat(internal_proname, stroid);
-   pfree(stroid);
+   sprintf(internal_proname, "__PLPerl_proc_%u", fcinfo->flinfo->fn_oid);
    proname_len = strlen(internal_proname);
 
    /************************************************************
@@ -518,14 +520,14 @@ plperl_func_handler(FmgrInfo *proinfo,
         * Lookup the pg_proc tuple by Oid
         ************************************************************/
        procTup = SearchSysCacheTuple(PROCOID,
-                                     ObjectIdGetDatum(proinfo->fn_oid),
+                                     ObjectIdGetDatum(fcinfo->flinfo->fn_oid),
                                      0, 0, 0);
        if (!HeapTupleIsValid(procTup))
        {
            free(prodesc->proname);
            free(prodesc);
            elog(ERROR, "plperl: cache lookup for proc %u failed",
-                proinfo->fn_oid);
+                fcinfo->flinfo->fn_oid);
        }
        procStruct = (Form_pg_proc) GETSTRUCT(procTup);
 
@@ -560,8 +562,8 @@ plperl_func_handler(FmgrInfo *proinfo,
         * Get the required information for output conversion
         * of all procedure arguments
         ************************************************************/
-       prodesc->nargs = proinfo->fn_nargs;
-       for (i = 0; i < proinfo->fn_nargs; i++)
+       prodesc->nargs = procStruct->pronargs;
+       for (i = 0; i < prodesc->nargs; i++)
        {
            typeTup = SearchSysCacheTuple(TYPEOID,
                            ObjectIdGetDatum(procStruct->proargtypes[i]),
@@ -639,7 +641,7 @@ plperl_func_handler(FmgrInfo *proinfo,
    /************************************************************
     * Call the Perl function
     ************************************************************/
-   perlret = plperl_call_perl_func(prodesc, proargs);
+   perlret = plperl_call_perl_func(prodesc, fcinfo);
 
    /************************************************************
     * Disconnect from SPI manager and then create the return
@@ -650,10 +652,19 @@ plperl_func_handler(FmgrInfo *proinfo,
    if (SPI_finish() != SPI_OK_FINISH)
        elog(ERROR, "plperl: SPI_finish() failed");
 
-   retval = (Datum) (*fmgr_faddr(&prodesc->result_in_func))
-       (SvPV(perlret, na),
-        prodesc->result_in_elem,
-        prodesc->result_in_len);
+   /* XXX is this the approved way to check for an undef result? */
+   if (perlret == &PL_sv_undef)
+   {
+       retval = (Datum) 0;
+       fcinfo->isnull = true;
+   }
+   else
+   {
+       retval = FunctionCall3(&prodesc->result_in_func,
+                              PointerGetDatum(SvPV(perlret, na)),
+                              ObjectIdGetDatum(prodesc->result_in_elem),
+                              Int32GetDatum(prodesc->result_in_len));
+   }
 
    SvREFCNT_dec(perlret);
 
@@ -674,7 +685,7 @@ plperl_func_handler(FmgrInfo *proinfo,
  * plperl_trigger_handler() - Handler for trigger calls
  **********************************************************************/
 static HeapTuple
-plperl_trigger_handler(FmgrInfo *proinfo)
+plperl_trigger_handler(PG_FUNCTION_ARGS)
 {
    TriggerData *trigdata;
    char        internal_proname[512];
@@ -708,10 +719,7 @@ plperl_trigger_handler(FmgrInfo *proinfo)
    /************************************************************
     * Build our internal proc name from the functions Oid
     ************************************************************/
-   stroid = oidout(proinfo->fn_oid);
-   strcpy(internal_proname, "__PLTcl_proc_");
-   strcat(internal_proname, stroid);
-   pfree(stroid);
+   sprintf(internal_proname, "__PLPerl_proc_%u", fcinfo->flinfo->fn_oid);
 
    /************************************************************
     * Lookup the internal proc name in the hashtable
@@ -741,14 +749,14 @@ plperl_trigger_handler(FmgrInfo *proinfo)
         * Lookup the pg_proc tuple by Oid
         ************************************************************/
        procTup = SearchSysCacheTuple(PROCOID,
-                                     ObjectIdGetDatum(proinfo->fn_oid),
+                                     ObjectIdGetDatum(fcinfo->flinfo->fn_oid),
                                      0, 0, 0);
        if (!HeapTupleIsValid(procTup))
        {
            free(prodesc->proname);
            free(prodesc);
            elog(ERROR, "plperl: cache lookup for proc %u failed",
-                proinfo->fn_oid);
+                fcinfo->flinfo->fn_oid);
        }
        procStruct = (Form_pg_proc) GETSTRUCT(procTup);
 
index a2565a43637b331db760ece4c95d749faa324de6..e587aecba6045eb9ac349f35fbd15fbb15197478 100644 (file)
@@ -3,7 +3,7 @@
  *           procedural language
  *
  * IDENTIFICATION
- *   $Header: /cvsroot/pgsql/src/pl/plpgsql/src/pl_exec.c,v 1.21 2000/04/28 00:12:44 tgl Exp $
+ *   $Header: /cvsroot/pgsql/src/pl/plpgsql/src/pl_exec.c,v 1.22 2000/05/28 17:56:28 tgl Exp $
  *
  *   This software is copyrighted by Jan Wieck - Hamburg.
  *
@@ -141,8 +141,7 @@ static void exec_set_found(PLpgSQL_execstate * estate, bool state);
  * ----------
  */
 Datum
-plpgsql_exec_function(PLpgSQL_function * func,
-                     FmgrValues *args, bool *isNull)
+plpgsql_exec_function(PLpgSQL_function * func, FunctionCallInfo fcinfo)
 {
    PLpgSQL_execstate estate;
    int         i;
@@ -302,21 +301,22 @@ plpgsql_exec_function(PLpgSQL_function * func,
                {
                    PLpgSQL_var *var = (PLpgSQL_var *) estate.datums[n];
 
-                   var->value = (Datum) (args->data[i]);
-                   var->isnull = *isNull;
+                   var->value = fcinfo->arg[i];
+                   var->isnull = fcinfo->argnull[i];
                    var->shouldfree = false;
                }
                break;
 
            case PLPGSQL_DTYPE_ROW:
                {
+                   PLpgSQL_row *row = (PLpgSQL_row *) estate.datums[n];
+                   TupleTableSlot *slot = (TupleTableSlot *) fcinfo->arg[i];
                    HeapTuple   tup;
                    TupleDesc   tupdesc;
-                   PLpgSQL_row *row = (PLpgSQL_row *) estate.datums[n];
-
-                   tup = ((TupleTableSlot *) (args->data[i]))->val;
-                   tupdesc = ((TupleTableSlot *) (args->data[i]))->ttc_tupleDescriptor;
 
+                   Assert(slot != NULL && ! fcinfo->argnull[i]);
+                   tup = slot->val;
+                   tupdesc = slot->ttc_tupleDescriptor;
                    exec_move_row(&estate, NULL, row, tup, tupdesc);
                }
                break;
@@ -384,7 +384,7 @@ plpgsql_exec_function(PLpgSQL_function * func,
    error_info_stmt = NULL;
    error_info_text = "while casting return value to functions return type";
 
-   *isNull = estate.retisnull;
+   fcinfo->isnull = estate.retisnull;
 
    if (!estate.retistuple)
    {
@@ -393,14 +393,14 @@ plpgsql_exec_function(PLpgSQL_function * func,
                                        &(func->fn_retinput),
                                        func->fn_rettypelem,
                                        -1,
-                                       isNull);
+                                       &fcinfo->isnull);
 
        /* ----------
         * If the functions return type isn't by value,
         * copy the value into upper executor memory context.
         * ----------
         */
-       if (!*isNull && !func->fn_retbyval)
+       if (!fcinfo->isnull && !func->fn_retbyval)
        {
            int         len;
            Datum       tmp;
index 0215eea6bba118c8bb2c69fee631fcf6b4378892..54ecb1f4e89940008dde25d1183826acb0d9f63a 100644 (file)
@@ -3,7 +3,7 @@
  *           procedural language
  *
  * IDENTIFICATION
- *   $Header: /cvsroot/pgsql/src/pl/plpgsql/src/pl_handler.c,v 1.3 1999/07/15 15:21:48 momjian Exp $
+ *   $Header: /cvsroot/pgsql/src/pl/plpgsql/src/pl_handler.c,v 1.4 2000/05/28 17:56:28 tgl Exp $
  *
  *   This software is copyrighted by Jan Wieck - Hamburg.
  *
 #include "plpgsql.h"
 #include "pl.tab.h"
 
-#include "executor/spi.h"
-#include "commands/trigger.h"
-#include "utils/builtins.h"
-#include "fmgr.h"
 #include "access/heapam.h"
-
-#include "utils/syscache.h"
 #include "catalog/pg_proc.h"
 #include "catalog/pg_type.h"
+#include "utils/builtins.h"
+#include "utils/syscache.h"
 
 
+/*
+ * Head of list of already-compiled functions
+ */
 static PLpgSQL_function *compiled_functions = NULL;
 
 
-Datum plpgsql_call_handler(FmgrInfo *proinfo,
-                    FmgrValues *proargs, bool *isNull);
-
-static Datum plpgsql_func_handler(FmgrInfo *proinfo,
-                    FmgrValues *proargs, bool *isNull);
-
-static HeapTuple plpgsql_trigger_handler(FmgrInfo *proinfo);
-
-
 /* ----------
- * plpgsql_call_handler        - This is the only visible function
- *               of the PL interpreter. The PostgreSQL
- *               function manager and trigger manager
- *               call this function for execution of
- *               PL/pgSQL procedures.
+ * plpgsql_call_handler
+ *
+ * This is the only visible function of the PL interpreter.
+ * The PostgreSQL function manager and trigger manager
+ * call this function for execution of PL/pgSQL procedures.
  * ----------
  */
 Datum
-plpgsql_call_handler(FmgrInfo *proinfo,
-                    FmgrValues *proargs,
-                    bool *isNull)
+plpgsql_call_handler(PG_FUNCTION_ARGS)
 {
+   TriggerData *trigdata;
+   bool        isTrigger;
+   PLpgSQL_function *func;
    Datum       retval;
 
    /* ----------
-    * Connect to SPI manager
-    * ----------
-    */
-   if (SPI_connect() != SPI_OK_CONNECT)
-       elog(ERROR, "plpgsql: cannot connect to SPI manager");
-
-   /* ----------
-    * Determine if called as function or trigger and
-    * call appropriate subhandler
-    * ----------
-    */
-   if (CurrentTriggerData == NULL)
-       retval = plpgsql_func_handler(proinfo, proargs, isNull);
-   else
-       retval = (Datum) plpgsql_trigger_handler(proinfo);
-
-   /* ----------
-    * Disconnect from SPI manager
+    * Save the current trigger data local
+    *
+    * XXX this should go away in favor of using fcinfo->context
     * ----------
     */
-   if (SPI_finish() != SPI_OK_FINISH)
-       elog(ERROR, "plpgsql: SPI_finish() failed");
-
-   return retval;
-}
-
-
-/* ----------
- * plpgsql_func_handler()  - Handler for regular function calls
- * ----------
- */
-static Datum
-plpgsql_func_handler(FmgrInfo *proinfo,
-                    FmgrValues *proargs,
-                    bool *isNull)
-{
-   PLpgSQL_function *func;
+   trigdata = CurrentTriggerData;
+   CurrentTriggerData = NULL;
+   isTrigger = (trigdata != NULL);
 
    /* ----------
-    * Check if we already compiled this function
+    * Connect to SPI manager
     * ----------
     */
-   for (func = compiled_functions; func != NULL; func = func->next)
-   {
-       if (proinfo->fn_oid == func->fn_oid)
-           break;
-   }
+   if (SPI_connect() != SPI_OK_CONNECT)
+       elog(ERROR, "plpgsql: cannot connect to SPI manager");
 
    /* ----------
-    * If not, do so and add it to the compiled ones
+    * Check if we already compiled this function and saved the pointer
+    * (ie, current FmgrInfo has been used before)
     * ----------
     */
+   func = (PLpgSQL_function *) fcinfo->flinfo->fn_extra;
    if (func == NULL)
    {
-       func = plpgsql_compile(proinfo->fn_oid, T_FUNCTION);
-
-       func->next = compiled_functions;
-       compiled_functions = func;
+       /* ----------
+        * Check if we already compiled this function
+        * ----------
+        */
+       Oid     funcOid = fcinfo->flinfo->fn_oid;
+
+       for (func = compiled_functions; func != NULL; func = func->next)
+       {
+           if (funcOid == func->fn_oid)
+               break;
+       }
+
+       /* ----------
+        * If not, do so and add it to the compiled ones
+        * ----------
+        */
+       if (func == NULL)
+       {
+           func = plpgsql_compile(funcOid,
+                                  isTrigger ? T_TRIGGER : T_FUNCTION);
+           func->next = compiled_functions;
+           compiled_functions = func;
+       }
+
+       /* ----------
+        * Save pointer in FmgrInfo to avoid search on subsequent calls
+        * ----------
+        */
+       fcinfo->flinfo->fn_extra = (void *) func;
    }
 
-   return plpgsql_exec_function(func, proargs, isNull);
-}
-
-
-/* ----------
- * plpgsql_trigger_handler()   - Handler for trigger calls
- * ----------
- */
-static HeapTuple
-plpgsql_trigger_handler(FmgrInfo *proinfo)
-{
-   TriggerData *trigdata;
-   PLpgSQL_function *func;
-
    /* ----------
-    * Save the current trigger data local
-    * ----------
-    */
-   trigdata = CurrentTriggerData;
-   CurrentTriggerData = NULL;
-
-   /* ----------
-    * Check if we already compiled this trigger procedure
+    * Determine if called as function or trigger and
+    * call appropriate subhandler
     * ----------
     */
-   for (func = compiled_functions; func != NULL; func = func->next)
-   {
-       if (proinfo->fn_oid == func->fn_oid)
-           break;
-   }
+   if (isTrigger)
+       retval = PointerGetDatum(plpgsql_exec_trigger(func, trigdata));
+   else
+       retval = plpgsql_exec_function(func, fcinfo);
 
    /* ----------
-    * If not, do so and add it to the compiled ones
+    * Disconnect from SPI manager
     * ----------
     */
-   if (func == NULL)
-   {
-       func = plpgsql_compile(proinfo->fn_oid, T_TRIGGER);
-
-       func->next = compiled_functions;
-       compiled_functions = func;
-   }
+   if (SPI_finish() != SPI_OK_FINISH)
+       elog(ERROR, "plpgsql: SPI_finish() failed");
 
-   return plpgsql_exec_trigger(func, trigdata);
+   return retval;
 }
index 5efbccff8a0f2a76dcfd5487e3f98a7e59328905..f4246980fca540b44a42def4444f7df6c27560b2 100644 (file)
@@ -3,7 +3,7 @@
  *           procedural language
  *
  * IDENTIFICATION
- *   $Header: /cvsroot/pgsql/src/pl/plpgsql/src/plpgsql.h,v 1.8 2000/01/20 05:44:34 tgl Exp $
+ *   $Header: /cvsroot/pgsql/src/pl/plpgsql/src/plpgsql.h,v 1.9 2000/05/28 17:56:28 tgl Exp $
  *
  *   This software is copyrighted by Jan Wieck - Hamburg.
  *
 #define PLPGSQL_H
 
 #include "postgres.h"
+
+#include "fmgr.h"
 #include "executor/spi.h"
 #include "commands/trigger.h"
-#include "fmgr.h"
 
 /**********************************************************************
  * Definitions
@@ -451,15 +452,20 @@ extern void plpgsql_adddatum(PLpgSQL_datum * new);
 extern int plpgsql_add_initdatums(int **varnos);
 extern void plpgsql_comperrinfo(void);
 
+/* ----------
+ * Functions in pl_handler.c
+ * ----------
+ */
+extern Datum plpgsql_call_handler(PG_FUNCTION_ARGS);
 
 /* ----------
  * Functions in pl_exec.c
  * ----------
  */
 extern Datum plpgsql_exec_function(PLpgSQL_function * func,
-                     FmgrValues *args, bool *isNull);
+                                  FunctionCallInfo fcinfo);
 extern HeapTuple plpgsql_exec_trigger(PLpgSQL_function * func,
-                    TriggerData *trigdata);
+                                     TriggerData *trigdata);
 
 
 /* ----------
index a57812e20a4606f8547613259d49d8c389ef34ad..c968471ed945fee0fc16f05909a318af656655b1 100644 (file)
@@ -2,9 +2,6 @@
  * pltcl.c     - PostgreSQL support for Tcl as
  *           procedural language (PL)
  *
- * IDENTIFICATION
- *   $Header: /cvsroot/pgsql/src/pl/tcl/pltcl.c,v 1.22 2000/05/23 01:59:05 tgl Exp $
- *
  *   This software is copyrighted by Jan Wieck - Hamburg.
  *
  *   The author hereby grants permission  to  use,  copy,  modify,
@@ -33,6 +30,9 @@
  *   OBLIGATION   TO   PROVIDE   MAINTENANCE,   SUPPORT,  UPDATES,
  *   ENHANCEMENTS, OR MODIFICATIONS.
  *
+ * IDENTIFICATION
+ *   $Header: /cvsroot/pgsql/src/pl/tcl/pltcl.c,v 1.23 2000/05/28 17:56:29 tgl Exp $
+ *
  **********************************************************************/
 
 #include 
@@ -111,13 +111,11 @@ static void pltcl_init_load_unknown(void);
 
 #endif  /* PLTCL_UNKNOWN_SUPPORT */
 
-Datum pltcl_call_handler(FmgrInfo *proinfo,
-                  FmgrValues *proargs, bool *isNull);
+Datum pltcl_call_handler(PG_FUNCTION_ARGS);
 
-static Datum pltcl_func_handler(FmgrInfo *proinfo,
-                  FmgrValues *proargs, bool *isNull);
+static Datum pltcl_func_handler(PG_FUNCTION_ARGS);
 
-static HeapTuple pltcl_trigger_handler(FmgrInfo *proinfo);
+static HeapTuple pltcl_trigger_handler(PG_FUNCTION_ARGS);
 
 static int pltcl_elog(ClientData cdata, Tcl_Interp *interp,
           int argc, char *argv[]);
@@ -368,9 +366,7 @@ pltcl_init_load_unknown(void)
 
 /* keep non-static */
 Datum
-pltcl_call_handler(FmgrInfo *proinfo,
-                  FmgrValues *proargs,
-                  bool *isNull)
+pltcl_call_handler(PG_FUNCTION_ARGS)
 {
    Datum       retval;
 
@@ -395,9 +391,9 @@ pltcl_call_handler(FmgrInfo *proinfo,
     * call appropriate subhandler
     ************************************************************/
    if (CurrentTriggerData == NULL)
-       retval = pltcl_func_handler(proinfo, proargs, isNull);
+       retval = pltcl_func_handler(fcinfo);
    else
-       retval = (Datum) pltcl_trigger_handler(proinfo);
+       retval = (Datum) pltcl_trigger_handler(fcinfo);
 
    pltcl_call_level--;
 
@@ -408,13 +404,10 @@ pltcl_call_handler(FmgrInfo *proinfo,
  * pltcl_func_handler()        - Handler for regular function calls
  **********************************************************************/
 static Datum
-pltcl_func_handler(FmgrInfo *proinfo,
-                  FmgrValues *proargs,
-                  bool *isNull)
+pltcl_func_handler(PG_FUNCTION_ARGS)
 {
    int         i;
    char        internal_proname[512];
-   char       *stroid;
    Tcl_HashEntry *hashent;
    int         hashnew;
    pltcl_proc_desc *volatile prodesc;
@@ -427,10 +420,7 @@ pltcl_func_handler(FmgrInfo *proinfo,
    /************************************************************
     * Build our internal proc name from the functions Oid
     ************************************************************/
-   stroid = oidout(proinfo->fn_oid);
-   strcpy(internal_proname, "__PLTcl_proc_");
-   strcat(internal_proname, stroid);
-   pfree(stroid);
+   sprintf(internal_proname, "__PLTcl_proc_%u", fcinfo->flinfo->fn_oid);
 
    /************************************************************
     * Lookup the internal proc name in the hashtable
@@ -467,14 +457,14 @@ pltcl_func_handler(FmgrInfo *proinfo,
         * Lookup the pg_proc tuple by Oid
         ************************************************************/
        procTup = SearchSysCacheTuple(PROCOID,
-                                     ObjectIdGetDatum(proinfo->fn_oid),
+                                     ObjectIdGetDatum(fcinfo->flinfo->fn_oid),
                                      0, 0, 0);
        if (!HeapTupleIsValid(procTup))
        {
            free(prodesc->proname);
            free(prodesc);
            elog(ERROR, "pltcl: cache lookup for proc %u failed",
-                proinfo->fn_oid);
+                fcinfo->flinfo->fn_oid);
        }
        procStruct = (Form_pg_proc) GETSTRUCT(procTup);
 
@@ -508,9 +498,9 @@ pltcl_func_handler(FmgrInfo *proinfo,
         * Get the required information for output conversion
         * of all procedure arguments
         ************************************************************/
-       prodesc->nargs = proinfo->fn_nargs;
+       prodesc->nargs = procStruct->pronargs;
        proc_internal_args[0] = '\0';
-       for (i = 0; i < proinfo->fn_nargs; i++)
+       for (i = 0; i < prodesc->nargs; i++)
        {
            typeTup = SearchSysCacheTuple(TYPEOID,
                            ObjectIdGetDatum(procStruct->proargtypes[i]),
@@ -564,7 +554,7 @@ pltcl_func_handler(FmgrInfo *proinfo,
        Tcl_DStringAppend(&proc_internal_body, "upvar #0 ", -1);
        Tcl_DStringAppend(&proc_internal_body, internal_proname, -1);
        Tcl_DStringAppend(&proc_internal_body, " GD\n", -1);
-       for (i = 0; i < proinfo->fn_nargs; i++)
+       for (i = 0; i < fcinfo->nargs; i++)
        {
            if (!prodesc->arg_is_rel[i])
                continue;
@@ -640,10 +630,12 @@ pltcl_func_handler(FmgrInfo *proinfo,
            /**************************************************
             * For tuple values, add a list for 'array set ...'
             **************************************************/
+           TupleTableSlot *slot = (TupleTableSlot *) fcinfo->arg[i];
+
+           Assert(slot != NULL && ! fcinfo->argnull[i]);
            Tcl_DStringInit(&list_tmp);
-           pltcl_build_tuple_argument(
-                           ((TupleTableSlot *) (proargs->data[i]))->val,
-           ((TupleTableSlot *) (proargs->data[i]))->ttc_tupleDescriptor,
+           pltcl_build_tuple_argument(slot->val,
+                                      slot->ttc_tupleDescriptor,
                                       &list_tmp);
            Tcl_DStringAppendElement(&tcl_cmd, Tcl_DStringValue(&list_tmp));
            Tcl_DStringFree(&list_tmp);
@@ -655,14 +647,21 @@ pltcl_func_handler(FmgrInfo *proinfo,
             * Single values are added as string element
             * of their external representation
             **************************************************/
-           char       *tmp;
-
-           tmp = (*fmgr_faddr(&(prodesc->arg_out_func[i])))
-               (proargs->data[i],
-                prodesc->arg_out_elem[i],
-                prodesc->arg_out_len[i]);
-           Tcl_DStringAppendElement(&tcl_cmd, tmp);
-           pfree(tmp);
+           if (fcinfo->argnull[i])
+           {
+               Tcl_DStringAppendElement(&tcl_cmd, "");
+           }
+           else
+           {
+               char       *tmp;
+
+               tmp = (*fmgr_faddr(&(prodesc->arg_out_func[i])))
+                   (fcinfo->arg[i],
+                    prodesc->arg_out_elem[i],
+                    prodesc->arg_out_len[i]);
+               Tcl_DStringAppendElement(&tcl_cmd, tmp);
+               pfree(tmp);
+           }
        }
    }
    Tcl_DStringFree(&list_tmp);
@@ -719,10 +718,10 @@ pltcl_func_handler(FmgrInfo *proinfo,
    if (SPI_finish() != SPI_OK_FINISH)
        elog(ERROR, "pltcl: SPI_finish() failed");
 
-   retval = (Datum) (*fmgr_faddr(&prodesc->result_in_func))
-       (pltcl_safe_interp->result,
-        prodesc->result_in_elem,
-        -1);
+   retval = FunctionCall3(&prodesc->result_in_func,
+                          PointerGetDatum(pltcl_safe_interp->result),
+                          ObjectIdGetDatum(prodesc->result_in_elem),
+                          Int32GetDatum(-1));
 
    memcpy(&Warn_restart, &save_restart, sizeof(Warn_restart));
    return retval;
@@ -733,7 +732,7 @@ pltcl_func_handler(FmgrInfo *proinfo,
  * pltcl_trigger_handler() - Handler for trigger calls
  **********************************************************************/
 static HeapTuple
-pltcl_trigger_handler(FmgrInfo *proinfo)
+pltcl_trigger_handler(PG_FUNCTION_ARGS)
 {
    TriggerData *trigdata;
    char        internal_proname[512];
@@ -767,10 +766,7 @@ pltcl_trigger_handler(FmgrInfo *proinfo)
    /************************************************************
     * Build our internal proc name from the functions Oid
     ************************************************************/
-   stroid = oidout(proinfo->fn_oid);
-   strcpy(internal_proname, "__PLTcl_proc_");
-   strcat(internal_proname, stroid);
-   pfree(stroid);
+   sprintf(internal_proname, "__PLTcl_proc_%u", fcinfo->flinfo->fn_oid);
 
    /************************************************************
     * Lookup the internal proc name in the hashtable
@@ -800,14 +796,14 @@ pltcl_trigger_handler(FmgrInfo *proinfo)
         * Lookup the pg_proc tuple by Oid
         ************************************************************/
        procTup = SearchSysCacheTuple(PROCOID,
-                                     ObjectIdGetDatum(proinfo->fn_oid),
+                                     ObjectIdGetDatum(fcinfo->flinfo->fn_oid),
                                      0, 0, 0);
        if (!HeapTupleIsValid(procTup))
        {
            free(prodesc->proname);
            free(prodesc);
            elog(ERROR, "pltcl: cache lookup for proc %u failed",
-                proinfo->fn_oid);
+                fcinfo->flinfo->fn_oid);
        }
        procStruct = (Form_pg_proc) GETSTRUCT(procTup);