]> granicus.if.org Git - postgresql/commitdiff
First round of changes for new fmgr interface. fmgr itself and the
authorTom Lane <tgl@sss.pgh.pa.us>
Sun, 28 May 2000 17:56:29 +0000 (17:56 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
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 <ctype.h>
 #include <math.h>
-#include <sys/stat.h>
-
 
 #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 <<FuNkYfMgRsTuFf
+cat > $OIDSFILE <<FuNkYfMgRsTuFf
 /*-------------------------------------------------------------------------
  *
- * $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 <<FuNkYfMgRsTuFf
  *     ******************************
  *
  *     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 <<FuNkYfMgRsTuFf
+cat >> $OIDSFILE <<FuNkYfMgRsTuFf
 
-#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 <<FuNkYfMgRtAbStUfF
+cat > $TABLEFILE <<FuNkYfMgRtAbStUfF
 /*-------------------------------------------------------------------------
  *
- * $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 <<FuNkYfMgRtAbStUfF
  *     ******************************
  *
  *     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 <string.h>
 #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 <<FuNkYfMgRtAbStUfF
+cat >> $TABLEFILE <<FuNkYfMgRtAbStUfF
 
-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 <<FuNkYfMgRtAbStUfF
+cat >> $TABLEFILE <<FuNkYfMgRtAbStUfF
   /* 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<FMGR_NBUILTINS; 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 <ctype.h>
 
 #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 <E.Mergl@bawue.de> */
-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 <tcl.h>
@@ -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);