diff --git a/src/backend/Makefile b/src/backend/Makefile
index ae90a17b0427924ce738624daf59e02f095a9656..6af51106bd399d6002ceb0ec3bcaa3e0d90b2ffd 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 594ed50a59d59302293fa7cbd9f0955d9ad8917e..847b06b1d21c84a481ba5995f762b7a0897b1533 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 e0672667c7fbba99d2a58950f13719351e5810f9..43d8a3850f54631c73a8fdc1a0be78f2a8568f74 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 b0864e505fac99084e40a3fd33304d7b97044854..5116b622dd1741847eb496782c54e6c35e574ac6 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 a12bca949327c59397eea46ebc87b76d16b444bd..beb4b079045f4ca7c14b2107309693df87e95e60 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 762bff810d0b25f46538ad6dc57cdd1abfaadf4c..5c0eff6e7c743f941085c1bc0de4463795e273b0 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 cfc5805b7c52c7b249048ad2e28b6d1ad9981c15..3ef1931e593bfa7098b067997fa27373ad0acef0 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 eb3d6debcc585e2452abf7324b804f8b8bf4b950..79a987ba59c4ad4abd4d39fc110c316a91d27f47 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 b0508d259a1523f6f622dcffa02be2b26bb4c989..5796b11b988ea2068681f5cace2e54f8167a60f1 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 aa23a3be8c2d9718541d050457d1d63ec402ad6c..6ddc343aaa60b417957b52042ab47b74e59d9200 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 4c3120c40f4015b02de9a7602eeb159573d9b024..9386079997e5356b5508a2c7e5024d58785388d3 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 c045f09b83d66874c9cee35a3f67effe38983f77..8225f3a7ca4295b14b6b916b5c69f9433cb5dd3d 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 2b9f6a257b12f87bc800374ee0a0a8dc80ea6c29..4fb184b7f6d85273e449dac21bc6dde424387055 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 3fe7b6f63470b74fdff6a577dbb52c874177073c..f33189d3ee94106638210bc64585ff5e63ee7676 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 65dff8ed44283de0160e01698dcae2eb35c8fdde..4285663a162fc394c2c66606f409e2c9932c90f5 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 4458edafaf27de53925b7708026852fbcac3613b..b08f6545044dbd679a04d241af17d6ea6fd455f7 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 5bc75faaec7c92a1bd7d431f7fa0efc348ecf3e1..da8728721756d8728cd5b864880b7f5d810ad2aa 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 16ad849d8ffa81aadcec9fcb81ecc1f6267616f8..826efa40bbd2d421fbac9d878810646a1802b3f9 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 47d2201c82aa30c75c8987ceda10a8d87ec8daf9..9b5f7c1ddff64a3a40e73918a41800dbfbf66307 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 c79ce0cea50fbf28df38199b0719ceff7b67af5e..49f5570e8fc8a468987d68e27dbc75f0eb758c8b 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 2e01e6e202c05475af3d3d99947ff27d45030716..ea5f457448fa46a3eba48c2a116a6017d787a261 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 0c0c5f4785d9aff6df0d3ccc3935a55386bf2089..3a9b972b9ed618ddae52237687deac042753da8a 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 58307e6a695e15568eb1f72b20f64a3c2e632dee..a53957c4f4ace45336a2093f653f7a3484dbebc6 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 e3783473f96efdc98717e7257b276c437841a41f..39b29138e191e41f510fb854bf53b3a9a0f8dae3 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 c8d119df482001972556148a76b87734becbf7b1..ee5fabf170887b09feef74d4263bb06d28d18b57 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 e2db06f84d140690bf2e9673783015bc7de00da0..853fa96e2c360e8b0af17aa072c7ce4e8bace057 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 656fbdb480d8d92496bfb0579aa7db6dfe61221b..50f5f1b7206f5c70d8cc748bce6cfb9519cd92ae 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 0c29ea251840ee9be6e43bf08775c55650f58ba4..42d48281e08db4fe03baeaa26ca65d300fd2508a 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 c0d07a05dbae8d2ad2773df87387dd784b599693..59e2ac1154ea20e64e9af4157c718ec3fd6d58fa 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 d430059a1e0bae95cc82eca8ca79f850284f0b11..460417f2417e00d05deffce3da090bc27f2fc308 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 06f9cd0247f0b40e9ae079d168de5dc3359dcc76..b862cf7f1297ff5b3cf6a4d0eeac034105095d1d 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 e9d7690e00c754dbd83413e1ba677f11424d8f2d..fca1bd0ab17870d3ea09874710f36a4e7b555dd6 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 7658443a378738af3b00ba8fdd845d13b2defd84..6f454063626b6f67661bcfce5961677d9f4c7ff1 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 ed6a910f273ee83f5b0d45c42c21443b1152df5c..1866cd37b28df8941dd6d324b3734baca9040b9a 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 0f386b84c71c180359afffe58b3a405b02bbff5d..dcec30b15890aee541938f49554cf91a2f6b1ebc 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 2a9de556b266c5754b1b6a54be943f31cf71414b..73be990c01083f0f070f174621ac422d38674396 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 bc1046a24eca0df93f4801f0c106ea3d40074ff0..9fee04634017090ec5792bcfa2ac3e4123e0b41e 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 5c8b3058aa1c8b5d85f9b36f69657f40d90f24f3..b85bf1b6f387dcd945c9574ed0d0a320e8573ab9 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 562b59ee770f24ec9dc47e296340ad4bf31e5bc1..ba904fd2bcf32678fe6f9f76185f22b29a3fd7ab 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 470e43f951a9bf335acedfb41d9088bad448eb87..e5f39baee8aa634e058231568c1ba02210f3c9ed 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 029143aa1f6bd153c3b105a972b6a131f001e080..ad50aa821d3425001194895236384cb3319541ad 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 eae3e2393d32cda89c742a1c1391d0f78e3dee85..60bed57c6321b282e7b4c2d07851548b88791b19 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 6197d09a6fa8506f9f7d5370ff071c39e2b2a48f..6ac94a8206df54e73d270de474b094988aa6ca59 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 821f93440e2d9c57196382386053ad31a2d5ab9d..13a07adbd8c864974d8220cc5bfbceab706433de 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 38961ff34c19032174c9196f5a02c00223f79f86..6f60e902ca833e2a6dbf28057bf1ebf7fbaadbaf 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 2ee1faefcd13f3cdd6b166762e41800c37f873dd..aaeda91f44f95a5fd83e9b8786a7a108676cf4f3 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 1b38fe7ed08e4098bf99e10abf944c6461f7cc64..60e1c7c44541940c5580b940f8a646851bab304d 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 975e2a0f9a2866804b27fa8d3cb40a372e372404..f075ac28376bdcec8c7aac270a6a853a0a2645c1 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 e37c85761e684be3e29c532cc1d5b6a25a52fc3d..eba9b13af29671956f2d44deb0dcd366d17208fd 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 018352df1ad7b8dd53aa31aedb782fac9e28b080..a30a920b6a46998e718467004c4130f453e173c6 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 4060a8466552c28b4b45541fb7764e5fdde0db9e..6db76ac8c5a49f112baa51f3f547d39ca0e3e890 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 4718dc668a7313fb5a21d6b50c666f0360acf733..c93ef767d8e2f6eaa45fa7c646d4cb4e87223640 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 dbc5ea4b8fadd6b6324e0b75fb4c00b111f5790e..cc629c3ad858a83303082ebc8ddef6dc9064a355 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 b593920b1a819a6c7e32178fd2a88d525742424c..e5fb546ca70256f8843fe84618947c6ab6ebeeaf 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 26f4cbd8d06d1124010355e84333e3b31715ab00..33528d7bb20b8ff98438bc996b9fb11a89f1ffa0 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 b9e86d905ecb238617bb6b11a57aa834d005f7c0..30f422de7f076137f6c5d0183745d711a55913f2 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 a460fab05c2c5d28e40c13487bf0f9f43be16860..2dfb54391c319293f4243c99be379ff0c3674768 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 bdac32a2551c029d9c5bcf9f8b22d79d3e243637..793497834fd0f9c9d832862fef9dc40d756f5da5 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 c4675a6b57da7efb2ac1b9298c7f33a3254a9f63..68e293ef1daf757e99287e06fb5eefe06bf17af4 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 11d439f435feb3fd97ac2dc8048a38d78c0f7902..f2e7f60e12b6b9b82fe5b1bd637ac64775693d24 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 0fa7b0840bb5a6b5f2ce450998bfa80dba96267e..e710ff415af472a38626f3d3cff77ee350e0c742 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 43c9643fd9b44494c76a121e21c8b48b144375e7..13ac2cfcd1bda9a5efbc267949f3bbd4ebf1e5a2 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 662770ace9c822a072277419ce0503aa1480187b..e8717ddb05c196fab4d327e6e81caee316344e5a 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 6edd86b1f2ea6e5f4329a523f68cbf2d345e825f..d3d870a411675fb9203a70bbb94142414a438c4f 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 7aed094e117b24bbf98baad7d5dfb5aab611b4ff..15c9e9fcd921638e6ccfa5ae23dc315b07467abd 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 75186cd45030e44da77fe4876eb78ad8810be0ba..0d597d8c4daf82f28d6c0a733522434340e14dac 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 6995587c0cc64a9dd8cd94d17671299c665e7331..2a787f1f37a82e695da94774c0aa1b27e3770dcf 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 1c64712ebe32e1379da5af90a8e07809fccad3ee..26f2daac535eb7a0fd3103151145d67fc474b774 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 0000000000000000000000000000000000000000..18b01f7fad1a2eea0e5d8dbc5d61148c542d465d
--- /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 0d16c553527f33533cab3d09c115b7c7de83bfb0..ee02a3c0c38a77331bcdd860420bc88a829801d6 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 a83baae40eb1c37f2c13b0253008c8852619fb38..535d5c6d3acbb0c8f53b5c6031406031341797f7 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 24e6db1f0c8bd4b0c2b17aa5e140b7bad205bda2..db3a05baf4b8c37ae560b4214b7f6762254ce3cf 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 21e28904d53383d8f3ae6a7a23a817ce82214ee9..e6cfe519650c41689d569e3dcfdf34f3530ef0dd 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 dab1e0addd1c60cc83c26e5dd613c6c23cfeb868..b8ad531ab28932f327352e9c9599296795e2f165 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 7e384345929cb36f7ced82f8f07f6d1b7684ce18..a5c43a451246d2aba98ad00a7090aff2759efdc0 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 86ffbb265f9528ce69a8e7bc4ef50cc68d29e889..b440be12de8aa0624c23044baa45b1cc70f99741 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 a2565a43637b331db760ece4c95d749faa324de6..e587aecba6045eb9ac349f35fbd15fbb15197478 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 0215eea6bba118c8bb2c69fee631fcf6b4378892..54ecb1f4e89940008dde25d1183826acb0d9f63a 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 5efbccff8a0f2a76dcfd5487e3f98a7e59328905..f4246980fca540b44a42def4444f7df6c27560b2 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 a57812e20a4606f8547613259d49d8c389ef34ad..c968471ed945fee0fc16f05909a318af656655b1 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);