From 0a7fb4e9184539afcb6fed0f1d2bc0abddc2b0a6 Mon Sep 17 00:00:00 2001
From: Tom Lane <tgl@sss.pgh.pa.us>
Date: Sun, 28 May 2000 17:56:29 +0000
Subject: [PATCH] First round of changes for new fmgr interface.  fmgr itself
 and the 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.

---
 src/backend/Makefile                       |   19 +-
 src/backend/access/common/Makefile         |    9 +-
 src/backend/access/index/indexam.c         |   47 +-
 src/backend/access/index/istrat.c          |    3 +-
 src/backend/bootstrap/bootstrap.c          |    3 +-
 src/backend/catalog/heap.c                 |    5 +-
 src/backend/catalog/index.c                |   13 +-
 src/backend/catalog/indexing.c             |    3 +-
 src/backend/catalog/pg_operator.c          |    3 +-
 src/backend/catalog/pg_proc.c              |   90 +-
 src/backend/catalog/pg_type.c              |   12 +-
 src/backend/commands/async.c               |    3 +-
 src/backend/commands/command.c             |   20 +-
 src/backend/commands/comment.c             |    5 +-
 src/backend/commands/copy.c                |    4 +-
 src/backend/commands/dbcommands.c          |    3 +-
 src/backend/commands/define.c              |   83 +-
 src/backend/commands/indexcmds.c           |    5 +-
 src/backend/commands/proclang.c            |    3 +-
 src/backend/commands/trigger.c             |   10 +-
 src/backend/commands/user.c                |    3 +-
 src/backend/commands/vacuum.c              |    3 +-
 src/backend/executor/execQual.c            |  168 +-
 src/backend/executor/execUtils.c           |    6 +-
 src/backend/executor/functions.c           |   81 +-
 src/backend/executor/nodeAgg.c             |   95 +-
 src/backend/libpq/Makefile                 |    7 +-
 src/backend/libpq/be-pqexec.c              |   41 +-
 src/backend/nodes/freefuncs.c              |    6 +-
 src/backend/optimizer/path/clausesel.c     |    3 +-
 src/backend/optimizer/path/indxpath.c      |    3 +-
 src/backend/optimizer/util/plancat.c       |    6 +-
 src/backend/parser/analyze.c               |    3 +-
 src/backend/parser/parse_func.c            |    3 +-
 src/backend/parser/parse_node.c            |   11 +-
 src/backend/parser/parse_oper.c            |    3 +-
 src/backend/port/dynloader/alpha.h         |    4 +-
 src/backend/port/dynloader/bsdi.h          |    2 +-
 src/backend/port/dynloader/hpux.c          |    8 +-
 src/backend/port/dynloader/hpux.h          |    6 +-
 src/backend/port/dynloader/linux.h         |    4 +-
 src/backend/port/dynloader/qnx4.c          |    4 +-
 src/backend/port/dynloader/qnx4.h          |    4 +-
 src/backend/rewrite/rewriteRemove.c        |    3 +-
 src/backend/storage/large_object/inv_api.c |    3 +-
 src/backend/tcop/Makefile                  |   12 +-
 src/backend/tcop/fastpath.c                |  159 +-
 src/backend/utils/Gen_fmgrtab.sh.in        |  196 +-
 src/backend/utils/Makefile                 |   17 +-
 src/backend/utils/adt/int8.c               |   11 +
 src/backend/utils/adt/regproc.c            |    3 +-
 src/backend/utils/adt/selfuncs.c           |   10 +-
 src/backend/utils/adt/sets.c               |    5 +-
 src/backend/utils/cache/catcache.c         |    3 +-
 src/backend/utils/cache/fcache.c           |   56 +-
 src/backend/utils/cache/relcache.c         |    3 +-
 src/backend/utils/fmgr/dfmgr.c             |  306 +--
 src/backend/utils/fmgr/fmgr.c              | 1765 ++++++++++------
 src/backend/utils/init/postinit.c          |    3 +-
 src/bin/scripts/createlang.sh              |    4 +-
 src/include/access/valid.h                 |    4 +-
 src/include/c.h                            |  146 +-
 src/include/catalog/catversion.h           |    4 +-
 src/include/catalog/pg_attribute.h         |   44 +-
 src/include/catalog/pg_class.h             |    4 +-
 src/include/catalog/pg_language.h          |   20 +-
 src/include/catalog/pg_proc.h              | 2198 ++++++++++----------
 src/include/executor/functions.h           |   10 +-
 src/include/fmgr.h                         |  301 +++
 src/include/postgres.h                     |   27 +-
 src/include/utils/dynamic_loader.h         |   22 +-
 src/include/utils/fcache.h                 |   33 +-
 src/include/utils/fmgrtab.h                |   31 +-
 src/include/utils/int8.h                   |   24 +-
 src/interfaces/libpq/Makefile.in           |   11 +-
 src/pl/plperl/plperl.c                     |  100 +-
 src/pl/plpgsql/src/pl_exec.c               |   24 +-
 src/pl/plpgsql/src/pl_handler.c            |  172 +-
 src/pl/plpgsql/src/plpgsql.h               |   14 +-
 src/pl/tcl/pltcl.c                         |   92 +-
 80 files changed, 3764 insertions(+), 2893 deletions(-)
 create mode 100644 src/include/fmgr.h

diff --git a/src/backend/Makefile b/src/backend/Makefile
index ae90a17b042..6af51106bd3 100644
--- a/src/backend/Makefile
+++ b/src/backend/Makefile
@@ -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 \
diff --git a/src/backend/access/common/Makefile b/src/backend/access/common/Makefile
index 594ed50a59d..847b06b1d21 100644
--- a/src/backend/access/common/Makefile
+++ b/src/backend/access/common/Makefile
@@ -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: 
diff --git a/src/backend/access/index/indexam.c b/src/backend/access/index/indexam.c
index e0672667c7f..43d8a3850f5 100644
--- a/src/backend/access/index/indexam.c
+++ b/src/backend/access/index/indexam.c
@@ -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);
diff --git a/src/backend/access/index/istrat.c b/src/backend/access/index/istrat.c
index b0864e505fa..5116b622dd1 100644
--- a/src/backend/access/index/istrat.c
+++ b/src/backend/access/index/istrat.c
@@ -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
diff --git a/src/backend/bootstrap/bootstrap.c b/src/backend/bootstrap/bootstrap.c
index a12bca94932..beb4b079045 100644
--- a/src/backend/bootstrap/bootstrap.c
+++ b/src/backend/bootstrap/bootstrap.c
@@ -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"
 
diff --git a/src/backend/catalog/heap.c b/src/backend/catalog/heap.c
index 762bff810d0..5c0eff6e7c7 100644
--- a/src/backend/catalog/heap.c
+++ b/src/backend/catalog/heap.c
@@ -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);
 		}
diff --git a/src/backend/catalog/index.c b/src/backend/catalog/index.c
index cfc5805b7c5..3ef1931e593 100644
--- a/src/backend/catalog/index.c
+++ b/src/backend/catalog/index.c
@@ -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);
 	}
diff --git a/src/backend/catalog/indexing.c b/src/backend/catalog/indexing.c
index eb3d6debcc5..79a987ba59c 100644
--- a/src/backend/catalog/indexing.c
+++ b/src/backend/catalog/indexing.c
@@ -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"
 
 /*
diff --git a/src/backend/catalog/pg_operator.c b/src/backend/catalog/pg_operator.c
index b0508d259a1..5796b11b988 100644
--- a/src/backend/catalog/pg_operator.c
+++ b/src/backend/catalog/pg_operator.c
@@ -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"
 
 
diff --git a/src/backend/catalog/pg_proc.c b/src/backend/catalog/pg_proc.c
index aa23a3be8c2..6ddc343aaa6 100644
--- a/src/backend/catalog/pg_proc.c
+++ b/src/backend/catalog/pg_proc.c
@@ -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);
 
diff --git a/src/backend/catalog/pg_type.c b/src/backend/catalog/pg_type.c
index 4c3120c40f4..9386079997e 100644
--- a/src/backend/catalog/pg_type.c
+++ b/src/backend/catalog/pg_type.c
@@ -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.
diff --git a/src/backend/commands/async.c b/src/backend/commands/async.c
index c045f09b83d..8225f3a7ca4 100644
--- a/src/backend/commands/async.c
+++ b/src/backend/commands/async.c
@@ -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"
diff --git a/src/backend/commands/command.c b/src/backend/commands/command.c
index 2b9f6a257b1..4fb184b7f6d 100644
--- a/src/backend/commands/command.c
+++ b/src/backend/commands/command.c
@@ -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);
diff --git a/src/backend/commands/comment.c b/src/backend/commands/comment.c
index 3fe7b6f6347..f33189d3ee9 100644
--- a/src/backend/commands/comment.c
+++ b/src/backend/commands/comment.c
@@ -27,11 +27,12 @@
 #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 ***/
diff --git a/src/backend/commands/copy.c b/src/backend/commands/copy.c
index 65dff8ed442..4285663a162 100644
--- a/src/backend/commands/copy.c
+++ b/src/backend/commands/copy.c
@@ -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 */
diff --git a/src/backend/commands/dbcommands.c b/src/backend/commands/dbcommands.c
index 4458edafaf2..b08f6545044 100644
--- a/src/backend/commands/dbcommands.c
+++ b/src/backend/commands/dbcommands.c
@@ -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"
diff --git a/src/backend/commands/define.c b/src/backend/commands/define.c
index 5bc75faaec7..da872872175 100644
--- a/src/backend/commands/define.c
+++ b/src/backend/commands/define.c
@@ -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,
diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c
index 16ad849d8ff..826efa40bbd 100644
--- a/src/backend/commands/indexcmds.c
+++ b/src/backend/commands/indexcmds.c
@@ -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);
 	}
diff --git a/src/backend/commands/proclang.c b/src/backend/commands/proclang.c
index 47d2201c82a..9b5f7c1ddff 100644
--- a/src/backend/commands/proclang.c
+++ b/src/backend/commands/proclang.c
@@ -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);
 
diff --git a/src/backend/commands/trigger.c b/src/backend/commands/trigger.c
index c79ce0cea50..49f5570e8fc 100644
--- a/src/backend/commands/trigger.c
+++ b/src/backend/commands/trigger.c
@@ -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)) ());
 }
 
diff --git a/src/backend/commands/user.c b/src/backend/commands/user.c
index 2e01e6e202c..ea5f457448f 100644
--- a/src/backend/commands/user.c
+++ b/src/backend/commands/user.c
@@ -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);
diff --git a/src/backend/commands/vacuum.c b/src/backend/commands/vacuum.c
index 0c0c5f4785d..3a9b972b9ed 100644
--- a/src/backend/commands/vacuum.c
+++ b/src/backend/commands/vacuum.c
@@ -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"
diff --git a/src/backend/executor/execQual.c b/src/backend/executor/execQual.c
index 58307e6a695..a53957c4f4a 100644
--- a/src/backend/executor/execQual.c
+++ b/src/backend/executor/execQual.c
@@ -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;
 }
 
 
diff --git a/src/backend/executor/execUtils.c b/src/backend/executor/execUtils.c
index e3783473f96..39b29138e19 100644
--- a/src/backend/executor/execUtils.c
+++ b/src/backend/executor/execUtils.c
@@ -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);
 		}
diff --git a/src/backend/executor/functions.c b/src/backend/executor/functions.c
index c8d119df482..ee5fabf1708 100644
--- a/src/backend/executor/functions.c
+++ b/src/backend/executor/functions.c
@@ -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;
 }
diff --git a/src/backend/executor/nodeAgg.c b/src/backend/executor/nodeAgg.c
index e2db06f84d1..853fa96e2c3 100644
--- a/src/backend/executor/nodeAgg.c
+++ b/src/backend/executor/nodeAgg.c
@@ -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))
 	{
diff --git a/src/backend/libpq/Makefile b/src/backend/libpq/Makefile
index 656fbdb480d..50f5f1b7206 100644
--- a/src/backend/libpq/Makefile
+++ b/src/backend/libpq/Makefile
@@ -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
 
diff --git a/src/backend/libpq/be-pqexec.c b/src/backend/libpq/be-pqexec.c
index 0c29ea25184..42d48281e08 100644
--- a/src/backend/libpq/be-pqexec.c
+++ b/src/backend/libpq/be-pqexec.c
@@ -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";
 }
 
diff --git a/src/backend/nodes/freefuncs.c b/src/backend/nodes/freefuncs.c
index c0d07a05dba..59e2ac1154e 100644
--- a/src/backend/nodes/freefuncs.c
+++ b/src/backend/nodes/freefuncs.c
@@ -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);
 }
diff --git a/src/backend/optimizer/path/clausesel.c b/src/backend/optimizer/path/clausesel.c
index d430059a1e0..460417f2417 100644
--- a/src/backend/optimizer/path/clausesel.c
+++ b/src/backend/optimizer/path/clausesel.c
@@ -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"
 
 
diff --git a/src/backend/optimizer/path/indxpath.c b/src/backend/optimizer/path/indxpath.c
index 06f9cd0247f..b862cf7f129 100644
--- a/src/backend/optimizer/path/indxpath.c
+++ b/src/backend/optimizer/path/indxpath.c
@@ -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"
 
diff --git a/src/backend/optimizer/util/plancat.c b/src/backend/optimizer/util/plancat.c
index e9d7690e00c..fca1bd0ab17 100644
--- a/src/backend/optimizer/util/plancat.c
+++ b/src/backend/optimizer/util/plancat.c
@@ -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);
diff --git a/src/backend/parser/analyze.c b/src/backend/parser/analyze.c
index 7658443a378..6f454063626 100644
--- a/src/backend/parser/analyze.c
+++ b/src/backend/parser/analyze.c
@@ -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... */
diff --git a/src/backend/parser/parse_func.c b/src/backend/parser/parse_func.c
index ed6a910f273..1866cd37b28 100644
--- a/src/backend/parser/parse_func.c
+++ b/src/backend/parser/parse_func.c
@@ -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"
 
diff --git a/src/backend/parser/parse_node.c b/src/backend/parser/parse_node.c
index 0f386b84c71..dcec30b1589 100644
--- a/src/backend/parser/parse_node.c
+++ b/src/backend/parser/parse_node.c
@@ -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
 			{
diff --git a/src/backend/parser/parse_oper.c b/src/backend/parser/parse_oper.c
index 2a9de556b26..73be990c010 100644
--- a/src/backend/parser/parse_oper.c
+++ b/src/backend/parser/parse_oper.c
@@ -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,
diff --git a/src/backend/port/dynloader/alpha.h b/src/backend/port/dynloader/alpha.h
index bc1046a24ec..9fee0463401 100644
--- a/src/backend/port/dynloader/alpha.h
+++ b/src/backend/port/dynloader/alpha.h
@@ -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()
 
diff --git a/src/backend/port/dynloader/bsdi.h b/src/backend/port/dynloader/bsdi.h
index 5c8b3058aa1..b85bf1b6f38 100644
--- a/src/backend/port/dynloader/bsdi.h
+++ b/src/backend/port/dynloader/bsdi.h
@@ -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
 
diff --git a/src/backend/port/dynloader/hpux.c b/src/backend/port/dynloader/hpux.c
index 562b59ee770..ba904fd2bcf 100644
--- a/src/backend/port/dynloader/hpux.c
+++ b/src/backend/port/dynloader/hpux.c
@@ -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;
 }
 
diff --git a/src/backend/port/dynloader/hpux.h b/src/backend/port/dynloader/hpux.h
index 470e43f951a..e5f39baee8a 100644
--- a/src/backend/port/dynloader/hpux.h
+++ b/src/backend/port/dynloader/hpux.h
@@ -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();
diff --git a/src/backend/port/dynloader/linux.h b/src/backend/port/dynloader/linux.h
index 029143aa1f6..ad50aa821d3 100644
--- a/src/backend/port/dynloader/linux.h
+++ b/src/backend/port/dynloader/linux.h
@@ -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
diff --git a/src/backend/port/dynloader/qnx4.c b/src/backend/port/dynloader/qnx4.c
index eae3e2393d3..60bed57c632 100644
--- a/src/backend/port/dynloader/qnx4.c
+++ b/src/backend/port/dynloader/qnx4.c
@@ -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;
diff --git a/src/backend/port/dynloader/qnx4.h b/src/backend/port/dynloader/qnx4.h
index 6197d09a6fa..6ac94a8206d 100644
--- a/src/backend/port/dynloader/qnx4.h
+++ b/src/backend/port/dynloader/qnx4.h
@@ -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();
diff --git a/src/backend/rewrite/rewriteRemove.c b/src/backend/rewrite/rewriteRemove.c
index 821f93440e2..13a07adbd8c 100644
--- a/src/backend/rewrite/rewriteRemove.c
+++ b/src/backend/rewrite/rewriteRemove.c
@@ -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"
 
 /*-----------------------------------------------------------------------
diff --git a/src/backend/storage/large_object/inv_api.c b/src/backend/storage/large_object/inv_api.c
index 38961ff34c1..6f60e902ca8 100644
--- a/src/backend/storage/large_object/inv_api.c
+++ b/src/backend/storage/large_object/inv_api.c
@@ -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"
 
 /*
diff --git a/src/backend/tcop/Makefile b/src/backend/tcop/Makefile
index 2ee1faefcd1..aaeda91f44f 100644
--- a/src/backend/tcop/Makefile
+++ b/src/backend/tcop/Makefile
@@ -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: 
diff --git a/src/backend/tcop/fastpath.c b/src/backend/tcop/fastpath.c
index 1b38fe7ed08..60e1c7c4454 100644
--- a/src/backend/tcop/fastpath.c
+++ b/src/backend/tcop/fastpath.c
@@ -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.
@@ -76,11 +76,9 @@
  * ----------------
  */
 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;
 }
diff --git a/src/backend/utils/Gen_fmgrtab.sh.in b/src/backend/utils/Gen_fmgrtab.sh.in
index 975e2a0f9a2..f075ac28376 100644
--- a/src/backend/utils/Gen_fmgrtab.sh.in
+++ b/src/backend/utils/Gen_fmgrtab.sh.in
@@ -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
@@ -16,12 +17,6 @@
 #
 #-------------------------------------------------------------------------
 
-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
 
diff --git a/src/backend/utils/Makefile b/src/backend/utils/Makefile
index e37c85761e6..eba9b13af29 100644
--- a/src/backend/utils/Makefile
+++ b/src/backend/utils/Makefile
@@ -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))
diff --git a/src/backend/utils/adt/int8.c b/src/backend/utils/adt/int8.c
index 018352df1ad..a30a920b6a4 100644
--- a/src/backend/utils/adt/int8.c
+++ b/src/backend/utils/adt/int8.c
@@ -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>
@@ -18,6 +24,11 @@
 
 #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
diff --git a/src/backend/utils/adt/regproc.c b/src/backend/utils/adt/regproc.c
index 4060a846655..6db76ac8c5a 100644
--- a/src/backend/utils/adt/regproc.c
+++ b/src/backend/utils/adt/regproc.c
@@ -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"
 
 /*****************************************************************************
diff --git a/src/backend/utils/adt/selfuncs.c b/src/backend/utils/adt/selfuncs.c
index 4718dc668a7..c93ef767d8e 100644
--- a/src/backend/utils/adt/selfuncs.c
+++ b/src/backend/utils/adt/selfuncs.c
@@ -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:
diff --git a/src/backend/utils/adt/sets.c b/src/backend/utils/adt/sets.c
index dbc5ea4b8fa..cc629c3ad85 100644
--- a/src/backend/utils/adt/sets.c
+++ b/src/backend/utils/adt/sets.c
@@ -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 */
diff --git a/src/backend/utils/cache/catcache.c b/src/backend/utils/cache/catcache.c
index b593920b1a8..e5fb546ca70 100644
--- a/src/backend/utils/cache/catcache.c
+++ b/src/backend/utils/cache/catcache.c
@@ -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"
 
diff --git a/src/backend/utils/cache/fcache.c b/src/backend/utils/cache/fcache.c
index 26f4cbd8d06..33528d7bb20 100644
--- a/src/backend/utils/cache/fcache.c
+++ b/src/backend/utils/cache/fcache.c
@@ -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 $
  *
  *-------------------------------------------------------------------------
  */
@@ -24,20 +24,9 @@
 
 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))
 	{
diff --git a/src/backend/utils/cache/relcache.c b/src/backend/utils/cache/relcache.c
index b9e86d905ec..30f422de7f0 100644
--- a/src/backend/utils/cache/relcache.c
+++ b/src/backend/utils/cache/relcache.c
@@ -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"
 
diff --git a/src/backend/utils/fmgr/dfmgr.c b/src/backend/utils/fmgr/dfmgr.c
index a460fab05c2..2dfb54391c3 100644
--- a/src/backend/utils/fmgr/dfmgr.c
+++ b/src/backend/utils/fmgr/dfmgr.c
@@ -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 $
  *
  *-------------------------------------------------------------------------
  */
@@ -17,190 +17,127 @@
 
 #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
diff --git a/src/backend/utils/fmgr/fmgr.c b/src/backend/utils/fmgr/fmgr.c
index bdac32a2551..793497834fd 100644
--- a/src/backend/utils/fmgr/fmgr.c
+++ b/src/backend/utils/fmgr/fmgr.c
@@ -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 $
  *
  *-------------------------------------------------------------------------
  */
@@ -17,112 +17,249 @@
 
 #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);
 }
diff --git a/src/backend/utils/init/postinit.c b/src/backend/utils/init/postinit.c
index c4675a6b57d..68e293ef1da 100644
--- a/src/backend/utils/init/postinit.c
+++ b/src/backend/utils/init/postinit.c
@@ -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"
diff --git a/src/bin/scripts/createlang.sh b/src/bin/scripts/createlang.sh
index 11d439f435f..f2e7f60e12b 100644
--- a/src/bin/scripts/createlang.sh
+++ b/src/bin/scripts/createlang.sh
@@ -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
diff --git a/src/include/access/valid.h b/src/include/access/valid.h
index 0fa7b0840bb..e710ff415af 100644
--- a/src/include/access/valid.h
+++ b/src/include/access/valid.h
@@ -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, \
diff --git a/src/include/c.h b/src/include/c.h
index 43c9643fd9b..13ac2cfcd1b 100644
--- a/src/include/c.h
+++ b/src/include/c.h
@@ -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
diff --git a/src/include/catalog/catversion.h b/src/include/catalog/catversion.h
index 662770ace9c..e8717ddb05c 100644
--- a/src/include/catalog/catversion.h
+++ b/src/include/catalog/catversion.h
@@ -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
diff --git a/src/include/catalog/pg_attribute.h b/src/include/catalog/pg_attribute.h
index 6edd86b1f2e..d3d870a4116 100644
--- a/src/include/catalog/pg_attribute.h
+++ b/src/include/catalog/pg_attribute.h
@@ -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));
diff --git a/src/include/catalog/pg_class.h b/src/include/catalog/pg_class.h
index 7aed094e117..15c9e9fcd92 100644
--- a/src/include/catalog/pg_class.h
+++ b/src/include/catalog/pg_class.h
@@ -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("");
diff --git a/src/include/catalog/pg_language.h b/src/include/catalog/pg_language.h
index 75186cd4503..0d597d8c4da 100644
--- a/src/include/catalog/pg_language.h
+++ b/src/include/catalog/pg_language.h
@@ -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
 
 
diff --git a/src/include/catalog/pg_proc.h b/src/include/catalog/pg_proc.h
index 6995587c0cc..2a787f1f37a 100644
--- a/src/include/catalog/pg_proc.h
+++ b/src/include/catalog/pg_proc.h
@@ -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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 t 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 t 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 t 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 t 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 t 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 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 t 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 t 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 t 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 t 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 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 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 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 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 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 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 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 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 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 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 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 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 t 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 t 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 t 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 t 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 t 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 t 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 t 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 t 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 t 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 t 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 t 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 t 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 t 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 t 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 t 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 t 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 t 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 t 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 t 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 t 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 t 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 t 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 t 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 t 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 t 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 t 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 t 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 t 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 t 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 t 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 t 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 t 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 t 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 t 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 t 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 t 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 t 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 t 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 t 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 t 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 t 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 t 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 t 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 t 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 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 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 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 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 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 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 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 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 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 t 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 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 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 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 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 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 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 t 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 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 t 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 t 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 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 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 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 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 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 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 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 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 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 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 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 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 t 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 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 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 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 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 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 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 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 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 t 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 t 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 t 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 t 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 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 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 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 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 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 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 t 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 t 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 t 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 t 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 t 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 t 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 t 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 t 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 t 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 t 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 t 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 t 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 t 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 t 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 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 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 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 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 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 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 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 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 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 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 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 t 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 t 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 t 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 t 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 t 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 t 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 t 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 f 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 f 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 t 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 t 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 t 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 t 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 t 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 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 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 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 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 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 t 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 t 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 t 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 t 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 t 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 t 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 t 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 t 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 t 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 t 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 t 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 t 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 t 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 t 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 t 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 t 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 t 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 t 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 t 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 t 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 t 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 t 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 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 t 2 f 1184 "25 1184" 100 0 0 100  timestamp_trunc - ));
 DESCR("truncate timestamp to specified units");
-DATA(insert OID = 1218 (  date_trunc	   PGUID 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 t 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 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 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 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 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 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 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 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 t 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 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 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 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 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 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 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 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 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 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 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 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 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 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 t 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 t 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 t 2 f 27 "25 27" 100 0 0 100  currtid_byrelname - ));
 DESCR("latest tid of a tuple");
 
-DATA(insert OID = 1296 (  timedate_pl	   PGUID 14 f t f 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 t 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 t 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 t 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 t 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 t 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 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 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 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 t 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 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 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 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 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 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 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 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 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 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 t 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 t 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 t 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 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 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 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 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 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 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 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 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 t 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 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 t 1 f 1186 "1083" 100 0 0 100  time_interval - ));
 DESCR("convert time to interval");
-DATA(insert OID = 1371 (  date				 PGUID 14 f t t 1 f 1082 "1082" 100 0 0 100  "select $1" - ));
+DATA(insert OID = 1371 (  date				 PGUID 14 f t 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 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 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 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 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 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 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 t 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 t 2 f  701 "25 703" 100 0 0 100  "select date_part($1, interval($2))" - ));
 DESCR("extract field from reltime");
-DATA(insert OID = 1384 (  date_part    PGUID 14 f t f 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 t 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 t 2 f  701 "25 1083" 100 0 0 100  "select date_part($1, interval($2))" - ));
 DESCR("extract field from time");
-DATA(insert OID = 1386 (  age		   PGUID 14 f t f 1 f 1186 "1184" 100 0 0 100  "select age(\'today\', $1)" - ));
+DATA(insert OID = 1386 (  age		   PGUID 14 f t f t 1 f 1186 "1184" 100 0 0 100  "select age(\'today\', $1)" - ));
 DESCR("date difference from today preserving months and years");
 
-DATA(insert OID = 1387 (  timetz		   PGUID 14 f t f 1 f 1266 "1266" 100 0 0 100  "select $1" - ));
+DATA(insert OID = 1387 (  timetz		   PGUID 14 f t f t 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 t 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 t 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 t 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 t 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 t 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 t 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 t 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 t 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 t 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 t 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 t 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 t 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 t 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 t 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 t 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 t 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 t 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 t 0 f 0 "" 100 0 0 100  RI_FKey_setnull_upd - ));
 DESCR("referential integrity ON UPDATE SET NULL");
-DATA(insert OID = 1652 (  RI_FKey_setdefault_del PGUID 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 t 0 f 0 "" 100 0 0 100  RI_FKey_setdefault_del - ));
 DESCR("referential integrity ON DELETE SET DEFAULT");
-DATA(insert OID = 1653 (  RI_FKey_setdefault_upd PGUID 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 t 0 f 0 "" 100 0 0 100  RI_FKey_setdefault_upd - ));
 DESCR("referential integrity ON UPDATE SET DEFAULT");
-DATA(insert OID = 1654 (  RI_FKey_noaction_del PGUID 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 t 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 t 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 t 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 t 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 t 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 t 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,
diff --git a/src/include/executor/functions.h b/src/include/executor/functions.h
index 1c64712ebe3..26f2daac535 100644
--- a/src/include/executor/functions.h
+++ b/src/include/executor/functions.h
@@ -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 $
  *
  *-------------------------------------------------------------------------
  */
@@ -18,9 +18,11 @@
 #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
index 00000000000..18b01f7fad1
--- /dev/null
+++ b/src/include/fmgr.h
@@ -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 */
diff --git a/src/include/postgres.h b/src/include/postgres.h
index 0d16c553527..ee02a3c0c38 100644
--- a/src/include/postgres.h
+++ b/src/include/postgres.h
@@ -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 $
  *
  *-------------------------------------------------------------------------
  */
@@ -47,11 +47,6 @@
  * ----------------------------------------------------------------
  */
 
-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)
 
 /* ----------------------------------------------------------------
diff --git a/src/include/utils/dynamic_loader.h b/src/include/utils/dynamic_loader.h
index a83baae40eb..535d5c6d3ac 100644
--- a/src/include/utils/dynamic_loader.h
+++ b/src/include/utils/dynamic_loader.h
@@ -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 $
  *
  *-------------------------------------------------------------------------
  */
@@ -19,26 +19,12 @@
 /* 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);
 
diff --git a/src/include/utils/fcache.h b/src/include/utils/fcache.h
index 24e6db1f0c8..db3a05baf4b 100644
--- a/src/include/utils/fcache.h
+++ b/src/include/utils/fcache.h
@@ -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 $
  *
  *-------------------------------------------------------------------------
  */
@@ -19,22 +19,11 @@
 
 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 */
diff --git a/src/include/utils/fmgrtab.h b/src/include/utils/fmgrtab.h
index 21e28904d53..e6cfe519650 100644
--- a/src/include/utils/fmgrtab.h
+++ b/src/include/utils/fmgrtab.h
@@ -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 */
diff --git a/src/include/utils/int8.h b/src/include/utils/int8.h
index dab1e0addd1..b8ad531ab28 100644
--- a/src/include/utils/int8.h
+++ b/src/include/utils/int8.h
@@ -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
@@ -24,28 +24,6 @@
 #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);
diff --git a/src/interfaces/libpq/Makefile.in b/src/interfaces/libpq/Makefile.in
index 7e384345929..a5c43a45124 100644
--- a/src/interfaces/libpq/Makefile.in
+++ b/src/interfaces/libpq/Makefile.in
@@ -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)
diff --git a/src/pl/plperl/plperl.c b/src/pl/plperl/plperl.c
index 86ffbb265f9..b440be12de8 100644
--- a/src/pl/plperl/plperl.c
+++ b/src/pl/plperl/plperl.c
@@ -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);
 
diff --git a/src/pl/plpgsql/src/pl_exec.c b/src/pl/plpgsql/src/pl_exec.c
index a2565a43637..e587aecba60 100644
--- a/src/pl/plpgsql/src/pl_exec.c
+++ b/src/pl/plpgsql/src/pl_exec.c
@@ -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;
diff --git a/src/pl/plpgsql/src/pl_handler.c b/src/pl/plpgsql/src/pl_handler.c
index 0215eea6bba..54ecb1f4e89 100644
--- a/src/pl/plpgsql/src/pl_handler.c
+++ b/src/pl/plpgsql/src/pl_handler.c
@@ -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.
  *
@@ -45,147 +45,107 @@
 #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;
 }
diff --git a/src/pl/plpgsql/src/plpgsql.h b/src/pl/plpgsql/src/plpgsql.h
index 5efbccff8a0..f4246980fca 100644
--- a/src/pl/plpgsql/src/plpgsql.h
+++ b/src/pl/plpgsql/src/plpgsql.h
@@ -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.
  *
@@ -38,9 +38,10 @@
 #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);
 
 
 /* ----------
diff --git a/src/pl/tcl/pltcl.c b/src/pl/tcl/pltcl.c
index a57812e20a4..c968471ed94 100644
--- a/src/pl/tcl/pltcl.c
+++ b/src/pl/tcl/pltcl.c
@@ -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);
 
-- 
GitLab