aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/backend/Makefile19
-rw-r--r--src/backend/access/common/Makefile9
-rw-r--r--src/backend/access/index/indexam.c47
-rw-r--r--src/backend/access/index/istrat.c3
-rw-r--r--src/backend/bootstrap/bootstrap.c3
-rw-r--r--src/backend/catalog/heap.c5
-rw-r--r--src/backend/catalog/index.c13
-rw-r--r--src/backend/catalog/indexing.c3
-rw-r--r--src/backend/catalog/pg_operator.c3
-rw-r--r--src/backend/catalog/pg_proc.c90
-rw-r--r--src/backend/catalog/pg_type.c12
-rw-r--r--src/backend/commands/async.c3
-rw-r--r--src/backend/commands/command.c20
-rw-r--r--src/backend/commands/comment.c5
-rw-r--r--src/backend/commands/copy.c4
-rw-r--r--src/backend/commands/dbcommands.c3
-rw-r--r--src/backend/commands/define.c83
-rw-r--r--src/backend/commands/indexcmds.c5
-rw-r--r--src/backend/commands/proclang.c3
-rw-r--r--src/backend/commands/trigger.c10
-rw-r--r--src/backend/commands/user.c3
-rw-r--r--src/backend/commands/vacuum.c3
-rw-r--r--src/backend/executor/execQual.c168
-rw-r--r--src/backend/executor/execUtils.c6
-rw-r--r--src/backend/executor/functions.c81
-rw-r--r--src/backend/executor/nodeAgg.c95
-rw-r--r--src/backend/libpq/Makefile7
-rw-r--r--src/backend/libpq/be-pqexec.c41
-rw-r--r--src/backend/nodes/freefuncs.c6
-rw-r--r--src/backend/optimizer/path/clausesel.c3
-rw-r--r--src/backend/optimizer/path/indxpath.c3
-rw-r--r--src/backend/optimizer/util/plancat.c6
-rw-r--r--src/backend/parser/analyze.c3
-rw-r--r--src/backend/parser/parse_func.c3
-rw-r--r--src/backend/parser/parse_node.c11
-rw-r--r--src/backend/parser/parse_oper.c3
-rw-r--r--src/backend/port/dynloader/alpha.h4
-rw-r--r--src/backend/port/dynloader/bsdi.h2
-rw-r--r--src/backend/port/dynloader/hpux.c8
-rw-r--r--src/backend/port/dynloader/hpux.h6
-rw-r--r--src/backend/port/dynloader/linux.h4
-rw-r--r--src/backend/port/dynloader/qnx4.c4
-rw-r--r--src/backend/port/dynloader/qnx4.h4
-rw-r--r--src/backend/rewrite/rewriteRemove.c3
-rw-r--r--src/backend/storage/large_object/inv_api.c3
-rw-r--r--src/backend/tcop/Makefile12
-rw-r--r--src/backend/tcop/fastpath.c159
-rw-r--r--src/backend/utils/Gen_fmgrtab.sh.in196
-rw-r--r--src/backend/utils/Makefile17
-rw-r--r--src/backend/utils/adt/int8.c11
-rw-r--r--src/backend/utils/adt/regproc.c3
-rw-r--r--src/backend/utils/adt/selfuncs.c10
-rw-r--r--src/backend/utils/adt/sets.c5
-rw-r--r--src/backend/utils/cache/catcache.c3
-rw-r--r--src/backend/utils/cache/fcache.c56
-rw-r--r--src/backend/utils/cache/relcache.c3
-rw-r--r--src/backend/utils/fmgr/dfmgr.c306
-rw-r--r--src/backend/utils/fmgr/fmgr.c1765
-rw-r--r--src/backend/utils/init/postinit.c3
-rw-r--r--src/bin/scripts/createlang.sh4
-rw-r--r--src/include/access/valid.h4
-rw-r--r--src/include/c.h146
-rw-r--r--src/include/catalog/catversion.h4
-rw-r--r--src/include/catalog/pg_attribute.h44
-rw-r--r--src/include/catalog/pg_class.h4
-rw-r--r--src/include/catalog/pg_language.h20
-rw-r--r--src/include/catalog/pg_proc.h2198
-rw-r--r--src/include/executor/functions.h10
-rw-r--r--src/include/fmgr.h301
-rw-r--r--src/include/postgres.h27
-rw-r--r--src/include/utils/dynamic_loader.h22
-rw-r--r--src/include/utils/fcache.h33
-rw-r--r--src/include/utils/fmgrtab.h31
-rw-r--r--src/include/utils/int8.h24
-rw-r--r--src/interfaces/libpq/Makefile.in11
-rw-r--r--src/pl/plperl/plperl.c100
-rw-r--r--src/pl/plpgsql/src/pl_exec.c24
-rw-r--r--src/pl/plpgsql/src/pl_handler.c172
-rw-r--r--src/pl/plpgsql/src/plpgsql.h14
-rw-r--r--src/pl/tcl/pltcl.c92
80 files changed, 3764 insertions, 2893 deletions
diff --git a/src/backend/Makefile b/src/backend/Makefile
index ae90a17b042..6af51106bd3 100644
--- a/src/backend/Makefile
+++ b/src/backend/Makefile
@@ -34,7 +34,7 @@
#
#
# IDENTIFICATION
-# $Header: /cvsroot/pgsql/src/backend/Makefile,v 1.47 2000/05/11 17:46:28 momjian Exp $
+# $Header: /cvsroot/pgsql/src/backend/Makefile,v 1.48 2000/05/28 17:55:51 tgl Exp $
#
#-------------------------------------------------------------------------
@@ -79,7 +79,7 @@ all: postgres $(POSTGRES_IMP) global1.bki.source local1_template1.bki.source \
global1.description local1_template1.description
ifneq ($(PORTNAME), win)
-postgres: fmgr.h $(OBJS) $(VERSIONOBJ)
+postgres: utils/fmgroids.h $(OBJS) $(VERSIONOBJ)
$(CC) $(CFLAGS) -o postgres $(OBJS) $(OBJS1) $(VERSIONOBJ) $(LDFLAGS)
else
postgres: $(DLLOBJS) $(SRCDIR)/utils/dllinit.o postgres.def libpostgres.a
@@ -126,15 +126,12 @@ parse.h: parser/parse.h
parser/parse.h:
$(MAKE) -C parser parse.h
-fmgr.h: utils/fmgr.h
- cp utils/fmgr.h .
-
-utils/fmgr.h:
- $(MAKE) -C utils fmgr.h
+utils/fmgroids.h:
+ $(MAKE) -C utils fmgroids.h
#############################################################################
clean:
- rm -f postgres$(X) $(POSTGRES_IMP) fmgr.h parse.h \
+ rm -f postgres$(X) $(POSTGRES_IMP) parse.h \
global1.bki.source local1_template1.bki.source \
global1.description local1_template1.description
ifeq ($(PORTNAME), win)
@@ -205,7 +202,7 @@ install-templates: $(TEMPLATEDIR) \
$(INSTALL) $(INSTLOPTS) pg_options.sample \
$(TEMPLATEDIR)/pg_options.sample
-install-headers: fmgr.h $(SRCDIR)/include/config.h
+install-headers: utils/fmgroids.h $(SRCDIR)/include/config.h
-@if [ ! -d $(HEADERDIR) ]; then mkdir $(HEADERDIR); fi
-@if [ ! -d $(HEADERDIR)/port ]; then mkdir $(HEADERDIR)/port; fi
-@if [ ! -d $(HEADERDIR)/port/$(PORTNAME) ]; \
@@ -222,8 +219,6 @@ install-headers: fmgr.h $(SRCDIR)/include/config.h
then mkdir $(HEADERDIR)/executor; fi
-@if [ ! -d $(HEADERDIR)/commands ]; \
then mkdir $(HEADERDIR)/commands; fi
- $(INSTALL) $(INSTLOPTS) fmgr.h \
- $(HEADERDIR)/fmgr.h
$(INSTALL) $(INSTLOPTS) $(SRCDIR)/include/os.h \
$(HEADERDIR)/os.h
$(INSTALL) $(INSTLOPTS) $(SRCDIR)/include/config.h \
@@ -244,6 +239,8 @@ install-headers: fmgr.h $(SRCDIR)/include/config.h
$(HEADERDIR)/utils/geo_decls.h
$(INSTALL) $(INSTLOPTS) $(SRCDIR)/include/utils/elog.h \
$(HEADERDIR)/utils/elog.h
+ $(INSTALL) $(INSTLOPTS) utils/fmgroids.h \
+ $(HEADERDIR)/utils/fmgroids.h
$(INSTALL) $(INSTLOPTS) $(SRCDIR)/include/utils/palloc.h \
$(HEADERDIR)/utils/palloc.h
$(INSTALL) $(INSTLOPTS) $(SRCDIR)/include/utils/mcxt.h \
diff --git a/src/backend/access/common/Makefile b/src/backend/access/common/Makefile
index 594ed50a59d..847b06b1d21 100644
--- a/src/backend/access/common/Makefile
+++ b/src/backend/access/common/Makefile
@@ -4,7 +4,7 @@
# Makefile for access/common
#
# IDENTIFICATION
-# $Header: /cvsroot/pgsql/src/backend/access/common/Makefile,v 1.16 2000/01/19 02:58:50 petere Exp $
+# $Header: /cvsroot/pgsql/src/backend/access/common/Makefile,v 1.17 2000/05/28 17:55:52 tgl Exp $
#
#-------------------------------------------------------------------------
@@ -21,12 +21,7 @@ all: SUBSYS.o
SUBSYS.o: $(OBJS)
$(LD) $(LDREL) $(LDOUT) SUBSYS.o $(OBJS)
-heaptuple.o heapvalid.o tupdesc.o: ../../fmgr.h
-
-../../fmgr.h:
- $(MAKE) -C ../.. fmgr.h
-
-dep depend: ../../fmgr.h
+dep depend:
$(CC) -MM $(CFLAGS) *.c >depend
clean:
diff --git a/src/backend/access/index/indexam.c b/src/backend/access/index/indexam.c
index e0672667c7f..43d8a3850f5 100644
--- a/src/backend/access/index/indexam.c
+++ b/src/backend/access/index/indexam.c
@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/access/index/indexam.c,v 1.42 2000/04/12 17:14:47 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/access/index/indexam.c,v 1.43 2000/05/28 17:55:52 tgl Exp $
*
* INTERFACE ROUTINES
* index_open - open an index relation by relationId
@@ -418,28 +418,43 @@ GetIndexValue(HeapTuple tuple,
bool *attNull)
{
Datum returnVal;
- bool isNull = FALSE;
if (PointerIsValid(fInfo) && FIgetProcOid(fInfo) != InvalidOid)
{
- int i;
- Datum *attData = (Datum *) palloc(FIgetnArgs(fInfo) * sizeof(Datum));
+ FmgrInfo flinfo;
+ FunctionCallInfoData fcinfo;
+ int i;
+ bool anynull = false;
+
+ /*
+ * XXX ought to store lookup info in FuncIndexInfo so it need not
+ * be repeated on each call?
+ */
+ fmgr_info(FIgetProcOid(fInfo), &flinfo);
+
+ MemSet(&fcinfo, 0, sizeof(fcinfo));
+ fcinfo.flinfo = &flinfo;
+ fcinfo.nargs = FIgetnArgs(fInfo);
for (i = 0; i < FIgetnArgs(fInfo); i++)
{
- attData[i] = heap_getattr(tuple,
- attrNums[i],
- hTupDesc,
- attNull);
- if (*attNull)
- isNull = TRUE;
+ fcinfo.arg[i] = heap_getattr(tuple,
+ attrNums[i],
+ hTupDesc,
+ &fcinfo.argnull[i]);
+ anynull |= fcinfo.argnull[i];
+ }
+ if (flinfo.fn_strict && anynull)
+ {
+ /* force a null result for strict function */
+ returnVal = (Datum) 0;
+ *attNull = true;
+ }
+ else
+ {
+ returnVal = FunctionCallInvoke(&fcinfo);
+ *attNull = fcinfo.isnull;
}
- returnVal = (Datum) fmgr_array_args(FIgetProcOid(fInfo),
- FIgetnArgs(fInfo),
- (char **) attData,
- &isNull);
- pfree(attData);
- *attNull = isNull;
}
else
returnVal = heap_getattr(tuple, attrNums[attOff], hTupDesc, attNull);
diff --git a/src/backend/access/index/istrat.c b/src/backend/access/index/istrat.c
index b0864e505fa..5116b622dd1 100644
--- a/src/backend/access/index/istrat.c
+++ b/src/backend/access/index/istrat.c
@@ -9,7 +9,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/access/index/Attic/istrat.c,v 1.42 2000/04/12 17:14:47 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/access/index/Attic/istrat.c,v 1.43 2000/05/28 17:55:52 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -24,6 +24,7 @@
#include "catalog/pg_index.h"
#include "catalog/pg_operator.h"
#include "miscadmin.h"
+#include "utils/fmgroids.h"
#include "utils/syscache.h"
#ifdef USE_ASSERT_CHECKING
diff --git a/src/backend/bootstrap/bootstrap.c b/src/backend/bootstrap/bootstrap.c
index a12bca94932..beb4b079045 100644
--- a/src/backend/bootstrap/bootstrap.c
+++ b/src/backend/bootstrap/bootstrap.c
@@ -8,7 +8,7 @@
* Portions Copyright (c) 1994, Regents of the University of California
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/bootstrap/bootstrap.c,v 1.81 2000/04/12 17:14:54 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/bootstrap/bootstrap.c,v 1.82 2000/05/28 17:55:53 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -34,6 +34,7 @@
#include "miscadmin.h"
#include "tcop/tcopprot.h"
#include "utils/builtins.h"
+#include "utils/fmgroids.h"
#include "utils/lsyscache.h"
#include "utils/portal.h"
diff --git a/src/backend/catalog/heap.c b/src/backend/catalog/heap.c
index 762bff810d0..5c0eff6e7c7 100644
--- a/src/backend/catalog/heap.c
+++ b/src/backend/catalog/heap.c
@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/catalog/heap.c,v 1.128 2000/05/25 21:25:32 tgl Exp $
+ * $Header: /cvsroot/pgsql/src/backend/catalog/heap.c,v 1.129 2000/05/28 17:55:54 tgl Exp $
*
*
* INTERFACE ROUTINES
@@ -63,6 +63,7 @@
#include "tcop/tcopprot.h"
#include "utils/builtins.h"
#include "utils/catcache.h"
+#include "utils/fmgroids.h"
#include "utils/portal.h"
#include "utils/relcache.h"
#include "utils/syscache.h"
@@ -1148,7 +1149,7 @@ RelationTruncateIndexes(Relation heapRelation)
/* If a valid where predicate, compute predicate Node */
if (VARSIZE(&index->indpred) != 0)
{
- predString = fmgr(F_TEXTOUT, &index->indpred);
+ predString = textout(&index->indpred);
oldPred = stringToNode(predString);
pfree(predString);
}
diff --git a/src/backend/catalog/index.c b/src/backend/catalog/index.c
index cfc5805b7c5..3ef1931e593 100644
--- a/src/backend/catalog/index.c
+++ b/src/backend/catalog/index.c
@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/catalog/index.c,v 1.110 2000/05/20 23:11:28 tgl Exp $
+ * $Header: /cvsroot/pgsql/src/backend/catalog/index.c,v 1.111 2000/05/28 17:55:54 tgl Exp $
*
*
* INTERFACE ROUTINES
@@ -42,6 +42,7 @@
#include "storage/smgr.h"
#include "utils/builtins.h"
#include "utils/catcache.h"
+#include "utils/fmgroids.h"
#include "utils/relcache.h"
#include "utils/syscache.h"
#include "utils/temprel.h"
@@ -688,11 +689,11 @@ UpdateIndexRelation(Oid indexoid,
if (predicate != NULL)
{
predString = nodeToString(predicate);
- predText = (text *) fmgr(F_TEXTIN, predString);
+ predText = textin(predString);
pfree(predString);
}
else
- predText = (text *) fmgr(F_TEXTIN, "");
+ predText = textin("");
predLen = VARSIZE(predText);
itupLen = predLen + sizeof(FormData_pg_index);
@@ -832,11 +833,11 @@ UpdateIndexPredicate(Oid indexoid, Node *oldPred, Node *predicate)
if (newPred != NULL)
{
predString = nodeToString(newPred);
- predText = (text *) fmgr(F_TEXTIN, predString);
+ predText = textin(predString);
pfree(predString);
}
else
- predText = (text *) fmgr(F_TEXTIN, "");
+ predText = textin("");
/* open the index system catalog relation */
pg_index = heap_openr(IndexRelationName, RowExclusiveLock);
@@ -2109,7 +2110,7 @@ reindex_index(Oid indexId, bool force)
/* If a valid where predicate, compute predicate Node */
if (VARSIZE(&index->indpred) != 0)
{
- predString = fmgr(F_TEXTOUT, &index->indpred);
+ predString = textout(&index->indpred);
oldPred = stringToNode(predString);
pfree(predString);
}
diff --git a/src/backend/catalog/indexing.c b/src/backend/catalog/indexing.c
index eb3d6debcc5..79a987ba59c 100644
--- a/src/backend/catalog/indexing.c
+++ b/src/backend/catalog/indexing.c
@@ -9,7 +9,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/catalog/indexing.c,v 1.60 2000/04/12 17:14:56 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/catalog/indexing.c,v 1.61 2000/05/28 17:55:54 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -24,6 +24,7 @@
#include "catalog/indexing.h"
#include "catalog/pg_index.h"
#include "miscadmin.h"
+#include "utils/fmgroids.h"
#include "utils/syscache.h"
/*
diff --git a/src/backend/catalog/pg_operator.c b/src/backend/catalog/pg_operator.c
index b0508d259a1..5796b11b988 100644
--- a/src/backend/catalog/pg_operator.c
+++ b/src/backend/catalog/pg_operator.c
@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/catalog/pg_operator.c,v 1.49 2000/01/26 05:56:10 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/catalog/pg_operator.c,v 1.50 2000/05/28 17:55:54 tgl Exp $
*
* NOTES
* these routines moved here from commands/define.c and somewhat cleaned up.
@@ -26,6 +26,7 @@
#include "miscadmin.h"
#include "parser/parse_func.h"
#include "utils/builtins.h"
+#include "utils/fmgroids.h"
#include "utils/syscache.h"
diff --git a/src/backend/catalog/pg_proc.c b/src/backend/catalog/pg_proc.c
index aa23a3be8c2..6ddc343aaa6 100644
--- a/src/backend/catalog/pg_proc.c
+++ b/src/backend/catalog/pg_proc.c
@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/catalog/pg_proc.c,v 1.42 2000/04/12 17:14:56 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/catalog/pg_proc.c,v 1.43 2000/05/28 17:55:54 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -17,6 +17,7 @@
#include "access/heapam.h"
#include "catalog/catname.h"
#include "catalog/indexing.h"
+#include "catalog/pg_language.h"
#include "catalog/pg_proc.h"
#include "catalog/pg_type.h"
#include "miscadmin.h"
@@ -24,7 +25,6 @@
#include "parser/parse_type.h"
#include "tcop/tcopprot.h"
#include "utils/builtins.h"
-#include "utils/fmgrtab.h"
#include "utils/lsyscache.h"
#include "utils/sets.h"
#include "utils/syscache.h"
@@ -41,8 +41,9 @@ ProcedureCreate(char *procedureName,
char *languageName,
char *prosrc,
char *probin,
- bool canCache,
bool trusted,
+ bool canCache,
+ bool isStrict,
int32 byte_pct,
int32 perbyte_cpu,
int32 percall_cpu,
@@ -74,6 +75,15 @@ ProcedureCreate(char *procedureName,
Assert(PointerIsValid(prosrc));
Assert(PointerIsValid(probin));
+ tup = SearchSysCacheTuple(LANGNAME,
+ PointerGetDatum(languageName),
+ 0, 0, 0);
+
+ if (!HeapTupleIsValid(tup))
+ elog(ERROR, "ProcedureCreate: no such language '%s'", languageName);
+
+ languageObjectId = tup->t_data->t_oid;
+
parameterCount = 0;
MemSet(typev, 0, FUNC_MAX_ARGS * sizeof(Oid));
foreach(x, argList)
@@ -86,7 +96,7 @@ ProcedureCreate(char *procedureName,
if (strcmp(strVal(t), "opaque") == 0)
{
- if (strcmp(languageName, "sql") == 0)
+ if (languageObjectId == SQLlanguageId)
elog(ERROR, "ProcedureCreate: sql functions cannot take type \"opaque\"");
toid = 0;
}
@@ -120,7 +130,7 @@ ProcedureCreate(char *procedureName,
elog(ERROR, "ProcedureCreate: procedure %s already exists with same arguments",
procedureName);
- if (!strcmp(languageName, "sql"))
+ if (languageObjectId == SQLlanguageId)
{
/*
@@ -129,7 +139,7 @@ ProcedureCreate(char *procedureName,
* matches a function already in pg_proc. If so just return the
* OID of the existing set.
*/
- if (!strcmp(procedureName, GENERICSETNAME))
+ if (strcmp(procedureName, GENERICSETNAME) == 0)
{
#ifdef SETS_FIXED
/* ----------
@@ -138,7 +148,7 @@ ProcedureCreate(char *procedureName,
* have been removed. Instead a sequential heap scan
* or something better must get implemented. The reason
* for removing is that nbtree index crashes if sources
- * exceed 2K what's likely for procedural languages.
+ * exceed 2K --- what's likely for procedural languages.
*
* 1999/09/30 Jan
* ----------
@@ -158,18 +168,9 @@ ProcedureCreate(char *procedureName,
}
}
- tup = SearchSysCacheTuple(LANGNAME,
- PointerGetDatum(languageName),
- 0, 0, 0);
-
- if (!HeapTupleIsValid(tup))
- elog(ERROR, "ProcedureCreate: no such language %s", languageName);
-
- languageObjectId = tup->t_data->t_oid;
-
if (strcmp(returnTypeName, "opaque") == 0)
{
- if (strcmp(languageName, "sql") == 0)
+ if (languageObjectId == SQLlanguageId)
elog(ERROR, "ProcedureCreate: sql functions cannot return type \"opaque\"");
typeObjectId = 0;
}
@@ -181,16 +182,10 @@ ProcedureCreate(char *procedureName,
{
elog(NOTICE, "ProcedureCreate: type '%s' is not yet defined",
returnTypeName);
-#ifdef NOT_USED
- elog(NOTICE, "ProcedureCreate: creating a shell for type '%s'",
- returnTypeName);
-#endif
typeObjectId = TypeShellMake(returnTypeName);
if (!OidIsValid(typeObjectId))
- {
elog(ERROR, "ProcedureCreate: could not create type '%s'",
returnTypeName);
- }
}
else if (!defined)
{
@@ -219,7 +214,7 @@ ProcedureCreate(char *procedureName,
* procedure's text in the prosrc attribute.
*/
- if (strcmp(languageName, "sql") == 0)
+ if (languageObjectId == SQLlanguageId)
{
querytree_list = pg_parse_and_rewrite(prosrc, typev, parameterCount,
FALSE);
@@ -237,16 +232,50 @@ ProcedureCreate(char *procedureName,
* FUNCTION xyz AS '' LANGUAGE 'internal'. To preserve some modicum
* of backwards compatibility, accept an empty 'prosrc' value as
* meaning the supplied SQL function name.
+ *
+ * XXX: we could treat "internal" and "newinternal" language specs
+ * as equivalent, and take the actual language ID from the table of
+ * known builtin functions. Is that a better idea than making the
+ * user specify the right thing? Not sure.
*/
- if (strcmp(languageName, "internal") == 0)
+ if (languageObjectId == INTERNALlanguageId ||
+ languageObjectId == NEWINTERNALlanguageId)
{
+ Oid actualLangID;
+
if (strlen(prosrc) == 0)
prosrc = procedureName;
- if (fmgr_lookupByName(prosrc) == (func_ptr) NULL)
+ actualLangID = fmgr_internal_language(prosrc);
+ if (actualLangID == InvalidOid)
elog(ERROR,
- "ProcedureCreate: there is no builtin function named \"%s\"",
+ "ProcedureCreate: there is no builtin function named \"%s\"",
prosrc);
+ if (actualLangID != languageObjectId)
+ elog(ERROR,
+ "ProcedureCreate: \"%s\" is not %s internal function",
+ prosrc,
+ ((languageObjectId == INTERNALlanguageId) ?
+ "an old-style" : "a new-style"));
+ }
+
+ /*
+ * If this is a dynamically loadable procedure, make sure that the
+ * library file exists, is loadable, and contains the specified link
+ * symbol.
+ *
+ * We used to perform these checks only when the function was first
+ * called, but it seems friendlier to verify the library's validity
+ * at CREATE FUNCTION time.
+ */
+
+ if (languageObjectId == ClanguageId ||
+ languageObjectId == NEWClanguageId)
+ {
+ /* If link symbol is specified as "-", substitute procedure name */
+ if (strcmp(prosrc, "-") == 0)
+ prosrc = procedureName;
+ (void) load_external_function(probin, prosrc);
}
/*
@@ -265,9 +294,10 @@ ProcedureCreate(char *procedureName,
values[i++] = Int32GetDatum(GetUserId());
values[i++] = ObjectIdGetDatum(languageObjectId);
/* XXX isinherited is always false for now */
- values[i++] = Int8GetDatum((bool) 0);
+ values[i++] = Int8GetDatum((bool) false);
values[i++] = Int8GetDatum(trusted);
values[i++] = Int8GetDatum(canCache);
+ values[i++] = Int8GetDatum(isStrict);
values[i++] = UInt16GetDatum(parameterCount);
values[i++] = Int8GetDatum(returnsSet);
values[i++] = ObjectIdGetDatum(typeObjectId);
@@ -276,8 +306,8 @@ ProcedureCreate(char *procedureName,
values[i++] = Int32GetDatum(perbyte_cpu); /* properbyte_cpu */
values[i++] = Int32GetDatum(percall_cpu); /* propercall_cpu */
values[i++] = Int32GetDatum(outin_ratio); /* prooutin_ratio */
- values[i++] = (Datum) fmgr(F_TEXTIN, prosrc); /* prosrc */
- values[i++] = (Datum) fmgr(F_TEXTIN, probin); /* probin */
+ values[i++] = (Datum) textin(prosrc); /* prosrc */
+ values[i++] = (Datum) textin(probin); /* probin */
rel = heap_openr(ProcedureRelationName, RowExclusiveLock);
diff --git a/src/backend/catalog/pg_type.c b/src/backend/catalog/pg_type.c
index 4c3120c40f4..9386079997e 100644
--- a/src/backend/catalog/pg_type.c
+++ b/src/backend/catalog/pg_type.c
@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/catalog/pg_type.c,v 1.50 2000/04/12 17:14:56 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/catalog/pg_type.c,v 1.51 2000/05/28 17:55:54 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -21,6 +21,7 @@
#include "miscadmin.h"
#include "parser/parse_func.h"
#include "utils/builtins.h"
+#include "utils/fmgroids.h"
#include "utils/syscache.h"
@@ -190,7 +191,7 @@ TypeShellMakeWithOpenRelation(Relation pg_type_desc, char *typeName)
/*
* ... and fill typdefault with a bogus value
*/
- values[i++] = (Datum) fmgr(F_TEXTIN, typeName); /* 15 */
+ values[i++] = (Datum) textin(typeName); /* 15 */
/* ----------------
* create a new type tuple with FormHeapTuple
@@ -449,10 +450,9 @@ TypeCreate(char *typeName,
* initialize the default value for this type.
* ----------------
*/
- values[i] = (Datum) fmgr(F_TEXTIN, /* 16 */
- PointerIsValid(defaultTypeValue)
- ? defaultTypeValue : "-"); /* XXX default
- * typdefault */
+ values[i] = (Datum) textin(PointerIsValid(defaultTypeValue) /* 16 */
+ ? defaultTypeValue : "-"); /* XXX default
+ * typdefault */
/* ----------------
* open pg_type and begin a scan for the type name.
diff --git a/src/backend/commands/async.c b/src/backend/commands/async.c
index c045f09b83d..8225f3a7ca4 100644
--- a/src/backend/commands/async.c
+++ b/src/backend/commands/async.c
@@ -7,7 +7,7 @@
* Portions Copyright (c) 1994, Regents of the University of California
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/commands/async.c,v 1.60 2000/05/14 03:18:35 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/commands/async.c,v 1.61 2000/05/28 17:55:54 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -87,6 +87,7 @@
#include "libpq/libpq.h"
#include "libpq/pqformat.h"
#include "miscadmin.h"
+#include "utils/fmgroids.h"
#include "utils/ps_status.h"
#include "utils/syscache.h"
#include "utils/trace.h"
diff --git a/src/backend/commands/command.c b/src/backend/commands/command.c
index 2b9f6a257b1..4fb184b7f6d 100644
--- a/src/backend/commands/command.c
+++ b/src/backend/commands/command.c
@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/commands/Attic/command.c,v 1.71 2000/04/12 17:14:57 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/commands/Attic/command.c,v 1.72 2000/05/28 17:55:54 tgl Exp $
*
* NOTES
* The PortalExecutorHeapMemory crap needs to be eliminated
@@ -40,6 +40,7 @@
#include "optimizer/prep.h"
#include "utils/acl.h"
#include "utils/builtins.h"
+#include "utils/fmgroids.h"
#include "utils/syscache.h"
#include "utils/temprel.h"
#include "commands/trigger.h"
@@ -614,12 +615,15 @@ AlterTableAlterColumn(const char *relationName,
HeapTuple tuple;
attr_rel = heap_openr(AttributeRelationName, AccessExclusiveLock);
- ScanKeyEntryInitialize(&scankeys[0], 0x0, Anum_pg_attribute_attrelid, F_OIDEQ,
+ ScanKeyEntryInitialize(&scankeys[0], 0x0,
+ Anum_pg_attribute_attrelid, F_OIDEQ,
ObjectIdGetDatum(myrelid));
- ScanKeyEntryInitialize(&scankeys[1], 0x0, Anum_pg_attribute_attnum, F_INT2EQ,
+ ScanKeyEntryInitialize(&scankeys[1], 0x0,
+ Anum_pg_attribute_attnum, F_INT2EQ,
Int16GetDatum(attnum));
- ScanKeyEntryInitialize(&scankeys[2], 0x0, Anum_pg_attribute_atthasdef, F_BOOLEQ,
- TRUE);
+ ScanKeyEntryInitialize(&scankeys[2], 0x0,
+ Anum_pg_attribute_atthasdef, F_BOOLEQ,
+ Int32GetDatum(TRUE));
scan = heap_beginscan(attr_rel, false, SnapshotNow, 3, scankeys);
AssertState(scan != NULL);
@@ -661,9 +665,11 @@ drop_default(Oid relid, int16 attnum)
HeapTuple tuple;
attrdef_rel = heap_openr(AttrDefaultRelationName, AccessExclusiveLock);
- ScanKeyEntryInitialize(&scankeys[0], 0x0, Anum_pg_attrdef_adrelid, F_OIDEQ,
+ ScanKeyEntryInitialize(&scankeys[0], 0x0,
+ Anum_pg_attrdef_adrelid, F_OIDEQ,
ObjectIdGetDatum(relid));
- ScanKeyEntryInitialize(&scankeys[1], 0x0, Anum_pg_attrdef_adnum, F_INT2EQ,
+ ScanKeyEntryInitialize(&scankeys[1], 0x0,
+ Anum_pg_attrdef_adnum, F_INT2EQ,
Int16GetDatum(attnum));
scan = heap_beginscan(attrdef_rel, false, SnapshotNow, 2, scankeys);
diff --git a/src/backend/commands/comment.c b/src/backend/commands/comment.c
index 3fe7b6f6347..f33189d3ee9 100644
--- a/src/backend/commands/comment.c
+++ b/src/backend/commands/comment.c
@@ -27,11 +27,12 @@
#include "catalog/pg_type.h"
#include "commands/comment.h"
#include "miscadmin.h"
+#include "parser/parse.h"
#include "rewrite/rewriteRemove.h"
#include "utils/acl.h"
+#include "utils/fmgroids.h"
#include "utils/syscache.h"
-#include "../backend/parser/parse.h"
/*------------------------------------------------------------------
* Static Function Prototypes --
@@ -153,7 +154,7 @@ CreateComments(Oid oid, char *comment)
}
i = 0;
values[i++] = ObjectIdGetDatum(oid);
- values[i++] = (Datum) fmgr(F_TEXTIN, comment);
+ values[i++] = (Datum) textin(comment);
}
/*** Now, open pg_description and attempt to find the old tuple ***/
diff --git a/src/backend/commands/copy.c b/src/backend/commands/copy.c
index 65dff8ed442..4285663a162 100644
--- a/src/backend/commands/copy.c
+++ b/src/backend/commands/copy.c
@@ -7,7 +7,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/commands/copy.c,v 1.106 2000/05/18 01:52:45 tgl Exp $
+ * $Header: /cvsroot/pgsql/src/backend/commands/copy.c,v 1.107 2000/05/28 17:55:54 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -680,7 +680,7 @@ CopyFrom(Relation rel, bool binary, bool oids, FILE *fp, char *delim, char *null
indexNatts[i] = natts;
if (VARSIZE(&pgIndexP[i]->indpred) != 0)
{
- predString = fmgr(F_TEXTOUT, &pgIndexP[i]->indpred);
+ predString = textout(&pgIndexP[i]->indpred);
indexPred[i] = stringToNode(predString);
pfree(predString);
/* make dummy ExprContext for use by ExecQual */
diff --git a/src/backend/commands/dbcommands.c b/src/backend/commands/dbcommands.c
index 4458edafaf2..b08f6545044 100644
--- a/src/backend/commands/dbcommands.c
+++ b/src/backend/commands/dbcommands.c
@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/commands/dbcommands.c,v 1.54 2000/05/25 06:53:43 ishii Exp $
+ * $Header: /cvsroot/pgsql/src/backend/commands/dbcommands.c,v 1.55 2000/05/28 17:55:55 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -37,6 +37,7 @@
#include "storage/fd.h" /* for closeAllVfds */
#include "storage/sinval.h" /* for DatabaseHasActiveBackends */
#include "utils/builtins.h"
+#include "utils/fmgroids.h"
#include "utils/elog.h"
#include "utils/palloc.h"
#include "utils/rel.h"
diff --git a/src/backend/commands/define.c b/src/backend/commands/define.c
index 5bc75faaec7..da872872175 100644
--- a/src/backend/commands/define.c
+++ b/src/backend/commands/define.c
@@ -10,7 +10,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/commands/define.c,v 1.42 2000/05/12 18:51:59 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/commands/define.c,v 1.43 2000/05/28 17:55:55 tgl Exp $
*
* DESCRIPTION
* The "DefineFoo" routines take the parse tree and pick out the
@@ -35,8 +35,6 @@
*/
#include <ctype.h>
#include <math.h>
-#include <sys/stat.h>
-
#include "postgres.h"
@@ -66,18 +64,20 @@ static void
case_translate_language_name(const char *input, char *output)
{
/*-------------------------------------------------------------------------
- Translate the input language name to lower case, except if it's C,
- translate to upper case.
+ Translate the input language name to lower case, except if it's "C",
+ translate to upper case, or "newC", translate to that spelling.
--------------------------------------------------------------------------*/
int i;
- for (i = 0; i < NAMEDATALEN && input[i]; ++i)
+ for (i = 0; i < NAMEDATALEN-1 && input[i]; ++i)
output[i] = tolower(input[i]);
output[i] = '\0';
if (strcmp(output, "c") == 0)
output[0] = 'C';
+ else if (strcmp(output, "newc") == 0)
+ output[3] = 'C';
}
@@ -108,9 +108,10 @@ compute_return_type(const Node *returnType,
static void
-compute_full_attributes(List *parameters, int32 *byte_pct_p,
- int32 *perbyte_cpu_p, int32 *percall_cpu_p,
- int32 *outin_ratio_p, bool *canCache_p)
+compute_full_attributes(List *parameters,
+ int32 *byte_pct_p, int32 *perbyte_cpu_p,
+ int32 *percall_cpu_p, int32 *outin_ratio_p,
+ bool *canCache_p, bool *isStrict_p)
{
/*--------------------------------------------------------------------------
Interpret the parameters *parameters and return their contents as
@@ -119,14 +120,20 @@ compute_full_attributes(List *parameters, int32 *byte_pct_p,
These parameters supply optional information about a function.
All have defaults if not specified.
- Note: as of version 6.6, canCache is used (if set, the optimizer's
- constant-folder is allowed to pre-evaluate the function if all its
- inputs are constant). The other four are not used. They used to be
+ Note: currently, only two of these parameters actually do anything:
+
+ * canCache means the optimizer's constant-folder is allowed to
+ pre-evaluate the function when all its inputs are constants.
+
+ * isStrict means the function should not be called when any NULL
+ inputs are present; instead a NULL result value should be assumed.
+
+ The other four parameters are not used anywhere. They used to be
used in the "expensive functions" optimizer, but that's been dead code
for a long time.
- Since canCache is useful for any function, we now allow attributes to be
- supplied for all functions regardless of language.
+ Since canCache and isStrict are useful for any function, we now allow
+ attributes to be supplied for all functions regardless of language.
---------------------------------------------------------------------------*/
List *pl;
@@ -136,6 +143,7 @@ compute_full_attributes(List *parameters, int32 *byte_pct_p,
*percall_cpu_p = PERCALL_CPU;
*outin_ratio_p = OUTIN_RATIO;
*canCache_p = false;
+ *isStrict_p = false;
foreach(pl, parameters)
{
@@ -143,6 +151,8 @@ compute_full_attributes(List *parameters, int32 *byte_pct_p,
if (strcasecmp(param->defname, "iscachable") == 0)
*canCache_p = true;
+ else if (strcasecmp(param->defname, "isstrict") == 0)
+ *isStrict_p = true;
else if (strcasecmp(param->defname, "trusted") == 0)
{
@@ -182,24 +192,17 @@ static void
interpret_AS_clause(const char *languageName, const List *as,
char **prosrc_str_p, char **probin_str_p)
{
- struct stat stat_buf;
-
Assert(as != NIL);
- if (strcmp(languageName, "C") == 0)
+ if (strcmp(languageName, "C") == 0 ||
+ strcmp(languageName, "newC") == 0)
{
/*
* For "C" language, store the file name in probin and, when
- * given, the link symbol name in prosrc. But first, stat the
- * file to make sure it's there!
+ * given, the link symbol name in prosrc.
*/
-
- if (stat(strVal(lfirst(as)), &stat_buf) == -1)
- elog(ERROR, "stat failed on file '%s': %m", strVal(lfirst(as)));
-
*probin_str_p = strVal(lfirst(as));
-
if (lnext(as) == NULL)
*prosrc_str_p = "-";
else
@@ -239,8 +242,8 @@ CreateFunction(ProcedureStmt *stmt, CommandDest dest)
char languageName[NAMEDATALEN];
/*
- * name of language of function, with case adjusted: "C", "internal",
- * or "SQL"
+ * name of language of function, with case adjusted: "C", "newC",
+ * "internal", "newinternal", "sql", etc.
*/
bool returnsSet;
@@ -257,19 +260,21 @@ CreateFunction(ProcedureStmt *stmt, CommandDest dest)
perbyte_cpu,
percall_cpu,
outin_ratio;
- bool canCache;
-
+ bool canCache,
+ isStrict;
case_translate_language_name(stmt->language, languageName);
if (strcmp(languageName, "C") == 0 ||
- strcmp(languageName, "internal") == 0)
+ strcmp(languageName, "newC") == 0 ||
+ strcmp(languageName, "internal") == 0 ||
+ strcmp(languageName, "newinternal") == 0)
{
if (!superuser())
elog(ERROR,
"Only users with Postgres superuser privilege are "
- "permitted to create a function "
- "in the '%s' language. Others may use the 'sql' language "
+ "permitted to create a function in the '%s' language.\n\t"
+ "Others may use the 'sql' language "
"or the created procedural languages.",
languageName);
}
@@ -288,28 +293,23 @@ CreateFunction(ProcedureStmt *stmt, CommandDest dest)
0, 0, 0);
if (!HeapTupleIsValid(languageTuple))
- {
-
elog(ERROR,
"Unrecognized language specified in a CREATE FUNCTION: "
- "'%s'. Recognized languages are sql, C, internal "
- "and the created procedural languages.",
+ "'%s'.\n\tRecognized languages are sql, C, newC, "
+ "internal, newinternal, and created procedural languages.",
languageName);
- }
/* Check that this language is a PL */
languageStruct = (Form_pg_language) GETSTRUCT(languageTuple);
if (!(languageStruct->lanispl))
- {
elog(ERROR,
"Language '%s' isn't defined as PL", languageName);
- }
/*
* Functions in untrusted procedural languages are restricted to
* be defined by postgres superusers only
*/
- if (languageStruct->lanpltrusted == false && !superuser())
+ if (!languageStruct->lanpltrusted && !superuser())
{
elog(ERROR, "Only users with Postgres superuser privilege "
"are permitted to create a function in the '%s' "
@@ -324,7 +324,7 @@ CreateFunction(ProcedureStmt *stmt, CommandDest dest)
compute_full_attributes(stmt->withClause,
&byte_pct, &perbyte_cpu, &percall_cpu,
- &outin_ratio, &canCache);
+ &outin_ratio, &canCache, &isStrict);
interpret_AS_clause(languageName, stmt->as, &prosrc_str, &probin_str);
@@ -338,8 +338,9 @@ CreateFunction(ProcedureStmt *stmt, CommandDest dest)
languageName,
prosrc_str, /* converted to text later */
probin_str, /* converted to text later */
- canCache,
true, /* (obsolete "trusted") */
+ canCache,
+ isStrict,
byte_pct,
perbyte_cpu,
percall_cpu,
diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c
index 16ad849d8ff..826efa40bbd 100644
--- a/src/backend/commands/indexcmds.c
+++ b/src/backend/commands/indexcmds.c
@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/commands/indexcmds.c,v 1.26 2000/04/25 10:38:38 inoue Exp $
+ * $Header: /cvsroot/pgsql/src/backend/commands/indexcmds.c,v 1.27 2000/05/28 17:55:55 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -37,6 +37,7 @@
#include "parser/parse_func.h"
#include "parser/parse_type.h"
#include "utils/builtins.h"
+#include "utils/fmgroids.h"
#include "utils/syscache.h"
#include "miscadmin.h" /* ReindexDatabase() */
#include "utils/portal.h" /* ReindexDatabase() */
@@ -298,7 +299,7 @@ ExtendIndex(char *indexRelationName, Expr *predicate, List *rangetable)
{
char *predString;
- predString = fmgr(F_TEXTOUT, &index->indpred);
+ predString = textout(&index->indpred);
oldPred = stringToNode(predString);
pfree(predString);
}
diff --git a/src/backend/commands/proclang.c b/src/backend/commands/proclang.c
index 47d2201c82a..9b5f7c1ddff 100644
--- a/src/backend/commands/proclang.c
+++ b/src/backend/commands/proclang.c
@@ -17,6 +17,7 @@
#include "catalog/pg_shadow.h"
#include "commands/proclang.h"
#include "fmgr.h"
+#include "utils/builtins.h"
#include "utils/syscache.h"
@@ -119,7 +120,7 @@ CreateProceduralLanguage(CreatePLangStmt *stmt)
values[i++] = Int8GetDatum((bool) 1);
values[i++] = Int8GetDatum(stmt->pltrusted);
values[i++] = ObjectIdGetDatum(procTup->t_data->t_oid);
- values[i++] = (Datum) fmgr(F_TEXTIN, stmt->plcompiler);
+ values[i++] = (Datum) textin(stmt->plcompiler);
rel = heap_openr(LanguageRelationName, RowExclusiveLock);
diff --git a/src/backend/commands/trigger.c b/src/backend/commands/trigger.c
index c79ce0cea50..49f5570e8fc 100644
--- a/src/backend/commands/trigger.c
+++ b/src/backend/commands/trigger.c
@@ -7,7 +7,7 @@
* Portions Copyright (c) 1994, Regents of the University of California
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/commands/trigger.c,v 1.64 2000/04/16 04:25:42 tgl Exp $
+ * $Header: /cvsroot/pgsql/src/backend/commands/trigger.c,v 1.65 2000/05/28 17:55:55 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -27,6 +27,7 @@
#include "miscadmin.h"
#include "utils/acl.h"
#include "utils/builtins.h"
+#include "utils/fmgroids.h"
#include "utils/inval.h"
#include "utils/syscache.h"
#include "utils/tqual.h"
@@ -757,16 +758,9 @@ equalTriggerDescs(TriggerDesc *trigdesc1, TriggerDesc *trigdesc2)
static HeapTuple
ExecCallTriggerFunc(Trigger *trigger)
{
-
if (trigger->tgfunc.fn_addr == NULL)
fmgr_info(trigger->tgfoid, &trigger->tgfunc);
- if (trigger->tgfunc.fn_plhandler != NULL)
- {
- return (HeapTuple) (*(trigger->tgfunc.fn_plhandler))
- (&trigger->tgfunc);
- }
-
return (HeapTuple) ((*fmgr_faddr(&trigger->tgfunc)) ());
}
diff --git a/src/backend/commands/user.c b/src/backend/commands/user.c
index 2e01e6e202c..ea5f457448f 100644
--- a/src/backend/commands/user.c
+++ b/src/backend/commands/user.c
@@ -6,7 +6,7 @@
* Portions Copyright (c) 1996-2000, PostgreSQL, Inc
* Portions Copyright (c) 1994, Regents of the University of California
*
- * $Id: user.c,v 1.53 2000/05/04 20:06:07 tgl Exp $
+ * $Id: user.c,v 1.54 2000/05/28 17:55:55 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -33,6 +33,7 @@
#include "utils/acl.h"
#include "utils/array.h"
#include "utils/builtins.h"
+#include "utils/fmgroids.h"
#include "utils/syscache.h"
static void CheckPgUserAclNotNull(void);
diff --git a/src/backend/commands/vacuum.c b/src/backend/commands/vacuum.c
index 0c0c5f4785d..3a9b972b9ed 100644
--- a/src/backend/commands/vacuum.c
+++ b/src/backend/commands/vacuum.c
@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/commands/vacuum.c,v 1.148 2000/05/19 03:22:29 tgl Exp $
+ * $Header: /cvsroot/pgsql/src/backend/commands/vacuum.c,v 1.149 2000/05/28 17:55:55 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -38,6 +38,7 @@
#include "tcop/tcopprot.h"
#include "utils/acl.h"
#include "utils/builtins.h"
+#include "utils/fmgroids.h"
#include "utils/inval.h"
#include "utils/portal.h"
#include "utils/relcache.h"
diff --git a/src/backend/executor/execQual.c b/src/backend/executor/execQual.c
index 58307e6a695..a53957c4f4a 100644
--- a/src/backend/executor/execQual.c
+++ b/src/backend/executor/execQual.c
@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/executor/execQual.c,v 1.69 2000/04/12 17:15:08 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/executor/execQual.c,v 1.70 2000/05/28 17:55:55 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -41,6 +41,7 @@
#include "executor/functions.h"
#include "executor/nodeSubplan.h"
#include "utils/builtins.h"
+#include "utils/fmgroids.h"
#include "utils/fcache2.h"
@@ -64,7 +65,8 @@ static Datum ExecEvalAnd(Expr *andExpr, ExprContext *econtext, bool *isNull);
static Datum ExecEvalFunc(Expr *funcClause, ExprContext *econtext,
bool *isNull, bool *isDone);
static void ExecEvalFuncArgs(FunctionCachePtr fcache, ExprContext *econtext,
- List *argList, Datum argV[], bool *argIsDone);
+ List *argList, FunctionCallInfo fcinfo,
+ bool *argIsDone);
static Datum ExecEvalNot(Expr *notclause, ExprContext *econtext, bool *isNull);
static Datum ExecEvalOper(Expr *opClause, ExprContext *econtext,
bool *isNull);
@@ -614,15 +616,12 @@ static void
ExecEvalFuncArgs(FunctionCachePtr fcache,
ExprContext *econtext,
List *argList,
- Datum argV[],
+ FunctionCallInfo fcinfo,
bool *argIsDone)
{
int i;
- bool *nullVect;
List *arg;
- nullVect = fcache->nullVect;
-
i = 0;
foreach(arg, argList)
{
@@ -632,16 +631,16 @@ ExecEvalFuncArgs(FunctionCachePtr fcache,
* as arguments but we make an exception in the case of nested dot
* expressions. We have to watch out for this case here.
*/
- argV[i] = ExecEvalExpr((Node *) lfirst(arg),
- econtext,
- &nullVect[i],
- argIsDone);
+ fcinfo->arg[i] = ExecEvalExpr((Node *) lfirst(arg),
+ econtext,
+ &fcinfo->argnull[i],
+ argIsDone);
if (!(*argIsDone))
{
if (i != 0)
elog(ERROR, "functions can only take sets in their first argument");
- fcache->setArg = (char *) argV[0];
+ fcache->setArg = fcinfo->arg[0];
fcache->hasSetArg = true;
}
i++;
@@ -658,40 +657,45 @@ ExecMakeFunctionResult(Node *node,
bool *isNull,
bool *isDone)
{
- Datum argV[FUNC_MAX_ARGS];
- FunctionCachePtr fcache;
- Func *funcNode = NULL;
- Oper *operNode = NULL;
- bool funcisset = false;
+ FunctionCallInfoData fcinfo;
+ FunctionCachePtr fcache;
+ List *ftlist;
+ bool funcisset;
+ Datum result;
+ bool argDone;
+
+ MemSet(&fcinfo, 0, sizeof(fcinfo));
/*
* This is kind of ugly, Func nodes now have targetlists so that we
* know when and what to project out from postquel function results.
- * This means we have to pass the func node all the way down instead
- * of using only the fcache struct as before. ExecMakeFunctionResult
- * becomes a little bit more of a dual personality as a result.
+ * ExecMakeFunctionResult becomes a little bit more of a dual personality
+ * as a result.
*/
if (IsA(node, Func))
{
- funcNode = (Func *) node;
- fcache = funcNode->func_fcache;
+ fcache = ((Func *) node)->func_fcache;
+ ftlist = ((Func *) node)->func_tlist;
+ funcisset = (((Func *) node)->funcid == F_SETEVAL);
}
else
{
- operNode = (Oper *) node;
- fcache = operNode->op_fcache;
+ fcache = ((Oper *) node)->op_fcache;
+ ftlist = NIL;
+ funcisset = false;
}
+ fcinfo.flinfo = &fcache->func;
+ fcinfo.nargs = fcache->nargs;
+
/*
* arguments is a list of expressions to evaluate before passing to
- * the function manager. We collect the results of evaluating the
- * expressions into a datum array (argV) and pass this array to
- * arrayFmgr()
+ * the function manager. We collect the results of evaluating the
+ * expressions into the FunctionCallInfo struct. Note we assume that
+ * fcache->nargs is the correct length of the arguments list!
*/
- if (fcache->nargs != 0)
+ if (fcache->nargs > 0)
{
- bool argDone;
-
if (fcache->nargs > FUNC_MAX_ARGS)
elog(ERROR, "ExecMakeFunctionResult: too many arguments");
@@ -700,21 +704,23 @@ ExecMakeFunctionResult(Node *node,
* returning a set of tuples (i.e. a nested dot expression). We
* don't want to evaluate the arguments again until the function
* is done. hasSetArg will always be false until we eval the args
- * for the first time. We should set this in the parser.
+ * for the first time.
*/
- if ((fcache->hasSetArg) && fcache->setArg != NULL)
+ if (fcache->hasSetArg && fcache->setArg != (Datum) 0)
{
- argV[0] = (Datum) fcache->setArg;
+ fcinfo.arg[0] = fcache->setArg;
argDone = false;
}
else
- ExecEvalFuncArgs(fcache, econtext, arguments, argV, &argDone);
+ ExecEvalFuncArgs(fcache, econtext, arguments, &fcinfo, &argDone);
- if ((fcache->hasSetArg) && (argDone))
+ if (fcache->hasSetArg && argDone)
{
+ /* can only get here if input is an empty set. */
if (isDone)
*isDone = true;
- return (Datum) NULL;
+ *isNull = true;
+ return (Datum) 0;
}
}
@@ -731,27 +737,23 @@ ExecMakeFunctionResult(Node *node,
* which defines this set. So replace the existing funcid in the
* funcnode with the set's OID. Also, we want a new fcache which
* points to the right function, so get that, now that we have the
- * right OID. Also zero out the argV, since the real set doesn't take
+ * right OID. Also zero out fcinfo.arg, since the real set doesn't take
* any arguments.
*/
- if (((Func *) node)->funcid == F_SETEVAL)
+ if (funcisset)
{
- funcisset = true;
if (fcache->setArg)
{
- argV[0] = 0;
-
- ((Func *) node)->funcid = (Oid) PointerGetDatum(fcache->setArg);
-
+ ((Func *) node)->funcid = DatumGetObjectId(fcache->setArg);
}
else
{
- ((Func *) node)->funcid = (Oid) argV[0];
- setFcache(node, argV[0], NIL, econtext);
+ ((Func *) node)->funcid = DatumGetObjectId(fcinfo.arg[0]);
+ setFcache(node, DatumGetObjectId(fcinfo.arg[0]), NIL, econtext);
fcache = ((Func *) node)->func_fcache;
- fcache->setArg = (char *) argV[0];
- argV[0] = (Datum) 0;
+ fcache->setArg = fcinfo.arg[0];
}
+ fcinfo.arg[0] = (Datum) 0;
}
/*
@@ -760,11 +762,6 @@ ExecMakeFunctionResult(Node *node,
*/
if (fcache->language == SQLlanguageId)
{
- Datum result;
- bool argDone;
-
- Assert(funcNode);
-
/*--------------------
* This loop handles the situation where we are iterating through
* all results in a nested dot function (whose argument function
@@ -777,8 +774,37 @@ ExecMakeFunctionResult(Node *node,
*/
for (;;)
{
- result = postquel_function(funcNode, (char **) argV,
- isNull, isDone);
+ /*
+ * If function is strict, and there are any NULL arguments,
+ * skip calling the function (at least for this set of args).
+ */
+ bool callit = true;
+
+ if (fcinfo.flinfo->fn_strict)
+ {
+ int i;
+
+ for (i = 0; i < fcinfo.nargs; i++)
+ {
+ if (fcinfo.argnull[i])
+ {
+ callit = false;
+ break;
+ }
+ }
+ }
+
+ if (callit)
+ {
+ result = postquel_function(&fcinfo, fcache, ftlist, isDone);
+ *isNull = fcinfo.isnull;
+ }
+ else
+ {
+ result = (Datum) 0;
+ *isDone = true;
+ *isNull = true;
+ }
if (!*isDone)
break; /* got a result from current argument */
@@ -786,7 +812,7 @@ ExecMakeFunctionResult(Node *node,
break; /* input not a set, so done */
/* OK, get the next argument... */
- ExecEvalFuncArgs(fcache, econtext, arguments, argV, &argDone);
+ ExecEvalFuncArgs(fcache, econtext, arguments, &fcinfo, &argDone);
if (argDone)
{
@@ -795,10 +821,11 @@ ExecMakeFunctionResult(Node *node,
* End of arguments, so reset the setArg flag and say
* "Done"
*/
- fcache->setArg = (char *) NULL;
+ fcache->setArg = (Datum) 0;
fcache->hasSetArg = false;
*isDone = true;
- result = (Datum) NULL;
+ *isNull = true;
+ result = (Datum) 0;
break;
}
@@ -826,21 +853,34 @@ ExecMakeFunctionResult(Node *node,
if (*isDone)
((Func *) node)->func_fcache = NULL;
}
-
- return result;
}
else
{
- int i;
-
+ /* A non-SQL function cannot return a set, at present. */
if (isDone)
*isDone = true;
- for (i = 0; i < fcache->nargs; i++)
- if (fcache->nullVect[i] == true)
- *isNull = true;
+ /*
+ * If function is strict, and there are any NULL arguments,
+ * skip calling the function and return NULL.
+ */
+ if (fcinfo.flinfo->fn_strict)
+ {
+ int i;
- return (Datum) fmgr_c(&fcache->func, (FmgrValues *) argV, isNull);
+ for (i = 0; i < fcinfo.nargs; i++)
+ {
+ if (fcinfo.argnull[i])
+ {
+ *isNull = true;
+ return (Datum) 0;
+ }
+ }
+ }
+ result = FunctionCallInvoke(&fcinfo);
+ *isNull = fcinfo.isnull;
}
+
+ return result;
}
diff --git a/src/backend/executor/execUtils.c b/src/backend/executor/execUtils.c
index e3783473f96..39b29138e19 100644
--- a/src/backend/executor/execUtils.c
+++ b/src/backend/executor/execUtils.c
@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/executor/execUtils.c,v 1.55 2000/04/12 17:15:08 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/executor/execUtils.c,v 1.56 2000/05/28 17:55:55 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -52,6 +52,8 @@
#include "executor/execdebug.h"
#include "executor/executor.h"
#include "miscadmin.h"
+#include "utils/builtins.h"
+#include "utils/fmgroids.h"
static void ExecGetIndexKeyInfo(Form_pg_index indexTuple, int *numAttsOutP,
AttrNumber **attsOutP, FuncIndexInfoPtr fInfoP);
@@ -843,7 +845,7 @@ ExecOpenIndices(Oid resultRelationOid,
*/
if (VARSIZE(&indexStruct->indpred) != 0)
{
- predString = fmgr(F_TEXTOUT, &indexStruct->indpred);
+ predString = textout(&indexStruct->indpred);
predicate = (PredInfo *) stringToNode(predString);
pfree(predString);
}
diff --git a/src/backend/executor/functions.c b/src/backend/executor/functions.c
index c8d119df482..ee5fabf1708 100644
--- a/src/backend/executor/functions.c
+++ b/src/backend/executor/functions.c
@@ -2,14 +2,13 @@
*
* functions.c
* Routines to handle functions called from the executor
- * Putting this stuff in fmgr makes the postmaster a mess....
*
* Portions Copyright (c) 1996-2000, PostgreSQL, Inc
* Portions Copyright (c) 1994, Regents of the University of California
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/executor/functions.c,v 1.33 2000/04/12 17:15:09 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/executor/functions.c,v 1.34 2000/05/28 17:55:55 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -24,7 +23,6 @@
#include "tcop/utility.h"
#include "utils/datum.h"
-#undef new
typedef enum
{
@@ -39,18 +37,18 @@ typedef struct local_es
ExecStatus status;
} execution_state;
-#define LAST_POSTQUEL_COMMAND(es) ((es)->next == (execution_state *)NULL)
+#define LAST_POSTQUEL_COMMAND(es) ((es)->next == (execution_state *) NULL)
/* non-export function prototypes */
static TupleDesc postquel_start(execution_state *es);
-static execution_state *init_execution_state(FunctionCachePtr fcache,
- char *args[]);
+static execution_state *init_execution_state(FunctionCachePtr fcache);
static TupleTableSlot *postquel_getnext(execution_state *es);
static void postquel_end(execution_state *es);
-static void postquel_sub_params(execution_state *es, int nargs,
- char *args[], bool *nullV);
-static Datum postquel_execute(execution_state *es, FunctionCachePtr fcache,
- List *fTlist, char **args, bool *isNull);
+static void postquel_sub_params(execution_state *es, FunctionCallInfo fcinfo);
+static Datum postquel_execute(execution_state *es,
+ FunctionCallInfo fcinfo,
+ FunctionCachePtr fcache,
+ List *func_tlist);
Datum
@@ -64,7 +62,6 @@ ProjectAttribute(TupleDesc TD,
Var *attrVar = (Var *) tlist->expr;
AttrNumber attrno = attrVar->varattno;
-
val = heap_getattr(tup, attrno, TD, isnullP);
if (*isnullP)
return (Datum) NULL;
@@ -77,8 +74,7 @@ ProjectAttribute(TupleDesc TD,
}
static execution_state *
-init_execution_state(FunctionCachePtr fcache,
- char *args[])
+init_execution_state(FunctionCachePtr fcache)
{
execution_state *newes;
execution_state *nextes;
@@ -196,13 +192,10 @@ postquel_end(execution_state *es)
}
static void
-postquel_sub_params(execution_state *es,
- int nargs,
- char *args[],
- bool *nullV)
+postquel_sub_params(execution_state *es, FunctionCallInfo fcinfo)
{
- ParamListInfo paramLI;
EState *estate;
+ ParamListInfo paramLI;
estate = es->estate;
paramLI = estate->es_param_list_info;
@@ -211,9 +204,9 @@ postquel_sub_params(execution_state *es,
{
if (paramLI->kind == PARAM_NUM)
{
- Assert(paramLI->id <= nargs);
- paramLI->value = (Datum) args[(paramLI->id - 1)];
- paramLI->isnull = nullV[(paramLI->id - 1)];
+ Assert(paramLI->id <= fcinfo->nargs);
+ paramLI->value = fcinfo->arg[paramLI->id - 1];
+ paramLI->isnull = fcinfo->argnull[paramLI->id - 1];
}
paramLI++;
}
@@ -264,10 +257,9 @@ copy_function_result(FunctionCachePtr fcache,
static Datum
postquel_execute(execution_state *es,
+ FunctionCallInfo fcinfo,
FunctionCachePtr fcache,
- List *fTlist,
- char **args,
- bool *isNull)
+ List *func_tlist)
{
TupleTableSlot *slot;
Datum value;
@@ -278,8 +270,8 @@ postquel_execute(execution_state *es,
* ExecutorStart->ExecInitIndexScan->ExecEvalParam works ok. (But
* note: I HOPE we can do it here). - vadim 01/22/97
*/
- if (fcache->nargs > 0)
- postquel_sub_params(es, fcache->nargs, args, fcache->nullVect);
+ if (fcinfo->nargs > 0)
+ postquel_sub_params(es, fcinfo);
if (es->status == F_EXEC_START)
{
@@ -293,7 +285,7 @@ postquel_execute(execution_state *es,
{
postquel_end(es);
es->status = F_EXEC_DONE;
- *isNull = true;
+ fcinfo->isnull = true;
/*
* If this isn't the last command for the function we have to
@@ -315,19 +307,20 @@ postquel_execute(execution_state *es,
* logic and code redundancy here.
*/
resSlot = copy_function_result(fcache, slot);
- if (fTlist != NIL)
+ if (func_tlist != NIL)
{
- TargetEntry *tle = lfirst(fTlist);
+ TargetEntry *tle = lfirst(func_tlist);
value = ProjectAttribute(resSlot->ttc_tupleDescriptor,
tle,
resSlot->val,
- isNull);
+ &fcinfo->isnull);
}
else
{
- value = (Datum) resSlot;
- *isNull = false;
+ /* XXX is this right? Return whole tuple slot?? */
+ value = PointerGetDatum(resSlot);
+ fcinfo->isnull = false;
}
/*
@@ -353,11 +346,13 @@ postquel_execute(execution_state *es,
}
Datum
-postquel_function(Func *funcNode, char **args, bool *isNull, bool *isDone)
+postquel_function(FunctionCallInfo fcinfo,
+ FunctionCachePtr fcache,
+ List *func_tlist,
+ bool *isDone)
{
execution_state *es;
Datum result = 0;
- FunctionCachePtr fcache = funcNode->func_fcache;
CommandId savedId;
/*
@@ -371,7 +366,7 @@ postquel_function(Func *funcNode, char **args, bool *isNull, bool *isDone)
es = (execution_state *) fcache->func_state;
if (es == NULL)
{
- es = init_execution_state(fcache, args);
+ es = init_execution_state(fcache);
fcache->func_state = (char *) es;
}
@@ -388,16 +383,20 @@ 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.
*/
if (es == (execution_state *) NULL)
@@ -417,17 +416,15 @@ postquel_function(Func *funcNode, char **args, bool *isNull, bool *isDone)
* Let caller know we're finished.
*/
*isDone = true;
- SetScanCommandId(savedId);
return (fcache->oneResult) ? result : (Datum) NULL;
}
/*
* If we got a result from a command within the function it has to be
- * the final command. All others shouldn't be returing anything.
+ * the final command. All others shouldn't be returning anything.
*/
Assert(LAST_POSTQUEL_COMMAND(es));
- *isDone = false;
- SetScanCommandId(savedId);
+ *isDone = false;
return result;
}
diff --git a/src/backend/executor/nodeAgg.c b/src/backend/executor/nodeAgg.c
index e2db06f84d1..853fa96e2c3 100644
--- a/src/backend/executor/nodeAgg.c
+++ b/src/backend/executor/nodeAgg.c
@@ -32,7 +32,7 @@
* Portions Copyright (c) 1994, Regents of the University of California
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/executor/nodeAgg.c,v 1.63 2000/04/12 17:15:09 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/executor/nodeAgg.c,v 1.64 2000/05/28 17:55:55 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -218,8 +218,13 @@ static void
advance_transition_functions(AggStatePerAgg peraggstate,
Datum newVal, bool isNull)
{
- Datum args[2];
+ FunctionCallInfoData fcinfo;
+ MemSet(&fcinfo, 0, sizeof(fcinfo));
+
+ /*
+ * XXX reconsider isNULL handling here
+ */
if (OidIsValid(peraggstate->xfn1_oid) && !isNull)
{
if (peraggstate->noInitValue)
@@ -244,28 +249,48 @@ advance_transition_functions(AggStatePerAgg peraggstate,
else
{
/* apply transition function 1 */
- args[0] = peraggstate->value1;
- args[1] = newVal;
- newVal = (Datum) fmgr_c(&peraggstate->xfn1,
- (FmgrValues *) args,
- &isNull);
- if (!peraggstate->transtype1ByVal)
+ fcinfo.flinfo = &peraggstate->xfn1;
+ fcinfo.nargs = 2;
+ fcinfo.arg[0] = peraggstate->value1;
+ fcinfo.argnull[0] = peraggstate->value1IsNull;
+ fcinfo.arg[1] = newVal;
+ fcinfo.argnull[1] = isNull;
+ if (fcinfo.flinfo->fn_strict &&
+ (peraggstate->value1IsNull || isNull))
+ {
+ /* don't call a strict function with NULL inputs */
+ newVal = (Datum) 0;
+ fcinfo.isnull = true;
+ }
+ else
+ newVal = FunctionCallInvoke(&fcinfo);
+ if (!peraggstate->transtype1ByVal && !peraggstate->value1IsNull)
pfree(peraggstate->value1);
peraggstate->value1 = newVal;
+ peraggstate->value1IsNull = fcinfo.isnull;
}
}
if (OidIsValid(peraggstate->xfn2_oid))
{
/* apply transition function 2 */
- args[0] = peraggstate->value2;
- isNull = false; /* value2 cannot be null, currently */
- newVal = (Datum) fmgr_c(&peraggstate->xfn2,
- (FmgrValues *) args,
- &isNull);
- if (!peraggstate->transtype2ByVal)
+ fcinfo.flinfo = &peraggstate->xfn2;
+ fcinfo.nargs = 1;
+ fcinfo.arg[0] = peraggstate->value2;
+ fcinfo.argnull[0] = peraggstate->value2IsNull;
+ fcinfo.isnull = false; /* must reset after use by xfn1 */
+ if (fcinfo.flinfo->fn_strict && peraggstate->value2IsNull)
+ {
+ /* don't call a strict function with NULL inputs */
+ newVal = (Datum) 0;
+ fcinfo.isnull = true;
+ }
+ else
+ newVal = FunctionCallInvoke(&fcinfo);
+ if (!peraggstate->transtype2ByVal && !peraggstate->value2IsNull)
pfree(peraggstate->value2);
peraggstate->value2 = newVal;
+ peraggstate->value2IsNull = fcinfo.isnull;
}
}
@@ -276,8 +301,10 @@ static void
finalize_aggregate(AggStatePerAgg peraggstate,
Datum *resultVal, bool *resultIsNull)
{
- Aggref *aggref = peraggstate->aggref;
- char *args[2];
+ Aggref *aggref = peraggstate->aggref;
+ FunctionCallInfoData fcinfo;
+
+ MemSet(&fcinfo, 0, sizeof(fcinfo));
/*
* If it's a DISTINCT aggregate, all we've done so far is to stuff the
@@ -337,21 +364,41 @@ finalize_aggregate(AggStatePerAgg peraggstate,
if (OidIsValid(peraggstate->finalfn_oid) &&
!peraggstate->noInitValue)
{
+ fcinfo.flinfo = &peraggstate->finalfn;
if (peraggstate->finalfn.fn_nargs > 1)
{
- args[0] = (char *) peraggstate->value1;
- args[1] = (char *) peraggstate->value2;
+ fcinfo.nargs = 2;
+ fcinfo.arg[0] = peraggstate->value1;
+ fcinfo.argnull[0] = peraggstate->value1IsNull;
+ fcinfo.arg[1] = peraggstate->value2;
+ fcinfo.argnull[1] = peraggstate->value2IsNull;
}
else if (OidIsValid(peraggstate->xfn1_oid))
- args[0] = (char *) peraggstate->value1;
+ {
+ fcinfo.nargs = 1;
+ fcinfo.arg[0] = peraggstate->value1;
+ fcinfo.argnull[0] = peraggstate->value1IsNull;
+ }
else if (OidIsValid(peraggstate->xfn2_oid))
- args[0] = (char *) peraggstate->value2;
+ {
+ fcinfo.nargs = 1;
+ fcinfo.arg[0] = peraggstate->value2;
+ fcinfo.argnull[0] = peraggstate->value2IsNull;
+ }
else
elog(ERROR, "ExecAgg: no valid transition functions??");
- *resultIsNull = false;
- *resultVal = (Datum) fmgr_c(&peraggstate->finalfn,
- (FmgrValues *) args,
- resultIsNull);
+ if (fcinfo.flinfo->fn_strict &&
+ (fcinfo.argnull[0] || fcinfo.argnull[1]))
+ {
+ /* don't call a strict function with NULL inputs */
+ *resultVal = (Datum) 0;
+ *resultIsNull = true;
+ }
+ else
+ {
+ *resultVal = FunctionCallInvoke(&fcinfo);
+ *resultIsNull = fcinfo.isnull;
+ }
}
else if (OidIsValid(peraggstate->xfn1_oid))
{
diff --git a/src/backend/libpq/Makefile b/src/backend/libpq/Makefile
index 656fbdb480d..50f5f1b7206 100644
--- a/src/backend/libpq/Makefile
+++ b/src/backend/libpq/Makefile
@@ -4,7 +4,7 @@
# Makefile for libpq subsystem (backend half of libpq interface)
#
# IDENTIFICATION
-# $Header: /cvsroot/pgsql/src/backend/libpq/Makefile,v 1.17 2000/01/19 02:58:52 petere Exp $
+# $Header: /cvsroot/pgsql/src/backend/libpq/Makefile,v 1.18 2000/05/28 17:55:56 tgl Exp $
#
#-------------------------------------------------------------------------
@@ -29,11 +29,6 @@ all: SUBSYS.o
SUBSYS.o: $(OBJS)
$(LD) $(LDREL) $(LDOUT) SUBSYS.o $(OBJS)
-be-dumpdata.o be-pqexec.o: ../fmgr.h
-
-../fmgr.h:
- $(MAKE) -C .. fmgr.h
-
depend dep:
$(CC) -MM $(CFLAGS) *.c >depend
diff --git a/src/backend/libpq/be-pqexec.c b/src/backend/libpq/be-pqexec.c
index 0c29ea25184..42d48281e08 100644
--- a/src/backend/libpq/be-pqexec.c
+++ b/src/backend/libpq/be-pqexec.c
@@ -9,7 +9,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/libpq/Attic/be-pqexec.c,v 1.31 2000/03/17 02:36:08 tgl Exp $
+ * $Header: /cvsroot/pgsql/src/backend/libpq/Attic/be-pqexec.c,v 1.32 2000/05/28 17:55:56 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -42,11 +42,11 @@ static char *strmake(char *str, int len);
* result_buf : pointer to result buffer (&int if integer)
* result_len : length of return value.
* result_is_int : If the result is an integer, this must be non-zero
- * args : pointer to a NULL terminated arg array.
+ * args : pointer to an array of PQArgBlock items.
* (length, if integer, and result-pointer)
* nargs : # of arguments in args array.
*
- * This code scavanged from HandleFunctionRequest() in tcop/fastpath.h
+ * This code scavenged from HandleFunctionRequest() in tcop/fastpath.h
* ----------------
*/
char *
@@ -57,46 +57,53 @@ PQfn(int fnid,
PQArgBlock *args,
int nargs)
{
- char *retval; /* XXX - should be datum, maybe ? */
- char *arg[FUNC_MAX_ARGS];
- bool isNull;
- int i;
+ FmgrInfo flinfo;
+ FunctionCallInfoData fcinfo;
+ Datum retval;
+ int i;
- /* ----------------
- * fill args[] array
- * ----------------
- */
if (nargs > FUNC_MAX_ARGS)
elog(ERROR, "functions cannot have more than %d arguments",
FUNC_MAX_ARGS);
+
+ /* ----------------
+ * set up the argument block for the function manager
+ * ----------------
+ */
+ fmgr_info((Oid) fnid, &flinfo);
+
+ MemSet(&fcinfo, 0, sizeof(fcinfo));
+ fcinfo.flinfo = &flinfo;
+ fcinfo.nargs = nargs;
+
for (i = 0; i < nargs; i++)
{
if (args[i].len == VAR_LENGTH_ARG)
- arg[i] = (char *) args[i].u.ptr;
+ fcinfo.arg[i] = (Datum) args[i].u.ptr;
else if ((Size) args[i].len > sizeof(int4))
elog(ERROR, "arg_length of argument %d too long", i);
else
- arg[i] = (char *) args[i].u.integer;
+ fcinfo.arg[i] = (Datum) args[i].u.integer;
}
/* ----------------
* call the postgres function manager
* ----------------
*/
- retval = fmgr_array_args(fnid, nargs, arg, &isNull);
+ retval = FunctionCallInvoke(&fcinfo);
/* ----------------
* put the result in the buffer the user specified and
* return the proper code.
* ----------------
*/
- if (isNull) /* void retval */
+ if (fcinfo.isnull) /* void retval */
return "0";
if (result_is_int)
- *result_buf = (int) retval;
+ *result_buf = DatumGetInt32(retval);
else
- memmove(result_buf, retval, result_len);
+ memmove(result_buf, DatumGetPointer(retval), result_len);
return "G";
}
diff --git a/src/backend/nodes/freefuncs.c b/src/backend/nodes/freefuncs.c
index c0d07a05dba..59e2ac1154e 100644
--- a/src/backend/nodes/freefuncs.c
+++ b/src/backend/nodes/freefuncs.c
@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/nodes/Attic/freefuncs.c,v 1.40 2000/04/12 17:15:16 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/nodes/Attic/freefuncs.c,v 1.41 2000/05/28 17:55:57 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -530,16 +530,12 @@ _freeFcache(FunctionCachePtr ptr)
{
if (ptr->argOidVect)
pfree(ptr->argOidVect);
- if (ptr->nullVect)
- pfree(ptr->nullVect);
if (ptr->src)
pfree(ptr->src);
if (ptr->bin)
pfree(ptr->bin);
if (ptr->func_state)
pfree(ptr->func_state);
- if (ptr->setArg)
- pfree(ptr->setArg);
pfree(ptr);
}
diff --git a/src/backend/optimizer/path/clausesel.c b/src/backend/optimizer/path/clausesel.c
index d430059a1e0..460417f2417 100644
--- a/src/backend/optimizer/path/clausesel.c
+++ b/src/backend/optimizer/path/clausesel.c
@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/optimizer/path/clausesel.c,v 1.34 2000/04/12 17:15:19 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/optimizer/path/clausesel.c,v 1.35 2000/05/28 17:55:58 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -21,6 +21,7 @@
#include "optimizer/plancat.h"
#include "optimizer/restrictinfo.h"
#include "parser/parsetree.h"
+#include "utils/fmgroids.h"
#include "utils/lsyscache.h"
diff --git a/src/backend/optimizer/path/indxpath.c b/src/backend/optimizer/path/indxpath.c
index 06f9cd0247f..b862cf7f129 100644
--- a/src/backend/optimizer/path/indxpath.c
+++ b/src/backend/optimizer/path/indxpath.c
@@ -9,7 +9,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/optimizer/path/indxpath.c,v 1.83 2000/04/16 04:41:01 tgl Exp $
+ * $Header: /cvsroot/pgsql/src/backend/optimizer/path/indxpath.c,v 1.84 2000/05/28 17:55:58 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -37,6 +37,7 @@
#include "parser/parse_oper.h"
#include "parser/parsetree.h"
#include "utils/builtins.h"
+#include "utils/fmgroids.h"
#include "utils/lsyscache.h"
#include "utils/syscache.h"
diff --git a/src/backend/optimizer/util/plancat.c b/src/backend/optimizer/util/plancat.c
index e9d7690e00c..fca1bd0ab17 100644
--- a/src/backend/optimizer/util/plancat.c
+++ b/src/backend/optimizer/util/plancat.c
@@ -9,7 +9,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/optimizer/util/plancat.c,v 1.50 2000/04/12 17:15:24 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/optimizer/util/plancat.c,v 1.51 2000/05/28 17:55:59 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -28,6 +28,8 @@
#include "optimizer/paths.h"
#include "optimizer/plancat.h"
#include "parser/parsetree.h"
+#include "utils/builtins.h"
+#include "utils/fmgroids.h"
#include "utils/syscache.h"
#include "catalog/catalog.h"
#include "miscadmin.h"
@@ -117,7 +119,7 @@ find_secondary_indexes(Query *root, Index relid)
info->indproc = index->indproc; /* functional index ?? */
if (VARSIZE(&index->indpred) != 0) /* partial index ?? */
{
- char *predString = fmgr(F_TEXTOUT, &index->indpred);
+ char *predString = textout(&index->indpred);
info->indpred = (List *) stringToNode(predString);
pfree(predString);
diff --git a/src/backend/parser/analyze.c b/src/backend/parser/analyze.c
index 7658443a378..6f454063626 100644
--- a/src/backend/parser/analyze.c
+++ b/src/backend/parser/analyze.c
@@ -6,7 +6,7 @@
* Portions Copyright (c) 1996-2000, PostgreSQL, Inc
* Portions Copyright (c) 1994, Regents of the University of California
*
- * $Id: analyze.c,v 1.142 2000/04/12 17:15:26 momjian Exp $
+ * $Id: analyze.c,v 1.143 2000/05/28 17:56:00 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -26,6 +26,7 @@
#include "parser/parse_target.h"
#include "parser/parse_type.h"
#include "utils/builtins.h"
+#include "utils/fmgroids.h"
#include "utils/numeric.h"
void CheckSelectForUpdate(Query *qry); /* no points for style... */
diff --git a/src/backend/parser/parse_func.c b/src/backend/parser/parse_func.c
index ed6a910f273..1866cd37b28 100644
--- a/src/backend/parser/parse_func.c
+++ b/src/backend/parser/parse_func.c
@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/parser/parse_func.c,v 1.79 2000/05/26 03:56:40 tgl Exp $
+ * $Header: /cvsroot/pgsql/src/backend/parser/parse_func.c,v 1.80 2000/05/28 17:56:00 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -34,6 +34,7 @@
#include "parser/parse_target.h"
#include "utils/acl.h"
#include "utils/builtins.h"
+#include "utils/fmgroids.h"
#include "utils/lsyscache.h"
#include "utils/syscache.h"
diff --git a/src/backend/parser/parse_node.c b/src/backend/parser/parse_node.c
index 0f386b84c71..dcec30b1589 100644
--- a/src/backend/parser/parse_node.c
+++ b/src/backend/parser/parse_node.c
@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/parser/parse_node.c,v 1.39 2000/04/12 17:15:27 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/parser/parse_node.c,v 1.40 2000/05/28 17:56:00 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -442,14 +442,11 @@ make_const(Value *value)
case T_Float:
if (fitsInFloat(value))
{
- float64 fltval = (float64) palloc(sizeof(float64data));
-
- *fltval = floatVal(value);
- val = Float64GetDatum(fltval);
+ val = Float8GetDatum(floatVal(value));
typeid = FLOAT8OID;
- typelen = sizeof(float64data);
- typebyval = false;
+ typelen = sizeof(float8);
+ typebyval = false; /* XXX might change someday */
}
else
{
diff --git a/src/backend/parser/parse_oper.c b/src/backend/parser/parse_oper.c
index 2a9de556b26..73be990c010 100644
--- a/src/backend/parser/parse_oper.c
+++ b/src/backend/parser/parse_oper.c
@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/parser/parse_oper.c,v 1.40 2000/04/12 17:15:27 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/parser/parse_oper.c,v 1.41 2000/05/28 17:56:00 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -22,6 +22,7 @@
#include "parser/parse_func.h"
#include "parser/parse_oper.h"
#include "parser/parse_type.h"
+#include "utils/fmgroids.h"
#include "utils/syscache.h"
static Oid *oper_select_candidate(int nargs, Oid *input_typeids,
diff --git a/src/backend/port/dynloader/alpha.h b/src/backend/port/dynloader/alpha.h
index bc1046a24ec..9fee0463401 100644
--- a/src/backend/port/dynloader/alpha.h
+++ b/src/backend/port/dynloader/alpha.h
@@ -7,7 +7,7 @@
* Portions Copyright (c) 1996-2000, PostgreSQL, Inc
* Portions Copyright (c) 1994, Regents of the University of California
*
- * $Id: alpha.h,v 1.4 2000/01/26 05:56:44 momjian Exp $
+ * $Id: alpha.h,v 1.5 2000/05/28 17:56:02 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -29,7 +29,7 @@
*
*/
#define pg_dlopen(f) dlopen(f, RTLD_LAZY)
-#define pg_dlsym(h, f) ((func_ptr)dlsym(h, f))
+#define pg_dlsym(h, f) ((PGFunction) dlsym(h, f))
#define pg_dlclose(h) dlclose(h)
#define pg_dlerror() dlerror()
diff --git a/src/backend/port/dynloader/bsdi.h b/src/backend/port/dynloader/bsdi.h
index 5c8b3058aa1..b85bf1b6f38 100644
--- a/src/backend/port/dynloader/bsdi.h
+++ b/src/backend/port/dynloader/bsdi.h
@@ -26,7 +26,7 @@
#define pg_dlclose dlclose
#define pg_dlerror dlerror
#else
-#define pg_dlsym(handle, funcname) ((func_ptr) dld_get_func((funcname)))
+#define pg_dlsym(handle, funcname) ((PGFunction) dld_get_func((funcname)))
#define pg_dlclose(handle) ({ dld_unlink_by_file(handle, 1); free(handle); })
#endif
diff --git a/src/backend/port/dynloader/hpux.c b/src/backend/port/dynloader/hpux.c
index 562b59ee770..ba904fd2bcf 100644
--- a/src/backend/port/dynloader/hpux.c
+++ b/src/backend/port/dynloader/hpux.c
@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/port/dynloader/hpux.c,v 1.13 2000/04/26 23:35:34 tgl Exp $
+ * $Header: /cvsroot/pgsql/src/backend/port/dynloader/hpux.c,v 1.14 2000/05/28 17:56:02 tgl Exp $
*
* NOTES
* all functions are defined here -- it's impossible to trace the
@@ -39,13 +39,13 @@ pg_dlopen(char *filename)
return (void *) handle;
}
-func_ptr
+PGFunction
pg_dlsym(void *handle, char *funcname)
{
- func_ptr f;
+ PGFunction f;
if (shl_findsym((shl_t *) & handle, funcname, TYPE_PROCEDURE, &f) == -1)
- f = (func_ptr) NULL;
+ f = (PGFunction) NULL;
return f;
}
diff --git a/src/backend/port/dynloader/hpux.h b/src/backend/port/dynloader/hpux.h
index 470e43f951a..e5f39baee8a 100644
--- a/src/backend/port/dynloader/hpux.h
+++ b/src/backend/port/dynloader/hpux.h
@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/port/dynloader/hpux.h,v 1.3 2000/01/26 05:56:44 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/port/dynloader/hpux.h,v 1.4 2000/05/28 17:56:02 tgl Exp $
*
* NOTES
* all functions are defined here -- it's impossible to trace the
@@ -17,7 +17,9 @@
*-------------------------------------------------------------------------
*/
/* System includes */
+#include "fmgr.h"
+
void *pg_dlopen(char *filename);
-func_ptr pg_dlsym(void *handle, char *funcname);
+PGFunction pg_dlsym(void *handle, char *funcname);
void pg_dlclose(void *handle);
char *pg_dlerror();
diff --git a/src/backend/port/dynloader/linux.h b/src/backend/port/dynloader/linux.h
index 029143aa1f6..ad50aa821d3 100644
--- a/src/backend/port/dynloader/linux.h
+++ b/src/backend/port/dynloader/linux.h
@@ -7,7 +7,7 @@
* Portions Copyright (c) 1996-2000, PostgreSQL, Inc
* Portions Copyright (c) 1994, Regents of the University of California
*
- * $Id: linux.h,v 1.8 2000/01/26 05:56:44 momjian Exp $
+ * $Id: linux.h,v 1.9 2000/05/28 17:56:02 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -27,7 +27,7 @@
#define pg_dlsym(handle, funcname) (NULL)
#define pg_dlclose(handle) ({})
#else
-#define pg_dlsym(handle, funcname) ((func_ptr) dld_get_func((funcname)))
+#define pg_dlsym(handle, funcname) ((PGFunction) dld_get_func((funcname)))
#define pg_dlclose(handle) ({ dld_unlink_by_file(handle, 1); free(handle); })
#endif
#else
diff --git a/src/backend/port/dynloader/qnx4.c b/src/backend/port/dynloader/qnx4.c
index eae3e2393d3..60bed57c632 100644
--- a/src/backend/port/dynloader/qnx4.c
+++ b/src/backend/port/dynloader/qnx4.c
@@ -7,7 +7,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/port/dynloader/Attic/qnx4.c,v 1.1 1999/12/16 01:25:04 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/port/dynloader/Attic/qnx4.c,v 1.2 2000/05/28 17:56:02 tgl Exp $
*
* NOTES
*
@@ -30,7 +30,7 @@ pg_dlopen(char *filename)
return (void *) NULL;
}
-func_ptr
+PGFunction
pg_dlsym(void *handle, char *funcname)
{
return NULL;
diff --git a/src/backend/port/dynloader/qnx4.h b/src/backend/port/dynloader/qnx4.h
index 6197d09a6fa..6ac94a8206d 100644
--- a/src/backend/port/dynloader/qnx4.h
+++ b/src/backend/port/dynloader/qnx4.h
@@ -7,7 +7,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/port/dynloader/Attic/qnx4.h,v 1.1 1999/12/16 01:25:04 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/port/dynloader/Attic/qnx4.h,v 1.2 2000/05/28 17:56:02 tgl Exp $
*
* NOTES
*
@@ -15,6 +15,6 @@
*/
/* System includes */
void *pg_dlopen(char *filename);
-func_ptr pg_dlsym(void *handle, char *funcname);
+PGFunction pg_dlsym(void *handle, char *funcname);
void pg_dlclose(void *handle);
char *pg_dlerror();
diff --git a/src/backend/rewrite/rewriteRemove.c b/src/backend/rewrite/rewriteRemove.c
index 821f93440e2..13a07adbd8c 100644
--- a/src/backend/rewrite/rewriteRemove.c
+++ b/src/backend/rewrite/rewriteRemove.c
@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/rewrite/rewriteRemove.c,v 1.36 2000/04/12 17:15:32 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/rewrite/rewriteRemove.c,v 1.37 2000/05/28 17:56:02 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -23,6 +23,7 @@
#include "commands/comment.h"
#include "rewrite/rewriteRemove.h"
#include "rewrite/rewriteSupport.h"
+#include "utils/fmgroids.h"
#include "utils/syscache.h"
/*-----------------------------------------------------------------------
diff --git a/src/backend/storage/large_object/inv_api.c b/src/backend/storage/large_object/inv_api.c
index 38961ff34c1..6f60e902ca8 100644
--- a/src/backend/storage/large_object/inv_api.c
+++ b/src/backend/storage/large_object/inv_api.c
@@ -9,7 +9,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/storage/large_object/inv_api.c,v 1.67 2000/04/12 17:15:37 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/storage/large_object/inv_api.c,v 1.68 2000/05/28 17:56:03 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -31,6 +31,7 @@
#include "miscadmin.h"
#include "storage/large_object.h"
#include "storage/smgr.h"
+#include "utils/fmgroids.h"
#include "utils/relcache.h"
/*
diff --git a/src/backend/tcop/Makefile b/src/backend/tcop/Makefile
index 2ee1faefcd1..aaeda91f44f 100644
--- a/src/backend/tcop/Makefile
+++ b/src/backend/tcop/Makefile
@@ -4,7 +4,7 @@
# Makefile for tcop
#
# IDENTIFICATION
-# $Header: /cvsroot/pgsql/src/backend/tcop/Makefile,v 1.21 2000/01/19 02:58:56 petere Exp $
+# $Header: /cvsroot/pgsql/src/backend/tcop/Makefile,v 1.22 2000/05/28 17:56:04 tgl Exp $
#
#-------------------------------------------------------------------------
@@ -29,18 +29,12 @@ SUBSYS.o: $(OBJS)
# dependencies (because they don't even exist until you make them),
# they are hardcoded here.
-utility.o: ../parse.h ../fmgr.h
-aclchk.o: ../fmgr.h
-fastpath.o: ../fmgr.h
-postgres.o: ../fmgr.h
+utility.o: ../parse.h
../parse.h:
$(MAKE) -C .. parse.h
-../fmgr.h:
- $(MAKE) -C .. fmgr.h
-
-dep depend: ../parse.h ../fmgr.h
+dep depend: ../parse.h
$(CC) -MM $(CFLAGS) *.c >depend
clean:
diff --git a/src/backend/tcop/fastpath.c b/src/backend/tcop/fastpath.c
index 1b38fe7ed08..60e1c7c4454 100644
--- a/src/backend/tcop/fastpath.c
+++ b/src/backend/tcop/fastpath.c
@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/tcop/fastpath.c,v 1.38 2000/04/12 17:15:43 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/tcop/fastpath.c,v 1.39 2000/05/28 17:56:04 tgl Exp $
*
* NOTES
* This cruft is the server side of PQfn.
@@ -76,11 +76,9 @@
* ----------------
*/
static void
-SendFunctionResult(Oid fid, /* function id */
- char *retval,/* actual return value */
+SendFunctionResult(Datum retval, /* actual return value */
bool retbyval,
- int retlen /* the length according to the catalogs */
-)
+ int retlen) /* the length according to the catalogs */
{
StringInfoData buf;
@@ -93,19 +91,21 @@ SendFunctionResult(Oid fid, /* function id */
if (retbyval)
{ /* by-value */
pq_sendint(&buf, retlen, 4);
- pq_sendint(&buf, (int) (Datum) retval, retlen);
+ pq_sendint(&buf, DatumGetInt32(retval), retlen);
}
else
{ /* by-reference ... */
if (retlen < 0)
{ /* ... varlena */
- pq_sendint(&buf, VARSIZE(retval) - VARHDRSZ, VARHDRSZ);
- pq_sendbytes(&buf, VARDATA(retval), VARSIZE(retval) - VARHDRSZ);
+ struct varlena *v = (struct varlena *) DatumGetPointer(retval);
+
+ pq_sendint(&buf, VARSIZE(v) - VARHDRSZ, VARHDRSZ);
+ pq_sendbytes(&buf, VARDATA(v), VARSIZE(v) - VARHDRSZ);
}
else
{ /* ... fixed */
pq_sendint(&buf, retlen, 4);
- pq_sendbytes(&buf, retval, retlen);
+ pq_sendbytes(&buf, DatumGetPointer(retval), retlen);
}
}
}
@@ -127,12 +127,12 @@ SendFunctionResult(Oid fid, /* function id */
struct fp_info
{
Oid funcid;
- int nargs;
+ FmgrInfo flinfo; /* function lookup info for funcid */
bool argbyval[FUNC_MAX_ARGS];
int32 arglen[FUNC_MAX_ARGS]; /* signed (for varlena) */
bool retbyval;
int32 retlen; /* signed (for varlena) */
- TransactionId xid;
+ TransactionId xid; /* when the lookup was done */
CommandId cid;
};
@@ -147,17 +147,17 @@ static struct fp_info last_fp = {InvalidOid};
* valid_fp_info
*
* RETURNS:
- * 1 if the state in 'fip' is valid
- * 0 otherwise
+ * T if the state in 'fip' is valid for the given func OID
+ * F otherwise
*
- * "valid" means:
+ * "invalid" means:
* The saved state was either uninitialized, for another function,
* or from a previous command. (Commands can do updates, which
* may invalidate catalog entries for subsequent commands. This
* is overly pessimistic but since there is no smarter invalidation
* scheme...).
*/
-static int
+static bool
valid_fp_info(Oid func_id, struct fp_info * fip)
{
Assert(OidIsValid(func_id));
@@ -212,11 +212,10 @@ update_fp_info(Oid func_id, struct fp_info * fip)
func_id);
}
pp = (Form_pg_proc) GETSTRUCT(func_htp);
- fip->nargs = pp->pronargs;
rettype = pp->prorettype;
argtypes = pp->proargtypes;
- for (i = 0; i < fip->nargs; ++i)
+ for (i = 0; i < fip->flinfo.fn_nargs; ++i)
{
if (OidIsValid(argtypes[i]))
{
@@ -252,6 +251,8 @@ update_fp_info(Oid func_id, struct fp_info * fip)
fip->xid = GetCurrentTransactionId();
fip->cid = GetCurrentCommandId();
+ fmgr_info(func_id, &fip->flinfo);
+
/*
* This must be last!
*/
@@ -279,11 +280,9 @@ HandleFunctionRequest()
int argsize;
int nargs;
int tmp;
- char *arg[FUNC_MAX_ARGS];
- char *retval;
- bool isNull;
+ FunctionCallInfoData fcinfo;
+ Datum retval;
int i;
- uint32 palloced;
char *p;
struct fp_info *fip;
@@ -305,89 +304,81 @@ HandleFunctionRequest()
* XXX FIXME: elog() here means we lose sync with the frontend, since
* we have not swallowed all of its input message. What should happen
* is we absorb all of the input message per protocol syntax, and
- * *then* do error checking and elog if appropriate.
+ * *then* do error checking (including lookup of the given function ID)
+ * and elog if appropriate. Unfortunately, because we cannot even read
+ * the message properly without knowing whether the data types are
+ * pass-by-ref or pass-by-value, it's not all that easy to fix :-(.
+ * This protocol is misdesigned.
*/
- if (fip->nargs != nargs)
+ if (fip->flinfo.fn_nargs != nargs || nargs > FUNC_MAX_ARGS)
{
elog(ERROR, "HandleFunctionRequest: actual arguments (%d) != registered arguments (%d)",
- nargs, fip->nargs);
+ nargs, fip->flinfo.fn_nargs);
}
+ MemSet(&fcinfo, 0, sizeof(fcinfo));
+ fcinfo.flinfo = &fip->flinfo;
+ fcinfo.nargs = nargs;
+
/*
- * Copy arguments into arg vector. If we palloc() an argument, we
- * need to remember, so that we pfree() it after the call.
+ * Copy supplied arguments into arg vector. Note there is no way for
+ * frontend to specify a NULL argument --- more misdesign.
*/
- palloced = 0x0;
- for (i = 0; i < FUNC_MAX_ARGS; ++i)
+ for (i = 0; i < nargs; ++i)
{
- if (i >= nargs)
- arg[i] = (char *) NULL;
- else
- {
- if (pq_getint(&argsize, 4))
+ if (pq_getint(&argsize, 4))
+ return EOF;
+ if (fip->argbyval[i])
+ { /* by-value */
+ if (argsize < 1 || argsize > 4)
+ elog(ERROR, "HandleFunctionRequest: bogus argsize %d",
+ argsize);
+ /* XXX should we demand argsize == fip->arglen[i] ? */
+ if (pq_getint(&tmp, argsize))
return EOF;
-
- Assert(argsize > 0);
- if (fip->argbyval[i])
- { /* by-value */
- Assert(argsize <= 4);
- if (pq_getint(&tmp, argsize))
+ fcinfo.arg[i] = (Datum) tmp;
+ }
+ else
+ { /* by-reference ... */
+ if (fip->arglen[i] < 0)
+ { /* ... varlena */
+ if (argsize < 0)
+ elog(ERROR, "HandleFunctionRequest: bogus argsize %d",
+ argsize);
+ /* I suspect this +1 isn't really needed - tgl 5/2000 */
+ p = palloc(argsize + VARHDRSZ + 1); /* Added +1 to solve
+ * memory leak - Peter
+ * 98 Jan 6 */
+ VARSIZE(p) = argsize + VARHDRSZ;
+ if (pq_getbytes(VARDATA(p), argsize))
return EOF;
- arg[i] = (char *) tmp;
}
else
- { /* by-reference ... */
- if (fip->arglen[i] < 0)
- { /* ... varlena */
- if (!(p = palloc(argsize + VARHDRSZ + 1))) /* Added +1 to solve
- * memory leak - Peter
- * 98 Jan 6 */
- elog(ERROR, "HandleFunctionRequest: palloc failed");
- VARSIZE(p) = argsize + VARHDRSZ;
- if (pq_getbytes(VARDATA(p), argsize))
- return EOF;
- }
- else
- { /* ... fixed */
- /* XXX cross our fingers and trust "argsize" */
- if (!(p = palloc(argsize + 1)))
- elog(ERROR, "HandleFunctionRequest: palloc failed");
- if (pq_getbytes(p, argsize))
- return EOF;
- }
- palloced |= (1 << i);
- arg[i] = p;
+ { /* ... fixed */
+ if (argsize != fip->arglen[i])
+ elog(ERROR, "HandleFunctionRequest: bogus argsize %d, should be %d",
+ argsize, fip->arglen[i]);
+ p = palloc(argsize + 1); /* +1 in case argsize is 0 */
+ if (pq_getbytes(p, argsize))
+ return EOF;
}
+ fcinfo.arg[i] = PointerGetDatum(p);
}
}
-#ifndef NO_FASTPATH
- retval = fmgr_array_args(fid, nargs, arg, &isNull);
-#else
- retval = NULL;
-#endif /* NO_FASTPATH */
-
- /* free palloc'ed arguments */
- for (i = 0; i < nargs; ++i)
- {
- if (palloced & (1 << i))
- pfree(arg[i]);
- }
-
- /*
- * If this is an ordinary query (not a retrieve portal p ...), then we
- * return the data to the user. If the return value was palloc'ed,
- * then it must also be freed.
- */
-#ifndef NO_FASTPATH
- SendFunctionResult(fid, retval, fip->retbyval, fip->retlen);
+#ifdef NO_FASTPATH
+ /* force a NULL return */
+ retval = (Datum) 0;
+ fcinfo.isnull = true;
#else
- SendFunctionResult(fid, retval, fip->retbyval, 0);
+ retval = FunctionCallInvoke(&fcinfo);
#endif /* NO_FASTPATH */
- if (!fip->retbyval)
- pfree(retval);
+ if (fcinfo.isnull)
+ SendFunctionResult(retval, fip->retbyval, 0);
+ else
+ SendFunctionResult(retval, fip->retbyval, fip->retlen);
return 0;
}
diff --git a/src/backend/utils/Gen_fmgrtab.sh.in b/src/backend/utils/Gen_fmgrtab.sh.in
index 975e2a0f9a2..f075ac28376 100644
--- a/src/backend/utils/Gen_fmgrtab.sh.in
+++ b/src/backend/utils/Gen_fmgrtab.sh.in
@@ -1,14 +1,15 @@
#!/bin/sh
#-------------------------------------------------------------------------
#
-# Gen_fmgrtab.sh--
-# shell script to generate fmgr.h and fmgrtab.c from pg_proc.h
+# Gen_fmgrtab.sh
+# shell script to generate fmgroids.h and fmgrtab.c from pg_proc.h
#
-# Copyright (c) 1994, Regents of the University of California
+# Portions Copyright (c) 1996-2000, PostgreSQL, Inc
+# Portions Copyright (c) 1994, Regents of the University of California
#
#
# IDENTIFICATION
-# $Header: /cvsroot/pgsql/src/backend/utils/Attic/Gen_fmgrtab.sh.in,v 1.21 2000/05/22 02:34:21 momjian Exp $
+# $Header: /cvsroot/pgsql/src/backend/utils/Attic/Gen_fmgrtab.sh.in,v 1.22 2000/05/28 17:56:05 tgl Exp $
#
# NOTES
# Passes any -D options on to cpp prior to generating the list
@@ -16,12 +17,6 @@
#
#-------------------------------------------------------------------------
-if [ $? != 0 ]
-then
- echo `basename $0`: Bad option
- exit 1
-fi
-
BKIOPTS=''
#
@@ -32,7 +27,7 @@ for opt in $*
do
case $opt in
-D) BKIOPTS="$BKIOPTS -D$2"; shift; shift;;
- -D*) BKIOPTS="$BKIOPTS $1";shift;;
+ -D*) BKIOPTS="$BKIOPTS $1"; shift;;
--) shift; break;;
-*) shift;;
esac
@@ -41,8 +36,8 @@ done
INFILE=$1
RAWFILE=fmgr.raw
CPPTMPFILE=fmgrtmp.c
-HFILE=fmgr.h
-TABCFILE=fmgrtab.c
+OIDSFILE=fmgroids.h
+TABLEFILE=fmgrtab.c
#
# Generate the file containing raw pg_proc tuple data
@@ -63,7 +58,8 @@ sed -e 's/^.*OID[^=]*=[^0-9]*//' \
-e 's/[ ]*).*$//' | \
awk '
/^#/ { print; next; }
-$4 == "11" { print; next; }' > $CPPTMPFILE
+$4 == "11" { print; next; }
+$4 == "12" { print; next; }' > $CPPTMPFILE
@CPP@ $BKIOPTS $CPPTMPFILE | \
egrep '^[0-9]' | \
@@ -72,18 +68,21 @@ sort -n > $RAWFILE
rm -f $CPPTMPFILE
#
-# Generate fmgr.h
+# Generate fmgroids.h
#
-cat > $HFILE <<FuNkYfMgRsTuFf
+cat > $OIDSFILE <<FuNkYfMgRsTuFf
/*-------------------------------------------------------------------------
*
- * $HFILE--
- * Definitions for using internal procedures.
+ * $OIDSFILE
+ * Macros that define the OIDs of built-in functions.
*
+ * These macros can be used to avoid a catalog lookup when a specific
+ * fmgr-callable function needs to be referenced.
*
- * Copyright (c) 1994, Regents of the University of California
+ * Portions Copyright (c) 1996-2000, PostgreSQL, Inc
+ * Portions Copyright (c) 1994, Regents of the University of California
*
- * $Id: Gen_fmgrtab.sh.in,v 1.21 2000/05/22 02:34:21 momjian Exp $
+ * $Id: Gen_fmgrtab.sh.in,v 1.22 2000/05/28 17:56:05 tgl Exp $
*
* NOTES
* ******************************
@@ -91,77 +90,12 @@ cat > $HFILE <<FuNkYfMgRsTuFf
* ******************************
*
* It has been GENERATED by $0
- * from $1
+ * from $INFILE
*
*-------------------------------------------------------------------------
*/
-#ifndef FMGR_H
-#define FMGR_H
-
-#include "postgres.h"
-
-typedef struct {
- char *data[FUNC_MAX_ARGS];
-} FmgrValues;
-
-typedef struct {
- func_ptr fn_addr;
- func_ptr fn_plhandler;
- Oid fn_oid;
- int fn_nargs;
-} FmgrInfo;
-
-/*
- * defined in fmgr.c
- */
-extern char *fmgr_c(FmgrInfo *finfo, FmgrValues *values, bool *isNull);
-extern void fmgr_info(Oid procedureId, FmgrInfo *finfo);
-extern char *fmgr(Oid procedureId, ... );
-extern char *fmgr_ptr(FmgrInfo *finfo, ... );
-extern char *fmgr_array_args(Oid procedureId, int nargs,
- char *args[], bool *isNull);
-
-/*
- * defined in dfmgr.c
- */
-extern func_ptr fmgr_dynamic(Oid procedureId, int *pronargs);
-extern void load_file(char *filename);
-
-/*
- * For performance reasons, we often want to simply jump through a
- * a function pointer (if it's valid, that is). These calls have
- * been macroized so we can run them through a routine that does
- * sanity-checking (and so we can track them down more easily when
- * we must).
- */
-
-/* We don't make this static so fmgr_faddr() macros can access it */
-extern FmgrInfo *fmgr_pl_finfo;
-
-#define fmgr_faddr(finfo) \
-( \
- fmgr_pl_finfo = (finfo), \
- (func_ptr)(finfo)->fn_addr \
-)
-
-#ifdef TRACE_FMGR_PTR
-#define FMGR_PTR2(FINFO, ARG1, ARG2) \
- fmgr_ptr(FINFO, 2, ARG1, ARG2)
-#else
-#define FMGR_PTR2(FINFO, ARG1, ARG2) \
-( \
- ((FINFO)->fn_addr) ? \
- (*(fmgr_faddr(FINFO)))(ARG1, ARG2) \
- : \
- fmgr((FINFO)->fn_oid, ARG1, ARG2) \
-)
-#endif
-
-/*
- * Flags for the builtin oprrest selectivity routines.
- */
-#define SEL_CONSTANT 1 /* constant does not vary (not a parameter) */
-#define SEL_RIGHT 2 /* constant appears to right of operator */
+#ifndef FMGROIDS_H
+#define FMGROIDS_H
/*
* Constant macros for the OIDs of entries in pg_proc.
@@ -174,30 +108,33 @@ FuNkYfMgRsTuFf
tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' < $RAWFILE | \
awk '
BEGIN { OFS = ""; }
- { if (seenit[$2]++ == 0) print "#define F_", $2, " ", $1; }' >> $HFILE
+ { if (seenit[$2]++ == 0) print "#define F_", $2, " ", $1; }' >> $OIDSFILE
-cat >> $HFILE <<FuNkYfMgRsTuFf
+cat >> $OIDSFILE <<FuNkYfMgRsTuFf
-#endif /* FMGR_H */
+#endif /* FMGROIDS_H */
FuNkYfMgRsTuFf
#
-# Generate fmgr function table file.
+# Generate fmgr's built-in-function table.
#
-# Print out the bogus function declarations, then the table that
-# refers to them.
+# Print out the function declarations, then the table that refers to them.
+# NB: the function declarations are bogus in the case of old-style functions,
+# although they should be correct for new-style. Therefore we need to compile
+# this table definition as a separate C file that won't need to include any
+# "real" declarations for those functions!
#
-cat > $TABCFILE <<FuNkYfMgRtAbStUfF
+cat > $TABLEFILE <<FuNkYfMgRtAbStUfF
/*-------------------------------------------------------------------------
*
- * $TABCFILE--
+ * $TABLEFILE
* The function manager's table of internal functions.
*
- * Copyright (c) 1994, Regents of the University of California
- *
+ * Portions Copyright (c) 1996-2000, PostgreSQL, Inc
+ * Portions Copyright (c) 1994, Regents of the University of California
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/utils/Attic/Gen_fmgrtab.sh.in,v 1.21 2000/05/22 02:34:21 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/utils/Attic/Gen_fmgrtab.sh.in,v 1.22 2000/05/28 17:56:05 tgl Exp $
*
* NOTES
*
@@ -206,72 +143,41 @@ cat > $TABCFILE <<FuNkYfMgRtAbStUfF
* ******************************
*
* It has been GENERATED by $0
- * from $1
+ * from $INFILE
*
- * We lie here to cc about the return type and arguments of the
+ * We lie here to cc about the return type and arguments of old-style
* builtin functions; all ld cares about is the fact that it
* will need to resolve an external function reference.
*
*-------------------------------------------------------------------------
*/
-#include <string.h>
#include "postgres.h"
+
#include "utils/fmgrtab.h"
FuNkYfMgRtAbStUfF
-awk '{ print "extern char *", $(NF-1), "();"; }' $RAWFILE >> $TABCFILE
+awk '{ print "extern Datum", $(NF-1), "(PG_FUNCTION_ARGS);"; }' $RAWFILE >> $TABLEFILE
-cat >> $TABCFILE <<FuNkYfMgRtAbStUfF
+cat >> $TABLEFILE <<FuNkYfMgRtAbStUfF
-static FmgrCall fmgr_builtins[] = {
+const FmgrBuiltin fmgr_builtins[] = {
FuNkYfMgRtAbStUfF
-awk '{ printf (" {%d, %d, %s, \"%s\" },\n"), $1, $8, $(NF-1), $(NF-1) }' $RAWFILE >> $TABCFILE
+awk '{ printf (" { %d, \"%s\", %d, %s, %s, %s },\n"), \
+ $1, $(NF-1), $9, \
+ ($8 == "t") ? "true" : "false", \
+ ($4 == "11") ? "true" : "false", \
+ $(NF-1) }' $RAWFILE >> $TABLEFILE
-cat >> $TABCFILE <<FuNkYfMgRtAbStUfF
+cat >> $TABLEFILE <<FuNkYfMgRtAbStUfF
/* dummy entry is easier than getting rid of comma after last real one */
- { 0, 0, (func_ptr) NULL, NULL }
+ { 0, NULL, 0, false, false, (PGFunction) NULL }
};
-/* Note FMGR_NBUILTINS excludes the dummy entry */
-#define FMGR_NBUILTINS ((sizeof(fmgr_builtins) / sizeof(FmgrCall)) - 1)
-
-FmgrCall *fmgr_isbuiltin(Oid id)
-{
- int low = 0;
- int high = FMGR_NBUILTINS - 1;
-
- /* Loop invariant: low is the first index that could contain target
- * entry, and high is the last index that could contain it.
- */
- while (low <= high) {
- int i = (high + low) / 2;
- FmgrCall * ptr = &fmgr_builtins[i];
- if (id == ptr->proid)
- return ptr;
- else if (id > ptr->proid)
- low = i + 1;
- else
- high = i - 1;
- }
- return (FmgrCall *) NULL;
-}
-
-func_ptr fmgr_lookupByName(char *name)
-{
- /* Lookup a builtin by name. Note there can be more than one entry in
- * the array matching this name, but they should all point to the same
- * routine.
- */
- int i;
- for (i=0; i<FMGR_NBUILTINS; i++) {
- if (strcmp(name, fmgr_builtins[i].funcName) == 0)
- return fmgr_builtins[i].func;
- }
- return (func_ptr) NULL;
-}
+/* Note fmgr_nbuiltins excludes the dummy entry */
+const int fmgr_nbuiltins = (sizeof(fmgr_builtins) / sizeof(FmgrBuiltin)) - 1;
FuNkYfMgRtAbStUfF
diff --git a/src/backend/utils/Makefile b/src/backend/utils/Makefile
index e37c85761e6..eba9b13af29 100644
--- a/src/backend/utils/Makefile
+++ b/src/backend/utils/Makefile
@@ -4,12 +4,12 @@
# Makefile for utils
#
# IDENTIFICATION
-# $Header: /cvsroot/pgsql/src/backend/utils/Makefile,v 1.10 1999/12/13 22:34:28 momjian Exp $
+# $Header: /cvsroot/pgsql/src/backend/utils/Makefile,v 1.11 2000/05/28 17:56:05 tgl Exp $
#
#-------------------------------------------------------------------------
SRCDIR = ../..
-include ../../Makefile.global
+include $(SRCDIR)/Makefile.global
INCLUDE_OPT = -I..
@@ -35,19 +35,14 @@ SUBSYS.o: $(OBJS)
submake:
for i in $(DIRS); do $(MAKE) -C $$i SUBSYS.o; done
-fmgrtab.o: ../fmgr.h
-
-../fmgr.h:
- $(MAKE) -C .. fmgr.h
-
-fmgr.h fmgrtab.c: ./Gen_fmgrtab.sh ../../include/catalog/pg_proc.h
- sh $(SHOPTS) Gen_fmgrtab.sh ../../include/catalog/pg_proc.h
+fmgroids.h fmgrtab.c: Gen_fmgrtab.sh $(SRCDIR)/include/catalog/pg_proc.h
+ $(SHELL) $(SHOPTS) Gen_fmgrtab.sh $(SRCDIR)/include/catalog/pg_proc.h
clean:
- rm -f SUBSYS.o fmgr.h fmgrtab.o fmgrtab.c
+ rm -f SUBSYS.o fmgroids.h fmgrtab.o fmgrtab.c
for i in $(DIRS); do $(MAKE) -C $$i clean; done
-dep depend: fmgr.h fmgrtab.c
+dep depend: fmgroids.h fmgrtab.c
for i in $(DIRS); do $(MAKE) -C $$i depend; done
ifeq (depend,$(wildcard depend))
diff --git a/src/backend/utils/adt/int8.c b/src/backend/utils/adt/int8.c
index 018352df1ad..a30a920b6a4 100644
--- a/src/backend/utils/adt/int8.c
+++ b/src/backend/utils/adt/int8.c
@@ -3,6 +3,12 @@
* int8.c
* Internal 64-bit integer operations
*
+ * Portions Copyright (c) 1996-2000, PostgreSQL, Inc
+ * Portions Copyright (c) 1994, Regents of the University of California
+ *
+ * IDENTIFICATION
+ * $Header: /cvsroot/pgsql/src/backend/utils/adt/int8.c,v 1.19 2000/05/28 17:56:05 tgl Exp $
+ *
*-------------------------------------------------------------------------
*/
#include <ctype.h>
@@ -18,6 +24,11 @@
#include "utils/int8.h"
+/* this should be set in config.h, but just in case it wasn't: */
+#ifndef INT64_FORMAT
+#define INT64_FORMAT "%ld"
+#endif
+
#define MAXINT8LEN 25
#ifndef INT_MAX
diff --git a/src/backend/utils/adt/regproc.c b/src/backend/utils/adt/regproc.c
index 4060a846655..6db76ac8c5a 100644
--- a/src/backend/utils/adt/regproc.c
+++ b/src/backend/utils/adt/regproc.c
@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/utils/adt/regproc.c,v 1.54 2000/04/12 17:15:51 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/utils/adt/regproc.c,v 1.55 2000/05/28 17:56:05 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -22,6 +22,7 @@
#include "catalog/pg_type.h"
#include "miscadmin.h"
#include "utils/builtins.h"
+#include "utils/fmgroids.h"
#include "utils/syscache.h"
/*****************************************************************************
diff --git a/src/backend/utils/adt/selfuncs.c b/src/backend/utils/adt/selfuncs.c
index 4718dc668a7..c93ef767d8e 100644
--- a/src/backend/utils/adt/selfuncs.c
+++ b/src/backend/utils/adt/selfuncs.c
@@ -15,7 +15,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/utils/adt/selfuncs.c,v 1.66 2000/05/26 17:19:15 tgl Exp $
+ * $Header: /cvsroot/pgsql/src/backend/utils/adt/selfuncs.c,v 1.67 2000/05/28 17:56:06 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -889,17 +889,17 @@ convert_numeric_to_scalar(Datum value, Oid typid)
switch (typid)
{
case BOOLOID:
- return (double) DatumGetUInt8(value);
+ return (double) DatumGetBool(value);
case INT2OID:
return (double) DatumGetInt16(value);
case INT4OID:
return (double) DatumGetInt32(value);
case INT8OID:
- return (double) (*i8tod((int64 *) DatumGetPointer(value)));
+ return (double) DatumGetInt64(value);
case FLOAT4OID:
- return (double) (*DatumGetFloat32(value));
+ return (double) DatumGetFloat4(value);
case FLOAT8OID:
- return (double) (*DatumGetFloat64(value));
+ return (double) DatumGetFloat8(value);
case NUMERICOID:
return (double) (*numeric_float8((Numeric) DatumGetPointer(value)));
case OIDOID:
diff --git a/src/backend/utils/adt/sets.c b/src/backend/utils/adt/sets.c
index dbc5ea4b8fa..cc629c3ad85 100644
--- a/src/backend/utils/adt/sets.c
+++ b/src/backend/utils/adt/sets.c
@@ -10,7 +10,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/utils/adt/Attic/sets.c,v 1.30 2000/01/26 05:57:14 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/utils/adt/Attic/sets.c,v 1.31 2000/05/28 17:56:06 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -56,8 +56,9 @@ SetDefine(char *querystr, char *typename)
"sql", /* languageName */
querystr, /* sourceCode */
fileName, /* fileName */
- false, /* canCache */
true, /* trusted */
+ false, /* canCache XXX appropriate? */
+ false, /* isStrict XXX appropriate? */
100, /* byte_pct */
0, /* perbyte_cpu */
0, /* percall_cpu */
diff --git a/src/backend/utils/cache/catcache.c b/src/backend/utils/cache/catcache.c
index b593920b1a8..e5fb546ca70 100644
--- a/src/backend/utils/cache/catcache.c
+++ b/src/backend/utils/cache/catcache.c
@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/utils/cache/catcache.c,v 1.63 2000/04/12 17:15:52 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/utils/cache/catcache.c,v 1.64 2000/05/28 17:56:06 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -24,6 +24,7 @@
#include "catalog/indexing.h"
#include "miscadmin.h"
#include "utils/builtins.h"
+#include "utils/fmgroids.h"
#include "utils/catcache.h"
#include "utils/syscache.h"
diff --git a/src/backend/utils/cache/fcache.c b/src/backend/utils/cache/fcache.c
index 26f4cbd8d06..33528d7bb20 100644
--- a/src/backend/utils/cache/fcache.c
+++ b/src/backend/utils/cache/fcache.c
@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/utils/cache/Attic/fcache.c,v 1.30 2000/04/12 17:15:53 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/utils/cache/Attic/fcache.c,v 1.31 2000/05/28 17:56:06 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -24,20 +24,9 @@
static Oid GetDynamicFuncArgType(Var *arg, ExprContext *econtext);
static FunctionCachePtr init_fcache(Oid foid,
- bool use_syscache,
- List *argList,
- ExprContext *econtext);
+ List *argList,
+ ExprContext *econtext);
-/*-----------------------------------------------------------------
- *
- * Initialize the 'FunctionCache' given the PG_PROC oid.
- *
- *
- * NOTE: This function can be called when the system cache is being
- * initialized. Therefore, use_syscache should ONLY be true
- * when the function return type is interesting (ie: set_fcache).
- *-----------------------------------------------------------------
- */
#define FuncArgTypeIsDynamic(arg) \
(IsA(arg,Var) && ((Var*)arg)->varattno == InvalidAttrNumber)
@@ -53,7 +42,6 @@ GetDynamicFuncArgType(Var *arg, ExprContext *econtext)
rtid = ((Var *) arg)->varno;
relname = (char *) getrelname(rtid, econtext->ecxt_range_table);
-
tup = SearchSysCacheTuple(TYPENAME,
PointerGetDatum(relname),
0, 0, 0);
@@ -64,9 +52,14 @@ GetDynamicFuncArgType(Var *arg, ExprContext *econtext)
return tup->t_data->t_oid;
}
+/*-----------------------------------------------------------------
+ *
+ * Initialize a 'FunctionCache' struct given the PG_PROC oid.
+ *
+ *-----------------------------------------------------------------
+ */
static FunctionCachePtr
init_fcache(Oid foid,
- bool use_syscache,
List *argList,
ExprContext *econtext)
{
@@ -79,16 +72,13 @@ init_fcache(Oid foid,
text *tmp;
bool isNull;
+ retval = (FunctionCachePtr) palloc(sizeof(FunctionCache));
+ MemSet(retval, 0, sizeof(FunctionCache));
+
/* ----------------
* get the procedure tuple corresponding to the given functionOid
* ----------------
*/
- retval = (FunctionCachePtr) palloc(sizeof(FunctionCache));
- memset(retval, 0, sizeof(FunctionCache));
-
- if (!use_syscache)
- elog(ERROR, "what the ????, init the fcache without the catalogs?");
-
procedureTuple = SearchSysCacheTuple(PROCOID,
ObjectIdGetDatum(foid),
0, 0, 0);
@@ -114,8 +104,7 @@ init_fcache(Oid foid,
typeStruct = (Form_pg_type) GETSTRUCT(typeTuple);
/* ----------------
- * get the type length and by-value from the type tuple and
- * save the information in our one element cache.
+ * get the type length and by-value flag from the type tuple
* ----------------
*/
retval->typlen = typeStruct->typlen;
@@ -136,10 +125,9 @@ init_fcache(Oid foid,
retval->foid = foid;
retval->language = procedureStruct->prolang;
retval->func_state = (char *) NULL;
- retval->setArg = NULL;
+ retval->setArg = (Datum) 0;
retval->hasSetArg = false;
retval->oneResult = !procedureStruct->proretset;
- retval->istrusted = procedureStruct->proistrusted;
/*
* If we are returning exactly one result then we have to copy tuples
@@ -162,9 +150,8 @@ init_fcache(Oid foid,
slot->ttc_tupleDescriptor = (TupleDesc) NULL;
slot->ttc_buffer = InvalidBuffer;
slot->ttc_whichplan = -1;
- retval->funcSlot = (Pointer) slot;
- relationTuple = (HeapTuple)
+ relationTuple =
SearchSysCacheTuple(RELNAME,
PointerGetDatum(&typeStruct->typname),
0, 0, 0);
@@ -177,10 +164,12 @@ init_fcache(Oid foid,
else
td = CreateTemplateTupleDesc(1);
- ((TupleTableSlot *) retval->funcSlot)->ttc_tupleDescriptor = td;
+ slot->ttc_tupleDescriptor = td;
+
+ retval->funcSlot = (Pointer) slot;
}
else
- retval->funcSlot = (char *) NULL;
+ retval->funcSlot = (Pointer) NULL;
nargs = procedureStruct->pronargs;
retval->nargs = nargs;
@@ -189,8 +178,6 @@ init_fcache(Oid foid,
{
Oid *argTypes;
- retval->nullVect = (bool *) palloc(retval->nargs * sizeof(bool));
-
if (retval->language == SQLlanguageId)
{
int i;
@@ -218,7 +205,6 @@ init_fcache(Oid foid,
else
{
retval->argOidVect = (Oid *) NULL;
- retval->nullVect = (BoolPtr) NULL;
}
if (procedureStruct->prolang == SQLlanguageId)
@@ -257,7 +243,7 @@ init_fcache(Oid foid,
retval->nargs = retval->func.fn_nargs;
}
else
- retval->func.fn_addr = (func_ptr) NULL;
+ retval->func.fn_addr = (PGFunction) NULL;
return retval;
}
@@ -269,7 +255,7 @@ setFcache(Node *node, Oid foid, List *argList, ExprContext *econtext)
Oper *onode;
FunctionCachePtr fcache;
- fcache = init_fcache(foid, true, argList, econtext);
+ fcache = init_fcache(foid, argList, econtext);
if (IsA(node, Oper))
{
diff --git a/src/backend/utils/cache/relcache.c b/src/backend/utils/cache/relcache.c
index b9e86d905ec..30f422de7f0 100644
--- a/src/backend/utils/cache/relcache.c
+++ b/src/backend/utils/cache/relcache.c
@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/utils/cache/relcache.c,v 1.96 2000/05/21 02:28:55 tgl Exp $
+ * $Header: /cvsroot/pgsql/src/backend/utils/cache/relcache.c,v 1.97 2000/05/28 17:56:06 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -58,6 +58,7 @@
#include "storage/bufmgr.h"
#include "storage/smgr.h"
#include "utils/catcache.h"
+#include "utils/fmgroids.h"
#include "utils/relcache.h"
#include "utils/temprel.h"
diff --git a/src/backend/utils/fmgr/dfmgr.c b/src/backend/utils/fmgr/dfmgr.c
index a460fab05c2..2dfb54391c3 100644
--- a/src/backend/utils/fmgr/dfmgr.c
+++ b/src/backend/utils/fmgr/dfmgr.c
@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/utils/fmgr/dfmgr.c,v 1.39 2000/04/12 17:15:57 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/utils/fmgr/dfmgr.c,v 1.40 2000/05/28 17:56:07 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -17,190 +17,127 @@
#include "postgres.h"
-#include "utils/dynamic_loader.h"
-
#include "access/heapam.h"
-#include "catalog/catname.h"
#include "catalog/pg_proc.h"
#include "dynloader.h"
#include "utils/builtins.h"
+#include "utils/dynamic_loader.h"
#include "utils/syscache.h"
+
+/*
+ * List of dynamically loaded files.
+ */
+
+typedef struct df_files
+{
+ struct df_files *next; /* List link */
+ dev_t device; /* Device file is on */
+ ino_t inode; /* Inode number of file */
+ void *handle; /* a handle for pg_dl* functions */
+ char filename[1]; /* Full pathname of file */
+ /* we allocate the block big enough for actual length of pathname.
+ * filename[] must be last item in struct!
+ */
+} DynamicFileList;
+
static DynamicFileList *file_list = (DynamicFileList *) NULL;
static DynamicFileList *file_tail = (DynamicFileList *) NULL;
-#define NOT_EQUAL(A, B) (((A).st_ino != (B).inode) \
- || ((A).st_dev != (B).device))
+#define SAME_INODE(A,B) ((A).st_ino == (B).inode && (A).st_dev == (B).device)
-static Oid procedureId_save = -1;
-static int pronargs_save;
-static func_ptr user_fn_save = (func_ptr) NULL;
-static func_ptr handle_load(char *filename, char *funcname);
-func_ptr
-fmgr_dynamic(Oid procedureId, int *pronargs)
+PGFunction
+fmgr_dynamic(Oid functionId)
{
HeapTuple procedureTuple;
Form_pg_proc procedureStruct;
char *proname,
- *linksymbol,
+ *prosrcstring,
*probinstring;
- char *prosrcstring = NULL;
- Datum probinattr;
- Datum prosrcattr;
- func_ptr user_fn;
- Relation rel;
+ Datum prosrcattr,
+ probinattr;
+ PGFunction user_fn;
bool isnull;
- /* Implement simple one-element cache for function lookups */
- if (procedureId == procedureId_save)
- {
- *pronargs = pronargs_save;
- return user_fn_save;
- }
-
- /*
- * The procedure isn't a builtin, so we'll have to do a catalog lookup
- * to find its pg_proc entry. Moreover, since probin is varlena,
- * we're going to have to use heap_getattr, which means we need the
- * reldesc, which means we need to open the relation. So we might as
- * well do that first and get the benefit of SI inval if needed.
- */
- rel = heap_openr(ProcedureRelationName, AccessShareLock);
-
procedureTuple = SearchSysCacheTuple(PROCOID,
- ObjectIdGetDatum(procedureId),
+ ObjectIdGetDatum(functionId),
0, 0, 0);
if (!HeapTupleIsValid(procedureTuple))
- {
- elog(ERROR, "fmgr: Cache lookup failed for procedure %u\n",
- procedureId);
- return (func_ptr) NULL;
- }
-
+ elog(ERROR, "fmgr_dynamic: function %u: cache lookup failed",
+ functionId);
procedureStruct = (Form_pg_proc) GETSTRUCT(procedureTuple);
+
proname = NameStr(procedureStruct->proname);
- pronargs_save = *pronargs = procedureStruct->pronargs;
- probinattr = heap_getattr(procedureTuple,
- Anum_pg_proc_probin,
- RelationGetDescr(rel), &isnull);
- if (!PointerIsValid(probinattr) /* || isnull */ )
+
+ prosrcattr = SysCacheGetAttr(PROCOID, procedureTuple,
+ Anum_pg_proc_prosrc, &isnull);
+ if (isnull || !PointerIsValid(prosrcattr))
{
- heap_close(rel, AccessShareLock);
- elog(ERROR, "fmgr: Could not extract probin for %u from %s",
- procedureId, ProcedureRelationName);
- return (func_ptr) NULL;
+ elog(ERROR, "fmgr: Could not extract prosrc for %u from pg_proc",
+ functionId);
}
- probinstring = textout((struct varlena *) probinattr);
-
- prosrcattr = heap_getattr(procedureTuple,
- Anum_pg_proc_prosrc,
- RelationGetDescr(rel), &isnull);
+ prosrcstring = textout((text *) DatumGetPointer(prosrcattr));
- if (isnull)
- { /* Use the proname for the link symbol */
- linksymbol = proname;
- }
- else if (!PointerIsValid(prosrcattr))
- { /* pg_proc must be messed up! */
- heap_close(rel, AccessShareLock);
- elog(ERROR, "fmgr: Could not extract prosrc for %u from %s",
- procedureId, ProcedureRelationName);
- return (func_ptr) NULL;
- }
- else
- { /* The text in prosrcattr is either "-" or
- * a link symbol */
- prosrcstring = textout((struct varlena *) prosrcattr);
- if (strcmp(prosrcstring, "-") == 0)
- linksymbol = proname;
- else
- linksymbol = prosrcstring;
+ probinattr = SysCacheGetAttr(PROCOID, procedureTuple,
+ Anum_pg_proc_probin, &isnull);
+ if (isnull || !PointerIsValid(probinattr))
+ {
+ elog(ERROR, "fmgr: Could not extract probin for %u from pg_proc",
+ functionId);
}
+ probinstring = textout((text *) DatumGetPointer(probinattr));
- heap_close(rel, AccessShareLock);
-
- user_fn = handle_load(probinstring, linksymbol);
+ user_fn = load_external_function(probinstring, prosrcstring);
+ pfree(prosrcstring);
pfree(probinstring);
- if (prosrcstring)
- pfree(prosrcstring);
-
- procedureId_save = procedureId;
- user_fn_save = user_fn;
return user_fn;
}
-static func_ptr
-handle_load(char *filename, char *funcname)
+PGFunction
+load_external_function(char *filename, char *funcname)
{
- DynamicFileList *file_scanner = (DynamicFileList *) NULL;
- func_ptr retval = (func_ptr) NULL;
+ DynamicFileList *file_scanner;
+ PGFunction retval;
char *load_error;
struct stat stat_buf;
/*
- * Do this because loading files may screw up the dynamic function
- * manager otherwise.
- */
- procedureId_save = -1;
-
- /*
- * Scan the list of loaded FILES to see if the function has been
- * loaded.
+ * Scan the list of loaded FILES to see if the file has been loaded.
*/
-
- if (filename != (char *) NULL)
+ for (file_scanner = file_list;
+ file_scanner != (DynamicFileList *) NULL &&
+ strcmp(filename, file_scanner->filename) != 0;
+ file_scanner = file_scanner->next)
+ ;
+ if (file_scanner == (DynamicFileList *) NULL)
{
+ /*
+ * Check for same files - different paths (ie, symlink or link)
+ */
+ if (stat(filename, &stat_buf) == -1)
+ elog(ERROR, "stat failed on file '%s': %m", filename);
+
for (file_scanner = file_list;
- file_scanner != (DynamicFileList *) NULL
- && file_scanner->filename != (char *) NULL
- && strcmp(filename, file_scanner->filename) != 0;
+ file_scanner != (DynamicFileList *) NULL &&
+ !SAME_INODE(stat_buf, *file_scanner);
file_scanner = file_scanner->next)
;
- if (file_scanner == (DynamicFileList *) NULL)
- {
- if (stat(filename, &stat_buf) == -1)
- elog(ERROR, "stat failed on file '%s': %m", filename);
-
- for (file_scanner = file_list;
- file_scanner != (DynamicFileList *) NULL
- && (NOT_EQUAL(stat_buf, *file_scanner));
- file_scanner = file_scanner->next)
- ;
-
- /*
- * Same files - different paths (ie, symlink or link)
- */
- if (file_scanner != (DynamicFileList *) NULL)
- strcpy(file_scanner->filename, filename);
-
- }
}
- else
- file_scanner = (DynamicFileList *) NULL;
-
- /*
- * File not loaded yet.
- */
if (file_scanner == (DynamicFileList *) NULL)
{
- if (file_list == (DynamicFileList *) NULL)
- {
- file_list = (DynamicFileList *)
- malloc(sizeof(DynamicFileList));
- file_scanner = file_list;
- }
- else
- {
- file_tail->next = (DynamicFileList *)
- malloc(sizeof(DynamicFileList));
- file_scanner = file_tail->next;
- }
- MemSet((char *) file_scanner, 0, sizeof(DynamicFileList));
+ /*
+ * File not loaded yet.
+ */
+ file_scanner = (DynamicFileList *)
+ malloc(sizeof(DynamicFileList) + strlen(filename));
+ if (file_scanner == NULL)
+ elog(FATAL, "Out of memory in load_external_function");
+ MemSet((char *) file_scanner, 0, sizeof(DynamicFileList));
strcpy(file_scanner->filename, filename);
file_scanner->device = stat_buf.st_dev;
file_scanner->inode = stat_buf.st_ino;
@@ -210,42 +147,36 @@ handle_load(char *filename, char *funcname)
if (file_scanner->handle == (void *) NULL)
{
load_error = (char *) pg_dlerror();
- if (file_scanner == file_list)
- file_list = (DynamicFileList *) NULL;
- else
- file_tail->next = (DynamicFileList *) NULL;
-
free((char *) file_scanner);
elog(ERROR, "Load of file %s failed: %s", filename, load_error);
}
- /*
- * Just load the file - we are done with that so return.
- */
+ /* OK to link it into list */
+ if (file_list == (DynamicFileList *) NULL)
+ file_list = file_scanner;
+ else
+ file_tail->next = file_scanner;
file_tail = file_scanner;
-
- if (funcname == (char *) NULL)
- return (func_ptr) NULL;
}
- retval = (func_ptr) pg_dlsym(file_scanner->handle, funcname);
+ /*
+ * If funcname is NULL, we only wanted to load the file.
+ */
+ if (funcname == (char *) NULL)
+ return (PGFunction) NULL;
+
+ retval = pg_dlsym(file_scanner->handle, funcname);
- if (retval == (func_ptr) NULL)
+ if (retval == (PGFunction) NULL)
elog(ERROR, "Can't find function %s in file %s", funcname, filename);
return retval;
}
/*
- * This function loads files by the following:
- *
- * If the file is already loaded:
- * o Zero out that file's loaded space (so it doesn't screw up linking)
- * o Free all space associated with that file
- * o Free that file's descriptor.
- *
- * Now load the file by calling handle_load with a NULL argument as the
- * function.
+ * This function loads a shlib file without looking up any particular
+ * function in it. If the same shlib has previously been loaded,
+ * unload and reload it.
*/
void
load_file(char *filename)
@@ -253,7 +184,6 @@ load_file(char *filename)
DynamicFileList *file_scanner,
*p;
struct stat stat_buf;
- int done = 0;
/*
* We need to do stat() in order to determine whether this is the same
@@ -263,48 +193,32 @@ load_file(char *filename)
if (stat(filename, &stat_buf) == -1)
elog(ERROR, "LOAD: could not open file '%s': %m", filename);
- if (file_list != (DynamicFileList *) NULL
- && !NOT_EQUAL(stat_buf, *file_list))
+ if (file_list != (DynamicFileList *) NULL)
{
- file_scanner = file_list;
- file_list = file_list->next;
- pg_dlclose(file_scanner->handle);
- free((char *) file_scanner);
- }
- else if (file_list != (DynamicFileList *) NULL)
- {
- file_scanner = file_list;
- while (!done)
+ if (SAME_INODE(stat_buf, *file_list))
{
- if (file_scanner->next == (DynamicFileList *) NULL)
- done = 1;
- else if (!NOT_EQUAL(stat_buf, *(file_scanner->next)))
- done = 1;
- else
- file_scanner = file_scanner->next;
+ p = file_list;
+ file_list = p->next;
+ pg_dlclose(p->handle);
+ free((char *) p);
}
-
- if (file_scanner->next != (DynamicFileList *) NULL)
+ else
{
- p = file_scanner->next;
- file_scanner->next = file_scanner->next->next;
- pg_dlclose(file_scanner->handle);
- free((char *) p);
+ for (file_scanner = file_list;
+ file_scanner->next != (DynamicFileList *) NULL;
+ file_scanner = file_scanner->next)
+ {
+ if (SAME_INODE(stat_buf, *(file_scanner->next)))
+ {
+ p = file_scanner->next;
+ file_scanner->next = p->next;
+ pg_dlclose(p->handle);
+ free((char *) p);
+ break;
+ }
+ }
}
}
- handle_load(filename, (char *) NULL);
-}
-
-/* Is this used? bjm 1998/10/08 No. tgl 1999/02/07 */
-#ifdef NOT_USED
-func_ptr
-trigger_dynamic(char *filename, char *funcname)
-{
- func_ptr trigger_fn;
- trigger_fn = handle_load(filename, funcname);
-
- return trigger_fn;
+ load_external_function(filename, (char *) NULL);
}
-
-#endif
diff --git a/src/backend/utils/fmgr/fmgr.c b/src/backend/utils/fmgr/fmgr.c
index bdac32a2551..793497834fd 100644
--- a/src/backend/utils/fmgr/fmgr.c
+++ b/src/backend/utils/fmgr/fmgr.c
@@ -1,14 +1,14 @@
/*-------------------------------------------------------------------------
*
* fmgr.c
- * Interface routines for the table-driven function manager.
+ * The Postgres function manager.
*
* Portions Copyright (c) 1996-2000, PostgreSQL, Inc
* Portions Copyright (c) 1994, Regents of the University of California
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/utils/fmgr/fmgr.c,v 1.39 2000/05/22 02:34:22 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/utils/fmgr/fmgr.c,v 1.40 2000/05/28 17:56:07 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -17,112 +17,249 @@
#include "catalog/pg_language.h"
#include "catalog/pg_proc.h"
-#include "commands/trigger.h"
+#include "commands/trigger.h" /* TEMPORARY: for CurrentTriggerData */
#include "utils/builtins.h"
#include "utils/fmgrtab.h"
#include "utils/syscache.h"
+static Datum fmgr_oldstyle(PG_FUNCTION_ARGS);
+static Datum fmgr_untrusted(PG_FUNCTION_ARGS);
+static Datum fmgr_sql(PG_FUNCTION_ARGS);
+
/*
- * Interface for PL functions
- *
- * XXX: use of global fmgr_pl_finfo variable is really ugly. FIXME
+ * Lookup routines for builtin-function table. We can search by either Oid
+ * or name, but search by Oid is much faster.
*/
-FmgrInfo *fmgr_pl_finfo;
-static char *
-fmgr_pl(char *arg0,...)
+static const FmgrBuiltin *
+fmgr_isbuiltin(Oid id)
{
- va_list pvar;
- FmgrValues values;
- int n_arguments = fmgr_pl_finfo->fn_nargs;
- bool isNull = false;
- int i;
+ int low = 0;
+ int high = fmgr_nbuiltins - 1;
- memset(&values, 0, sizeof(values));
+ /* Loop invariant: low is the first index that could contain target
+ * entry, and high is the last index that could contain it.
+ */
+ while (low <= high)
+ {
+ int i = (high + low) / 2;
+ const FmgrBuiltin *ptr = &fmgr_builtins[i];
- if (n_arguments > 0)
+ if (id == ptr->foid)
+ return ptr;
+ else if (id > ptr->foid)
+ low = i + 1;
+ else
+ high = i - 1;
+ }
+ return (const FmgrBuiltin *) NULL;
+}
+
+/*
+ * Lookup a builtin by name. Note there can be more than one entry in
+ * the array with the same name, but they should all point to the same
+ * routine.
+ */
+static const FmgrBuiltin *
+fmgr_lookupByName(const char *name)
+{
+ int i;
+
+ for (i = 0; i < fmgr_nbuiltins; i++)
{
- values.data[0] = arg0;
- if (n_arguments > 1)
+ if (strcmp(name, fmgr_builtins[i].funcName) == 0)
+ return fmgr_builtins + i;
+ }
+ return (const FmgrBuiltin *) NULL;
+}
+
+/*
+ * This routine fills a FmgrInfo struct, given the OID
+ * of the function to be called.
+ */
+void
+fmgr_info(Oid functionId, FmgrInfo *finfo)
+{
+ const FmgrBuiltin *fbp;
+ HeapTuple procedureTuple;
+ Form_pg_proc procedureStruct;
+ HeapTuple languageTuple;
+ Form_pg_language languageStruct;
+ Oid language;
+ char *prosrc;
+
+ finfo->fn_oid = functionId;
+ finfo->fn_extra = NULL;
+
+ if ((fbp = fmgr_isbuiltin(functionId)) != NULL)
+ {
+ /*
+ * Fast path for builtin functions: don't bother consulting pg_proc
+ */
+ finfo->fn_nargs = fbp->nargs;
+ finfo->fn_strict = fbp->strict;
+ if (fbp->oldstyle)
{
- if (n_arguments > FUNC_MAX_ARGS)
- elog(ERROR, "fmgr_pl: function %u: too many arguments (%d > %d)",
- fmgr_pl_finfo->fn_oid, n_arguments, FUNC_MAX_ARGS);
- va_start(pvar, arg0);
- for (i = 1; i < n_arguments; i++)
- values.data[i] = va_arg(pvar, char *);
- va_end(pvar);
+ finfo->fn_addr = fmgr_oldstyle;
+ finfo->fn_extra = (void *) fbp->func;
}
+ else
+ {
+ finfo->fn_addr = fbp->func;
+ }
+ return;
}
- /* Call the PL handler */
- CurrentTriggerData = NULL;
- return (*(fmgr_pl_finfo->fn_plhandler)) (fmgr_pl_finfo,
- &values,
- &isNull);
-}
+ /* Otherwise we need the pg_proc entry */
+ procedureTuple = SearchSysCacheTuple(PROCOID,
+ ObjectIdGetDatum(functionId),
+ 0, 0, 0);
+ if (!HeapTupleIsValid(procedureTuple))
+ elog(ERROR, "fmgr_info: function %u: cache lookup failed",
+ functionId);
+ procedureStruct = (Form_pg_proc) GETSTRUCT(procedureTuple);
+ finfo->fn_nargs = procedureStruct->pronargs;
+ finfo->fn_strict = procedureStruct->proisstrict;
-/*
- * Interface for untrusted functions
- */
+ if (!procedureStruct->proistrusted)
+ {
+ finfo->fn_addr = fmgr_untrusted;
+ return;
+ }
-static char *
-fmgr_untrusted(char *arg0,...)
-{
+ language = procedureStruct->prolang;
+ switch (language)
+ {
+ case INTERNALlanguageId:
+ case NEWINTERNALlanguageId:
+ /*
+ * For an ordinary builtin function, we should never get
+ * here because the isbuiltin() search above will have
+ * succeeded. However, if the user has done a CREATE
+ * FUNCTION to create an alias for a builtin function, we
+ * can end up here. In that case we have to look up the
+ * function by name. The name of the internal function is
+ * stored in prosrc (it doesn't have to be the same as the
+ * name of the alias!)
+ */
+ prosrc = textout(&(procedureStruct->prosrc));
+ fbp = fmgr_lookupByName(prosrc);
+ if (fbp == NULL)
+ elog(ERROR, "fmgr_info: function %s not in internal table",
+ prosrc);
+ pfree(prosrc);
+ if (fbp->oldstyle)
+ {
+ finfo->fn_addr = fmgr_oldstyle;
+ finfo->fn_extra = (void *) fbp->func;
+ }
+ else
+ {
+ finfo->fn_addr = fbp->func;
+ }
+ break;
- /*
- * Currently these are unsupported. Someday we might do something
- * like forking a subprocess to execute 'em.
- */
- elog(ERROR, "Untrusted functions not supported.");
- return NULL; /* keep compiler happy */
+ case ClanguageId:
+ finfo->fn_addr = fmgr_oldstyle;
+ finfo->fn_extra = (void *) fmgr_dynamic(functionId);
+ break;
+
+ case NEWClanguageId:
+ finfo->fn_addr = fmgr_dynamic(functionId);
+ break;
+
+ case SQLlanguageId:
+ finfo->fn_addr = fmgr_sql;
+ break;
+
+ default:
+ /*
+ * Might be a created procedural language; try to look it up.
+ */
+ languageTuple = SearchSysCacheTuple(LANGOID,
+ ObjectIdGetDatum(language),
+ 0, 0, 0);
+ if (!HeapTupleIsValid(languageTuple))
+ {
+ elog(ERROR, "fmgr_info: cache lookup for language %u failed",
+ language);
+ }
+ languageStruct = (Form_pg_language) GETSTRUCT(languageTuple);
+ if (languageStruct->lanispl)
+ {
+ FmgrInfo plfinfo;
+
+ fmgr_info(languageStruct->lanplcallfoid, &plfinfo);
+ finfo->fn_addr = plfinfo.fn_addr;
+ /*
+ * If lookup of the PL handler function produced nonnull
+ * fn_extra, complain --- it must be an oldstyle function!
+ * We no longer support oldstyle PL handlers.
+ */
+ if (plfinfo.fn_extra != NULL)
+ elog(ERROR, "fmgr_info: language %u has old-style handler",
+ language);
+ }
+ else
+ {
+ elog(ERROR, "fmgr_info: function %u: unsupported language %u",
+ functionId, language);
+ }
+ break;
+ }
}
/*
- * Interface for SQL-language functions
+ * Specialized lookup routine for pg_proc.c: given the alleged name of
+ * an internal function, return the OID of the function's language.
+ * If the name is not known, return InvalidOid.
*/
-
-static char *
-fmgr_sql(char *arg0,...)
+Oid
+fmgr_internal_language(const char *proname)
{
+ const FmgrBuiltin *fbp = fmgr_lookupByName(proname);
- /*
- * XXX It'd be really nice to support SQL functions anywhere that
- * builtins are supported. What would we have to do? What pitfalls
- * are there?
- */
- elog(ERROR, "SQL-language function not supported in this context.");
- return NULL; /* keep compiler happy */
+ if (fbp == NULL)
+ return InvalidOid;
+ return fbp->oldstyle ? INTERNALlanguageId : NEWINTERNALlanguageId;
}
/*
- * fmgr_c is not really for C functions only; it can be called for functions
- * in any language. Many parts of the system use this entry point if they
- * want to pass the arguments in an array rather than as explicit arguments.
+ * Handler for old-style internal and "C" language functions
+ *
+ * We expect fmgr_info to have placed the old-style function's address
+ * in fn_extra of *flinfo. This is a bit of a hack since fn_extra is really
+ * void * which might be a different size than a pointer to function, but
+ * it will work on any machine that our old-style call interface works on...
*/
-
-char *
-fmgr_c(FmgrInfo *finfo,
- FmgrValues *values,
- bool *isNull)
+static Datum
+fmgr_oldstyle(PG_FUNCTION_ARGS)
{
- char *returnValue = (char *) NULL;
- int n_arguments = finfo->fn_nargs;
- func_ptr user_fn = fmgr_faddr(finfo);
+ char *returnValue = NULL;
+ int n_arguments = fcinfo->nargs;
+ int i;
+ bool isnull;
+ func_ptr user_fn;
+
+ if (fcinfo->flinfo == NULL || fcinfo->flinfo->fn_extra == NULL)
+ elog(ERROR, "Internal error: fmgr_oldstyle received NULL function pointer");
/*
- * If finfo contains a PL handler for this function, call that
- * instead.
+ * Result is NULL if any argument is NULL, but we still call the function
+ * (peculiar, but that's the way it worked before, and after all this is
+ * a backwards-compatibility wrapper). Note, however, that we'll never
+ * get here with NULL arguments if the function is marked strict.
*/
- if (finfo->fn_plhandler != NULL)
- return (*(finfo->fn_plhandler)) (finfo, values, isNull);
+ isnull = false;
+ for (i = 0; i < n_arguments; i++)
+ isnull |= PG_ARGISNULL(i);
+ fcinfo->isnull = isnull;
- if (user_fn == (func_ptr) NULL)
- elog(ERROR, "Internal error: fmgr_c received NULL function pointer.");
+ user_fn = (func_ptr) fcinfo->flinfo->fn_extra;
switch (n_arguments)
{
@@ -130,604 +267,1038 @@ fmgr_c(FmgrInfo *finfo,
returnValue = (*user_fn) ();
break;
case 1:
- /* NullValue() uses isNull to check if args[0] is NULL */
- returnValue = (*user_fn) (values->data[0], isNull);
+ /*
+ * nullvalue() used to use isNull to check if arg is NULL;
+ * perhaps there are other functions still out there that
+ * also rely on this undocumented hack?
+ */
+ returnValue = (*user_fn) (fcinfo->arg[0], & fcinfo->isnull);
break;
case 2:
- returnValue = (*user_fn) (values->data[0], values->data[1]);
+ returnValue = (*user_fn) (fcinfo->arg[0], fcinfo->arg[1]);
break;
case 3:
- returnValue = (*user_fn) (values->data[0], values->data[1],
- values->data[2]);
+ returnValue = (*user_fn) (fcinfo->arg[0], fcinfo->arg[1],
+ fcinfo->arg[2]);
break;
case 4:
- returnValue = (*user_fn) (values->data[0], values->data[1],
- values->data[2], values->data[3]);
+ returnValue = (*user_fn) (fcinfo->arg[0], fcinfo->arg[1],
+ fcinfo->arg[2], fcinfo->arg[3]);
break;
case 5:
- returnValue = (*user_fn) (values->data[0], values->data[1],
- values->data[2], values->data[3],
- values->data[4]);
+ returnValue = (*user_fn) (fcinfo->arg[0], fcinfo->arg[1],
+ fcinfo->arg[2], fcinfo->arg[3],
+ fcinfo->arg[4]);
break;
case 6:
- returnValue = (*user_fn) (values->data[0], values->data[1],
- values->data[2], values->data[3],
- values->data[4], values->data[5]);
+ returnValue = (*user_fn) (fcinfo->arg[0], fcinfo->arg[1],
+ fcinfo->arg[2], fcinfo->arg[3],
+ fcinfo->arg[4], fcinfo->arg[5]);
break;
case 7:
- returnValue = (*user_fn) (values->data[0], values->data[1],
- values->data[2], values->data[3],
- values->data[4], values->data[5],
- values->data[6]);
+ returnValue = (*user_fn) (fcinfo->arg[0], fcinfo->arg[1],
+ fcinfo->arg[2], fcinfo->arg[3],
+ fcinfo->arg[4], fcinfo->arg[5],
+ fcinfo->arg[6]);
break;
case 8:
- returnValue = (*user_fn) (values->data[0], values->data[1],
- values->data[2], values->data[3],
- values->data[4], values->data[5],
- values->data[6], values->data[7]);
+ returnValue = (*user_fn) (fcinfo->arg[0], fcinfo->arg[1],
+ fcinfo->arg[2], fcinfo->arg[3],
+ fcinfo->arg[4], fcinfo->arg[5],
+ fcinfo->arg[6], fcinfo->arg[7]);
break;
case 9:
- returnValue = (*user_fn) (values->data[0], values->data[1],
- values->data[2], values->data[3],
- values->data[4], values->data[5],
- values->data[6], values->data[7],
- values->data[8]);
+ returnValue = (*user_fn) (fcinfo->arg[0], fcinfo->arg[1],
+ fcinfo->arg[2], fcinfo->arg[3],
+ fcinfo->arg[4], fcinfo->arg[5],
+ fcinfo->arg[6], fcinfo->arg[7],
+ fcinfo->arg[8]);
break;
-#if FUNC_MAX_ARGS >= 10
case 10:
- returnValue = (*user_fn) (values->data[0], values->data[1],
- values->data[2], values->data[3],
- values->data[4], values->data[5],
- values->data[6], values->data[7],
- values->data[8], values->data[9]);
+ returnValue = (*user_fn) (fcinfo->arg[0], fcinfo->arg[1],
+ fcinfo->arg[2], fcinfo->arg[3],
+ fcinfo->arg[4], fcinfo->arg[5],
+ fcinfo->arg[6], fcinfo->arg[7],
+ fcinfo->arg[8], fcinfo->arg[9]);
break;
-#endif
-#if FUNC_MAX_ARGS >= 11
case 11:
- returnValue = (*user_fn) (values->data[0], values->data[1],
- values->data[2], values->data[3],
- values->data[4], values->data[5],
- values->data[6], values->data[7],
- values->data[8], values->data[9],
- values->data[10]);
+ returnValue = (*user_fn) (fcinfo->arg[0], fcinfo->arg[1],
+ fcinfo->arg[2], fcinfo->arg[3],
+ fcinfo->arg[4], fcinfo->arg[5],
+ fcinfo->arg[6], fcinfo->arg[7],
+ fcinfo->arg[8], fcinfo->arg[9],
+ fcinfo->arg[10]);
break;
-#endif
-#if FUNC_MAX_ARGS >= 12
case 12:
- returnValue = (*user_fn) (values->data[0], values->data[1],
- values->data[2], values->data[3],
- values->data[4], values->data[5],
- values->data[6], values->data[7],
- values->data[8], values->data[9],
- values->data[10], values->data[11]);
+ returnValue = (*user_fn) (fcinfo->arg[0], fcinfo->arg[1],
+ fcinfo->arg[2], fcinfo->arg[3],
+ fcinfo->arg[4], fcinfo->arg[5],
+ fcinfo->arg[6], fcinfo->arg[7],
+ fcinfo->arg[8], fcinfo->arg[9],
+ fcinfo->arg[10], fcinfo->arg[11]);
break;
-#endif
-#if FUNC_MAX_ARGS >= 13
case 13:
- returnValue = (*user_fn) (values->data[0], values->data[1],
- values->data[2], values->data[3],
- values->data[4], values->data[5],
- values->data[6], values->data[7],
- values->data[8], values->data[9],
- values->data[10], values->data[11],
- values->data[12]);
+ returnValue = (*user_fn) (fcinfo->arg[0], fcinfo->arg[1],
+ fcinfo->arg[2], fcinfo->arg[3],
+ fcinfo->arg[4], fcinfo->arg[5],
+ fcinfo->arg[6], fcinfo->arg[7],
+ fcinfo->arg[8], fcinfo->arg[9],
+ fcinfo->arg[10], fcinfo->arg[11],
+ fcinfo->arg[12]);
break;
-#endif
-#if FUNC_MAX_ARGS >= 14
case 14:
- returnValue = (*user_fn) (values->data[0], values->data[1],
- values->data[2], values->data[3],
- values->data[4], values->data[5],
- values->data[6], values->data[7],
- values->data[8], values->data[9],
- values->data[10], values->data[11],
- values->data[12], values->data[13]);
+ returnValue = (*user_fn) (fcinfo->arg[0], fcinfo->arg[1],
+ fcinfo->arg[2], fcinfo->arg[3],
+ fcinfo->arg[4], fcinfo->arg[5],
+ fcinfo->arg[6], fcinfo->arg[7],
+ fcinfo->arg[8], fcinfo->arg[9],
+ fcinfo->arg[10], fcinfo->arg[11],
+ fcinfo->arg[12], fcinfo->arg[13]);
break;
-#endif
-#if FUNC_MAX_ARGS >= 15
case 15:
- returnValue = (*user_fn) (values->data[0], values->data[1],
- values->data[2], values->data[3],
- values->data[4], values->data[5],
- values->data[6], values->data[7],
- values->data[8], values->data[9],
- values->data[10], values->data[11],
- values->data[12], values->data[13],
- values->data[14]);
+ returnValue = (*user_fn) (fcinfo->arg[0], fcinfo->arg[1],
+ fcinfo->arg[2], fcinfo->arg[3],
+ fcinfo->arg[4], fcinfo->arg[5],
+ fcinfo->arg[6], fcinfo->arg[7],
+ fcinfo->arg[8], fcinfo->arg[9],
+ fcinfo->arg[10], fcinfo->arg[11],
+ fcinfo->arg[12], fcinfo->arg[13],
+ fcinfo->arg[14]);
break;
-#endif
-#if FUNC_MAX_ARGS >= 16
case 16:
- returnValue = (*user_fn) (values->data[0], values->data[1],
- values->data[2], values->data[3],
- values->data[4], values->data[5],
- values->data[6], values->data[7],
- values->data[8], values->data[9],
- values->data[10], values->data[11],
- values->data[12], values->data[13],
- values->data[14], values->data[15]);
- break;
-#endif
-#if FUNC_MAX_ARGS >= 17
- case 17:
- returnValue = (*user_fn) (values->data[0], values->data[1],
- values->data[2], values->data[3],
- values->data[4], values->data[5],
- values->data[6], values->data[7],
- values->data[8], values->data[9],
- values->data[10], values->data[11],
- values->data[12], values->data[13],
- values->data[14], values->data[15],
- values->data[16]);
- break;
-#endif
-#if FUNC_MAX_ARGS >= 18
- case 18:
- returnValue = (*user_fn) (values->data[0], values->data[1],
- values->data[2], values->data[3],
- values->data[4], values->data[5],
- values->data[6], values->data[7],
- values->data[8], values->data[9],
- values->data[10], values->data[11],
- values->data[12], values->data[13],
- values->data[14], values->data[15],
- values->data[16], values->data[17]);
- break;
-#endif
-#if FUNC_MAX_ARGS >= 19
- case 19:
- returnValue = (*user_fn) (values->data[0], values->data[1],
- values->data[2], values->data[3],
- values->data[4], values->data[5],
- values->data[6], values->data[7],
- values->data[8], values->data[9],
- values->data[10], values->data[11],
- values->data[12], values->data[13],
- values->data[14], values->data[15],
- values->data[16], values->data[17],
- values->data[18]);
- break;
-#endif
-#if FUNC_MAX_ARGS >= 20
- case 20:
- returnValue = (*user_fn) (values->data[0], values->data[1],
- values->data[2], values->data[3],
- values->data[4], values->data[5],
- values->data[6], values->data[7],
- values->data[8], values->data[9],
- values->data[10], values->data[11],
- values->data[12], values->data[13],
- values->data[14], values->data[15],
- values->data[16], values->data[17],
- values->data[18], values->data[19]);
- break;
-#endif
-#if FUNC_MAX_ARGS >= 21
- case 21:
- returnValue = (*user_fn) (values->data[0], values->data[1],
- values->data[2], values->data[3],
- values->data[4], values->data[5],
- values->data[6], values->data[7],
- values->data[8], values->data[9],
- values->data[10], values->data[11],
- values->data[12], values->data[13],
- values->data[14], values->data[15],
- values->data[16], values->data[17],
- values->data[18], values->data[19],
- values->data[20]);
- break;
-#endif
-#if FUNC_MAX_ARGS >= 22
- case 22:
- returnValue = (*user_fn) (values->data[0], values->data[1],
- values->data[2], values->data[3],
- values->data[4], values->data[5],
- values->data[6], values->data[7],
- values->data[8], values->data[9],
- values->data[10], values->data[11],
- values->data[12], values->data[13],
- values->data[14], values->data[15],
- values->data[16], values->data[17],
- values->data[18], values->data[19],
- values->data[20], values->data[21]);
- break;
-#endif
-#if FUNC_MAX_ARGS >= 23
- case 23:
- returnValue = (*user_fn) (values->data[0], values->data[1],
- values->data[2], values->data[3],
- values->data[4], values->data[5],
- values->data[6], values->data[7],
- values->data[8], values->data[9],
- values->data[10], values->data[11],
- values->data[12], values->data[13],
- values->data[14], values->data[15],
- values->data[16], values->data[17],
- values->data[18], values->data[19],
- values->data[20], values->data[21],
- values->data[22]);
- break;
-#endif
-#if FUNC_MAX_ARGS >= 24
- case 24:
- returnValue = (*user_fn) (values->data[0], values->data[1],
- values->data[2], values->data[3],
- values->data[4], values->data[5],
- values->data[6], values->data[7],
- values->data[8], values->data[9],
- values->data[10], values->data[11],
- values->data[12], values->data[13],
- values->data[14], values->data[15],
- values->data[16], values->data[17],
- values->data[18], values->data[19],
- values->data[20], values->data[21],
- values->data[22], values->data[23]);
- break;
-#endif
-#if FUNC_MAX_ARGS >= 25
- case 25:
- returnValue = (*user_fn) (values->data[0], values->data[1],
- values->data[2], values->data[3],
- values->data[4], values->data[5],
- values->data[6], values->data[7],
- values->data[8], values->data[9],
- values->data[10], values->data[11],
- values->data[12], values->data[13],
- values->data[14], values->data[15],
- values->data[16], values->data[17],
- values->data[18], values->data[19],
- values->data[20], values->data[21],
- values->data[22], values->data[23],
- values->data[24]);
- break;
-#endif
-#if FUNC_MAX_ARGS >= 26
- case 26:
- returnValue = (*user_fn) (values->data[0], values->data[1],
- values->data[2], values->data[3],
- values->data[4], values->data[5],
- values->data[6], values->data[7],
- values->data[8], values->data[9],
- values->data[10], values->data[11],
- values->data[12], values->data[13],
- values->data[14], values->data[15],
- values->data[16], values->data[17],
- values->data[18], values->data[19],
- values->data[20], values->data[21],
- values->data[22], values->data[23],
- values->data[24], values->data[25]);
+ returnValue = (*user_fn) (fcinfo->arg[0], fcinfo->arg[1],
+ fcinfo->arg[2], fcinfo->arg[3],
+ fcinfo->arg[4], fcinfo->arg[5],
+ fcinfo->arg[6], fcinfo->arg[7],
+ fcinfo->arg[8], fcinfo->arg[9],
+ fcinfo->arg[10], fcinfo->arg[11],
+ fcinfo->arg[12], fcinfo->arg[13],
+ fcinfo->arg[14], fcinfo->arg[15]);
break;
-#endif
-#if FUNC_MAX_ARGS >= 27
- case 27:
- returnValue = (*user_fn) (values->data[0], values->data[1],
- values->data[2], values->data[3],
- values->data[4], values->data[5],
- values->data[6], values->data[7],
- values->data[8], values->data[9],
- values->data[10], values->data[11],
- values->data[12], values->data[13],
- values->data[14], values->data[15],
- values->data[16], values->data[17],
- values->data[18], values->data[19],
- values->data[20], values->data[21],
- values->data[22], values->data[23],
- values->data[24], values->data[25],
- values->data[26]);
- break;
-#endif
-#if FUNC_MAX_ARGS >= 28
- case 28:
- returnValue = (*user_fn) (values->data[0], values->data[1],
- values->data[2], values->data[3],
- values->data[4], values->data[5],
- values->data[6], values->data[7],
- values->data[8], values->data[9],
- values->data[10], values->data[11],
- values->data[12], values->data[13],
- values->data[14], values->data[15],
- values->data[16], values->data[17],
- values->data[18], values->data[19],
- values->data[20], values->data[21],
- values->data[22], values->data[23],
- values->data[24], values->data[25],
- values->data[26], values->data[27]);
- break;
-#endif
-#if FUNC_MAX_ARGS >= 29
- case 29:
- returnValue = (*user_fn) (values->data[0], values->data[1],
- values->data[2], values->data[3],
- values->data[4], values->data[5],
- values->data[6], values->data[7],
- values->data[8], values->data[9],
- values->data[10], values->data[11],
- values->data[12], values->data[13],
- values->data[14], values->data[15],
- values->data[16], values->data[17],
- values->data[18], values->data[19],
- values->data[20], values->data[21],
- values->data[22], values->data[23],
- values->data[24], values->data[25],
- values->data[26], values->data[27],
- values->data[28]);
- break;
-#endif
-#if FUNC_MAX_ARGS >= 30
- case 30:
- returnValue = (*user_fn) (values->data[0], values->data[1],
- values->data[2], values->data[3],
- values->data[4], values->data[5],
- values->data[6], values->data[7],
- values->data[8], values->data[9],
- values->data[10], values->data[11],
- values->data[12], values->data[13],
- values->data[14], values->data[15],
- values->data[16], values->data[17],
- values->data[18], values->data[19],
- values->data[20], values->data[21],
- values->data[22], values->data[23],
- values->data[24], values->data[25],
- values->data[26], values->data[27],
- values->data[28], values->data[29]);
- break;
-#endif
-#if FUNC_MAX_ARGS >= 31
- case 31:
- returnValue = (*user_fn) (values->data[0], values->data[1],
- values->data[2], values->data[3],
- values->data[4], values->data[5],
- values->data[6], values->data[7],
- values->data[8], values->data[9],
- values->data[10], values->data[11],
- values->data[12], values->data[13],
- values->data[14], values->data[15],
- values->data[16], values->data[17],
- values->data[18], values->data[19],
- values->data[20], values->data[21],
- values->data[22], values->data[23],
- values->data[24], values->data[25],
- values->data[26], values->data[27],
- values->data[28], values->data[29],
- values->data[30]);
- break;
-#endif
-#if FUNC_MAX_ARGS >= 32
- case 32:
- returnValue = (*user_fn) (values->data[0], values->data[1],
- values->data[2], values->data[3],
- values->data[4], values->data[5],
- values->data[6], values->data[7],
- values->data[8], values->data[9],
- values->data[10], values->data[11],
- values->data[12], values->data[13],
- values->data[14], values->data[15],
- values->data[16], values->data[17],
- values->data[18], values->data[19],
- values->data[20], values->data[21],
- values->data[22], values->data[23],
- values->data[24], values->data[25],
- values->data[26], values->data[27],
- values->data[28], values->data[29],
- values->data[30], values->data[31]);
- break;
-#endif
default:
- elog(ERROR, "fmgr_c: function %u: too many arguments (%d > %d)",
- finfo->fn_oid, n_arguments, FUNC_MAX_ARGS);
+ /*
+ * Increasing FUNC_MAX_ARGS doesn't automatically add cases
+ * to the above code, so give the actual value in this error
+ * not FUNC_MAX_ARGS. You could add cases to the above if you
+ * needed to support old-style functions with many arguments,
+ * but making 'em be new-style is probably a better idea.
+ */
+ elog(ERROR, "fmgr_oldstyle: function %u: too many arguments (%d > %d)",
+ fcinfo->flinfo->fn_oid, n_arguments, 16);
break;
}
- return returnValue;
+
+ return (Datum) returnValue;
}
+
/*
- * Expand a regproc OID into an FmgrInfo cache struct.
+ * Handler for all functions marked "untrusted"
*/
+static Datum
+fmgr_untrusted(PG_FUNCTION_ARGS)
+{
+ /*
+ * Currently these are unsupported. Someday we might do something
+ * like forking a subprocess to execute 'em.
+ */
+ elog(ERROR, "Untrusted functions not supported");
+ return 0; /* keep compiler happy */
+}
-void
-fmgr_info(Oid procedureId, FmgrInfo *finfo)
+/*
+ * Handler for SQL-language functions
+ */
+static Datum
+fmgr_sql(PG_FUNCTION_ARGS)
{
- FmgrCall *fcp;
- HeapTuple procedureTuple;
- FormData_pg_proc *procedureStruct;
- HeapTuple languageTuple;
- Form_pg_language languageStruct;
- Oid language;
- char *prosrc;
+ /*
+ * XXX It'd be really nice to support SQL functions anywhere that
+ * builtins are supported. What would we have to do? What pitfalls
+ * are there?
+ */
+ elog(ERROR, "SQL-language function not supported in this context");
+ return 0; /* keep compiler happy */
+}
- finfo->fn_addr = NULL;
- finfo->fn_plhandler = NULL;
- finfo->fn_oid = procedureId;
+/*
+ * Interface routine for functions using fmgr_faddr
+ */
+FmgrInfo *fmgr_pl_finfo; /* should GO AWAY */
- if ((fcp = fmgr_isbuiltin(procedureId)) != NULL)
- {
+char *
+fmgr_faddr_link(char *arg0, ...)
+{
+ FunctionCallInfoData fcinfo;
+ int n_arguments;
+ Datum result;
- /*
- * Fast path for builtin functions: don't bother consulting
- * pg_proc
- */
- finfo->fn_addr = fcp->func;
- finfo->fn_nargs = fcp->nargs;
- }
- else
+ MemSet(&fcinfo, 0, sizeof(fcinfo));
+ /* We rely on fmgr_faddr macro to have set back-link to FmgrInfo (ugh) */
+ fcinfo.flinfo = fmgr_pl_finfo;
+ fcinfo.nargs = fcinfo.flinfo->fn_nargs;
+ n_arguments = fcinfo.nargs;
+
+ if (n_arguments > 0)
{
- procedureTuple = SearchSysCacheTuple(PROCOID,
- ObjectIdGetDatum(procedureId),
- 0, 0, 0);
- if (!HeapTupleIsValid(procedureTuple))
- {
- elog(ERROR, "fmgr_info: function %u: cache lookup failed",
- procedureId);
- }
- procedureStruct = (FormData_pg_proc *) GETSTRUCT(procedureTuple);
- if (!procedureStruct->proistrusted)
- {
- finfo->fn_addr = (func_ptr) fmgr_untrusted;
- finfo->fn_nargs = procedureStruct->pronargs;
- return;
- }
- language = procedureStruct->prolang;
- switch (language)
+ fcinfo.arg[0] = (Datum) arg0;
+ if (n_arguments > 1)
{
- case INTERNALlanguageId:
-
- /*
- * For an ordinary builtin function, we should never get
- * here because the isbuiltin() search above will have
- * succeeded. However, if the user has done a CREATE
- * FUNCTION to create an alias for a builtin function, we
- * end up here. In that case we have to look up the
- * function by name. The name of the internal function is
- * stored in prosrc (it doesn't have to be the same as the
- * name of the alias!)
- */
- prosrc = textout(&(procedureStruct->prosrc));
- finfo->fn_addr = fmgr_lookupByName(prosrc);
- if (!finfo->fn_addr)
- elog(ERROR, "fmgr_info: function %s not in internal table",
- prosrc);
- finfo->fn_nargs = procedureStruct->pronargs;
- pfree(prosrc);
- break;
- case ClanguageId:
- finfo->fn_addr = fmgr_dynamic(procedureId, &(finfo->fn_nargs));
- break;
- case SQLlanguageId:
- finfo->fn_addr = (func_ptr) fmgr_sql;
- finfo->fn_nargs = procedureStruct->pronargs;
- break;
- default:
+ va_list pvar;
+ int i;
- /*
- * Might be a created procedural language Lookup the
- * syscache for the language and check the lanispl flag If
- * this is the case, we return a NULL function pointer and
- * the number of arguments from the procedure.
- */
- languageTuple = SearchSysCacheTuple(LANGOID,
- ObjectIdGetDatum(procedureStruct->prolang),
- 0, 0, 0);
- if (!HeapTupleIsValid(languageTuple))
- {
- elog(ERROR, "fmgr_info: %s %u",
- "Cache lookup for language failed",
- DatumGetObjectId(procedureStruct->prolang));
- }
- languageStruct = (Form_pg_language) GETSTRUCT(languageTuple);
- if (languageStruct->lanispl)
- {
- FmgrInfo plfinfo;
-
- fmgr_info(languageStruct->lanplcallfoid, &plfinfo);
- finfo->fn_addr = (func_ptr) fmgr_pl;
- finfo->fn_plhandler = plfinfo.fn_addr;
- finfo->fn_nargs = procedureStruct->pronargs;
- }
- else
- {
- elog(ERROR, "fmgr_info: function %u: unknown language %d",
- procedureId, language);
- }
- break;
+ if (n_arguments > FUNC_MAX_ARGS)
+ elog(ERROR, "fmgr_faddr_link: function %u: too many arguments (%d > %d)",
+ fcinfo.flinfo->fn_oid, n_arguments, FUNC_MAX_ARGS);
+ va_start(pvar, arg0);
+ for (i = 1; i < n_arguments; i++)
+ fcinfo.arg[i] = (Datum) va_arg(pvar, char *);
+ va_end(pvar);
}
}
+
+ result = FunctionCallInvoke(&fcinfo);
+
+ /* Check for null result, since caller is clearly not expecting one */
+ if (fcinfo.isnull)
+ elog(ERROR, "fmgr_faddr_link: function %u returned NULL",
+ fcinfo.flinfo->fn_oid);
+
+ return (char *) result;
}
/*
* fmgr - return the value of a function call
*
- * If the function is a system routine, it's compiled in, so call
- * it directly.
- *
- * Otherwise pass it to the the appropriate 'language' function caller.
- *
- * Returns the return value of the invoked function if succesful,
- * 0 if unsuccessful.
+ * This is essentially fmgr_info plus call the function.
*/
char *
fmgr(Oid procedureId,...)
{
- va_list pvar;
- int i;
- int pronargs;
- FmgrValues values;
- FmgrInfo finfo;
- bool isNull = false;
+ FmgrInfo flinfo;
+ FunctionCallInfoData fcinfo;
+ int n_arguments;
+ Datum result;
+
+ fmgr_info(procedureId, &flinfo);
+
+ MemSet(&fcinfo, 0, sizeof(fcinfo));
+ fcinfo.flinfo = &flinfo;
+ fcinfo.nargs = flinfo.fn_nargs;
+ n_arguments = fcinfo.nargs;
+
+ if (n_arguments > 0)
+ {
+ va_list pvar;
+ int i;
- fmgr_info(procedureId, &finfo);
- pronargs = finfo.fn_nargs;
+ if (n_arguments > FUNC_MAX_ARGS)
+ elog(ERROR, "fmgr: function %u: too many arguments (%d > %d)",
+ flinfo.fn_oid, n_arguments, FUNC_MAX_ARGS);
+ va_start(pvar, procedureId);
+ for (i = 0; i < n_arguments; i++)
+ fcinfo.arg[i] = (Datum) va_arg(pvar, char *);
+ va_end(pvar);
+ }
- if (pronargs > FUNC_MAX_ARGS)
- elog(ERROR, "fmgr: function %u: too many arguments (%d > %d)",
- procedureId, pronargs, FUNC_MAX_ARGS);
+ result = FunctionCallInvoke(&fcinfo);
- va_start(pvar, procedureId);
- for (i = 0; i < pronargs; ++i)
- values.data[i] = va_arg(pvar, char *);
- va_end(pvar);
+ /* Check for null result, since caller is clearly not expecting one */
+ if (fcinfo.isnull)
+ elog(ERROR, "fmgr: function %u returned NULL",
+ flinfo.fn_oid);
- /* XXX see WAY_COOL_ORTHOGONAL_FUNCTIONS */
- return fmgr_c(&finfo, &values, &isNull);
+ return (char *) result;
}
-/*
- * This is just a version of fmgr() in which the hacker can prepend a C
- * function pointer. This routine is not normally called; generally,
- * if you have all of this information you're likely to just jump through
- * the pointer, but it's available for use with macros in fmgr.h if you
- * want this routine to do sanity-checking for you.
- *
- * funcinfo, n_arguments, args...
+
+/*-------------------------------------------------------------------------
+ * Support routines for callers of fmgr-compatible functions
+ *-------------------------------------------------------------------------
*/
-#ifdef TRACE_FMGR_PTR
-char *
-fmgr_ptr(FmgrInfo *finfo,...)
+/* These are for invocation of a specifically named function with a
+ * directly-computed parameter list. Note that neither arguments nor result
+ * are allowed to be NULL. Also, the function cannot be one that needs to
+ * look at FmgrInfo, since there won't be any.
+ */
+Datum
+DirectFunctionCall1(PGFunction func, Datum arg1)
{
- va_list pvar;
- int i;
- int n_arguments;
- FmgrInfo local_finfo;
- FmgrValues values;
- bool isNull = false;
-
- local_finfo->fn_addr = finfo->fn_addr;
- local_finfo->fn_plhandler = finfo->fn_plhandler;
- local_finfo->fn_oid = finfo->fn_oid;
-
- va_start(pvar, finfo);
- n_arguments = va_arg(pvar, int);
- local_finfo->fn_nargs = n_arguments;
- if (n_arguments > FUNC_MAX_ARGS)
- {
- elog(ERROR, "fmgr_ptr: function %u: too many arguments (%d > %d)",
- func_id, n_arguments, FUNC_MAX_ARGS);
- }
- for (i = 0; i < n_arguments; ++i)
- values.data[i] = va_arg(pvar, char *);
- va_end(pvar);
+ FunctionCallInfoData fcinfo;
+ Datum result;
+
+ MemSet(&fcinfo, 0, sizeof(fcinfo));
+ fcinfo.nargs = 1;
+ fcinfo.arg[0] = arg1;
- /* XXX see WAY_COOL_ORTHOGONAL_FUNCTIONS */
- return fmgr_c(&local_finfo, &values, &isNull);
+ result = (* func) (&fcinfo);
+
+ /* Check for null result, since caller is clearly not expecting one */
+ if (fcinfo.isnull)
+ elog(ERROR, "DirectFunctionCall1: function %p returned NULL",
+ (void *) func);
+
+ return result;
}
-#endif
+Datum
+DirectFunctionCall2(PGFunction func, Datum arg1, Datum arg2)
+{
+ FunctionCallInfoData fcinfo;
+ Datum result;
-/*
- * This routine is not well thought out. When I get around to adding a
- * function pointer field to FuncIndexInfo, it will be replace by calls
- * to fmgr_c().
+ MemSet(&fcinfo, 0, sizeof(fcinfo));
+ fcinfo.nargs = 2;
+ fcinfo.arg[0] = arg1;
+ fcinfo.arg[1] = arg2;
+
+ result = (* func) (&fcinfo);
+
+ /* Check for null result, since caller is clearly not expecting one */
+ if (fcinfo.isnull)
+ elog(ERROR, "DirectFunctionCall2: function %p returned NULL",
+ (void *) func);
+
+ return result;
+}
+
+Datum
+DirectFunctionCall3(PGFunction func, Datum arg1, Datum arg2,
+ Datum arg3)
+{
+ FunctionCallInfoData fcinfo;
+ Datum result;
+
+ MemSet(&fcinfo, 0, sizeof(fcinfo));
+ fcinfo.nargs = 3;
+ fcinfo.arg[0] = arg1;
+ fcinfo.arg[1] = arg2;
+ fcinfo.arg[2] = arg3;
+
+ result = (* func) (&fcinfo);
+
+ /* Check for null result, since caller is clearly not expecting one */
+ if (fcinfo.isnull)
+ elog(ERROR, "DirectFunctionCall3: function %p returned NULL",
+ (void *) func);
+
+ return result;
+}
+
+Datum
+DirectFunctionCall4(PGFunction func, Datum arg1, Datum arg2,
+ Datum arg3, Datum arg4)
+{
+ FunctionCallInfoData fcinfo;
+ Datum result;
+
+ MemSet(&fcinfo, 0, sizeof(fcinfo));
+ fcinfo.nargs = 4;
+ fcinfo.arg[0] = arg1;
+ fcinfo.arg[1] = arg2;
+ fcinfo.arg[2] = arg3;
+ fcinfo.arg[3] = arg4;
+
+ result = (* func) (&fcinfo);
+
+ /* Check for null result, since caller is clearly not expecting one */
+ if (fcinfo.isnull)
+ elog(ERROR, "DirectFunctionCall4: function %p returned NULL",
+ (void *) func);
+
+ return result;
+}
+
+Datum
+DirectFunctionCall5(PGFunction func, Datum arg1, Datum arg2,
+ Datum arg3, Datum arg4, Datum arg5)
+{
+ FunctionCallInfoData fcinfo;
+ Datum result;
+
+ MemSet(&fcinfo, 0, sizeof(fcinfo));
+ fcinfo.nargs = 5;
+ fcinfo.arg[0] = arg1;
+ fcinfo.arg[1] = arg2;
+ fcinfo.arg[2] = arg3;
+ fcinfo.arg[3] = arg4;
+ fcinfo.arg[4] = arg5;
+
+ result = (* func) (&fcinfo);
+
+ /* Check for null result, since caller is clearly not expecting one */
+ if (fcinfo.isnull)
+ elog(ERROR, "DirectFunctionCall5: function %p returned NULL",
+ (void *) func);
+
+ return result;
+}
+
+Datum
+DirectFunctionCall6(PGFunction func, Datum arg1, Datum arg2,
+ Datum arg3, Datum arg4, Datum arg5,
+ Datum arg6)
+{
+ FunctionCallInfoData fcinfo;
+ Datum result;
+
+ MemSet(&fcinfo, 0, sizeof(fcinfo));
+ fcinfo.nargs = 6;
+ fcinfo.arg[0] = arg1;
+ fcinfo.arg[1] = arg2;
+ fcinfo.arg[2] = arg3;
+ fcinfo.arg[3] = arg4;
+ fcinfo.arg[4] = arg5;
+ fcinfo.arg[5] = arg6;
+
+ result = (* func) (&fcinfo);
+
+ /* Check for null result, since caller is clearly not expecting one */
+ if (fcinfo.isnull)
+ elog(ERROR, "DirectFunctionCall6: function %p returned NULL",
+ (void *) func);
+
+ return result;
+}
+
+Datum
+DirectFunctionCall7(PGFunction func, Datum arg1, Datum arg2,
+ Datum arg3, Datum arg4, Datum arg5,
+ Datum arg6, Datum arg7)
+{
+ FunctionCallInfoData fcinfo;
+ Datum result;
+
+ MemSet(&fcinfo, 0, sizeof(fcinfo));
+ fcinfo.nargs = 7;
+ fcinfo.arg[0] = arg1;
+ fcinfo.arg[1] = arg2;
+ fcinfo.arg[2] = arg3;
+ fcinfo.arg[3] = arg4;
+ fcinfo.arg[4] = arg5;
+ fcinfo.arg[5] = arg6;
+ fcinfo.arg[6] = arg7;
+
+ result = (* func) (&fcinfo);
+
+ /* Check for null result, since caller is clearly not expecting one */
+ if (fcinfo.isnull)
+ elog(ERROR, "DirectFunctionCall7: function %p returned NULL",
+ (void *) func);
+
+ return result;
+}
+
+Datum
+DirectFunctionCall8(PGFunction func, Datum arg1, Datum arg2,
+ Datum arg3, Datum arg4, Datum arg5,
+ Datum arg6, Datum arg7, Datum arg8)
+{
+ FunctionCallInfoData fcinfo;
+ Datum result;
+
+ MemSet(&fcinfo, 0, sizeof(fcinfo));
+ fcinfo.nargs = 8;
+ fcinfo.arg[0] = arg1;
+ fcinfo.arg[1] = arg2;
+ fcinfo.arg[2] = arg3;
+ fcinfo.arg[3] = arg4;
+ fcinfo.arg[4] = arg5;
+ fcinfo.arg[5] = arg6;
+ fcinfo.arg[6] = arg7;
+ fcinfo.arg[7] = arg8;
+
+ result = (* func) (&fcinfo);
+
+ /* Check for null result, since caller is clearly not expecting one */
+ if (fcinfo.isnull)
+ elog(ERROR, "DirectFunctionCall8: function %p returned NULL",
+ (void *) func);
+
+ return result;
+}
+
+Datum
+DirectFunctionCall9(PGFunction func, Datum arg1, Datum arg2,
+ Datum arg3, Datum arg4, Datum arg5,
+ Datum arg6, Datum arg7, Datum arg8,
+ Datum arg9)
+{
+ FunctionCallInfoData fcinfo;
+ Datum result;
+
+ MemSet(&fcinfo, 0, sizeof(fcinfo));
+ fcinfo.nargs = 9;
+ fcinfo.arg[0] = arg1;
+ fcinfo.arg[1] = arg2;
+ fcinfo.arg[2] = arg3;
+ fcinfo.arg[3] = arg4;
+ fcinfo.arg[4] = arg5;
+ fcinfo.arg[5] = arg6;
+ fcinfo.arg[6] = arg7;
+ fcinfo.arg[7] = arg8;
+ fcinfo.arg[8] = arg9;
+
+ result = (* func) (&fcinfo);
+
+ /* Check for null result, since caller is clearly not expecting one */
+ if (fcinfo.isnull)
+ elog(ERROR, "DirectFunctionCall9: function %p returned NULL",
+ (void *) func);
+
+ return result;
+}
+
+
+/* These are for invocation of a previously-looked-up function with a
+ * directly-computed parameter list. Note that neither arguments nor result
+ * are allowed to be NULL.
*/
-char *
-fmgr_array_args(Oid procedureId, int nargs, char *args[], bool *isNull)
+Datum
+FunctionCall1(FmgrInfo *flinfo, Datum arg1)
+{
+ FunctionCallInfoData fcinfo;
+ Datum result;
+
+ MemSet(&fcinfo, 0, sizeof(fcinfo));
+ fcinfo.flinfo = flinfo;
+ fcinfo.nargs = 1;
+ fcinfo.arg[0] = arg1;
+
+ result = FunctionCallInvoke(&fcinfo);
+
+ /* Check for null result, since caller is clearly not expecting one */
+ if (fcinfo.isnull)
+ elog(ERROR, "FunctionCall1: function %u returned NULL",
+ fcinfo.flinfo->fn_oid);
+
+ return result;
+}
+
+Datum
+FunctionCall2(FmgrInfo *flinfo, Datum arg1, Datum arg2)
+{
+ FunctionCallInfoData fcinfo;
+ Datum result;
+
+ MemSet(&fcinfo, 0, sizeof(fcinfo));
+ fcinfo.flinfo = flinfo;
+ fcinfo.nargs = 2;
+ fcinfo.arg[0] = arg1;
+ fcinfo.arg[1] = arg2;
+
+ result = FunctionCallInvoke(&fcinfo);
+
+ /* Check for null result, since caller is clearly not expecting one */
+ if (fcinfo.isnull)
+ elog(ERROR, "FunctionCall2: function %u returned NULL",
+ fcinfo.flinfo->fn_oid);
+
+ return result;
+}
+
+Datum
+FunctionCall3(FmgrInfo *flinfo, Datum arg1, Datum arg2,
+ Datum arg3)
+{
+ FunctionCallInfoData fcinfo;
+ Datum result;
+
+ MemSet(&fcinfo, 0, sizeof(fcinfo));
+ fcinfo.flinfo = flinfo;
+ fcinfo.nargs = 3;
+ fcinfo.arg[0] = arg1;
+ fcinfo.arg[1] = arg2;
+ fcinfo.arg[2] = arg3;
+
+ result = FunctionCallInvoke(&fcinfo);
+
+ /* Check for null result, since caller is clearly not expecting one */
+ if (fcinfo.isnull)
+ elog(ERROR, "FunctionCall3: function %u returned NULL",
+ fcinfo.flinfo->fn_oid);
+
+ return result;
+}
+
+Datum
+FunctionCall4(FmgrInfo *flinfo, Datum arg1, Datum arg2,
+ Datum arg3, Datum arg4)
+{
+ FunctionCallInfoData fcinfo;
+ Datum result;
+
+ MemSet(&fcinfo, 0, sizeof(fcinfo));
+ fcinfo.flinfo = flinfo;
+ fcinfo.nargs = 4;
+ fcinfo.arg[0] = arg1;
+ fcinfo.arg[1] = arg2;
+ fcinfo.arg[2] = arg3;
+ fcinfo.arg[3] = arg4;
+
+ result = FunctionCallInvoke(&fcinfo);
+
+ /* Check for null result, since caller is clearly not expecting one */
+ if (fcinfo.isnull)
+ elog(ERROR, "FunctionCall4: function %u returned NULL",
+ fcinfo.flinfo->fn_oid);
+
+ return result;
+}
+
+Datum
+FunctionCall5(FmgrInfo *flinfo, Datum arg1, Datum arg2,
+ Datum arg3, Datum arg4, Datum arg5)
+{
+ FunctionCallInfoData fcinfo;
+ Datum result;
+
+ MemSet(&fcinfo, 0, sizeof(fcinfo));
+ fcinfo.flinfo = flinfo;
+ fcinfo.nargs = 5;
+ fcinfo.arg[0] = arg1;
+ fcinfo.arg[1] = arg2;
+ fcinfo.arg[2] = arg3;
+ fcinfo.arg[3] = arg4;
+ fcinfo.arg[4] = arg5;
+
+ result = FunctionCallInvoke(&fcinfo);
+
+ /* Check for null result, since caller is clearly not expecting one */
+ if (fcinfo.isnull)
+ elog(ERROR, "FunctionCall5: function %u returned NULL",
+ fcinfo.flinfo->fn_oid);
+
+ return result;
+}
+
+Datum
+FunctionCall6(FmgrInfo *flinfo, Datum arg1, Datum arg2,
+ Datum arg3, Datum arg4, Datum arg5,
+ Datum arg6)
+{
+ FunctionCallInfoData fcinfo;
+ Datum result;
+
+ MemSet(&fcinfo, 0, sizeof(fcinfo));
+ fcinfo.flinfo = flinfo;
+ fcinfo.nargs = 6;
+ fcinfo.arg[0] = arg1;
+ fcinfo.arg[1] = arg2;
+ fcinfo.arg[2] = arg3;
+ fcinfo.arg[3] = arg4;
+ fcinfo.arg[4] = arg5;
+ fcinfo.arg[5] = arg6;
+
+ result = FunctionCallInvoke(&fcinfo);
+
+ /* Check for null result, since caller is clearly not expecting one */
+ if (fcinfo.isnull)
+ elog(ERROR, "FunctionCall6: function %u returned NULL",
+ fcinfo.flinfo->fn_oid);
+
+ return result;
+}
+
+Datum
+FunctionCall7(FmgrInfo *flinfo, Datum arg1, Datum arg2,
+ Datum arg3, Datum arg4, Datum arg5,
+ Datum arg6, Datum arg7)
{
- FmgrInfo finfo;
+ FunctionCallInfoData fcinfo;
+ Datum result;
+
+ MemSet(&fcinfo, 0, sizeof(fcinfo));
+ fcinfo.flinfo = flinfo;
+ fcinfo.nargs = 7;
+ fcinfo.arg[0] = arg1;
+ fcinfo.arg[1] = arg2;
+ fcinfo.arg[2] = arg3;
+ fcinfo.arg[3] = arg4;
+ fcinfo.arg[4] = arg5;
+ fcinfo.arg[5] = arg6;
+ fcinfo.arg[6] = arg7;
+
+ result = FunctionCallInvoke(&fcinfo);
+
+ /* Check for null result, since caller is clearly not expecting one */
+ if (fcinfo.isnull)
+ elog(ERROR, "FunctionCall7: function %u returned NULL",
+ fcinfo.flinfo->fn_oid);
+
+ return result;
+}
+
+Datum
+FunctionCall8(FmgrInfo *flinfo, Datum arg1, Datum arg2,
+ Datum arg3, Datum arg4, Datum arg5,
+ Datum arg6, Datum arg7, Datum arg8)
+{
+ FunctionCallInfoData fcinfo;
+ Datum result;
+
+ MemSet(&fcinfo, 0, sizeof(fcinfo));
+ fcinfo.flinfo = flinfo;
+ fcinfo.nargs = 8;
+ fcinfo.arg[0] = arg1;
+ fcinfo.arg[1] = arg2;
+ fcinfo.arg[2] = arg3;
+ fcinfo.arg[3] = arg4;
+ fcinfo.arg[4] = arg5;
+ fcinfo.arg[5] = arg6;
+ fcinfo.arg[6] = arg7;
+ fcinfo.arg[7] = arg8;
+
+ result = FunctionCallInvoke(&fcinfo);
+
+ /* Check for null result, since caller is clearly not expecting one */
+ if (fcinfo.isnull)
+ elog(ERROR, "FunctionCall8: function %u returned NULL",
+ fcinfo.flinfo->fn_oid);
+
+ return result;
+}
+
+Datum
+FunctionCall9(FmgrInfo *flinfo, Datum arg1, Datum arg2,
+ Datum arg3, Datum arg4, Datum arg5,
+ Datum arg6, Datum arg7, Datum arg8,
+ Datum arg9)
+{
+ FunctionCallInfoData fcinfo;
+ Datum result;
+
+ MemSet(&fcinfo, 0, sizeof(fcinfo));
+ fcinfo.flinfo = flinfo;
+ fcinfo.nargs = 9;
+ fcinfo.arg[0] = arg1;
+ fcinfo.arg[1] = arg2;
+ fcinfo.arg[2] = arg3;
+ fcinfo.arg[3] = arg4;
+ fcinfo.arg[4] = arg5;
+ fcinfo.arg[5] = arg6;
+ fcinfo.arg[6] = arg7;
+ fcinfo.arg[7] = arg8;
+ fcinfo.arg[8] = arg9;
+
+ result = FunctionCallInvoke(&fcinfo);
+
+ /* Check for null result, since caller is clearly not expecting one */
+ if (fcinfo.isnull)
+ elog(ERROR, "FunctionCall9: function %u returned NULL",
+ fcinfo.flinfo->fn_oid);
- fmgr_info(procedureId, &finfo);
- finfo.fn_nargs = nargs;
+ return result;
+}
+
+
+/* These are for invocation of a function identified by OID with a
+ * directly-computed parameter list. Note that neither arguments nor result
+ * are allowed to be NULL. These are essentially fmgr_info() followed
+ * by FunctionCallN(). If the same function is to be invoked repeatedly,
+ * do the fmgr_info() once and then use FunctionCallN().
+ */
+Datum
+OidFunctionCall1(Oid functionId, Datum arg1)
+{
+ FmgrInfo flinfo;
+ FunctionCallInfoData fcinfo;
+ Datum result;
+
+ fmgr_info(functionId, &flinfo);
+
+ MemSet(&fcinfo, 0, sizeof(fcinfo));
+ fcinfo.flinfo = &flinfo;
+ fcinfo.nargs = 1;
+ fcinfo.arg[0] = arg1;
+
+ result = FunctionCallInvoke(&fcinfo);
+
+ /* Check for null result, since caller is clearly not expecting one */
+ if (fcinfo.isnull)
+ elog(ERROR, "OidFunctionCall1: function %u returned NULL",
+ flinfo.fn_oid);
+
+ return result;
+}
+
+Datum
+OidFunctionCall2(Oid functionId, Datum arg1, Datum arg2)
+{
+ FmgrInfo flinfo;
+ FunctionCallInfoData fcinfo;
+ Datum result;
+
+ fmgr_info(functionId, &flinfo);
+
+ MemSet(&fcinfo, 0, sizeof(fcinfo));
+ fcinfo.flinfo = &flinfo;
+ fcinfo.nargs = 2;
+ fcinfo.arg[0] = arg1;
+ fcinfo.arg[1] = arg2;
+
+ result = FunctionCallInvoke(&fcinfo);
+
+ /* Check for null result, since caller is clearly not expecting one */
+ if (fcinfo.isnull)
+ elog(ERROR, "OidFunctionCall2: function %u returned NULL",
+ flinfo.fn_oid);
+
+ return result;
+}
+
+Datum
+OidFunctionCall3(Oid functionId, Datum arg1, Datum arg2,
+ Datum arg3)
+{
+ FmgrInfo flinfo;
+ FunctionCallInfoData fcinfo;
+ Datum result;
+
+ fmgr_info(functionId, &flinfo);
+
+ MemSet(&fcinfo, 0, sizeof(fcinfo));
+ fcinfo.flinfo = &flinfo;
+ fcinfo.nargs = 3;
+ fcinfo.arg[0] = arg1;
+ fcinfo.arg[1] = arg2;
+ fcinfo.arg[2] = arg3;
+
+ result = FunctionCallInvoke(&fcinfo);
+
+ /* Check for null result, since caller is clearly not expecting one */
+ if (fcinfo.isnull)
+ elog(ERROR, "OidFunctionCall3: function %u returned NULL",
+ flinfo.fn_oid);
+
+ return result;
+}
+
+Datum
+OidFunctionCall4(Oid functionId, Datum arg1, Datum arg2,
+ Datum arg3, Datum arg4)
+{
+ FmgrInfo flinfo;
+ FunctionCallInfoData fcinfo;
+ Datum result;
+
+ fmgr_info(functionId, &flinfo);
+
+ MemSet(&fcinfo, 0, sizeof(fcinfo));
+ fcinfo.flinfo = &flinfo;
+ fcinfo.nargs = 4;
+ fcinfo.arg[0] = arg1;
+ fcinfo.arg[1] = arg2;
+ fcinfo.arg[2] = arg3;
+ fcinfo.arg[3] = arg4;
+
+ result = FunctionCallInvoke(&fcinfo);
+
+ /* Check for null result, since caller is clearly not expecting one */
+ if (fcinfo.isnull)
+ elog(ERROR, "OidFunctionCall4: function %u returned NULL",
+ flinfo.fn_oid);
+
+ return result;
+}
+
+Datum
+OidFunctionCall5(Oid functionId, Datum arg1, Datum arg2,
+ Datum arg3, Datum arg4, Datum arg5)
+{
+ FmgrInfo flinfo;
+ FunctionCallInfoData fcinfo;
+ Datum result;
+
+ fmgr_info(functionId, &flinfo);
+
+ MemSet(&fcinfo, 0, sizeof(fcinfo));
+ fcinfo.flinfo = &flinfo;
+ fcinfo.nargs = 5;
+ fcinfo.arg[0] = arg1;
+ fcinfo.arg[1] = arg2;
+ fcinfo.arg[2] = arg3;
+ fcinfo.arg[3] = arg4;
+ fcinfo.arg[4] = arg5;
+
+ result = FunctionCallInvoke(&fcinfo);
+
+ /* Check for null result, since caller is clearly not expecting one */
+ if (fcinfo.isnull)
+ elog(ERROR, "OidFunctionCall5: function %u returned NULL",
+ flinfo.fn_oid);
+
+ return result;
+}
+
+Datum
+OidFunctionCall6(Oid functionId, Datum arg1, Datum arg2,
+ Datum arg3, Datum arg4, Datum arg5,
+ Datum arg6)
+{
+ FmgrInfo flinfo;
+ FunctionCallInfoData fcinfo;
+ Datum result;
+
+ fmgr_info(functionId, &flinfo);
+
+ MemSet(&fcinfo, 0, sizeof(fcinfo));
+ fcinfo.flinfo = &flinfo;
+ fcinfo.nargs = 6;
+ fcinfo.arg[0] = arg1;
+ fcinfo.arg[1] = arg2;
+ fcinfo.arg[2] = arg3;
+ fcinfo.arg[3] = arg4;
+ fcinfo.arg[4] = arg5;
+ fcinfo.arg[5] = arg6;
+
+ result = FunctionCallInvoke(&fcinfo);
+
+ /* Check for null result, since caller is clearly not expecting one */
+ if (fcinfo.isnull)
+ elog(ERROR, "OidFunctionCall6: function %u returned NULL",
+ flinfo.fn_oid);
+
+ return result;
+}
+
+Datum
+OidFunctionCall7(Oid functionId, Datum arg1, Datum arg2,
+ Datum arg3, Datum arg4, Datum arg5,
+ Datum arg6, Datum arg7)
+{
+ FmgrInfo flinfo;
+ FunctionCallInfoData fcinfo;
+ Datum result;
+
+ fmgr_info(functionId, &flinfo);
+
+ MemSet(&fcinfo, 0, sizeof(fcinfo));
+ fcinfo.flinfo = &flinfo;
+ fcinfo.nargs = 7;
+ fcinfo.arg[0] = arg1;
+ fcinfo.arg[1] = arg2;
+ fcinfo.arg[2] = arg3;
+ fcinfo.arg[3] = arg4;
+ fcinfo.arg[4] = arg5;
+ fcinfo.arg[5] = arg6;
+ fcinfo.arg[6] = arg7;
+
+ result = FunctionCallInvoke(&fcinfo);
+
+ /* Check for null result, since caller is clearly not expecting one */
+ if (fcinfo.isnull)
+ elog(ERROR, "OidFunctionCall7: function %u returned NULL",
+ flinfo.fn_oid);
+
+ return result;
+}
+
+Datum
+OidFunctionCall8(Oid functionId, Datum arg1, Datum arg2,
+ Datum arg3, Datum arg4, Datum arg5,
+ Datum arg6, Datum arg7, Datum arg8)
+{
+ FmgrInfo flinfo;
+ FunctionCallInfoData fcinfo;
+ Datum result;
+
+ fmgr_info(functionId, &flinfo);
+
+ MemSet(&fcinfo, 0, sizeof(fcinfo));
+ fcinfo.flinfo = &flinfo;
+ fcinfo.nargs = 8;
+ fcinfo.arg[0] = arg1;
+ fcinfo.arg[1] = arg2;
+ fcinfo.arg[2] = arg3;
+ fcinfo.arg[3] = arg4;
+ fcinfo.arg[4] = arg5;
+ fcinfo.arg[5] = arg6;
+ fcinfo.arg[6] = arg7;
+ fcinfo.arg[7] = arg8;
+
+ result = FunctionCallInvoke(&fcinfo);
+
+ /* Check for null result, since caller is clearly not expecting one */
+ if (fcinfo.isnull)
+ elog(ERROR, "OidFunctionCall8: function %u returned NULL",
+ flinfo.fn_oid);
+
+ return result;
+}
+
+Datum
+OidFunctionCall9(Oid functionId, Datum arg1, Datum arg2,
+ Datum arg3, Datum arg4, Datum arg5,
+ Datum arg6, Datum arg7, Datum arg8,
+ Datum arg9)
+{
+ FmgrInfo flinfo;
+ FunctionCallInfoData fcinfo;
+ Datum result;
+
+ fmgr_info(functionId, &flinfo);
+
+ MemSet(&fcinfo, 0, sizeof(fcinfo));
+ fcinfo.flinfo = &flinfo;
+ fcinfo.nargs = 9;
+ fcinfo.arg[0] = arg1;
+ fcinfo.arg[1] = arg2;
+ fcinfo.arg[2] = arg3;
+ fcinfo.arg[3] = arg4;
+ fcinfo.arg[4] = arg5;
+ fcinfo.arg[5] = arg6;
+ fcinfo.arg[6] = arg7;
+ fcinfo.arg[7] = arg8;
+ fcinfo.arg[8] = arg9;
+
+ result = FunctionCallInvoke(&fcinfo);
+
+ /* Check for null result, since caller is clearly not expecting one */
+ if (fcinfo.isnull)
+ elog(ERROR, "OidFunctionCall9: function %u returned NULL",
+ flinfo.fn_oid);
+
+ return result;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Support routines for standard pass-by-reference datatypes
+ *
+ * Note: at some point, at least on some platforms, these might become
+ * pass-by-value types. Obviously Datum must be >= 8 bytes to allow
+ * int64 or float8 to be pass-by-value. I think that Float4GetDatum
+ * and Float8GetDatum will need to be out-of-line routines anyway,
+ * since just casting from float to Datum will not do the right thing;
+ * some kind of trick with pointer-casting or a union will be needed.
+ *-------------------------------------------------------------------------
+ */
+
+Datum
+Int64GetDatum(int64 X)
+{
+ int64 *retval = (int64 *) palloc(sizeof(int64));
+
+ *retval = X;
+ return PointerGetDatum(retval);
+}
+
+Datum
+Float4GetDatum(float4 X)
+{
+ float4 *retval = (float4 *) palloc(sizeof(float4));
+
+ *retval = X;
+ return PointerGetDatum(retval);
+}
+
+Datum
+Float8GetDatum(float8 X)
+{
+ float8 *retval = (float8 *) palloc(sizeof(float8));
- /* XXX see WAY_COOL_ORTHOGONAL_FUNCTIONS */
- return fmgr_c(&finfo,
- (FmgrValues *) args,
- isNull);
+ *retval = X;
+ return PointerGetDatum(retval);
}
diff --git a/src/backend/utils/init/postinit.c b/src/backend/utils/init/postinit.c
index c4675a6b57d..68e293ef1da 100644
--- a/src/backend/utils/init/postinit.c
+++ b/src/backend/utils/init/postinit.c
@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/utils/init/postinit.c,v 1.57 2000/04/12 17:16:02 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/utils/init/postinit.c,v 1.58 2000/05/28 17:56:08 tgl Exp $
*
*
*-------------------------------------------------------------------------
@@ -30,6 +30,7 @@
#include "storage/proc.h"
#include "storage/sinval.h"
#include "storage/smgr.h"
+#include "utils/fmgroids.h"
#include "utils/inval.h"
#include "utils/portal.h"
#include "utils/relcache.h"
diff --git a/src/bin/scripts/createlang.sh b/src/bin/scripts/createlang.sh
index 11d439f435f..f2e7f60e12b 100644
--- a/src/bin/scripts/createlang.sh
+++ b/src/bin/scripts/createlang.sh
@@ -8,7 +8,7 @@
#
#
# IDENTIFICATION
-# $Header: /cvsroot/pgsql/src/bin/scripts/Attic/createlang.sh,v 1.11 2000/05/15 16:20:45 momjian Exp $
+# $Header: /cvsroot/pgsql/src/bin/scripts/Attic/createlang.sh,v 1.12 2000/05/28 17:56:08 tgl Exp $
#
#-------------------------------------------------------------------------
@@ -244,7 +244,7 @@ fi
# ----------
# Create the call handler and the language
# ----------
-$PSQL "CREATE FUNCTION $handler () RETURNS OPAQUE AS '$PGLIB/${langname}__DLSUFFIX__' LANGUAGE 'C'"
+$PSQL "CREATE FUNCTION $handler () RETURNS OPAQUE AS '$PGLIB/${langname}__DLSUFFIX__' LANGUAGE 'newC'"
if [ $? -ne 0 ]; then
echo "$CMDNAME: language installation failed"
exit 1
diff --git a/src/include/access/valid.h b/src/include/access/valid.h
index 0fa7b0840bb..e710ff415af 100644
--- a/src/include/access/valid.h
+++ b/src/include/access/valid.h
@@ -7,7 +7,7 @@
* Portions Copyright (c) 1996-2000, PostgreSQL, Inc
* Portions Copyright (c) 1994, Regents of the University of California
*
- * $Id: valid.h,v 1.20 2000/01/26 05:57:51 momjian Exp $
+ * $Id: valid.h,v 1.21 2000/05/28 17:56:14 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -58,7 +58,7 @@ do \
break; \
} \
\
- if (__cur_keys->sk_func.fn_addr == (func_ptr) oideq) /* optimization */ \
+ if (__cur_keys->sk_func.fn_addr == (PGFunction) oideq) /* optimization */ \
__test = (__cur_keys->sk_argument == __atp); \
else if (__cur_keys->sk_flags & SK_COMMUTE) \
__test = (long) FMGR_PTR2(&__cur_keys->sk_func, \
diff --git a/src/include/c.h b/src/include/c.h
index 43c9643fd9b..13ac2cfcd1b 100644
--- a/src/include/c.h
+++ b/src/include/c.h
@@ -8,7 +8,7 @@
* Portions Copyright (c) 1996-2000, PostgreSQL, Inc
* Portions Copyright (c) 1994, Regents of the University of California
*
- * $Id: c.h,v 1.69 2000/04/12 17:16:24 momjian Exp $
+ * $Id: c.h,v 1.70 2000/05/28 17:56:09 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -250,6 +250,28 @@ typedef struct
*/
typedef signed int Offset;
+/*
+ * Common Postgres datatypes.
+ */
+typedef int16 int2;
+typedef int32 int4;
+typedef float float4;
+typedef double float8;
+
+#ifdef HAVE_LONG_INT_64
+/* Plain "long int" fits, use it */
+typedef long int int64;
+#else
+#ifdef HAVE_LONG_LONG_INT_64
+/* We have working support for "long long int", use that */
+typedef long long int int64;
+#else
+/* Won't actually work, but fall back to long int so that code compiles */
+typedef long int int64;
+#define INT64_IS_BUSTED
+#endif
+#endif
+
/* ----------------------------------------------------------------
* Section 4: datum type + support macros
* ----------------------------------------------------------------
@@ -288,6 +310,24 @@ typedef Datum *DatumPtr;
#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.
*/
@@ -407,24 +447,111 @@ typedef Datum *DatumPtr;
#define PointerGetDatum(X) ((Datum) (X))
/*
+ * DatumGetCString
+ * Returns C string (null-terminated string) value of a datum.
+ *
+ * Note: C string is not a full-fledged Postgres type at present,
+ * but type input functions use this conversion for their inputs.
+ */
+
+#define DatumGetCString(X) ((char *) DatumGetPointer(X))
+
+/*
+ * CStringGetDatum
+ * Returns datum representation for a C string (null-terminated string).
+ *
+ * Note: C string is not a full-fledged Postgres type at present,
+ * but type output functions use this conversion for their outputs.
+ * Note: CString is pass-by-reference; caller must ensure the pointed-to
+ * value has adequate lifetime.
+ */
+
+#define CStringGetDatum(X) PointerGetDatum(X)
+
+/*
* DatumGetName
* Returns name value of a datum.
*/
-#define DatumGetName(X) ((Name) DatumGetPointer((Datum) (X)))
+#define DatumGetName(X) ((Name) DatumGetPointer(X))
/*
* NameGetDatum
* Returns datum representation for a name.
+ *
+ * Note: Name is pass-by-reference; caller must ensure the pointed-to
+ * value has adequate lifetime.
*/
-#define NameGetDatum(X) PointerGetDatum((Pointer) (X))
+#define NameGetDatum(X) PointerGetDatum(X)
+
+/*
+ * DatumGetInt64
+ * Returns 64-bit integer value of a datum.
+ *
+ * Note: this macro hides the fact that int64 is currently a
+ * pass-by-reference type. Someday it may be pass-by-value,
+ * at least on some platforms.
+ */
+
+#define DatumGetInt64(X) (* ((int64 *) DatumGetPointer(X)))
+
+/*
+ * Int64GetDatum
+ * Returns datum representation for a 64-bit integer.
+ *
+ * Note: this routine returns a reference to palloc'd space.
+ */
+
+extern Datum Int64GetDatum(int64 X);
+
+/*
+ * DatumGetFloat4
+ * Returns 4-byte floating point value of a datum.
+ *
+ * Note: this macro hides the fact that float4 is currently a
+ * pass-by-reference type. Someday it may be pass-by-value.
+ */
+
+#define DatumGetFloat4(X) (* ((float4 *) DatumGetPointer(X)))
+
+/*
+ * Float4GetDatum
+ * Returns datum representation for a 4-byte floating point number.
+ *
+ * Note: this routine returns a reference to palloc'd space.
+ */
+
+extern Datum Float4GetDatum(float4 X);
+
+/*
+ * DatumGetFloat8
+ * Returns 8-byte floating point value of a datum.
+ *
+ * Note: this macro hides the fact that float8 is currently a
+ * pass-by-reference type. Someday it may be pass-by-value,
+ * at least on some platforms.
+ */
+
+#define DatumGetFloat8(X) (* ((float8 *) DatumGetPointer(X)))
+
+/*
+ * Float8GetDatum
+ * Returns datum representation for an 8-byte floating point number.
+ *
+ * Note: this routine returns a reference to palloc'd space.
+ */
+
+extern Datum Float8GetDatum(float8 X);
/*
* DatumGetFloat32
* Returns 32-bit floating point value of a datum.
* This is really a pointer, of course.
+ *
+ * XXX: this macro is now deprecated in favor of DatumGetFloat4.
+ * It will eventually go away.
*/
#define DatumGetFloat32(X) ((float32) DatumGetPointer(X))
@@ -433,14 +560,20 @@ typedef Datum *DatumPtr;
* Float32GetDatum
* Returns datum representation for a 32-bit floating point number.
* This is really a pointer, of course.
+ *
+ * XXX: this macro is now deprecated in favor of Float4GetDatum.
+ * It will eventually go away.
*/
-#define Float32GetDatum(X) PointerGetDatum((Pointer) (X))
+#define Float32GetDatum(X) PointerGetDatum(X)
/*
* DatumGetFloat64
* Returns 64-bit floating point value of a datum.
* This is really a pointer, of course.
+ *
+ * XXX: this macro is now deprecated in favor of DatumGetFloat8.
+ * It will eventually go away.
*/
#define DatumGetFloat64(X) ((float64) DatumGetPointer(X))
@@ -449,9 +582,12 @@ typedef Datum *DatumPtr;
* Float64GetDatum
* Returns datum representation for a 64-bit floating point number.
* This is really a pointer, of course.
+ *
+ * XXX: this macro is now deprecated in favor of Float8GetDatum.
+ * It will eventually go away.
*/
-#define Float64GetDatum(X) PointerGetDatum((Pointer) (X))
+#define Float64GetDatum(X) PointerGetDatum(X)
/* ----------------------------------------------------------------
* Section 5: IsValid macros for system types
diff --git a/src/include/catalog/catversion.h b/src/include/catalog/catversion.h
index 662770ace9c..e8717ddb05c 100644
--- a/src/include/catalog/catversion.h
+++ b/src/include/catalog/catversion.h
@@ -37,7 +37,7 @@
* Portions Copyright (c) 1996-2000, PostgreSQL, Inc
* Portions Copyright (c) 1994, Regents of the University of California
*
- * $Id: catversion.h,v 1.21 2000/05/05 03:10:24 tgl Exp $
+ * $Id: catversion.h,v 1.22 2000/05/28 17:56:16 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -53,6 +53,6 @@
*/
/* yyyymmddN */
-#define CATALOG_VERSION_NO 200005041
+#define CATALOG_VERSION_NO 200005281
#endif
diff --git a/src/include/catalog/pg_attribute.h b/src/include/catalog/pg_attribute.h
index 6edd86b1f2e..d3d870a4116 100644
--- a/src/include/catalog/pg_attribute.h
+++ b/src/include/catalog/pg_attribute.h
@@ -8,7 +8,7 @@
* Portions Copyright (c) 1996-2000, PostgreSQL, Inc
* Portions Copyright (c) 1994, Regents of the University of California
*
- * $Id: pg_attribute.h,v 1.55 2000/04/12 17:16:28 momjian Exp $
+ * $Id: pg_attribute.h,v 1.56 2000/05/28 17:56:16 tgl Exp $
*
* NOTES
* the genbki.sh script reads this file and generates .bki
@@ -294,16 +294,17 @@ DATA(insert OID = 0 ( 1262 cmax 29 0 4 -6 0 -1 -1 t p f i f f));
{ 1255, {"proisinh"}, 16, 0, 1, 4, 0, -1, -1, '\001', 'p', '\0', 'c', '\0', '\0' }, \
{ 1255, {"proistrusted"}, 16, 0, 1, 5, 0, -1, -1, '\001', 'p', '\0', 'c', '\0', '\0' }, \
{ 1255, {"proiscachable"}, 16, 0, 1, 6, 0, -1, -1, '\001', 'p', '\0', 'c', '\0', '\0' }, \
-{ 1255, {"pronargs"}, 21, 0, 2, 7, 0, -1, -1, '\001', 'p', '\0', 's', '\0', '\0' }, \
-{ 1255, {"proretset"}, 16, 0, 1, 8, 0, -1, -1, '\001', 'p', '\0', 'c', '\0', '\0' }, \
-{ 1255, {"prorettype"}, 26, 0, 4, 9, 0, -1, -1, '\001', 'p', '\0', 'i', '\0', '\0' }, \
-{ 1255, {"proargtypes"}, 30, 0, INDEX_MAX_KEYS*4, 10, 0, -1, -1, '\0', 'p', '\0', 'i', '\0', '\0' }, \
-{ 1255, {"probyte_pct"}, 23, 0, 4, 11, 0, -1, -1, '\001', 'p', '\0', 'i', '\0', '\0' }, \
-{ 1255, {"properbyte_cpu"}, 23, 0, 4, 12, 0, -1, -1, '\001', 'p', '\0', 'i', '\0', '\0' }, \
-{ 1255, {"propercall_cpu"}, 23, 0, 4, 13, 0, -1, -1, '\001', 'p', '\0', 'i', '\0', '\0' }, \
-{ 1255, {"prooutin_ratio"}, 23, 0, 4, 14, 0, -1, -1, '\001', 'p', '\0', 'i', '\0', '\0' }, \
-{ 1255, {"prosrc"}, 25, 0, -1, 15, 0, -1, -1, '\0', 'p', '\0', 'i', '\0', '\0' }, \
-{ 1255, {"probin"}, 17, 0, -1, 16, 0, -1, -1, '\0', 'p', '\0', 'i', '\0', '\0' }
+{ 1255, {"proisstrict"}, 16, 0, 1, 7, 0, -1, -1, '\001', 'p', '\0', 'c', '\0', '\0' }, \
+{ 1255, {"pronargs"}, 21, 0, 2, 8, 0, -1, -1, '\001', 'p', '\0', 's', '\0', '\0' }, \
+{ 1255, {"proretset"}, 16, 0, 1, 9, 0, -1, -1, '\001', 'p', '\0', 'c', '\0', '\0' }, \
+{ 1255, {"prorettype"}, 26, 0, 4, 10, 0, -1, -1, '\001', 'p', '\0', 'i', '\0', '\0' }, \
+{ 1255, {"proargtypes"}, 30, 0, INDEX_MAX_KEYS*4, 11, 0, -1, -1, '\0', 'p', '\0', 'i', '\0', '\0' }, \
+{ 1255, {"probyte_pct"}, 23, 0, 4, 12, 0, -1, -1, '\001', 'p', '\0', 'i', '\0', '\0' }, \
+{ 1255, {"properbyte_cpu"}, 23, 0, 4, 13, 0, -1, -1, '\001', 'p', '\0', 'i', '\0', '\0' }, \
+{ 1255, {"propercall_cpu"}, 23, 0, 4, 14, 0, -1, -1, '\001', 'p', '\0', 'i', '\0', '\0' }, \
+{ 1255, {"prooutin_ratio"}, 23, 0, 4, 15, 0, -1, -1, '\001', 'p', '\0', 'i', '\0', '\0' }, \
+{ 1255, {"prosrc"}, 25, 0, -1, 16, 0, -1, -1, '\0', 'p', '\0', 'i', '\0', '\0' }, \
+{ 1255, {"probin"}, 17, 0, -1, 17, 0, -1, -1, '\0', 'p', '\0', 'i', '\0', '\0' }
DATA(insert OID = 0 ( 1255 proname 19 0 NAMEDATALEN 1 0 -1 -1 f p f i f f));
DATA(insert OID = 0 ( 1255 proowner 23 0 4 2 0 -1 -1 t p f i f f));
@@ -311,16 +312,17 @@ DATA(insert OID = 0 ( 1255 prolang 26 0 4 3 0 -1 -1 t p f i f f));
DATA(insert OID = 0 ( 1255 proisinh 16 0 1 4 0 -1 -1 t p f c f f));
DATA(insert OID = 0 ( 1255 proistrusted 16 0 1 5 0 -1 -1 t p f c f f));
DATA(insert OID = 0 ( 1255 proiscachable 16 0 1 6 0 -1 -1 t p f c f f));
-DATA(insert OID = 0 ( 1255 pronargs 21 0 2 7 0 -1 -1 t p f s f f));
-DATA(insert OID = 0 ( 1255 proretset 16 0 1 8 0 -1 -1 t p f c f f));
-DATA(insert OID = 0 ( 1255 prorettype 26 0 4 9 0 -1 -1 t p f i f f));
-DATA(insert OID = 0 ( 1255 proargtypes 30 0 INDEX_MAX_KEYS*4 10 0 -1 -1 f p f i f f));
-DATA(insert OID = 0 ( 1255 probyte_pct 23 0 4 11 0 -1 -1 t p f i f f));
-DATA(insert OID = 0 ( 1255 properbyte_cpu 23 0 4 12 0 -1 -1 t p f i f f));
-DATA(insert OID = 0 ( 1255 propercall_cpu 23 0 4 13 0 -1 -1 t p f i f f));
-DATA(insert OID = 0 ( 1255 prooutin_ratio 23 0 4 14 0 -1 -1 t p f i f f));
-DATA(insert OID = 0 ( 1255 prosrc 25 0 -1 15 0 -1 -1 f p f i f f));
-DATA(insert OID = 0 ( 1255 probin 17 0 -1 16 0 -1 -1 f p f i f f));
+DATA(insert OID = 0 ( 1255 proisstrict 16 0 1 7 0 -1 -1 t p f c f f));
+DATA(insert OID = 0 ( 1255 pronargs 21 0 2 8 0 -1 -1 t p f s f f));
+DATA(insert OID = 0 ( 1255 proretset 16 0 1 9 0 -1 -1 t p f c f f));
+DATA(insert OID = 0 ( 1255 prorettype 26 0 4 10 0 -1 -1 t p f i f f));
+DATA(insert OID = 0 ( 1255 proargtypes 30 0 INDEX_MAX_KEYS*4 11 0 -1 -1 f p f i f f));
+DATA(insert OID = 0 ( 1255 probyte_pct 23 0 4 12 0 -1 -1 t p f i f f));
+DATA(insert OID = 0 ( 1255 properbyte_cpu 23 0 4 13 0 -1 -1 t p f i f f));
+DATA(insert OID = 0 ( 1255 propercall_cpu 23 0 4 14 0 -1 -1 t p f i f f));
+DATA(insert OID = 0 ( 1255 prooutin_ratio 23 0 4 15 0 -1 -1 t p f i f f));
+DATA(insert OID = 0 ( 1255 prosrc 25 0 -1 16 0 -1 -1 f p f i f f));
+DATA(insert OID = 0 ( 1255 probin 17 0 -1 17 0 -1 -1 f p f i f f));
DATA(insert OID = 0 ( 1255 ctid 27 0 6 -1 0 -1 -1 f p f i f f));
DATA(insert OID = 0 ( 1255 oid 26 0 4 -2 0 -1 -1 t p f i f f));
DATA(insert OID = 0 ( 1255 xmin 28 0 4 -3 0 -1 -1 t p f i f f));
diff --git a/src/include/catalog/pg_class.h b/src/include/catalog/pg_class.h
index 7aed094e117..15c9e9fcd92 100644
--- a/src/include/catalog/pg_class.h
+++ b/src/include/catalog/pg_class.h
@@ -8,7 +8,7 @@
* Portions Copyright (c) 1996-2000, PostgreSQL, Inc
* Portions Copyright (c) 1994, Regents of the University of California
*
- * $Id: pg_class.h,v 1.33 2000/01/26 05:57:57 momjian Exp $
+ * $Id: pg_class.h,v 1.34 2000/05/28 17:56:16 tgl Exp $
*
* NOTES
* ``pg_relation'' is being replaced by ``pg_class''. currently
@@ -133,7 +133,7 @@ DATA(insert OID = 1247 ( pg_type 71 PGUID 0 0 0 0 f f r 16 0 0 0 0 0 f f _nu
DESCR("");
DATA(insert OID = 1249 ( pg_attribute 75 PGUID 0 0 0 0 f f r 15 0 0 0 0 0 f f _null_ ));
DESCR("");
-DATA(insert OID = 1255 ( pg_proc 81 PGUID 0 0 0 0 f f r 16 0 0 0 0 0 f f _null_ ));
+DATA(insert OID = 1255 ( pg_proc 81 PGUID 0 0 0 0 f f r 17 0 0 0 0 0 f f _null_ ));
DESCR("");
DATA(insert OID = 1259 ( pg_class 83 PGUID 0 0 0 0 f f r 19 0 0 0 0 0 f f _null_ ));
DESCR("");
diff --git a/src/include/catalog/pg_language.h b/src/include/catalog/pg_language.h
index 75186cd4503..0d597d8c4da 100644
--- a/src/include/catalog/pg_language.h
+++ b/src/include/catalog/pg_language.h
@@ -8,7 +8,7 @@
* Portions Copyright (c) 1996-2000, PostgreSQL, Inc
* Portions Copyright (c) 1994, Regents of the University of California
*
- * $Id: pg_language.h,v 1.10 2000/01/26 05:57:57 momjian Exp $
+ * $Id: pg_language.h,v 1.11 2000/05/28 17:56:16 tgl Exp $
*
* NOTES
* the genbki.sh script reads this file and generates .bki
@@ -63,14 +63,20 @@ typedef FormData_pg_language *Form_pg_language;
* ----------------
*/
-DATA(insert OID = 11 ( internal f 0 0 "n/a" ));
-DESCR("");
+DATA(insert OID = 11 ( internal f f 0 "n/a" ));
+DESCR("old-style built-in functions");
#define INTERNALlanguageId 11
-DATA(insert OID = 13 ( "C" f 0 0 "/bin/cc" ));
-DESCR("");
+DATA(insert OID = 12 ( newinternal f f 0 "n/a" ));
+DESCR("new-style built-in functions");
+#define NEWINTERNALlanguageId 12
+DATA(insert OID = 13 ( "C" f f 0 "/bin/cc" ));
+DESCR("Dynamically-loaded old-style C functions");
#define ClanguageId 13
-DATA(insert OID = 14 ( "sql" f 0 0 "postgres"));
-DESCR("");
+DATA(insert OID = 10 ( "newC" f f 0 "/bin/cc" ));
+DESCR("Dynamically-loaded new-style C functions");
+#define NEWClanguageId 10
+DATA(insert OID = 14 ( "sql" f f 0 "postgres"));
+DESCR("SQL-language functions");
#define SQLlanguageId 14
diff --git a/src/include/catalog/pg_proc.h b/src/include/catalog/pg_proc.h
index 6995587c0cc..2a787f1f37a 100644
--- a/src/include/catalog/pg_proc.h
+++ b/src/include/catalog/pg_proc.h
@@ -7,7 +7,7 @@
* Portions Copyright (c) 1996-2000, PostgreSQL, Inc
* Portions Copyright (c) 1994, Regents of the University of California
*
- * $Id: pg_proc.h,v 1.133 2000/04/16 04:41:03 tgl Exp $
+ * $Id: pg_proc.h,v 1.134 2000/05/28 17:56:16 tgl Exp $
*
* NOTES
* The script catalog/genbki.sh reads this file and generates .bki
@@ -45,6 +45,7 @@ CATALOG(pg_proc) BOOTSTRAP
bool proisinh;
bool proistrusted;
bool proiscachable;
+ bool proisstrict;
int2 pronargs;
bool proretset;
Oid prorettype;
@@ -68,23 +69,24 @@ typedef FormData_pg_proc *Form_pg_proc;
* compiler constants for pg_proc
* ----------------
*/
-#define Natts_pg_proc 16
+#define Natts_pg_proc 17
#define Anum_pg_proc_proname 1
#define Anum_pg_proc_proowner 2
#define Anum_pg_proc_prolang 3
#define Anum_pg_proc_proisinh 4
#define Anum_pg_proc_proistrusted 5
#define Anum_pg_proc_proiscachable 6
-#define Anum_pg_proc_pronargs 7
-#define Anum_pg_proc_proretset 8
-#define Anum_pg_proc_prorettype 9
-#define Anum_pg_proc_proargtypes 10
-#define Anum_pg_proc_probyte_pct 11
-#define Anum_pg_proc_properbyte_cpu 12
-#define Anum_pg_proc_propercall_cpu 13
-#define Anum_pg_proc_prooutin_ratio 14
-#define Anum_pg_proc_prosrc 15
-#define Anum_pg_proc_probin 16
+#define Anum_pg_proc_proisstrict 7
+#define Anum_pg_proc_pronargs 8
+#define Anum_pg_proc_proretset 9
+#define Anum_pg_proc_prorettype 10
+#define Anum_pg_proc_proargtypes 11
+#define Anum_pg_proc_probyte_pct 12
+#define Anum_pg_proc_properbyte_cpu 13
+#define Anum_pg_proc_propercall_cpu 14
+#define Anum_pg_proc_prooutin_ratio 15
+#define Anum_pg_proc_prosrc 16
+#define Anum_pg_proc_probin 17
/* ----------------
* initial contents of pg_proc
@@ -94,2372 +96,2373 @@ typedef FormData_pg_proc *Form_pg_proc;
/* keep the following ordered by OID so that later changes can be made easier */
/* OIDS 1 - 99 */
-DATA(insert OID = 12 ( update_pg_pwd PGUID 11 f t f 0 f 0 "" 100 0 0 100 update_pg_pwd - ));
-DESCR("update pg_pwd file");
-DATA(insert OID = 1242 ( boolin PGUID 11 f t t 1 f 16 "0" 100 0 0 100 boolin - ));
+DATA(insert OID = 1242 ( boolin PGUID 11 f t t t 1 f 16 "0" 100 0 0 100 boolin - ));
DESCR("(internal)");
-DATA(insert OID = 1243 ( boolout PGUID 11 f t t 1 f 23 "0" 100 0 0 100 boolout - ));
+DATA(insert OID = 1243 ( boolout PGUID 11 f t t t 1 f 23 "0" 100 0 0 100 boolout - ));
DESCR("(internal)");
-DATA(insert OID = 1244 ( byteain PGUID 11 f t t 1 f 17 "0" 100 0 0 100 byteain - ));
+DATA(insert OID = 1244 ( byteain PGUID 11 f t t t 1 f 17 "0" 100 0 0 100 byteain - ));
DESCR("(internal)");
-DATA(insert OID = 31 ( byteaout PGUID 11 f t t 1 f 23 "0" 100 0 0 100 byteaout - ));
+DATA(insert OID = 31 ( byteaout PGUID 11 f t t t 1 f 23 "0" 100 0 0 100 byteaout - ));
DESCR("(internal)");
-DATA(insert OID = 1245 ( charin PGUID 11 f t t 1 f 18 "0" 100 0 0 100 charin - ));
+DATA(insert OID = 1245 ( charin PGUID 11 f t t t 1 f 18 "0" 100 0 0 100 charin - ));
DESCR("(internal)");
-DATA(insert OID = 33 ( charout PGUID 11 f t t 1 f 23 "0" 100 0 0 100 charout - ));
+DATA(insert OID = 33 ( charout PGUID 11 f t t t 1 f 23 "0" 100 0 0 100 charout - ));
DESCR("(internal)");
-DATA(insert OID = 34 ( namein PGUID 11 f t t 1 f 19 "0" 100 0 0 100 namein - ));
+DATA(insert OID = 34 ( namein PGUID 11 f t t t 1 f 19 "0" 100 0 0 100 namein - ));
DESCR("(internal)");
-DATA(insert OID = 35 ( nameout PGUID 11 f t t 1 f 23 "0" 100 0 0 100 nameout - ));
+DATA(insert OID = 35 ( nameout PGUID 11 f t t t 1 f 23 "0" 100 0 0 100 nameout - ));
DESCR("(internal)");
-DATA(insert OID = 38 ( int2in PGUID 11 f t t 1 f 21 "0" 100 0 0 100 int2in - ));
+DATA(insert OID = 38 ( int2in PGUID 11 f t t t 1 f 21 "0" 100 0 0 100 int2in - ));
DESCR("(internal)");
-DATA(insert OID = 39 ( int2out PGUID 11 f t t 1 f 23 "0" 100 0 0 100 int2out - ));
+DATA(insert OID = 39 ( int2out PGUID 11 f t t t 1 f 23 "0" 100 0 0 100 int2out - ));
DESCR("(internal)");
-DATA(insert OID = 40 ( int2vectorin PGUID 11 f t t 1 f 22 "0" 100 0 0 100 int2vectorin - ));
+DATA(insert OID = 40 ( int2vectorin PGUID 11 f t t t 1 f 22 "0" 100 0 0 100 int2vectorin - ));
DESCR("(internal)");
-DATA(insert OID = 41 ( int2vectorout PGUID 11 f t t 1 f 23 "0" 100 0 0 100 int2vectorout - ));
+DATA(insert OID = 41 ( int2vectorout PGUID 11 f t t t 1 f 23 "0" 100 0 0 100 int2vectorout - ));
DESCR("(internal)");
-DATA(insert OID = 42 ( int4in PGUID 11 f t t 1 f 23 "0" 100 0 0 100 int4in - ));
+DATA(insert OID = 42 ( int4in PGUID 11 f t t t 1 f 23 "0" 100 0 0 100 int4in - ));
DESCR("(internal)");
-DATA(insert OID = 43 ( int4out PGUID 11 f t t 1 f 19 "0" 100 0 0 100 int4out - ));
+DATA(insert OID = 43 ( int4out PGUID 11 f t t t 1 f 19 "0" 100 0 0 100 int4out - ));
DESCR("(internal)");
-DATA(insert OID = 44 ( regprocin PGUID 11 f t f 1 f 24 "0" 100 0 0 100 regprocin - ));
+DATA(insert OID = 44 ( regprocin PGUID 11 f t f t 1 f 24 "0" 100 0 0 100 regprocin - ));
DESCR("(internal)");
-DATA(insert OID = 45 ( regprocout PGUID 11 f t f 1 f 23 "0" 100 0 0 100 regprocout - ));
+DATA(insert OID = 45 ( regprocout PGUID 11 f t f t 1 f 23 "0" 100 0 0 100 regprocout - ));
DESCR("(internal)");
-DATA(insert OID = 46 ( textin PGUID 11 f t t 1 f 25 "0" 100 0 0 100 textin - ));
+DATA(insert OID = 46 ( textin PGUID 11 f t t t 1 f 25 "0" 100 0 0 100 textin - ));
DESCR("(internal)");
-DATA(insert OID = 47 ( textout PGUID 11 f t t 1 f 23 "0" 100 0 0 100 textout - ));
+DATA(insert OID = 47 ( textout PGUID 11 f t t t 1 f 23 "0" 100 0 0 100 textout - ));
DESCR("(internal)");
-DATA(insert OID = 48 ( tidin PGUID 11 f t t 1 f 27 "0" 100 0 0 100 tidin - ));
+DATA(insert OID = 48 ( tidin PGUID 11 f t t t 1 f 27 "0" 100 0 0 100 tidin - ));
DESCR("(internal)");
-DATA(insert OID = 49 ( tidout PGUID 11 f t t 1 f 23 "0" 100 0 0 100 tidout - ));
+DATA(insert OID = 49 ( tidout PGUID 11 f t t t 1 f 23 "0" 100 0 0 100 tidout - ));
DESCR("(internal)");
-DATA(insert OID = 50 ( xidin PGUID 11 f t t 1 f 28 "0" 100 0 0 100 xidin - ));
+DATA(insert OID = 50 ( xidin PGUID 11 f t t t 1 f 28 "0" 100 0 0 100 xidin - ));
DESCR("(internal)");
-DATA(insert OID = 51 ( xidout PGUID 11 f t t 1 f 23 "0" 100 0 0 100 xidout - ));
+DATA(insert OID = 51 ( xidout PGUID 11 f t t t 1 f 23 "0" 100 0 0 100 xidout - ));
DESCR("(internal)");
-DATA(insert OID = 52 ( cidin PGUID 11 f t t 1 f 29 "0" 100 0 0 100 cidin - ));
+DATA(insert OID = 52 ( cidin PGUID 11 f t t t 1 f 29 "0" 100 0 0 100 cidin - ));
DESCR("(internal)");
-DATA(insert OID = 53 ( cidout PGUID 11 f t t 1 f 23 "0" 100 0 0 100 cidout - ));
+DATA(insert OID = 53 ( cidout PGUID 11 f t t t 1 f 23 "0" 100 0 0 100 cidout - ));
DESCR("(internal)");
-DATA(insert OID = 54 ( oidvectorin PGUID 11 f t t 1 f 30 "0" 100 0 0 100 oidvectorin - ));
+DATA(insert OID = 54 ( oidvectorin PGUID 11 f t t t 1 f 30 "0" 100 0 0 100 oidvectorin - ));
DESCR("(internal)");
-DATA(insert OID = 55 ( oidvectorout PGUID 11 f t t 1 f 23 "0" 100 0 0 100 oidvectorout - ));
+DATA(insert OID = 55 ( oidvectorout PGUID 11 f t t t 1 f 23 "0" 100 0 0 100 oidvectorout - ));
DESCR("(internal)");
-DATA(insert OID = 56 ( boollt PGUID 11 f t t 2 f 16 "16 16" 100 0 0 100 boollt - ));
+DATA(insert OID = 56 ( boollt PGUID 11 f t t t 2 f 16 "16 16" 100 0 0 100 boollt - ));
DESCR("less-than");
-DATA(insert OID = 57 ( boolgt PGUID 11 f t t 2 f 16 "16 16" 100 0 0 100 boolgt - ));
+DATA(insert OID = 57 ( boolgt PGUID 11 f t t t 2 f 16 "16 16" 100 0 0 100 boolgt - ));
DESCR("greater-than");
-DATA(insert OID = 60 ( booleq PGUID 11 f t t 2 f 16 "16 16" 100 0 0 100 booleq - ));
+DATA(insert OID = 60 ( booleq PGUID 11 f t t t 2 f 16 "16 16" 100 0 0 100 booleq - ));
DESCR("equal");
-DATA(insert OID = 61 ( chareq PGUID 11 f t t 2 f 16 "18 18" 100 0 0 100 chareq - ));
+DATA(insert OID = 61 ( chareq PGUID 11 f t t t 2 f 16 "18 18" 100 0 0 100 chareq - ));
DESCR("equal");
-DATA(insert OID = 62 ( nameeq PGUID 11 f t t 2 f 16 "19 19" 100 0 0 100 nameeq - ));
+DATA(insert OID = 62 ( nameeq PGUID 11 f t t t 2 f 16 "19 19" 100 0 0 100 nameeq - ));
DESCR("equal");
-DATA(insert OID = 63 ( int2eq PGUID 11 f t t 2 f 16 "21 21" 100 0 0 100 int2eq - ));
+DATA(insert OID = 63 ( int2eq PGUID 11 f t t t 2 f 16 "21 21" 100 0 0 100 int2eq - ));
DESCR("equal");
-DATA(insert OID = 64 ( int2lt PGUID 11 f t t 2 f 16 "21 21" 100 0 0 100 int2lt - ));
+DATA(insert OID = 64 ( int2lt PGUID 11 f t t t 2 f 16 "21 21" 100 0 0 100 int2lt - ));
DESCR("less-than");
-DATA(insert OID = 65 ( int4eq PGUID 11 f t t 2 f 16 "23 23" 100 0 0 100 int4eq - ));
+DATA(insert OID = 65 ( int4eq PGUID 11 f t t t 2 f 16 "23 23" 100 0 0 100 int4eq - ));
DESCR("equal");
-DATA(insert OID = 66 ( int4lt PGUID 11 f t t 2 f 16 "23 23" 100 0 0 100 int4lt - ));
+DATA(insert OID = 66 ( int4lt PGUID 11 f t t t 2 f 16 "23 23" 100 0 0 100 int4lt - ));
DESCR("less-than");
-DATA(insert OID = 67 ( texteq PGUID 11 f t t 2 f 16 "25 25" 100 0 0 0 texteq - ));
+DATA(insert OID = 67 ( texteq PGUID 11 f t t t 2 f 16 "25 25" 100 0 0 0 texteq - ));
DESCR("equal");
-DATA(insert OID = 68 ( xideq PGUID 11 f t t 2 f 16 "28 28" 100 0 0 100 xideq - ));
+DATA(insert OID = 68 ( xideq PGUID 11 f t t t 2 f 16 "28 28" 100 0 0 100 xideq - ));
DESCR("equal");
-DATA(insert OID = 69 ( cideq PGUID 11 f t t 2 f 16 "29 29" 100 0 0 100 cideq - ));
+DATA(insert OID = 69 ( cideq PGUID 11 f t t t 2 f 16 "29 29" 100 0 0 100 cideq - ));
DESCR("equal");
-DATA(insert OID = 70 ( charne PGUID 11 f t t 2 f 16 "18 18" 100 0 0 100 charne - ));
+DATA(insert OID = 70 ( charne PGUID 11 f t t t 2 f 16 "18 18" 100 0 0 100 charne - ));
DESCR("not equal");
-DATA(insert OID = 1246 ( charlt PGUID 11 f t t 2 f 16 "18 18" 100 0 0 100 charlt - ));
+DATA(insert OID = 1246 ( charlt PGUID 11 f t t t 2 f 16 "18 18" 100 0 0 100 charlt - ));
DESCR("less-than");
-DATA(insert OID = 72 ( charle PGUID 11 f t t 2 f 16 "18 18" 100 0 0 100 charle - ));
+DATA(insert OID = 72 ( charle PGUID 11 f t t t 2 f 16 "18 18" 100 0 0 100 charle - ));
DESCR("less-than-or-equal");
-DATA(insert OID = 73 ( chargt PGUID 11 f t t 2 f 16 "18 18" 100 0 0 100 chargt - ));
+DATA(insert OID = 73 ( chargt PGUID 11 f t t t 2 f 16 "18 18" 100 0 0 100 chargt - ));
DESCR("greater-than");
-DATA(insert OID = 74 ( charge PGUID 11 f t t 2 f 16 "18 18" 100 0 0 100 charge - ));
+DATA(insert OID = 74 ( charge PGUID 11 f t t t 2 f 16 "18 18" 100 0 0 100 charge - ));
DESCR("greater-than-or-equal");
-DATA(insert OID = 1248 ( charpl PGUID 11 f t t 2 f 18 "18 18" 100 0 0 100 charpl - ));
+DATA(insert OID = 1248 ( charpl PGUID 11 f t t t 2 f 18 "18 18" 100 0 0 100 charpl - ));
DESCR("addition");
-DATA(insert OID = 1250 ( charmi PGUID 11 f t t 2 f 18 "18 18" 100 0 0 100 charmi - ));
+DATA(insert OID = 1250 ( charmi PGUID 11 f t t t 2 f 18 "18 18" 100 0 0 100 charmi - ));
DESCR("subtract");
-DATA(insert OID = 77 ( charmul PGUID 11 f t t 2 f 18 "18 18" 100 0 0 100 charmul - ));
+DATA(insert OID = 77 ( charmul PGUID 11 f t t t 2 f 18 "18 18" 100 0 0 100 charmul - ));
DESCR("multiply");
-DATA(insert OID = 78 ( chardiv PGUID 11 f t t 2 f 18 "18 18" 100 0 0 100 chardiv - ));
+DATA(insert OID = 78 ( chardiv PGUID 11 f t t t 2 f 18 "18 18" 100 0 0 100 chardiv - ));
DESCR("divide");
-DATA(insert OID = 79 ( nameregexeq PGUID 11 f t t 2 f 16 "19 25" 100 0 0 100 nameregexeq - ));
+DATA(insert OID = 79 ( nameregexeq PGUID 11 f t t t 2 f 16 "19 25" 100 0 0 100 nameregexeq - ));
DESCR("matches regex., case-sensitive");
-DATA(insert OID = 1252 ( nameregexne PGUID 11 f t t 2 f 16 "19 25" 100 0 0 100 nameregexne - ));
+DATA(insert OID = 1252 ( nameregexne PGUID 11 f t t t 2 f 16 "19 25" 100 0 0 100 nameregexne - ));
DESCR("does not match regex., case-sensitive");
-DATA(insert OID = 1254 ( textregexeq PGUID 11 f t t 2 f 16 "25 25" 100 0 1 0 textregexeq - ));
+DATA(insert OID = 1254 ( textregexeq PGUID 11 f t t t 2 f 16 "25 25" 100 0 1 0 textregexeq - ));
DESCR("matches regex., case-sensitive");
-DATA(insert OID = 1256 ( textregexne PGUID 11 f t t 2 f 16 "25 25" 100 0 1 0 textregexne - ));
+DATA(insert OID = 1256 ( textregexne PGUID 11 f t t t 2 f 16 "25 25" 100 0 1 0 textregexne - ));
DESCR("does not match regex., case-sensitive");
-DATA(insert OID = 1257 ( textlen PGUID 11 f t t 1 f 23 "25" 100 0 1 0 textlen - ));
+DATA(insert OID = 1257 ( textlen PGUID 11 f t t t 1 f 23 "25" 100 0 1 0 textlen - ));
DESCR("length");
-DATA(insert OID = 1258 ( textcat PGUID 11 f t t 2 f 25 "25 25" 100 0 1 0 textcat - ));
+DATA(insert OID = 1258 ( textcat PGUID 11 f t t t 2 f 25 "25 25" 100 0 1 0 textcat - ));
DESCR("concatenate");
-DATA(insert OID = 84 ( boolne PGUID 11 f t t 2 f 16 "16 16" 100 0 0 100 boolne - ));
+DATA(insert OID = 84 ( boolne PGUID 11 f t t t 2 f 16 "16 16" 100 0 0 100 boolne - ));
DESCR("not equal");
-DATA(insert OID = 89 ( version PGUID 11 f t f 0 f 25 "" 100 0 0 100 version - ));
+DATA(insert OID = 89 ( version PGUID 11 f t f t 0 f 25 "" 100 0 0 100 version - ));
DESCR("PostgreSQL version string");
-DATA(insert OID = 1265 ( rtcostestimate PGUID 11 f t f 7 f 0 "0 0 0 0 0 0 0" 100 0 0 100 rtcostestimate - ));
+DATA(insert OID = 1265 ( rtcostestimate PGUID 11 f t f t 7 f 0 "0 0 0 0 0 0 0" 100 0 0 100 rtcostestimate - ));
DESCR("r-tree cost estimator");
-DATA(insert OID = 1268 ( btcostestimate PGUID 11 f t f 7 f 0 "0 0 0 0 0 0 0" 100 0 0 100 btcostestimate - ));
+DATA(insert OID = 1268 ( btcostestimate PGUID 11 f t f t 7 f 0 "0 0 0 0 0 0 0" 100 0 0 100 btcostestimate - ));
DESCR("btree cost estimator");
/* OIDS 100 - 199 */
-DATA(insert OID = 100 ( int8fac PGUID 11 f t t 1 f 20 "20" 100 0 0 100 int8fac - ));
+DATA(insert OID = 100 ( int8fac PGUID 11 f t t t 1 f 20 "20" 100 0 0 100 int8fac - ));
DESCR("factorial");
-DATA(insert OID = 101 ( eqsel PGUID 11 f t f 5 f 701 "26 26 21 0 23" 100 0 0 100 eqsel - ));
+DATA(insert OID = 101 ( eqsel PGUID 11 f t f t 5 f 701 "26 26 21 0 23" 100 0 0 100 eqsel - ));
DESCR("restriction selectivity of = and related operators");
-DATA(insert OID = 102 ( neqsel PGUID 11 f t f 5 f 701 "26 26 21 0 23" 100 0 0 100 neqsel - ));
+DATA(insert OID = 102 ( neqsel PGUID 11 f t f t 5 f 701 "26 26 21 0 23" 100 0 0 100 neqsel - ));
DESCR("restriction selectivity of <> and related operators");
-DATA(insert OID = 103 ( scalarltsel PGUID 11 f t f 5 f 701 "26 26 21 0 23" 100 0 0 100 scalarltsel - ));
+DATA(insert OID = 103 ( scalarltsel PGUID 11 f t f t 5 f 701 "26 26 21 0 23" 100 0 0 100 scalarltsel - ));
DESCR("restriction selectivity of < and related operators on scalar datatypes");
-DATA(insert OID = 104 ( scalargtsel PGUID 11 f t f 5 f 701 "26 26 21 0 23" 100 0 0 100 scalargtsel - ));
+DATA(insert OID = 104 ( scalargtsel PGUID 11 f t f t 5 f 701 "26 26 21 0 23" 100 0 0 100 scalargtsel - ));
DESCR("restriction selectivity of > and related operators on scalar datatypes");
-DATA(insert OID = 105 ( eqjoinsel PGUID 11 f t f 5 f 701 "26 26 21 26 21" 100 0 0 100 eqjoinsel - ));
+DATA(insert OID = 105 ( eqjoinsel PGUID 11 f t f t 5 f 701 "26 26 21 26 21" 100 0 0 100 eqjoinsel - ));
DESCR("join selectivity of = and related operators");
-DATA(insert OID = 106 ( neqjoinsel PGUID 11 f t f 5 f 701 "26 26 21 26 21" 100 0 0 100 neqjoinsel - ));
+DATA(insert OID = 106 ( neqjoinsel PGUID 11 f t f t 5 f 701 "26 26 21 26 21" 100 0 0 100 neqjoinsel - ));
DESCR("join selectivity of <> and related operators");
-DATA(insert OID = 107 ( scalarltjoinsel PGUID 11 f t f 5 f 701 "26 26 21 26 21" 100 0 0 100 scalarltjoinsel - ));
+DATA(insert OID = 107 ( scalarltjoinsel PGUID 11 f t f t 5 f 701 "26 26 21 26 21" 100 0 0 100 scalarltjoinsel - ));
DESCR("join selectivity of < and related operators on scalar datatypes");
-DATA(insert OID = 108 ( scalargtjoinsel PGUID 11 f t f 5 f 701 "26 26 21 26 21" 100 0 0 100 scalargtjoinsel - ));
+DATA(insert OID = 108 ( scalargtjoinsel PGUID 11 f t f t 5 f 701 "26 26 21 26 21" 100 0 0 100 scalargtjoinsel - ));
DESCR("join selectivity of > and related operators on scalar datatypes");
-DATA(insert OID = 112 ( text PGUID 11 f t t 1 f 25 "23" 100 0 0 100 int4_text - ));
+DATA(insert OID = 112 ( text PGUID 11 f t t t 1 f 25 "23" 100 0 0 100 int4_text - ));
DESCR("convert int4 to text");
-DATA(insert OID = 113 ( text PGUID 11 f t t 1 f 25 "21" 100 0 0 100 int2_text - ));
+DATA(insert OID = 113 ( text PGUID 11 f t t t 1 f 25 "21" 100 0 0 100 int2_text - ));
DESCR("convert int2 to text");
-DATA(insert OID = 114 ( text PGUID 11 f t t 1 f 25 "26" 100 0 0 100 oid_text - ));
+DATA(insert OID = 114 ( text PGUID 11 f t t t 1 f 25 "26" 100 0 0 100 oid_text - ));
DESCR("convert oid to text");
-DATA(insert OID = 115 ( box_above PGUID 11 f t t 2 f 16 "603 603" 100 1 0 100 box_above - ));
+DATA(insert OID = 115 ( box_above PGUID 11 f t t t 2 f 16 "603 603" 100 1 0 100 box_above - ));
DESCR("is above");
-DATA(insert OID = 116 ( box_below PGUID 11 f t t 2 f 16 "603 603" 100 1 0 100 box_below - ));
+DATA(insert OID = 116 ( box_below PGUID 11 f t t t 2 f 16 "603 603" 100 1 0 100 box_below - ));
DESCR("is below");
-DATA(insert OID = 117 ( point_in PGUID 11 f t t 1 f 600 "0" 100 0 0 100 point_in - ));
+DATA(insert OID = 117 ( point_in PGUID 11 f t t t 1 f 600 "0" 100 0 0 100 point_in - ));
DESCR("(internal)");
-DATA(insert OID = 118 ( point_out PGUID 11 f t t 1 f 23 "0" 100 0 0 100 point_out - ));
+DATA(insert OID = 118 ( point_out PGUID 11 f t t t 1 f 23 "0" 100 0 0 100 point_out - ));
DESCR("(internal)");
-DATA(insert OID = 119 ( lseg_in PGUID 11 f t t 1 f 601 "0" 100 0 0 100 lseg_in - ));
+DATA(insert OID = 119 ( lseg_in PGUID 11 f t t t 1 f 601 "0" 100 0 0 100 lseg_in - ));
DESCR("(internal)");
-DATA(insert OID = 120 ( lseg_out PGUID 11 f t t 1 f 23 "0" 100 0 0 100 lseg_out - ));
+DATA(insert OID = 120 ( lseg_out PGUID 11 f t t t 1 f 23 "0" 100 0 0 100 lseg_out - ));
DESCR("(internal)");
-DATA(insert OID = 121 ( path_in PGUID 11 f t t 1 f 602 "0" 100 0 0 100 path_in - ));
+DATA(insert OID = 121 ( path_in PGUID 11 f t t t 1 f 602 "0" 100 0 0 100 path_in - ));
DESCR("(internal)");
-DATA(insert OID = 122 ( path_out PGUID 11 f t t 1 f 23 "0" 100 0 0 100 path_out - ));
+DATA(insert OID = 122 ( path_out PGUID 11 f t t t 1 f 23 "0" 100 0 0 100 path_out - ));
DESCR("(internal)");
-DATA(insert OID = 123 ( box_in PGUID 11 f t t 1 f 603 "0" 100 0 0 100 box_in - ));
+DATA(insert OID = 123 ( box_in PGUID 11 f t t t 1 f 603 "0" 100 0 0 100 box_in - ));
DESCR("(internal)");
-DATA(insert OID = 124 ( box_out PGUID 11 f t t 1 f 23 "0" 100 0 0 100 box_out - ));
+DATA(insert OID = 124 ( box_out PGUID 11 f t t t 1 f 23 "0" 100 0 0 100 box_out - ));
DESCR("(internal)");
-DATA(insert OID = 125 ( box_overlap PGUID 11 f t t 2 f 16 "603 603" 100 1 0 100 box_overlap - ));
+DATA(insert OID = 125 ( box_overlap PGUID 11 f t t t 2 f 16 "603 603" 100 1 0 100 box_overlap - ));
DESCR("overlaps");
-DATA(insert OID = 126 ( box_ge PGUID 11 f t t 2 f 16 "603 603" 100 1 0 100 box_ge - ));
+DATA(insert OID = 126 ( box_ge PGUID 11 f t t t 2 f 16 "603 603" 100 1 0 100 box_ge - ));
DESCR("greater-than-or-equal");
-DATA(insert OID = 127 ( box_gt PGUID 11 f t t 2 f 16 "603 603" 100 1 0 100 box_gt - ));
+DATA(insert OID = 127 ( box_gt PGUID 11 f t t t 2 f 16 "603 603" 100 1 0 100 box_gt - ));
DESCR("greater-than");
-DATA(insert OID = 128 ( box_eq PGUID 11 f t t 2 f 16 "603 603" 100 1 0 100 box_eq - ));
+DATA(insert OID = 128 ( box_eq PGUID 11 f t t t 2 f 16 "603 603" 100 1 0 100 box_eq - ));
DESCR("equal");
-DATA(insert OID = 129 ( box_lt PGUID 11 f t t 2 f 16 "603 603" 100 1 0 100 box_lt - ));
+DATA(insert OID = 129 ( box_lt PGUID 11 f t t t 2 f 16 "603 603" 100 1 0 100 box_lt - ));
DESCR("less-than");
-DATA(insert OID = 130 ( box_le PGUID 11 f t t 2 f 16 "603 603" 100 1 0 100 box_le - ));
+DATA(insert OID = 130 ( box_le PGUID 11 f t t t 2 f 16 "603 603" 100 1 0 100 box_le - ));
DESCR("less-than-or-equal");
-DATA(insert OID = 131 ( point_above PGUID 11 f t t 2 f 16 "600 600" 100 0 0 100 point_above - ));
+DATA(insert OID = 131 ( point_above PGUID 11 f t t t 2 f 16 "600 600" 100 0 0 100 point_above - ));
DESCR("is above");
-DATA(insert OID = 132 ( point_left PGUID 11 f t t 2 f 16 "600 600" 100 0 0 100 point_left - ));
+DATA(insert OID = 132 ( point_left PGUID 11 f t t t 2 f 16 "600 600" 100 0 0 100 point_left - ));
DESCR("is left of");
-DATA(insert OID = 133 ( point_right PGUID 11 f t t 2 f 16 "600 600" 100 0 0 100 point_right - ));
+DATA(insert OID = 133 ( point_right PGUID 11 f t t t 2 f 16 "600 600" 100 0 0 100 point_right - ));
DESCR("is left of");
-DATA(insert OID = 134 ( point_below PGUID 11 f t t 2 f 16 "600 600" 100 0 0 100 point_below - ));
+DATA(insert OID = 134 ( point_below PGUID 11 f t t t 2 f 16 "600 600" 100 0 0 100 point_below - ));
DESCR("is below");
-DATA(insert OID = 135 ( point_eq PGUID 11 f t t 2 f 16 "600 600" 100 0 0 100 point_eq - ));
+DATA(insert OID = 135 ( point_eq PGUID 11 f t t t 2 f 16 "600 600" 100 0 0 100 point_eq - ));
DESCR("same as");
-DATA(insert OID = 136 ( on_pb PGUID 11 f t t 2 f 16 "600 603" 100 0 0 100 on_pb - ));
+DATA(insert OID = 136 ( on_pb PGUID 11 f t t t 2 f 16 "600 603" 100 0 0 100 on_pb - ));
DESCR("point is inside");
-DATA(insert OID = 137 ( on_ppath PGUID 11 f t t 2 f 16 "600 602" 100 0 1 0 on_ppath - ));
+DATA(insert OID = 137 ( on_ppath PGUID 11 f t t t 2 f 16 "600 602" 100 0 1 0 on_ppath - ));
DESCR("contained in");
-DATA(insert OID = 138 ( box_center PGUID 11 f t t 1 f 600 "603" 100 1 0 100 box_center - ));
+DATA(insert OID = 138 ( box_center PGUID 11 f t t t 1 f 600 "603" 100 1 0 100 box_center - ));
DESCR("center of");
-DATA(insert OID = 139 ( areasel PGUID 11 f t f 5 f 701 "26 26 21 0 23" 100 0 0 100 areasel - ));
+DATA(insert OID = 139 ( areasel PGUID 11 f t f t 5 f 701 "26 26 21 0 23" 100 0 0 100 areasel - ));
DESCR("restriction selectivity for area-comparison operators");
-DATA(insert OID = 140 ( areajoinsel PGUID 11 f t f 5 f 701 "26 26 21 26 21" 100 0 0 100 areajoinsel - ));
+DATA(insert OID = 140 ( areajoinsel PGUID 11 f t f t 5 f 701 "26 26 21 26 21" 100 0 0 100 areajoinsel - ));
DESCR("join selectivity for area-comparison operators");
-DATA(insert OID = 141 ( int4mul PGUID 11 f t t 2 f 23 "23 23" 100 0 0 100 int4mul - ));
+DATA(insert OID = 141 ( int4mul PGUID 11 f t t t 2 f 23 "23 23" 100 0 0 100 int4mul - ));
DESCR("multiply");
-DATA(insert OID = 142 ( int4fac PGUID 11 f t t 1 f 23 "23" 100 0 0 100 int4fac - ));
+DATA(insert OID = 142 ( int4fac PGUID 11 f t t t 1 f 23 "23" 100 0 0 100 int4fac - ));
DESCR("factorial");
-DATA(insert OID = 143 ( pointdist PGUID 11 f t t 2 f 23 "600 600" 100 0 0 100 pointdist - ));
+DATA(insert OID = 143 ( pointdist PGUID 11 f t t t 2 f 23 "600 600" 100 0 0 100 pointdist - ));
DESCR("");
-DATA(insert OID = 144 ( int4ne PGUID 11 f t t 2 f 16 "23 23" 100 0 0 100 int4ne - ));
+DATA(insert OID = 144 ( int4ne PGUID 11 f t t t 2 f 16 "23 23" 100 0 0 100 int4ne - ));
DESCR("not equal");
-DATA(insert OID = 145 ( int2ne PGUID 11 f t t 2 f 16 "21 21" 100 0 0 100 int2ne - ));
+DATA(insert OID = 145 ( int2ne PGUID 11 f t t t 2 f 16 "21 21" 100 0 0 100 int2ne - ));
DESCR("not equal");
-DATA(insert OID = 146 ( int2gt PGUID 11 f t t 2 f 16 "21 21" 100 0 0 100 int2gt - ));
+DATA(insert OID = 146 ( int2gt PGUID 11 f t t t 2 f 16 "21 21" 100 0 0 100 int2gt - ));
DESCR("greater-than");
-DATA(insert OID = 147 ( int4gt PGUID 11 f t t 2 f 16 "23 23" 100 0 0 100 int4gt - ));
+DATA(insert OID = 147 ( int4gt PGUID 11 f t t t 2 f 16 "23 23" 100 0 0 100 int4gt - ));
DESCR("greater-than");
-DATA(insert OID = 148 ( int2le PGUID 11 f t t 2 f 16 "21 21" 100 0 0 100 int2le - ));
+DATA(insert OID = 148 ( int2le PGUID 11 f t t t 2 f 16 "21 21" 100 0 0 100 int2le - ));
DESCR("less-than-or-equal");
-DATA(insert OID = 149 ( int4le PGUID 11 f t t 2 f 16 "23 23" 100 0 0 100 int4le - ));
+DATA(insert OID = 149 ( int4le PGUID 11 f t t t 2 f 16 "23 23" 100 0 0 100 int4le - ));
DESCR("less-than-or-equal");
-DATA(insert OID = 150 ( int4ge PGUID 11 f t t 2 f 16 "23 23" 100 0 0 100 int4ge - ));
+DATA(insert OID = 150 ( int4ge PGUID 11 f t t t 2 f 16 "23 23" 100 0 0 100 int4ge - ));
DESCR("greater-than-or-equal");
-DATA(insert OID = 151 ( int2ge PGUID 11 f t t 2 f 16 "21 21" 100 0 0 100 int2ge - ));
+DATA(insert OID = 151 ( int2ge PGUID 11 f t t t 2 f 16 "21 21" 100 0 0 100 int2ge - ));
DESCR("greater-than-or-equal");
-DATA(insert OID = 152 ( int2mul PGUID 11 f t t 2 f 21 "21 21" 100 0 0 100 int2mul - ));
+DATA(insert OID = 152 ( int2mul PGUID 11 f t t t 2 f 21 "21 21" 100 0 0 100 int2mul - ));
DESCR("multiply");
-DATA(insert OID = 153 ( int2div PGUID 11 f t t 2 f 21 "21 21" 100 0 0 100 int2div - ));
+DATA(insert OID = 153 ( int2div PGUID 11 f t t t 2 f 21 "21 21" 100 0 0 100 int2div - ));
DESCR("divide");
-DATA(insert OID = 154 ( int4div PGUID 11 f t t 2 f 23 "23 23" 100 0 0 100 int4div - ));
+DATA(insert OID = 154 ( int4div PGUID 11 f t t t 2 f 23 "23 23" 100 0 0 100 int4div - ));
DESCR("divide");
-DATA(insert OID = 155 ( int2mod PGUID 11 f t t 2 f 21 "21 21" 100 0 0 100 int2mod - ));
+DATA(insert OID = 155 ( int2mod PGUID 11 f t t t 2 f 21 "21 21" 100 0 0 100 int2mod - ));
DESCR("modulus");
-DATA(insert OID = 156 ( int4mod PGUID 11 f t t 2 f 23 "23 23" 100 0 0 100 int4mod - ));
+DATA(insert OID = 156 ( int4mod PGUID 11 f t t t 2 f 23 "23 23" 100 0 0 100 int4mod - ));
DESCR("modulus");
-DATA(insert OID = 157 ( textne PGUID 11 f t t 2 f 16 "25 25" 100 0 0 0 textne - ));
+DATA(insert OID = 157 ( textne PGUID 11 f t t t 2 f 16 "25 25" 100 0 0 0 textne - ));
DESCR("not equal");
-DATA(insert OID = 158 ( int24eq PGUID 11 f t t 2 f 16 "21 23" 100 0 0 100 int24eq - ));
+DATA(insert OID = 158 ( int24eq PGUID 11 f t t t 2 f 16 "21 23" 100 0 0 100 int24eq - ));
DESCR("equal");
-DATA(insert OID = 159 ( int42eq PGUID 11 f t t 2 f 16 "23 21" 100 0 0 100 int42eq - ));
+DATA(insert OID = 159 ( int42eq PGUID 11 f t t t 2 f 16 "23 21" 100 0 0 100 int42eq - ));
DESCR("equal");
-DATA(insert OID = 160 ( int24lt PGUID 11 f t t 2 f 16 "21 23" 100 0 0 100 int24lt - ));
+DATA(insert OID = 160 ( int24lt PGUID 11 f t t t 2 f 16 "21 23" 100 0 0 100 int24lt - ));
DESCR("less-than");
-DATA(insert OID = 161 ( int42lt PGUID 11 f t t 2 f 16 "23 21" 100 0 0 100 int42lt - ));
+DATA(insert OID = 161 ( int42lt PGUID 11 f t t t 2 f 16 "23 21" 100 0 0 100 int42lt - ));
DESCR("less-than");
-DATA(insert OID = 162 ( int24gt PGUID 11 f t t 2 f 16 "21 23" 100 0 0 100 int24gt - ));
+DATA(insert OID = 162 ( int24gt PGUID 11 f t t t 2 f 16 "21 23" 100 0 0 100 int24gt - ));
DESCR("greater-than");
-DATA(insert OID = 163 ( int42gt PGUID 11 f t t 2 f 16 "23 21" 100 0 0 100 int42gt - ));
+DATA(insert OID = 163 ( int42gt PGUID 11 f t t t 2 f 16 "23 21" 100 0 0 100 int42gt - ));
DESCR("greater-than");
-DATA(insert OID = 164 ( int24ne PGUID 11 f t t 2 f 16 "21 23" 100 0 0 100 int24ne - ));
+DATA(insert OID = 164 ( int24ne PGUID 11 f t t t 2 f 16 "21 23" 100 0 0 100 int24ne - ));
DESCR("not equal");
-DATA(insert OID = 165 ( int42ne PGUID 11 f t t 2 f 16 "23 21" 100 0 0 100 int42ne - ));
+DATA(insert OID = 165 ( int42ne PGUID 11 f t t t 2 f 16 "23 21" 100 0 0 100 int42ne - ));
DESCR("not equal");
-DATA(insert OID = 166 ( int24le PGUID 11 f t t 2 f 16 "21 23" 100 0 0 100 int24le - ));
+DATA(insert OID = 166 ( int24le PGUID 11 f t t t 2 f 16 "21 23" 100 0 0 100 int24le - ));
DESCR("less-than-or-equal");
-DATA(insert OID = 167 ( int42le PGUID 11 f t t 2 f 16 "23 21" 100 0 0 100 int42le - ));
+DATA(insert OID = 167 ( int42le PGUID 11 f t t t 2 f 16 "23 21" 100 0 0 100 int42le - ));
DESCR("less-than-or-equal");
-DATA(insert OID = 168 ( int24ge PGUID 11 f t t 2 f 16 "21 23" 100 0 0 100 int24ge - ));
+DATA(insert OID = 168 ( int24ge PGUID 11 f t t t 2 f 16 "21 23" 100 0 0 100 int24ge - ));
DESCR("greater-than-or-equal");
-DATA(insert OID = 169 ( int42ge PGUID 11 f t t 2 f 16 "23 21" 100 0 0 100 int42ge - ));
+DATA(insert OID = 169 ( int42ge PGUID 11 f t t t 2 f 16 "23 21" 100 0 0 100 int42ge - ));
DESCR("greater-than-or-equal");
-DATA(insert OID = 170 ( int24mul PGUID 11 f t t 2 f 23 "21 23" 100 0 0 100 int24mul - ));
+DATA(insert OID = 170 ( int24mul PGUID 11 f t t t 2 f 23 "21 23" 100 0 0 100 int24mul - ));
DESCR("multiply");
-DATA(insert OID = 171 ( int42mul PGUID 11 f t t 2 f 23 "23 21" 100 0 0 100 int42mul - ));
+DATA(insert OID = 171 ( int42mul PGUID 11 f t t t 2 f 23 "23 21" 100 0 0 100 int42mul - ));
DESCR("multiply");
-DATA(insert OID = 172 ( int24div PGUID 11 f t t 2 f 23 "21 23" 100 0 0 100 int24div - ));
+DATA(insert OID = 172 ( int24div PGUID 11 f t t t 2 f 23 "21 23" 100 0 0 100 int24div - ));
DESCR("divide");
-DATA(insert OID = 173 ( int42div PGUID 11 f t t 2 f 23 "23 21" 100 0 0 100 int42div - ));
+DATA(insert OID = 173 ( int42div PGUID 11 f t t t 2 f 23 "23 21" 100 0 0 100 int42div - ));
DESCR("divide");
-DATA(insert OID = 174 ( int24mod PGUID 11 f t t 2 f 23 "21 23" 100 0 0 100 int24mod - ));
+DATA(insert OID = 174 ( int24mod PGUID 11 f t t t 2 f 23 "21 23" 100 0 0 100 int24mod - ));
DESCR("modulus");
-DATA(insert OID = 175 ( int42mod PGUID 11 f t t 2 f 23 "23 21" 100 0 0 100 int42mod - ));
+DATA(insert OID = 175 ( int42mod PGUID 11 f t t t 2 f 23 "23 21" 100 0 0 100 int42mod - ));
DESCR("modulus");
-DATA(insert OID = 176 ( int2pl PGUID 11 f t t 2 f 21 "21 21" 100 0 0 100 int2pl - ));
+DATA(insert OID = 176 ( int2pl PGUID 11 f t t t 2 f 21 "21 21" 100 0 0 100 int2pl - ));
DESCR("addition");
-DATA(insert OID = 177 ( int4pl PGUID 11 f t t 2 f 23 "23 23" 100 0 0 100 int4pl - ));
+DATA(insert OID = 177 ( int4pl PGUID 11 f t t t 2 f 23 "23 23" 100 0 0 100 int4pl - ));
DESCR("addition");
-DATA(insert OID = 178 ( int24pl PGUID 11 f t t 2 f 23 "21 23" 100 0 0 100 int24pl - ));
+DATA(insert OID = 178 ( int24pl PGUID 11 f t t t 2 f 23 "21 23" 100 0 0 100 int24pl - ));
DESCR("addition");
-DATA(insert OID = 179 ( int42pl PGUID 11 f t t 2 f 23 "23 21" 100 0 0 100 int42pl - ));
+DATA(insert OID = 179 ( int42pl PGUID 11 f t t t 2 f 23 "23 21" 100 0 0 100 int42pl - ));
DESCR("addition");
-DATA(insert OID = 180 ( int2mi PGUID 11 f t t 2 f 21 "21 21" 100 0 0 100 int2mi - ));
+DATA(insert OID = 180 ( int2mi PGUID 11 f t t t 2 f 21 "21 21" 100 0 0 100 int2mi - ));
DESCR("subtract");
-DATA(insert OID = 181 ( int4mi PGUID 11 f t t 2 f 23 "23 23" 100 0 0 100 int4mi - ));
+DATA(insert OID = 181 ( int4mi PGUID 11 f t t t 2 f 23 "23 23" 100 0 0 100 int4mi - ));
DESCR("subtract");
-DATA(insert OID = 182 ( int24mi PGUID 11 f t t 2 f 23 "21 23" 100 0 0 100 int24mi - ));
+DATA(insert OID = 182 ( int24mi PGUID 11 f t t t 2 f 23 "21 23" 100 0 0 100 int24mi - ));
DESCR("subtract");
-DATA(insert OID = 183 ( int42mi PGUID 11 f t t 2 f 23 "23 21" 100 0 0 100 int42mi - ));
+DATA(insert OID = 183 ( int42mi PGUID 11 f t t t 2 f 23 "23 21" 100 0 0 100 int42mi - ));
DESCR("subtract");
-DATA(insert OID = 184 ( oideq PGUID 11 f t t 2 f 16 "26 26" 100 0 0 100 oideq - ));
+DATA(insert OID = 184 ( oideq PGUID 11 f t t t 2 f 16 "26 26" 100 0 0 100 oideq - ));
DESCR("equal");
-DATA(insert OID = 185 ( oidne PGUID 11 f t t 2 f 16 "26 26" 100 0 0 100 oidne - ));
+DATA(insert OID = 185 ( oidne PGUID 11 f t t t 2 f 16 "26 26" 100 0 0 100 oidne - ));
DESCR("not equal");
-DATA(insert OID = 186 ( box_same PGUID 11 f t t 2 f 16 "603 603" 100 0 0 100 box_same - ));
+DATA(insert OID = 186 ( box_same PGUID 11 f t t t 2 f 16 "603 603" 100 0 0 100 box_same - ));
DESCR("same as");
-DATA(insert OID = 187 ( box_contain PGUID 11 f t t 2 f 16 "603 603" 100 0 0 100 box_contain - ));
+DATA(insert OID = 187 ( box_contain PGUID 11 f t t t 2 f 16 "603 603" 100 0 0 100 box_contain - ));
DESCR("contains");
-DATA(insert OID = 188 ( box_left PGUID 11 f t t 2 f 16 "603 603" 100 0 0 100 box_left - ));
+DATA(insert OID = 188 ( box_left PGUID 11 f t t t 2 f 16 "603 603" 100 0 0 100 box_left - ));
DESCR("is left of");
-DATA(insert OID = 189 ( box_overleft PGUID 11 f t t 2 f 16 "603 603" 100 0 0 100 box_overleft - ));
+DATA(insert OID = 189 ( box_overleft PGUID 11 f t t t 2 f 16 "603 603" 100 0 0 100 box_overleft - ));
DESCR("overlaps, but does not extend to right of");
-DATA(insert OID = 190 ( box_overright PGUID 11 f t t 2 f 16 "603 603" 100 0 0 100 box_overright - ));
+DATA(insert OID = 190 ( box_overright PGUID 11 f t t t 2 f 16 "603 603" 100 0 0 100 box_overright - ));
DESCR("overlaps, but does not extend to left of");
-DATA(insert OID = 191 ( box_right PGUID 11 f t t 2 f 16 "603 603" 100 0 0 100 box_right - ));
+DATA(insert OID = 191 ( box_right PGUID 11 f t t t 2 f 16 "603 603" 100 0 0 100 box_right - ));
DESCR("is left of");
-DATA(insert OID = 192 ( box_contained PGUID 11 f t t 2 f 16 "603 603" 100 0 0 100 box_contained - ));
+DATA(insert OID = 192 ( box_contained PGUID 11 f t t t 2 f 16 "603 603" 100 0 0 100 box_contained - ));
DESCR("contained in");
-DATA(insert OID = 193 ( rt_box_union PGUID 11 f t t 2 f 603 "603 603" 100 0 0 100 rt_box_union - ));
+DATA(insert OID = 193 ( rt_box_union PGUID 11 f t t t 2 f 603 "603 603" 100 0 0 100 rt_box_union - ));
DESCR("r-tree");
-DATA(insert OID = 194 ( rt_box_inter PGUID 11 f t t 2 f 603 "603 603" 100 0 0 100 rt_box_inter - ));
+DATA(insert OID = 194 ( rt_box_inter PGUID 11 f t t t 2 f 603 "603 603" 100 0 0 100 rt_box_inter - ));
DESCR("r-tree");
-DATA(insert OID = 195 ( rt_box_size PGUID 11 f t t 2 f 700 "603 700" 100 0 0 100 rt_box_size - ));
+DATA(insert OID = 195 ( rt_box_size PGUID 11 f t t t 2 f 700 "603 700" 100 0 0 100 rt_box_size - ));
DESCR("r-tree");
-DATA(insert OID = 196 ( rt_bigbox_size PGUID 11 f t t 2 f 700 "603 700" 100 0 0 100 rt_bigbox_size - ));
+DATA(insert OID = 196 ( rt_bigbox_size PGUID 11 f t t t 2 f 700 "603 700" 100 0 0 100 rt_bigbox_size - ));
DESCR("r-tree");
-DATA(insert OID = 197 ( rt_poly_union PGUID 11 f t t 2 f 604 "604 604" 100 0 0 100 rt_poly_union - ));
+DATA(insert OID = 197 ( rt_poly_union PGUID 11 f t t t 2 f 604 "604 604" 100 0 0 100 rt_poly_union - ));
DESCR("r-tree");
-DATA(insert OID = 198 ( rt_poly_inter PGUID 11 f t t 2 f 604 "604 604" 100 0 0 100 rt_poly_inter - ));
+DATA(insert OID = 198 ( rt_poly_inter PGUID 11 f t t t 2 f 604 "604 604" 100 0 0 100 rt_poly_inter - ));
DESCR("r-tree");
-DATA(insert OID = 199 ( rt_poly_size PGUID 11 f t t 2 f 23 "604 23" 100 0 0 100 rt_poly_size - ));
+DATA(insert OID = 199 ( rt_poly_size PGUID 11 f t t t 2 f 23 "604 23" 100 0 0 100 rt_poly_size - ));
DESCR("r-tree");
/* OIDS 200 - 299 */
-DATA(insert OID = 200 ( float4in PGUID 11 f t t 1 f 700 "0" 100 0 0 100 float4in - ));
+DATA(insert OID = 200 ( float4in PGUID 11 f t t t 1 f 700 "0" 100 0 0 100 float4in - ));
DESCR("(internal)");
-DATA(insert OID = 201 ( float4out PGUID 11 f t t 1 f 23 "0" 100 0 0 100 float4out - ));
+DATA(insert OID = 201 ( float4out PGUID 11 f t t t 1 f 23 "0" 100 0 0 100 float4out - ));
DESCR("(internal)");
-DATA(insert OID = 202 ( float4mul PGUID 11 f t t 2 f 700 "700 700" 100 0 0 100 float4mul - ));
+DATA(insert OID = 202 ( float4mul PGUID 11 f t t t 2 f 700 "700 700" 100 0 0 100 float4mul - ));
DESCR("multiply");
-DATA(insert OID = 203 ( float4div PGUID 11 f t t 2 f 700 "700 700" 100 0 0 100 float4div - ));
+DATA(insert OID = 203 ( float4div PGUID 11 f t t t 2 f 700 "700 700" 100 0 0 100 float4div - ));
DESCR("divide");
-DATA(insert OID = 204 ( float4pl PGUID 11 f t t 2 f 700 "700 700" 100 0 0 100 float4pl - ));
+DATA(insert OID = 204 ( float4pl PGUID 11 f t t t 2 f 700 "700 700" 100 0 0 100 float4pl - ));
DESCR("addition");
-DATA(insert OID = 205 ( float4mi PGUID 11 f t t 2 f 700 "700 700" 100 0 0 100 float4mi - ));
+DATA(insert OID = 205 ( float4mi PGUID 11 f t t t 2 f 700 "700 700" 100 0 0 100 float4mi - ));
DESCR("subtract");
-DATA(insert OID = 206 ( float4um PGUID 11 f t t 1 f 700 "700" 100 0 0 100 float4um - ));
+DATA(insert OID = 206 ( float4um PGUID 11 f t t t 1 f 700 "700" 100 0 0 100 float4um - ));
DESCR("negate");
-DATA(insert OID = 207 ( float4abs PGUID 11 f t t 1 f 700 "700" 100 0 0 100 float4abs - ));
+DATA(insert OID = 207 ( float4abs PGUID 11 f t t t 1 f 700 "700" 100 0 0 100 float4abs - ));
DESCR("absolute value");
-DATA(insert OID = 208 ( float4inc PGUID 11 f t t 1 f 700 "700" 100 0 0 100 float4inc - ));
+DATA(insert OID = 208 ( float4inc PGUID 11 f t t t 1 f 700 "700" 100 0 0 100 float4inc - ));
DESCR("increment");
-DATA(insert OID = 209 ( float4larger PGUID 11 f t t 2 f 700 "700 700" 100 0 0 100 float4larger - ));
+DATA(insert OID = 209 ( float4larger PGUID 11 f t t t 2 f 700 "700 700" 100 0 0 100 float4larger - ));
DESCR("larger of two");
-DATA(insert OID = 211 ( float4smaller PGUID 11 f t t 2 f 700 "700 700" 100 0 0 100 float4smaller - ));
+DATA(insert OID = 211 ( float4smaller PGUID 11 f t t t 2 f 700 "700 700" 100 0 0 100 float4smaller - ));
DESCR("smaller of two");
-DATA(insert OID = 212 ( int4um PGUID 11 f t t 1 f 23 "23" 100 0 0 100 int4um - ));
+DATA(insert OID = 212 ( int4um PGUID 11 f t t t 1 f 23 "23" 100 0 0 100 int4um - ));
DESCR("negate");
-DATA(insert OID = 213 ( int2um PGUID 11 f t t 1 f 21 "21" 100 0 0 100 int2um - ));
+DATA(insert OID = 213 ( int2um PGUID 11 f t t t 1 f 21 "21" 100 0 0 100 int2um - ));
DESCR("negate");
-DATA(insert OID = 214 ( float8in PGUID 11 f t t 1 f 701 "0" 100 0 0 100 float8in - ));
+DATA(insert OID = 214 ( float8in PGUID 11 f t t t 1 f 701 "0" 100 0 0 100 float8in - ));
DESCR("(internal)");
-DATA(insert OID = 215 ( float8out PGUID 11 f t t 1 f 23 "0" 100 0 0 100 float8out - ));
+DATA(insert OID = 215 ( float8out PGUID 11 f t t t 1 f 23 "0" 100 0 0 100 float8out - ));
DESCR("(internal)");
-DATA(insert OID = 216 ( float8mul PGUID 11 f t t 2 f 701 "701 701" 100 0 0 100 float8mul - ));
+DATA(insert OID = 216 ( float8mul PGUID 11 f t t t 2 f 701 "701 701" 100 0 0 100 float8mul - ));
DESCR("multiply");
-DATA(insert OID = 217 ( float8div PGUID 11 f t t 2 f 701 "701 701" 100 0 0 100 float8div - ));
+DATA(insert OID = 217 ( float8div PGUID 11 f t t t 2 f 701 "701 701" 100 0 0 100 float8div - ));
DESCR("divide");
-DATA(insert OID = 218 ( float8pl PGUID 11 f t t 2 f 701 "701 701" 100 0 0 100 float8pl - ));
+DATA(insert OID = 218 ( float8pl PGUID 11 f t t t 2 f 701 "701 701" 100 0 0 100 float8pl - ));
DESCR("addition");
-DATA(insert OID = 219 ( float8mi PGUID 11 f t t 2 f 701 "701 701" 100 0 0 100 float8mi - ));
+DATA(insert OID = 219 ( float8mi PGUID 11 f t t t 2 f 701 "701 701" 100 0 0 100 float8mi - ));
DESCR("subtract");
-DATA(insert OID = 220 ( float8um PGUID 11 f t t 1 f 701 "701" 100 0 0 100 float8um - ));
+DATA(insert OID = 220 ( float8um PGUID 11 f t t t 1 f 701 "701" 100 0 0 100 float8um - ));
DESCR("negate");
-DATA(insert OID = 221 ( float8abs PGUID 11 f t t 1 f 701 "701" 100 0 0 100 float8abs - ));
+DATA(insert OID = 221 ( float8abs PGUID 11 f t t t 1 f 701 "701" 100 0 0 100 float8abs - ));
DESCR("absolute value");
-DATA(insert OID = 222 ( float8inc PGUID 11 f t t 1 f 701 "701" 100 0 0 100 float8inc - ));
+DATA(insert OID = 222 ( float8inc PGUID 11 f t t t 1 f 701 "701" 100 0 0 100 float8inc - ));
DESCR("increment");
-DATA(insert OID = 223 ( float8larger PGUID 11 f t t 2 f 701 "701 701" 100 0 0 100 float8larger - ));
+DATA(insert OID = 223 ( float8larger PGUID 11 f t t t 2 f 701 "701 701" 100 0 0 100 float8larger - ));
DESCR("larger of two");
-DATA(insert OID = 224 ( float8smaller PGUID 11 f t t 2 f 701 "701 701" 100 0 0 100 float8smaller - ));
+DATA(insert OID = 224 ( float8smaller PGUID 11 f t t t 2 f 701 "701 701" 100 0 0 100 float8smaller - ));
DESCR("smaller of two");
-DATA(insert OID = 225 ( lseg_center PGUID 11 f t t 1 f 600 "601" 100 0 0 100 lseg_center - ));
+DATA(insert OID = 225 ( lseg_center PGUID 11 f t t t 1 f 600 "601" 100 0 0 100 lseg_center - ));
DESCR("center of");
-DATA(insert OID = 226 ( path_center PGUID 11 f t t 1 f 600 "602" 100 0 0 100 path_center - ));
+DATA(insert OID = 226 ( path_center PGUID 11 f t t t 1 f 600 "602" 100 0 0 100 path_center - ));
DESCR("center of");
-DATA(insert OID = 227 ( poly_center PGUID 11 f t t 1 f 600 "604" 100 0 0 100 poly_center - ));
+DATA(insert OID = 227 ( poly_center PGUID 11 f t t t 1 f 600 "604" 100 0 0 100 poly_center - ));
DESCR("center of");
-DATA(insert OID = 228 ( dround PGUID 11 f t t 1 f 701 "701" 100 0 0 100 dround - ));
+DATA(insert OID = 228 ( dround PGUID 11 f t t t 1 f 701 "701" 100 0 0 100 dround - ));
DESCR("round to integer");
-DATA(insert OID = 229 ( dtrunc PGUID 11 f t t 1 f 701 "701" 100 0 0 100 dtrunc - ));
+DATA(insert OID = 229 ( dtrunc PGUID 11 f t t t 1 f 701 "701" 100 0 0 100 dtrunc - ));
DESCR("truncate to integer");
-DATA(insert OID = 230 ( dsqrt PGUID 11 f t t 1 f 701 "701" 100 0 0 100 dsqrt - ));
+DATA(insert OID = 230 ( dsqrt PGUID 11 f t t t 1 f 701 "701" 100 0 0 100 dsqrt - ));
DESCR("square root");
-DATA(insert OID = 231 ( dcbrt PGUID 11 f t t 1 f 701 "701" 100 0 0 100 dcbrt - ));
+DATA(insert OID = 231 ( dcbrt PGUID 11 f t t t 1 f 701 "701" 100 0 0 100 dcbrt - ));
DESCR("cube root");
-DATA(insert OID = 232 ( dpow PGUID 11 f t t 2 f 701 "701 701" 100 0 0 100 dpow - ));
+DATA(insert OID = 232 ( dpow PGUID 11 f t t t 2 f 701 "701 701" 100 0 0 100 dpow - ));
DESCR("exponentiation (x^y)");
-DATA(insert OID = 233 ( dexp PGUID 11 f t t 1 f 701 "701" 100 0 0 100 dexp - ));
+DATA(insert OID = 233 ( dexp PGUID 11 f t t t 1 f 701 "701" 100 0 0 100 dexp - ));
DESCR("natural exponential (e^x)");
-DATA(insert OID = 234 ( dlog1 PGUID 11 f t t 1 f 701 "701" 100 0 0 100 dlog1 - ));
+DATA(insert OID = 234 ( dlog1 PGUID 11 f t t t 1 f 701 "701" 100 0 0 100 dlog1 - ));
DESCR("natural logarithm");
-DATA(insert OID = 235 ( float8 PGUID 11 f t t 1 f 701 "21" 100 0 0 100 i2tod - ));
+DATA(insert OID = 235 ( float8 PGUID 11 f t t t 1 f 701 "21" 100 0 0 100 i2tod - ));
DESCR("convert int2 to float8");
-DATA(insert OID = 236 ( float4 PGUID 11 f t t 1 f 700 "21" 100 0 0 100 i2tof - ));
+DATA(insert OID = 236 ( float4 PGUID 11 f t t t 1 f 700 "21" 100 0 0 100 i2tof - ));
DESCR("convert int2 to float4");
-DATA(insert OID = 237 ( int2 PGUID 11 f t t 1 f 21 "701" 100 0 0 100 dtoi2 - ));
+DATA(insert OID = 237 ( int2 PGUID 11 f t t t 1 f 21 "701" 100 0 0 100 dtoi2 - ));
DESCR("convert float8 to int2");
-DATA(insert OID = 238 ( int2 PGUID 11 f t t 1 f 21 "700" 100 0 0 100 ftoi2 - ));
+DATA(insert OID = 238 ( int2 PGUID 11 f t t t 1 f 21 "700" 100 0 0 100 ftoi2 - ));
DESCR("convert float4 to int2");
-DATA(insert OID = 239 ( line_distance PGUID 11 f t t 2 f 701 "628 628" 100 0 0 100 line_distance - ));
+DATA(insert OID = 239 ( line_distance PGUID 11 f t t t 2 f 701 "628 628" 100 0 0 100 line_distance - ));
DESCR("distance between");
-DATA(insert OID = 240 ( nabstimein PGUID 11 f t f 1 f 702 "0" 100 0 0 100 nabstimein - ));
+DATA(insert OID = 240 ( nabstimein PGUID 11 f t f t 1 f 702 "0" 100 0 0 100 nabstimein - ));
DESCR("(internal)");
-DATA(insert OID = 241 ( nabstimeout PGUID 11 f t f 1 f 23 "0" 100 0 0 100 nabstimeout - ));
+DATA(insert OID = 241 ( nabstimeout PGUID 11 f t f t 1 f 23 "0" 100 0 0 100 nabstimeout - ));
DESCR("(internal)");
-DATA(insert OID = 242 ( reltimein PGUID 11 f t f 1 f 703 "0" 100 0 0 100 reltimein - ));
+DATA(insert OID = 242 ( reltimein PGUID 11 f t f t 1 f 703 "0" 100 0 0 100 reltimein - ));
DESCR("(internal)");
-DATA(insert OID = 243 ( reltimeout PGUID 11 f t f 1 f 23 "0" 100 0 0 100 reltimeout - ));
+DATA(insert OID = 243 ( reltimeout PGUID 11 f t f t 1 f 23 "0" 100 0 0 100 reltimeout - ));
DESCR("(internal)");
-DATA(insert OID = 244 ( timepl PGUID 11 f t f 2 f 702 "702 703" 100 0 0 100 timepl - ));
+DATA(insert OID = 244 ( timepl PGUID 11 f t f t 2 f 702 "702 703" 100 0 0 100 timepl - ));
DESCR("addition");
-DATA(insert OID = 245 ( timemi PGUID 11 f t f 2 f 702 "702 703" 100 0 0 100 timemi - ));
+DATA(insert OID = 245 ( timemi PGUID 11 f t f t 2 f 702 "702 703" 100 0 0 100 timemi - ));
DESCR("subtract");
-DATA(insert OID = 246 ( tintervalin PGUID 11 f t f 1 f 704 "0" 100 0 0 100 tintervalin - ));
+DATA(insert OID = 246 ( tintervalin PGUID 11 f t f t 1 f 704 "0" 100 0 0 100 tintervalin - ));
DESCR("(internal)");
-DATA(insert OID = 247 ( tintervalout PGUID 11 f t f 1 f 23 "0" 100 0 0 100 tintervalout - ));
+DATA(insert OID = 247 ( tintervalout PGUID 11 f t f t 1 f 23 "0" 100 0 0 100 tintervalout - ));
DESCR("(internal)");
-DATA(insert OID = 248 ( intinterval PGUID 11 f t f 2 f 16 "702 704" 100 0 0 100 intinterval - ));
+DATA(insert OID = 248 ( intinterval PGUID 11 f t f t 2 f 16 "702 704" 100 0 0 100 intinterval - ));
DESCR("abstime in tinterval");
-DATA(insert OID = 249 ( tintervalrel PGUID 11 f t f 1 f 703 "704" 100 0 0 100 tintervalrel - ));
+DATA(insert OID = 249 ( tintervalrel PGUID 11 f t f t 1 f 703 "704" 100 0 0 100 tintervalrel - ));
DESCR("");
-DATA(insert OID = 250 ( timenow PGUID 11 f t f 0 f 702 "0" 100 0 0 100 timenow - ));
+DATA(insert OID = 250 ( timenow PGUID 11 f t f t 0 f 702 "0" 100 0 0 100 timenow - ));
DESCR("Current date and time (abstime)");
-DATA(insert OID = 251 ( abstimeeq PGUID 11 f t f 2 f 16 "702 702" 100 0 0 100 abstimeeq - ));
+DATA(insert OID = 251 ( abstimeeq PGUID 11 f t f t 2 f 16 "702 702" 100 0 0 100 abstimeeq - ));
DESCR("equal");
-DATA(insert OID = 252 ( abstimene PGUID 11 f t f 2 f 16 "702 702" 100 0 0 100 abstimene - ));
+DATA(insert OID = 252 ( abstimene PGUID 11 f t f t 2 f 16 "702 702" 100 0 0 100 abstimene - ));
DESCR("not equal");
-DATA(insert OID = 253 ( abstimelt PGUID 11 f t f 2 f 16 "702 702" 100 0 0 100 abstimelt - ));
+DATA(insert OID = 253 ( abstimelt PGUID 11 f t f t 2 f 16 "702 702" 100 0 0 100 abstimelt - ));
DESCR("less-than");
-DATA(insert OID = 254 ( abstimegt PGUID 11 f t f 2 f 16 "702 702" 100 0 0 100 abstimegt - ));
+DATA(insert OID = 254 ( abstimegt PGUID 11 f t f t 2 f 16 "702 702" 100 0 0 100 abstimegt - ));
DESCR("greater-than");
-DATA(insert OID = 255 ( abstimele PGUID 11 f t f 2 f 16 "702 702" 100 0 0 100 abstimele - ));
+DATA(insert OID = 255 ( abstimele PGUID 11 f t f t 2 f 16 "702 702" 100 0 0 100 abstimele - ));
DESCR("less-than-or-equal");
-DATA(insert OID = 256 ( abstimege PGUID 11 f t f 2 f 16 "702 702" 100 0 0 100 abstimege - ));
+DATA(insert OID = 256 ( abstimege PGUID 11 f t f t 2 f 16 "702 702" 100 0 0 100 abstimege - ));
DESCR("greater-than-or-equal");
-DATA(insert OID = 257 ( reltimeeq PGUID 11 f t t 2 f 16 "703 703" 100 0 0 100 reltimeeq - ));
+DATA(insert OID = 257 ( reltimeeq PGUID 11 f t t t 2 f 16 "703 703" 100 0 0 100 reltimeeq - ));
DESCR("equal");
-DATA(insert OID = 258 ( reltimene PGUID 11 f t t 2 f 16 "703 703" 100 0 0 100 reltimene - ));
+DATA(insert OID = 258 ( reltimene PGUID 11 f t t t 2 f 16 "703 703" 100 0 0 100 reltimene - ));
DESCR("not equal");
-DATA(insert OID = 259 ( reltimelt PGUID 11 f t t 2 f 16 "703 703" 100 0 0 100 reltimelt - ));
+DATA(insert OID = 259 ( reltimelt PGUID 11 f t t t 2 f 16 "703 703" 100 0 0 100 reltimelt - ));
DESCR("less-than");
-DATA(insert OID = 260 ( reltimegt PGUID 11 f t t 2 f 16 "703 703" 100 0 0 100 reltimegt - ));
+DATA(insert OID = 260 ( reltimegt PGUID 11 f t t t 2 f 16 "703 703" 100 0 0 100 reltimegt - ));
DESCR("greater-than");
-DATA(insert OID = 261 ( reltimele PGUID 11 f t t 2 f 16 "703 703" 100 0 0 100 reltimele - ));
+DATA(insert OID = 261 ( reltimele PGUID 11 f t t t 2 f 16 "703 703" 100 0 0 100 reltimele - ));
DESCR("less-than-or-equal");
-DATA(insert OID = 262 ( reltimege PGUID 11 f t t 2 f 16 "703 703" 100 0 0 100 reltimege - ));
+DATA(insert OID = 262 ( reltimege PGUID 11 f t t t 2 f 16 "703 703" 100 0 0 100 reltimege - ));
DESCR("greater-than-or-equal");
-DATA(insert OID = 263 ( tintervalsame PGUID 11 f t f 2 f 16 "704 704" 100 0 0 100 tintervalsame - ));
+DATA(insert OID = 263 ( tintervalsame PGUID 11 f t f t 2 f 16 "704 704" 100 0 0 100 tintervalsame - ));
DESCR("same as");
-DATA(insert OID = 264 ( tintervalct PGUID 11 f t f 2 f 16 "704 704" 100 0 0 100 tintervalct - ));
+DATA(insert OID = 264 ( tintervalct PGUID 11 f t f t 2 f 16 "704 704" 100 0 0 100 tintervalct - ));
DESCR("less-than");
-DATA(insert OID = 265 ( tintervalov PGUID 11 f t f 2 f 16 "704 704" 100 0 0 100 tintervalov - ));
+DATA(insert OID = 265 ( tintervalov PGUID 11 f t f t 2 f 16 "704 704" 100 0 0 100 tintervalov - ));
DESCR("overlaps");
-DATA(insert OID = 266 ( tintervalleneq PGUID 11 f t f 2 f 16 "704 703" 100 0 0 100 tintervalleneq - ));
+DATA(insert OID = 266 ( tintervalleneq PGUID 11 f t f t 2 f 16 "704 703" 100 0 0 100 tintervalleneq - ));
DESCR("length equal");
-DATA(insert OID = 267 ( tintervallenne PGUID 11 f t f 2 f 16 "704 703" 100 0 0 100 tintervallenne - ));
+DATA(insert OID = 267 ( tintervallenne PGUID 11 f t f t 2 f 16 "704 703" 100 0 0 100 tintervallenne - ));
DESCR("length not equal to");
-DATA(insert OID = 268 ( tintervallenlt PGUID 11 f t f 2 f 16 "704 703" 100 0 0 100 tintervallenlt - ));
+DATA(insert OID = 268 ( tintervallenlt PGUID 11 f t f t 2 f 16 "704 703" 100 0 0 100 tintervallenlt - ));
DESCR("length less-than");
-DATA(insert OID = 269 ( tintervallengt PGUID 11 f t f 2 f 16 "704 703" 100 0 0 100 tintervallengt - ));
+DATA(insert OID = 269 ( tintervallengt PGUID 11 f t f t 2 f 16 "704 703" 100 0 0 100 tintervallengt - ));
DESCR("length greater-than");
-DATA(insert OID = 270 ( tintervallenle PGUID 11 f t f 2 f 16 "704 703" 100 0 0 100 tintervallenle - ));
+DATA(insert OID = 270 ( tintervallenle PGUID 11 f t f t 2 f 16 "704 703" 100 0 0 100 tintervallenle - ));
DESCR("length less-than-or-equal");
-DATA(insert OID = 271 ( tintervallenge PGUID 11 f t f 2 f 16 "704 703" 100 0 0 100 tintervallenge - ));
+DATA(insert OID = 271 ( tintervallenge PGUID 11 f t f t 2 f 16 "704 703" 100 0 0 100 tintervallenge - ));
DESCR("length greater-than-or-equal");
-DATA(insert OID = 272 ( tintervalstart PGUID 11 f t f 1 f 702 "704" 100 0 0 100 tintervalstart - ));
+DATA(insert OID = 272 ( tintervalstart PGUID 11 f t f t 1 f 702 "704" 100 0 0 100 tintervalstart - ));
DESCR("start of interval");
-DATA(insert OID = 273 ( tintervalend PGUID 11 f t f 1 f 702 "704" 100 0 0 100 tintervalend - ));
+DATA(insert OID = 273 ( tintervalend PGUID 11 f t f t 1 f 702 "704" 100 0 0 100 tintervalend - ));
DESCR("");
-DATA(insert OID = 274 ( timeofday PGUID 11 f t f 0 f 25 "0" 100 0 0 100 timeofday - ));
+DATA(insert OID = 274 ( timeofday PGUID 11 f t f t 0 f 25 "0" 100 0 0 100 timeofday - ));
DESCR("Current date and time with microseconds");
-DATA(insert OID = 275 ( isfinite PGUID 11 f t f 1 f 16 "702" 100 0 0 100 abstime_finite - ));
+DATA(insert OID = 275 ( isfinite PGUID 11 f t f t 1 f 16 "702" 100 0 0 100 abstime_finite - ));
DESCR("");
-DATA(insert OID = 276 ( int2fac PGUID 11 f t t 1 f 23 "21" 100 0 0 100 int2fac - ));
+DATA(insert OID = 276 ( int2fac PGUID 11 f t t t 1 f 23 "21" 100 0 0 100 int2fac - ));
DESCR("");
-DATA(insert OID = 277 ( inter_sl PGUID 11 f t t 2 f 16 "601 628" 100 0 0 100 inter_sl - ));
+DATA(insert OID = 277 ( inter_sl PGUID 11 f t t t 2 f 16 "601 628" 100 0 0 100 inter_sl - ));
DESCR("");
-DATA(insert OID = 278 ( inter_lb PGUID 11 f t t 2 f 16 "628 603" 100 0 0 100 inter_lb - ));
+DATA(insert OID = 278 ( inter_lb PGUID 11 f t t t 2 f 16 "628 603" 100 0 0 100 inter_lb - ));
DESCR("");
-DATA(insert OID = 279 ( float48mul PGUID 11 f t t 2 f 701 "700 701" 100 0 0 100 float48mul - ));
+DATA(insert OID = 279 ( float48mul PGUID 11 f t t t 2 f 701 "700 701" 100 0 0 100 float48mul - ));
DESCR("multiply");
-DATA(insert OID = 280 ( float48div PGUID 11 f t t 2 f 701 "700 701" 100 0 0 100 float48div - ));
+DATA(insert OID = 280 ( float48div PGUID 11 f t t t 2 f 701 "700 701" 100 0 0 100 float48div - ));
DESCR("divide");
-DATA(insert OID = 281 ( float48pl PGUID 11 f t t 2 f 701 "700 701" 100 0 0 100 float48pl - ));
+DATA(insert OID = 281 ( float48pl PGUID 11 f t t t 2 f 701 "700 701" 100 0 0 100 float48pl - ));
DESCR("addition");
-DATA(insert OID = 282 ( float48mi PGUID 11 f t t 2 f 701 "700 701" 100 0 0 100 float48mi - ));
+DATA(insert OID = 282 ( float48mi PGUID 11 f t t t 2 f 701 "700 701" 100 0 0 100 float48mi - ));
DESCR("subtract");
-DATA(insert OID = 283 ( float84mul PGUID 11 f t t 2 f 701 "701 700" 100 0 0 100 float84mul - ));
+DATA(insert OID = 283 ( float84mul PGUID 11 f t t t 2 f 701 "701 700" 100 0 0 100 float84mul - ));
DESCR("multiply");
-DATA(insert OID = 284 ( float84div PGUID 11 f t t 2 f 701 "701 700" 100 0 0 100 float84div - ));
+DATA(insert OID = 284 ( float84div PGUID 11 f t t t 2 f 701 "701 700" 100 0 0 100 float84div - ));
DESCR("divide");
-DATA(insert OID = 285 ( float84pl PGUID 11 f t t 2 f 701 "701 700" 100 0 0 100 float84pl - ));
+DATA(insert OID = 285 ( float84pl PGUID 11 f t t t 2 f 701 "701 700" 100 0 0 100 float84pl - ));
DESCR("addition");
-DATA(insert OID = 286 ( float84mi PGUID 11 f t t 2 f 701 "701 700" 100 0 0 100 float84mi - ));
+DATA(insert OID = 286 ( float84mi PGUID 11 f t t t 2 f 701 "701 700" 100 0 0 100 float84mi - ));
DESCR("subtract");
-DATA(insert OID = 287 ( float4eq PGUID 11 f t t 2 f 16 "700 700" 100 0 0 100 float4eq - ));
+DATA(insert OID = 287 ( float4eq PGUID 11 f t t t 2 f 16 "700 700" 100 0 0 100 float4eq - ));
DESCR("equal");
-DATA(insert OID = 288 ( float4ne PGUID 11 f t t 2 f 16 "700 700" 100 0 0 100 float4ne - ));
+DATA(insert OID = 288 ( float4ne PGUID 11 f t t t 2 f 16 "700 700" 100 0 0 100 float4ne - ));
DESCR("not equal");
-DATA(insert OID = 289 ( float4lt PGUID 11 f t t 2 f 16 "700 700" 100 0 0 100 float4lt - ));
+DATA(insert OID = 289 ( float4lt PGUID 11 f t t t 2 f 16 "700 700" 100 0 0 100 float4lt - ));
DESCR("less-than");
-DATA(insert OID = 290 ( float4le PGUID 11 f t t 2 f 16 "700 700" 100 0 0 100 float4le - ));
+DATA(insert OID = 290 ( float4le PGUID 11 f t t t 2 f 16 "700 700" 100 0 0 100 float4le - ));
DESCR("less-than-or-equal");
-DATA(insert OID = 291 ( float4gt PGUID 11 f t t 2 f 16 "700 700" 100 0 0 100 float4gt - ));
+DATA(insert OID = 291 ( float4gt PGUID 11 f t t t 2 f 16 "700 700" 100 0 0 100 float4gt - ));
DESCR("greater-than");
-DATA(insert OID = 292 ( float4ge PGUID 11 f t t 2 f 16 "700 700" 100 0 0 100 float4ge - ));
+DATA(insert OID = 292 ( float4ge PGUID 11 f t t t 2 f 16 "700 700" 100 0 0 100 float4ge - ));
DESCR("greater-than-or-equal");
-DATA(insert OID = 293 ( float8eq PGUID 11 f t t 2 f 16 "701 701" 100 0 0 100 float8eq - ));
+DATA(insert OID = 293 ( float8eq PGUID 11 f t t t 2 f 16 "701 701" 100 0 0 100 float8eq - ));
DESCR("equal");
-DATA(insert OID = 294 ( float8ne PGUID 11 f t t 2 f 16 "701 701" 100 0 0 100 float8ne - ));
+DATA(insert OID = 294 ( float8ne PGUID 11 f t t t 2 f 16 "701 701" 100 0 0 100 float8ne - ));
DESCR("not equal");
-DATA(insert OID = 295 ( float8lt PGUID 11 f t t 2 f 16 "701 701" 100 0 0 100 float8lt - ));
+DATA(insert OID = 295 ( float8lt PGUID 11 f t t t 2 f 16 "701 701" 100 0 0 100 float8lt - ));
DESCR("less-than");
-DATA(insert OID = 296 ( float8le PGUID 11 f t t 2 f 16 "701 701" 100 0 0 100 float8le - ));
+DATA(insert OID = 296 ( float8le PGUID 11 f t t t 2 f 16 "701 701" 100 0 0 100 float8le - ));
DESCR("less-than-or-equal");
-DATA(insert OID = 297 ( float8gt PGUID 11 f t t 2 f 16 "701 701" 100 0 0 100 float8gt - ));
+DATA(insert OID = 297 ( float8gt PGUID 11 f t t t 2 f 16 "701 701" 100 0 0 100 float8gt - ));
DESCR("greater-than");
-DATA(insert OID = 298 ( float8ge PGUID 11 f t t 2 f 16 "701 701" 100 0 0 100 float8ge - ));
+DATA(insert OID = 298 ( float8ge PGUID 11 f t t t 2 f 16 "701 701" 100 0 0 100 float8ge - ));
DESCR("greater-than-or-equal");
-DATA(insert OID = 299 ( float48eq PGUID 11 f t t 2 f 16 "700 701" 100 0 0 100 float48eq - ));
+DATA(insert OID = 299 ( float48eq PGUID 11 f t t t 2 f 16 "700 701" 100 0 0 100 float48eq - ));
DESCR("equal");
/* OIDS 300 - 399 */
-DATA(insert OID = 300 ( float48ne PGUID 11 f t t 2 f 16 "700 701" 100 0 0 100 float48ne - ));
+DATA(insert OID = 300 ( float48ne PGUID 11 f t t t 2 f 16 "700 701" 100 0 0 100 float48ne - ));
DESCR("not equal");
-DATA(insert OID = 301 ( float48lt PGUID 11 f t t 2 f 16 "700 701" 100 0 0 100 float48lt - ));
+DATA(insert OID = 301 ( float48lt PGUID 11 f t t t 2 f 16 "700 701" 100 0 0 100 float48lt - ));
DESCR("less-than");
-DATA(insert OID = 302 ( float48le PGUID 11 f t t 2 f 16 "700 701" 100 0 0 100 float48le - ));
+DATA(insert OID = 302 ( float48le PGUID 11 f t t t 2 f 16 "700 701" 100 0 0 100 float48le - ));
DESCR("less-than-or-equal");
-DATA(insert OID = 303 ( float48gt PGUID 11 f t t 2 f 16 "700 701" 100 0 0 100 float48gt - ));
+DATA(insert OID = 303 ( float48gt PGUID 11 f t t t 2 f 16 "700 701" 100 0 0 100 float48gt - ));
DESCR("greater-than");
-DATA(insert OID = 304 ( float48ge PGUID 11 f t t 2 f 16 "700 701" 100 0 0 100 float48ge - ));
+DATA(insert OID = 304 ( float48ge PGUID 11 f t t t 2 f 16 "700 701" 100 0 0 100 float48ge - ));
DESCR("greater-than-or-equal");
-DATA(insert OID = 305 ( float84eq PGUID 11 f t t 2 f 16 "701 700" 100 0 0 100 float84eq - ));
+DATA(insert OID = 305 ( float84eq PGUID 11 f t t t 2 f 16 "701 700" 100 0 0 100 float84eq - ));
DESCR("equal");
-DATA(insert OID = 306 ( float84ne PGUID 11 f t t 2 f 16 "701 700" 100 0 0 100 float84ne - ));
+DATA(insert OID = 306 ( float84ne PGUID 11 f t t t 2 f 16 "701 700" 100 0 0 100 float84ne - ));
DESCR("not equal");
-DATA(insert OID = 307 ( float84lt PGUID 11 f t t 2 f 16 "701 700" 100 0 0 100 float84lt - ));
+DATA(insert OID = 307 ( float84lt PGUID 11 f t t t 2 f 16 "701 700" 100 0 0 100 float84lt - ));
DESCR("less-than");
-DATA(insert OID = 308 ( float84le PGUID 11 f t t 2 f 16 "701 700" 100 0 0 100 float84le - ));
+DATA(insert OID = 308 ( float84le PGUID 11 f t t t 2 f 16 "701 700" 100 0 0 100 float84le - ));
DESCR("less-than-or-equal");
-DATA(insert OID = 309 ( float84gt PGUID 11 f t t 2 f 16 "701 700" 100 0 0 100 float84gt - ));
+DATA(insert OID = 309 ( float84gt PGUID 11 f t t t 2 f 16 "701 700" 100 0 0 100 float84gt - ));
DESCR("greater-than");
-DATA(insert OID = 310 ( float84ge PGUID 11 f t t 2 f 16 "701 700" 100 0 0 100 float84ge - ));
+DATA(insert OID = 310 ( float84ge PGUID 11 f t t t 2 f 16 "701 700" 100 0 0 100 float84ge - ));
DESCR("greater-than-or-equal");
-DATA(insert OID = 311 ( float8 PGUID 11 f t t 1 f 701 "700" 100 0 0 100 ftod - ));
+DATA(insert OID = 311 ( float8 PGUID 11 f t t t 1 f 701 "700" 100 0 0 100 ftod - ));
DESCR("convert float4 to float8");
-DATA(insert OID = 312 ( float4 PGUID 11 f t t 1 f 700 "701" 100 0 0 100 dtof - ));
+DATA(insert OID = 312 ( float4 PGUID 11 f t t t 1 f 700 "701" 100 0 0 100 dtof - ));
DESCR("convert float8 to float4");
-DATA(insert OID = 313 ( int4 PGUID 11 f t t 1 f 23 "21" 100 0 0 100 i2toi4 - ));
+DATA(insert OID = 313 ( int4 PGUID 11 f t t t 1 f 23 "21" 100 0 0 100 i2toi4 - ));
DESCR("convert int2 to int4");
-DATA(insert OID = 314 ( int2 PGUID 11 f t t 1 f 21 "23" 100 0 0 100 i4toi2 - ));
+DATA(insert OID = 314 ( int2 PGUID 11 f t t t 1 f 21 "23" 100 0 0 100 i4toi2 - ));
DESCR("convert int4 to int2");
-DATA(insert OID = 315 ( int2vectoreq PGUID 11 f t t 2 f 16 "22 22" 100 0 0 100 int2vectoreq - ));
+DATA(insert OID = 315 ( int2vectoreq PGUID 11 f t t t 2 f 16 "22 22" 100 0 0 100 int2vectoreq - ));
DESCR("equal");
-DATA(insert OID = 316 ( float8 PGUID 11 f t t 1 f 701 "23" 100 0 0 100 i4tod - ));
+DATA(insert OID = 316 ( float8 PGUID 11 f t t t 1 f 701 "23" 100 0 0 100 i4tod - ));
DESCR("convert int4 to float8");
-DATA(insert OID = 317 ( int4 PGUID 11 f t t 1 f 23 "701" 100 0 0 100 dtoi4 - ));
+DATA(insert OID = 317 ( int4 PGUID 11 f t t t 1 f 23 "701" 100 0 0 100 dtoi4 - ));
DESCR("convert float8 to int4");
-DATA(insert OID = 318 ( float4 PGUID 11 f t t 1 f 700 "23" 100 0 0 100 i4tof - ));
+DATA(insert OID = 318 ( float4 PGUID 11 f t t t 1 f 700 "23" 100 0 0 100 i4tof - ));
DESCR("convert int4 to float4");
-DATA(insert OID = 319 ( int4 PGUID 11 f t t 1 f 23 "700" 100 0 0 100 ftoi4 - ));
+DATA(insert OID = 319 ( int4 PGUID 11 f t t t 1 f 23 "700" 100 0 0 100 ftoi4 - ));
DESCR("convert float4 to int4");
-DATA(insert OID = 320 ( rtinsert PGUID 11 f t f 5 f 23 "0" 100 0 0 100 rtinsert - ));
+DATA(insert OID = 320 ( rtinsert PGUID 11 f t f t 5 f 23 "0" 100 0 0 100 rtinsert - ));
DESCR("r-tree(internal)");
-DATA(insert OID = 321 ( rtdelete PGUID 11 f t f 2 f 23 "0" 100 0 0 100 rtdelete - ));
+DATA(insert OID = 321 ( rtdelete PGUID 11 f t f t 2 f 23 "0" 100 0 0 100 rtdelete - ));
DESCR("r-tree(internal)");
-DATA(insert OID = 322 ( rtgettuple PGUID 11 f t f 2 f 23 "0" 100 0 0 100 rtgettuple - ));
+DATA(insert OID = 322 ( rtgettuple PGUID 11 f t f t 2 f 23 "0" 100 0 0 100 rtgettuple - ));
DESCR("r-tree(internal)");
-DATA(insert OID = 323 ( rtbuild PGUID 11 f t f 9 f 23 "0" 100 0 0 100 rtbuild - ));
+DATA(insert OID = 323 ( rtbuild PGUID 11 f t f t 9 f 23 "0" 100 0 0 100 rtbuild - ));
DESCR("r-tree(internal)");
-DATA(insert OID = 324 ( rtbeginscan PGUID 11 f t f 4 f 23 "0" 100 0 0 100 rtbeginscan - ));
+DATA(insert OID = 324 ( rtbeginscan PGUID 11 f t f t 4 f 23 "0" 100 0 0 100 rtbeginscan - ));
DESCR("r-tree(internal)");
-DATA(insert OID = 325 ( rtendscan PGUID 11 f t f 1 f 23 "0" 100 0 0 100 rtendscan - ));
+DATA(insert OID = 325 ( rtendscan PGUID 11 f t f t 1 f 23 "0" 100 0 0 100 rtendscan - ));
DESCR("r-tree(internal)");
-DATA(insert OID = 326 ( rtmarkpos PGUID 11 f t f 1 f 23 "0" 100 0 0 100 rtmarkpos - ));
+DATA(insert OID = 326 ( rtmarkpos PGUID 11 f t f t 1 f 23 "0" 100 0 0 100 rtmarkpos - ));
DESCR("r-tree(internal)");
-DATA(insert OID = 327 ( rtrestrpos PGUID 11 f t f 1 f 23 "0" 100 0 0 100 rtrestrpos - ));
+DATA(insert OID = 327 ( rtrestrpos PGUID 11 f t f t 1 f 23 "0" 100 0 0 100 rtrestrpos - ));
DESCR("r-tree(internal)");
-DATA(insert OID = 328 ( rtrescan PGUID 11 f t f 3 f 23 "0" 100 0 0 100 rtrescan - ));
+DATA(insert OID = 328 ( rtrescan PGUID 11 f t f t 3 f 23 "0" 100 0 0 100 rtrescan - ));
DESCR("r-tree(internal)");
-DATA(insert OID = 330 ( btgettuple PGUID 11 f t f 2 f 23 "0" 100 0 0 100 btgettuple - ));
+DATA(insert OID = 330 ( btgettuple PGUID 11 f t f t 2 f 23 "0" 100 0 0 100 btgettuple - ));
DESCR("btree(internal)");
-DATA(insert OID = 331 ( btinsert PGUID 11 f t f 5 f 23 "0" 100 0 0 100 btinsert - ));
+DATA(insert OID = 331 ( btinsert PGUID 11 f t f t 5 f 23 "0" 100 0 0 100 btinsert - ));
DESCR("btree(internal)");
-DATA(insert OID = 332 ( btdelete PGUID 11 f t f 2 f 23 "0" 100 0 0 100 btdelete - ));
+DATA(insert OID = 332 ( btdelete PGUID 11 f t f t 2 f 23 "0" 100 0 0 100 btdelete - ));
DESCR("btree(internal)");
-DATA(insert OID = 333 ( btbeginscan PGUID 11 f t f 4 f 23 "0" 100 0 0 100 btbeginscan - ));
+DATA(insert OID = 333 ( btbeginscan PGUID 11 f t f t 4 f 23 "0" 100 0 0 100 btbeginscan - ));
DESCR("btree(internal)");
-DATA(insert OID = 334 ( btrescan PGUID 11 f t f 3 f 23 "0" 100 0 0 100 btrescan - ));
+DATA(insert OID = 334 ( btrescan PGUID 11 f t f t 3 f 23 "0" 100 0 0 100 btrescan - ));
DESCR("btree(internal)");
-DATA(insert OID = 335 ( btendscan PGUID 11 f t f 1 f 23 "0" 100 0 0 100 btendscan - ));
+DATA(insert OID = 335 ( btendscan PGUID 11 f t f t 1 f 23 "0" 100 0 0 100 btendscan - ));
DESCR("btree(internal)");
-DATA(insert OID = 336 ( btmarkpos PGUID 11 f t f 1 f 23 "0" 100 0 0 100 btmarkpos - ));
+DATA(insert OID = 336 ( btmarkpos PGUID 11 f t f t 1 f 23 "0" 100 0 0 100 btmarkpos - ));
DESCR("btree(internal)");
-DATA(insert OID = 337 ( btrestrpos PGUID 11 f t f 1 f 23 "0" 100 0 0 100 btrestrpos - ));
+DATA(insert OID = 337 ( btrestrpos PGUID 11 f t f t 1 f 23 "0" 100 0 0 100 btrestrpos - ));
DESCR("btree(internal)");
-DATA(insert OID = 338 ( btbuild PGUID 11 f t f 9 f 23 "0" 100 0 0 100 btbuild - ));
+DATA(insert OID = 338 ( btbuild PGUID 11 f t f t 9 f 23 "0" 100 0 0 100 btbuild - ));
DESCR("btree(internal)");
-DATA(insert OID = 339 ( poly_same PGUID 11 f t t 2 f 16 "604 604" 100 0 1 0 poly_same - ));
+DATA(insert OID = 339 ( poly_same PGUID 11 f t t t 2 f 16 "604 604" 100 0 1 0 poly_same - ));
DESCR("same as");
-DATA(insert OID = 340 ( poly_contain PGUID 11 f t t 2 f 16 "604 604" 100 0 1 0 poly_contain - ));
+DATA(insert OID = 340 ( poly_contain PGUID 11 f t t t 2 f 16 "604 604" 100 0 1 0 poly_contain - ));
DESCR("contains");
-DATA(insert OID = 341 ( poly_left PGUID 11 f t t 2 f 16 "604 604" 100 0 1 0 poly_left - ));
+DATA(insert OID = 341 ( poly_left PGUID 11 f t t t 2 f 16 "604 604" 100 0 1 0 poly_left - ));
DESCR("is left of");
-DATA(insert OID = 342 ( poly_overleft PGUID 11 f t t 2 f 16 "604 604" 100 0 1 0 poly_overleft - ));
+DATA(insert OID = 342 ( poly_overleft PGUID 11 f t t t 2 f 16 "604 604" 100 0 1 0 poly_overleft - ));
DESCR("overlaps, but does not extend to right of");
-DATA(insert OID = 343 ( poly_overright PGUID 11 f t t 2 f 16 "604 604" 100 0 1 0 poly_overright - ));
+DATA(insert OID = 343 ( poly_overright PGUID 11 f t t t 2 f 16 "604 604" 100 0 1 0 poly_overright - ));
DESCR("overlaps, but does not extend to left of");
-DATA(insert OID = 344 ( poly_right PGUID 11 f t t 2 f 16 "604 604" 100 0 1 0 poly_right - ));
+DATA(insert OID = 344 ( poly_right PGUID 11 f t t t 2 f 16 "604 604" 100 0 1 0 poly_right - ));
DESCR("is left of");
-DATA(insert OID = 345 ( poly_contained PGUID 11 f t t 2 f 16 "604 604" 100 0 1 0 poly_contained - ));
+DATA(insert OID = 345 ( poly_contained PGUID 11 f t t t 2 f 16 "604 604" 100 0 1 0 poly_contained - ));
DESCR("contained in");
-DATA(insert OID = 346 ( poly_overlap PGUID 11 f t t 2 f 16 "604 604" 100 0 1 0 poly_overlap - ));
+DATA(insert OID = 346 ( poly_overlap PGUID 11 f t t t 2 f 16 "604 604" 100 0 1 0 poly_overlap - ));
DESCR("overlaps");
-DATA(insert OID = 347 ( poly_in PGUID 11 f t t 1 f 604 "0" 100 0 1 0 poly_in - ));
+DATA(insert OID = 347 ( poly_in PGUID 11 f t t t 1 f 604 "0" 100 0 1 0 poly_in - ));
DESCR("(internal)");
-DATA(insert OID = 348 ( poly_out PGUID 11 f t t 1 f 23 "0" 100 0 1 0 poly_out - ));
+DATA(insert OID = 348 ( poly_out PGUID 11 f t t t 1 f 23 "0" 100 0 1 0 poly_out - ));
DESCR("(internal)");
-DATA(insert OID = 350 ( btint2cmp PGUID 11 f t t 2 f 23 "21 21" 100 0 0 100 btint2cmp - ));
+DATA(insert OID = 350 ( btint2cmp PGUID 11 f t t t 2 f 23 "21 21" 100 0 0 100 btint2cmp - ));
DESCR("btree less-equal-greater");
-DATA(insert OID = 351 ( btint4cmp PGUID 11 f t t 2 f 23 "23 23" 100 0 0 100 btint4cmp - ));
+DATA(insert OID = 351 ( btint4cmp PGUID 11 f t t t 2 f 23 "23 23" 100 0 0 100 btint4cmp - ));
DESCR("btree less-equal-greater");
-DATA(insert OID = 842 ( btint8cmp PGUID 11 f t t 2 f 23 "20 20" 100 0 0 100 btint8cmp - ));
+DATA(insert OID = 842 ( btint8cmp PGUID 11 f t t t 2 f 23 "20 20" 100 0 0 100 btint8cmp - ));
DESCR("btree less-equal-greater");
-DATA(insert OID = 352 ( btint42cmp PGUID 11 f t t 2 f 23 "23 21" 100 0 0 100 btint42cmp - ));
+DATA(insert OID = 352 ( btint42cmp PGUID 11 f t t t 2 f 23 "23 21" 100 0 0 100 btint42cmp - ));
DESCR("btree less-equal-greater");
-DATA(insert OID = 353 ( btint24cmp PGUID 11 f t t 2 f 23 "21 23" 100 0 0 100 btint24cmp - ));
+DATA(insert OID = 353 ( btint24cmp PGUID 11 f t t t 2 f 23 "21 23" 100 0 0 100 btint24cmp - ));
DESCR("btree less-equal-greater");
-DATA(insert OID = 354 ( btfloat4cmp PGUID 11 f t t 2 f 23 "700 700" 100 0 0 100 btfloat4cmp - ));
+DATA(insert OID = 354 ( btfloat4cmp PGUID 11 f t t t 2 f 23 "700 700" 100 0 0 100 btfloat4cmp - ));
DESCR("btree less-equal-greater");
-DATA(insert OID = 355 ( btfloat8cmp PGUID 11 f t t 2 f 23 "701 701" 100 0 0 100 btfloat8cmp - ));
+DATA(insert OID = 355 ( btfloat8cmp PGUID 11 f t t t 2 f 23 "701 701" 100 0 0 100 btfloat8cmp - ));
DESCR("btree less-equal-greater");
-DATA(insert OID = 356 ( btoidcmp PGUID 11 f t t 2 f 23 "26 26" 100 0 0 100 btoidcmp - ));
+DATA(insert OID = 356 ( btoidcmp PGUID 11 f t t t 2 f 23 "26 26" 100 0 0 100 btoidcmp - ));
DESCR("btree less-equal-greater");
-DATA(insert OID = 404 ( btoidvectorcmp PGUID 11 f t t 2 f 23 "30 30" 100 0 0 100 btoidvectorcmp - ));
+DATA(insert OID = 404 ( btoidvectorcmp PGUID 11 f t t t 2 f 23 "30 30" 100 0 0 100 btoidvectorcmp - ));
DESCR("btree less-equal-greater");
-DATA(insert OID = 357 ( btabstimecmp PGUID 11 f t f 2 f 23 "702 702" 100 0 0 100 btabstimecmp - ));
+DATA(insert OID = 357 ( btabstimecmp PGUID 11 f t f t 2 f 23 "702 702" 100 0 0 100 btabstimecmp - ));
DESCR("btree less-equal-greater");
-DATA(insert OID = 358 ( btcharcmp PGUID 11 f t t 2 f 23 "18 18" 100 0 0 100 btcharcmp - ));
+DATA(insert OID = 358 ( btcharcmp PGUID 11 f t t t 2 f 23 "18 18" 100 0 0 100 btcharcmp - ));
DESCR("btree less-equal-greater");
-DATA(insert OID = 359 ( btnamecmp PGUID 11 f t t 2 f 23 "19 19" 100 0 0 100 btnamecmp - ));
+DATA(insert OID = 359 ( btnamecmp PGUID 11 f t t t 2 f 23 "19 19" 100 0 0 100 btnamecmp - ));
DESCR("btree less-equal-greater");
-DATA(insert OID = 360 ( bttextcmp PGUID 11 f t t 2 f 23 "25 25" 100 0 0 100 bttextcmp - ));
+DATA(insert OID = 360 ( bttextcmp PGUID 11 f t t t 2 f 23 "25 25" 100 0 0 100 bttextcmp - ));
DESCR("btree less-equal-greater");
-DATA(insert OID = 361 ( lseg_distance PGUID 11 f t t 2 f 701 "601 601" 100 0 0 100 lseg_distance - ));
+DATA(insert OID = 361 ( lseg_distance PGUID 11 f t t t 2 f 701 "601 601" 100 0 0 100 lseg_distance - ));
DESCR("distance between");
-DATA(insert OID = 362 ( lseg_interpt PGUID 11 f t t 2 f 600 "601 601" 100 0 0 100 lseg_interpt - ));
+DATA(insert OID = 362 ( lseg_interpt PGUID 11 f t t t 2 f 600 "601 601" 100 0 0 100 lseg_interpt - ));
DESCR("");
-DATA(insert OID = 363 ( dist_ps PGUID 11 f t t 2 f 701 "600 601" 100 0 0 100 dist_ps - ));
+DATA(insert OID = 363 ( dist_ps PGUID 11 f t t t 2 f 701 "600 601" 100 0 0 100 dist_ps - ));
DESCR("distance between");
-DATA(insert OID = 364 ( dist_pb PGUID 11 f t t 2 f 701 "600 603" 100 0 0 100 dist_pb - ));
+DATA(insert OID = 364 ( dist_pb PGUID 11 f t t t 2 f 701 "600 603" 100 0 0 100 dist_pb - ));
DESCR("distance between point and box");
-DATA(insert OID = 365 ( dist_sb PGUID 11 f t t 2 f 701 "601 603" 100 0 0 100 dist_sb - ));
+DATA(insert OID = 365 ( dist_sb PGUID 11 f t t t 2 f 701 "601 603" 100 0 0 100 dist_sb - ));
DESCR("distance between segment and box");
-DATA(insert OID = 366 ( close_ps PGUID 11 f t t 2 f 600 "600 601" 100 0 0 100 close_ps - ));
+DATA(insert OID = 366 ( close_ps PGUID 11 f t t t 2 f 600 "600 601" 100 0 0 100 close_ps - ));
DESCR("closest point on line segment");
-DATA(insert OID = 367 ( close_pb PGUID 11 f t t 2 f 600 "600 603" 100 0 0 100 close_pb - ));
+DATA(insert OID = 367 ( close_pb PGUID 11 f t t t 2 f 600 "600 603" 100 0 0 100 close_pb - ));
DESCR("closest point on box");
-DATA(insert OID = 368 ( close_sb PGUID 11 f t t 2 f 600 "601 603" 100 0 0 100 close_sb - ));
+DATA(insert OID = 368 ( close_sb PGUID 11 f t t t 2 f 600 "601 603" 100 0 0 100 close_sb - ));
DESCR("closest point to line segment on box");
-DATA(insert OID = 369 ( on_ps PGUID 11 f t t 2 f 16 "600 601" 100 0 0 100 on_ps - ));
+DATA(insert OID = 369 ( on_ps PGUID 11 f t t t 2 f 16 "600 601" 100 0 0 100 on_ps - ));
DESCR("point contained in segment");
-DATA(insert OID = 370 ( path_distance PGUID 11 f t t 2 f 701 "602 602" 100 0 1 0 path_distance - ));
+DATA(insert OID = 370 ( path_distance PGUID 11 f t t t 2 f 701 "602 602" 100 0 1 0 path_distance - ));
DESCR("distance between paths");
-DATA(insert OID = 371 ( dist_ppath PGUID 11 f t t 2 f 701 "600 602" 100 0 1 0 dist_ppath - ));
+DATA(insert OID = 371 ( dist_ppath PGUID 11 f t t t 2 f 701 "600 602" 100 0 1 0 dist_ppath - ));
DESCR("distance between point and patch");
-DATA(insert OID = 372 ( on_sb PGUID 11 f t t 2 f 16 "601 603" 100 0 0 100 on_sb - ));
+DATA(insert OID = 372 ( on_sb PGUID 11 f t t t 2 f 16 "601 603" 100 0 0 100 on_sb - ));
DESCR("contained in");
-DATA(insert OID = 373 ( inter_sb PGUID 11 f t t 2 f 16 "601 603" 100 0 0 100 inter_sb - ));
+DATA(insert OID = 373 ( inter_sb PGUID 11 f t t t 2 f 16 "601 603" 100 0 0 100 inter_sb - ));
DESCR("intersects?");
/* OIDS 400 - 499 */
-DATA(insert OID = 406 ( text PGUID 11 f t t 1 f 25 "19" 100 0 0 100 name_text - ));
+DATA(insert OID = 406 ( text PGUID 11 f t t t 1 f 25 "19" 100 0 0 100 name_text - ));
DESCR("convert name to text");
-DATA(insert OID = 407 ( name PGUID 11 f t t 1 f 19 "25" 100 0 0 100 text_name - ));
+DATA(insert OID = 407 ( name PGUID 11 f t t t 1 f 19 "25" 100 0 0 100 text_name - ));
DESCR("convert text to name");
-DATA(insert OID = 408 ( bpchar PGUID 11 f t t 1 f 1042 "19" 100 0 0 100 name_bpchar - ));
+DATA(insert OID = 408 ( bpchar PGUID 11 f t t t 1 f 1042 "19" 100 0 0 100 name_bpchar - ));
DESCR("convert name to char()");
-DATA(insert OID = 409 ( name PGUID 11 f t t 1 f 19 "1042" 100 0 0 100 bpchar_name - ));
+DATA(insert OID = 409 ( name PGUID 11 f t t t 1 f 19 "1042" 100 0 0 100 bpchar_name - ));
DESCR("convert char() to name");
-DATA(insert OID = 438 ( hashcostestimate PGUID 11 f t f 7 f 0 "0 0 0 0 0 0 0" 100 0 0 100 hashcostestimate - ));
+DATA(insert OID = 438 ( hashcostestimate PGUID 11 f t f t 7 f 0 "0 0 0 0 0 0 0" 100 0 0 100 hashcostestimate - ));
DESCR("hash index cost estimator");
-DATA(insert OID = 440 ( hashgettuple PGUID 11 f t f 2 f 23 "0" 100 0 0 100 hashgettuple - ));
+DATA(insert OID = 440 ( hashgettuple PGUID 11 f t f t 2 f 23 "0" 100 0 0 100 hashgettuple - ));
DESCR("hash(internal)");
-DATA(insert OID = 441 ( hashinsert PGUID 11 f t f 5 f 23 "0" 100 0 0 100 hashinsert - ));
+DATA(insert OID = 441 ( hashinsert PGUID 11 f t f t 5 f 23 "0" 100 0 0 100 hashinsert - ));
DESCR("hash(internal)");
-DATA(insert OID = 442 ( hashdelete PGUID 11 f t f 2 f 23 "0" 100 0 0 100 hashdelete - ));
+DATA(insert OID = 442 ( hashdelete PGUID 11 f t f t 2 f 23 "0" 100 0 0 100 hashdelete - ));
DESCR("hash(internal)");
-DATA(insert OID = 443 ( hashbeginscan PGUID 11 f t f 4 f 23 "0" 100 0 0 100 hashbeginscan - ));
+DATA(insert OID = 443 ( hashbeginscan PGUID 11 f t f t 4 f 23 "0" 100 0 0 100 hashbeginscan - ));
DESCR("hash(internal)");
-DATA(insert OID = 444 ( hashrescan PGUID 11 f t f 3 f 23 "0" 100 0 0 100 hashrescan - ));
+DATA(insert OID = 444 ( hashrescan PGUID 11 f t f t 3 f 23 "0" 100 0 0 100 hashrescan - ));
DESCR("hash(internal)");
-DATA(insert OID = 445 ( hashendscan PGUID 11 f t f 1 f 23 "0" 100 0 0 100 hashendscan - ));
+DATA(insert OID = 445 ( hashendscan PGUID 11 f t f t 1 f 23 "0" 100 0 0 100 hashendscan - ));
DESCR("hash(internal)");
-DATA(insert OID = 446 ( hashmarkpos PGUID 11 f t f 1 f 23 "0" 100 0 0 100 hashmarkpos - ));
+DATA(insert OID = 446 ( hashmarkpos PGUID 11 f t f t 1 f 23 "0" 100 0 0 100 hashmarkpos - ));
DESCR("hash(internal)");
-DATA(insert OID = 447 ( hashrestrpos PGUID 11 f t f 1 f 23 "0" 100 0 0 100 hashrestrpos - ));
+DATA(insert OID = 447 ( hashrestrpos PGUID 11 f t f t 1 f 23 "0" 100 0 0 100 hashrestrpos - ));
DESCR("hash(internal)");
-DATA(insert OID = 448 ( hashbuild PGUID 11 f t f 9 f 23 "0" 100 0 0 100 hashbuild - ));
+DATA(insert OID = 448 ( hashbuild PGUID 11 f t f t 9 f 23 "0" 100 0 0 100 hashbuild - ));
DESCR("hash(internal)");
-DATA(insert OID = 449 ( hashint2 PGUID 11 f t t 1 f 23 "21" 100 0 0 100 hashint2 - ));
+DATA(insert OID = 449 ( hashint2 PGUID 11 f t t t 1 f 23 "21" 100 0 0 100 hashint2 - ));
DESCR("hash");
-DATA(insert OID = 450 ( hashint4 PGUID 11 f t t 1 f 23 "23" 100 0 0 100 hashint4 - ));
+DATA(insert OID = 450 ( hashint4 PGUID 11 f t t t 1 f 23 "23" 100 0 0 100 hashint4 - ));
DESCR("hash");
-DATA(insert OID = 949 ( hashint8 PGUID 11 f t t 1 f 23 "20" 100 0 0 100 hashint8 - ));
+DATA(insert OID = 949 ( hashint8 PGUID 11 f t t t 1 f 23 "20" 100 0 0 100 hashint8 - ));
DESCR("hash");
-DATA(insert OID = 451 ( hashfloat4 PGUID 11 f t t 1 f 23 "700" 100 0 0 100 hashfloat4 - ));
+DATA(insert OID = 451 ( hashfloat4 PGUID 11 f t t t 1 f 23 "700" 100 0 0 100 hashfloat4 - ));
DESCR("hash");
-DATA(insert OID = 452 ( hashfloat8 PGUID 11 f t t 1 f 23 "701" 100 0 0 100 hashfloat8 - ));
+DATA(insert OID = 452 ( hashfloat8 PGUID 11 f t t t 1 f 23 "701" 100 0 0 100 hashfloat8 - ));
DESCR("hash");
-DATA(insert OID = 453 ( hashoid PGUID 11 f t t 1 f 23 "26" 100 0 0 100 hashoid - ));
+DATA(insert OID = 453 ( hashoid PGUID 11 f t t t 1 f 23 "26" 100 0 0 100 hashoid - ));
DESCR("hash");
-DATA(insert OID = 454 ( hashchar PGUID 11 f t t 1 f 23 "18" 100 0 0 100 hashchar - ));
+DATA(insert OID = 454 ( hashchar PGUID 11 f t t t 1 f 23 "18" 100 0 0 100 hashchar - ));
DESCR("hash");
-DATA(insert OID = 455 ( hashname PGUID 11 f t t 1 f 23 "19" 100 0 0 100 hashname - ));
+DATA(insert OID = 455 ( hashname PGUID 11 f t t t 1 f 23 "19" 100 0 0 100 hashname - ));
DESCR("hash");
-DATA(insert OID = 456 ( hashtext PGUID 11 f t t 1 f 23 "25" 100 0 0 100 hashtext - ));
+DATA(insert OID = 456 ( hashtext PGUID 11 f t t t 1 f 23 "25" 100 0 0 100 hashtext - ));
DESCR("hash");
-DATA(insert OID = 457 ( hashoidvector PGUID 11 f t t 1 f 23 "30" 100 0 0 100 hashoidvector - ));
+DATA(insert OID = 457 ( hashoidvector PGUID 11 f t t t 1 f 23 "30" 100 0 0 100 hashoidvector - ));
DESCR("hash");
-DATA(insert OID = 458 ( text_larger PGUID 11 f t t 2 f 25 "25 25" 100 0 0 100 text_larger - ));
+DATA(insert OID = 458 ( text_larger PGUID 11 f t t t 2 f 25 "25 25" 100 0 0 100 text_larger - ));
DESCR("larger of two");
-DATA(insert OID = 459 ( text_smaller PGUID 11 f t t 2 f 25 "25 25" 100 0 0 100 text_smaller - ));
+DATA(insert OID = 459 ( text_smaller PGUID 11 f t t t 2 f 25 "25 25" 100 0 0 100 text_smaller - ));
DESCR("smaller of two");
-DATA(insert OID = 460 ( int8in PGUID 11 f t t 1 f 20 "0" 100 0 0 100 int8in - ));
+DATA(insert OID = 460 ( int8in PGUID 11 f t t t 1 f 20 "0" 100 0 0 100 int8in - ));
DESCR("(internal)");
-DATA(insert OID = 461 ( int8out PGUID 11 f t t 1 f 23 "0" 100 0 0 100 int8out - ));
+DATA(insert OID = 461 ( int8out PGUID 11 f t t t 1 f 23 "0" 100 0 0 100 int8out - ));
DESCR("(internal)");
-DATA(insert OID = 462 ( int8um PGUID 11 f t t 1 f 20 "20" 100 0 0 100 int8um - ));
+DATA(insert OID = 462 ( int8um PGUID 11 f t t t 1 f 20 "20" 100 0 0 100 int8um - ));
DESCR("negate");
-DATA(insert OID = 463 ( int8pl PGUID 11 f t t 2 f 20 "20 20" 100 0 0 100 int8pl - ));
+DATA(insert OID = 463 ( int8pl PGUID 11 f t t t 2 f 20 "20 20" 100 0 0 100 int8pl - ));
DESCR("addition");
-DATA(insert OID = 464 ( int8mi PGUID 11 f t t 2 f 20 "20 20" 100 0 0 100 int8mi - ));
+DATA(insert OID = 464 ( int8mi PGUID 11 f t t t 2 f 20 "20 20" 100 0 0 100 int8mi - ));
DESCR("subtraction");
-DATA(insert OID = 465 ( int8mul PGUID 11 f t t 2 f 20 "20 20" 100 0 0 100 int8mul - ));
+DATA(insert OID = 465 ( int8mul PGUID 11 f t t t 2 f 20 "20 20" 100 0 0 100 int8mul - ));
DESCR("multiply");
-DATA(insert OID = 466 ( int8div PGUID 11 f t t 2 f 20 "20 20" 100 0 0 100 int8div - ));
+DATA(insert OID = 466 ( int8div PGUID 11 f t t t 2 f 20 "20 20" 100 0 0 100 int8div - ));
DESCR("divide");
-DATA(insert OID = 467 ( int8eq PGUID 11 f t t 2 f 16 "20 20" 100 0 0 100 int8eq - ));
+DATA(insert OID = 467 ( int8eq PGUID 11 f t t t 2 f 16 "20 20" 100 0 0 100 int8eq - ));
DESCR("equal");
-DATA(insert OID = 468 ( int8ne PGUID 11 f t t 2 f 16 "20 20" 100 0 0 100 int8ne - ));
+DATA(insert OID = 468 ( int8ne PGUID 11 f t t t 2 f 16 "20 20" 100 0 0 100 int8ne - ));
DESCR("not equal");
-DATA(insert OID = 469 ( int8lt PGUID 11 f t t 2 f 16 "20 20" 100 0 0 100 int8lt - ));
+DATA(insert OID = 469 ( int8lt PGUID 11 f t t t 2 f 16 "20 20" 100 0 0 100 int8lt - ));
DESCR("less-than");
-DATA(insert OID = 470 ( int8gt PGUID 11 f t t 2 f 16 "20 20" 100 0 0 100 int8gt - ));
+DATA(insert OID = 470 ( int8gt PGUID 11 f t t t 2 f 16 "20 20" 100 0 0 100 int8gt - ));
DESCR("greater-than");
-DATA(insert OID = 471 ( int8le PGUID 11 f t t 2 f 16 "20 20" 100 0 0 100 int8le - ));
+DATA(insert OID = 471 ( int8le PGUID 11 f t t t 2 f 16 "20 20" 100 0 0 100 int8le - ));
DESCR("less-than-or-equal");
-DATA(insert OID = 472 ( int8ge PGUID 11 f t t 2 f 16 "20 20" 100 0 0 100 int8ge - ));
+DATA(insert OID = 472 ( int8ge PGUID 11 f t t t 2 f 16 "20 20" 100 0 0 100 int8ge - ));
DESCR("greater-than-or-equal");
-DATA(insert OID = 474 ( int84eq PGUID 11 f t t 2 f 16 "20 23" 100 0 0 100 int84eq - ));
+DATA(insert OID = 474 ( int84eq PGUID 11 f t t t 2 f 16 "20 23" 100 0 0 100 int84eq - ));
DESCR("equal");
-DATA(insert OID = 475 ( int84ne PGUID 11 f t t 2 f 16 "20 23" 100 0 0 100 int84ne - ));
+DATA(insert OID = 475 ( int84ne PGUID 11 f t t t 2 f 16 "20 23" 100 0 0 100 int84ne - ));
DESCR("not equal");
-DATA(insert OID = 476 ( int84lt PGUID 11 f t t 2 f 16 "20 23" 100 0 0 100 int84lt - ));
+DATA(insert OID = 476 ( int84lt PGUID 11 f t t t 2 f 16 "20 23" 100 0 0 100 int84lt - ));
DESCR("less-than");
-DATA(insert OID = 477 ( int84gt PGUID 11 f t t 2 f 16 "20 23" 100 0 0 100 int84gt - ));
+DATA(insert OID = 477 ( int84gt PGUID 11 f t t t 2 f 16 "20 23" 100 0 0 100 int84gt - ));
DESCR("greater-than");
-DATA(insert OID = 478 ( int84le PGUID 11 f t t 2 f 16 "20 23" 100 0 0 100 int84le - ));
+DATA(insert OID = 478 ( int84le PGUID 11 f t t t 2 f 16 "20 23" 100 0 0 100 int84le - ));
DESCR("less-than-or-equal");
-DATA(insert OID = 479 ( int84ge PGUID 11 f t t 2 f 16 "20 23" 100 0 0 100 int84ge - ));
+DATA(insert OID = 479 ( int84ge PGUID 11 f t t t 2 f 16 "20 23" 100 0 0 100 int84ge - ));
DESCR("greater-than-or-equal");
-DATA(insert OID = 480 ( int4 PGUID 11 f t t 1 f 23 "20" 100 0 0 100 int84 - ));
+DATA(insert OID = 480 ( int4 PGUID 11 f t t t 1 f 23 "20" 100 0 0 100 int84 - ));
DESCR("convert int8 to int4");
-DATA(insert OID = 481 ( int8 PGUID 11 f t t 1 f 20 "23" 100 0 0 100 int48 - ));
+DATA(insert OID = 481 ( int8 PGUID 11 f t t t 1 f 20 "23" 100 0 0 100 int48 - ));
DESCR("convert int4 to int8");
-DATA(insert OID = 482 ( float8 PGUID 11 f t t 1 f 701 "20" 100 0 0 100 i8tod - ));
+DATA(insert OID = 482 ( float8 PGUID 11 f t t t 1 f 701 "20" 100 0 0 100 i8tod - ));
DESCR("convert int8 to float8");
-DATA(insert OID = 483 ( int8 PGUID 11 f t t 1 f 20 "701" 100 0 0 100 dtoi8 - ));
+DATA(insert OID = 483 ( int8 PGUID 11 f t t t 1 f 20 "701" 100 0 0 100 dtoi8 - ));
DESCR("convert float8 to int8");
/* OIDS 500 - 599 */
/* OIDS 600 - 699 */
-DATA(insert OID = 1285 ( int4notin PGUID 11 f t f 2 f 16 "23 0" 100 0 0 100 int4notin - ));
+DATA(insert OID = 1285 ( int4notin PGUID 11 f t f t 2 f 16 "23 0" 100 0 0 100 int4notin - ));
DESCR("not in");
-DATA(insert OID = 1286 ( oidnotin PGUID 11 f t f 2 f 16 "26 0" 100 0 0 100 oidnotin - ));
+DATA(insert OID = 1286 ( oidnotin PGUID 11 f t f t 2 f 16 "26 0" 100 0 0 100 oidnotin - ));
DESCR("not in");
-DATA(insert OID = 1287 ( int44in PGUID 11 f t t 1 f 22 "0" 100 0 0 100 int44in - ));
+DATA(insert OID = 1287 ( int44in PGUID 11 f t t t 1 f 22 "0" 100 0 0 100 int44in - ));
DESCR("(internal)");
-DATA(insert OID = 653 ( int44out PGUID 11 f t t 1 f 23 "0" 100 0 0 100 int44out - ));
+DATA(insert OID = 653 ( int44out PGUID 11 f t t t 1 f 23 "0" 100 0 0 100 int44out - ));
DESCR("(internal)");
-DATA(insert OID = 655 ( namelt PGUID 11 f t t 2 f 16 "19 19" 100 0 0 100 namelt - ));
+DATA(insert OID = 655 ( namelt PGUID 11 f t t t 2 f 16 "19 19" 100 0 0 100 namelt - ));
DESCR("less-than");
-DATA(insert OID = 656 ( namele PGUID 11 f t t 2 f 16 "19 19" 100 0 0 100 namele - ));
+DATA(insert OID = 656 ( namele PGUID 11 f t t t 2 f 16 "19 19" 100 0 0 100 namele - ));
DESCR("less-than-or-equal");
-DATA(insert OID = 657 ( namegt PGUID 11 f t t 2 f 16 "19 19" 100 0 0 100 namegt - ));
+DATA(insert OID = 657 ( namegt PGUID 11 f t t t 2 f 16 "19 19" 100 0 0 100 namegt - ));
DESCR("greater-than");
-DATA(insert OID = 658 ( namege PGUID 11 f t t 2 f 16 "19 19" 100 0 0 100 namege - ));
+DATA(insert OID = 658 ( namege PGUID 11 f t t t 2 f 16 "19 19" 100 0 0 100 namege - ));
DESCR("greater-than-or-equal");
-DATA(insert OID = 659 ( namene PGUID 11 f t t 2 f 16 "19 19" 100 0 0 100 namene - ));
+DATA(insert OID = 659 ( namene PGUID 11 f t t t 2 f 16 "19 19" 100 0 0 100 namene - ));
DESCR("not equal");
-DATA(insert OID = 668 ( bpchar PGUID 11 f t t 2 f 1042 "1042 23" 100 0 0 100 bpchar - ));
+DATA(insert OID = 668 ( bpchar PGUID 11 f t t t 2 f 1042 "1042 23" 100 0 0 100 bpchar - ));
DESCR("truncate char()");
-DATA(insert OID = 669 ( varchar PGUID 11 f t t 2 f 1043 "1043 23" 100 0 0 100 varchar - ));
+DATA(insert OID = 669 ( varchar PGUID 11 f t t t 2 f 1043 "1043 23" 100 0 0 100 varchar - ));
DESCR("truncate varchar()");
-DATA(insert OID = 676 ( mktinterval PGUID 11 f t f 2 f 704 "702 702" 100 0 0 100 mktinterval - ));
+DATA(insert OID = 676 ( mktinterval PGUID 11 f t f t 2 f 704 "702 702" 100 0 0 100 mktinterval - ));
DESCR("convert to tinterval");
-DATA(insert OID = 619 ( oidvectorne PGUID 11 f t t 2 f 16 "30 30" 100 0 0 100 oidvectorne - ));
+DATA(insert OID = 619 ( oidvectorne PGUID 11 f t t t 2 f 16 "30 30" 100 0 0 100 oidvectorne - ));
DESCR("less-than");
-DATA(insert OID = 677 ( oidvectorlt PGUID 11 f t t 2 f 16 "30 30" 100 0 0 100 oidvectorlt - ));
+DATA(insert OID = 677 ( oidvectorlt PGUID 11 f t t t 2 f 16 "30 30" 100 0 0 100 oidvectorlt - ));
DESCR("less-than");
-DATA(insert OID = 678 ( oidvectorle PGUID 11 f t t 2 f 16 "30 30" 100 0 0 100 oidvectorle - ));
+DATA(insert OID = 678 ( oidvectorle PGUID 11 f t t t 2 f 16 "30 30" 100 0 0 100 oidvectorle - ));
DESCR("less-than-or-equal");
-DATA(insert OID = 679 ( oidvectoreq PGUID 11 f t t 2 f 16 "30 30" 100 0 0 100 oidvectoreq - ));
+DATA(insert OID = 679 ( oidvectoreq PGUID 11 f t t t 2 f 16 "30 30" 100 0 0 100 oidvectoreq - ));
DESCR("equal");
-DATA(insert OID = 680 ( oidvectorge PGUID 11 f t t 2 f 16 "30 30" 100 0 0 100 oidvectorge - ));
+DATA(insert OID = 680 ( oidvectorge PGUID 11 f t t t 2 f 16 "30 30" 100 0 0 100 oidvectorge - ));
DESCR("greater-than-or-equal");
-DATA(insert OID = 681 ( oidvectorgt PGUID 11 f t t 2 f 16 "30 30" 100 0 0 100 oidvectorgt - ));
+DATA(insert OID = 681 ( oidvectorgt PGUID 11 f t t t 2 f 16 "30 30" 100 0 0 100 oidvectorgt - ));
DESCR("greater-than");
/* OIDS 700 - 799 */
-DATA(insert OID = 710 ( getpgusername PGUID 11 f t f 0 f 19 "0" 100 0 0 100 getpgusername - ));
+DATA(insert OID = 710 ( getpgusername PGUID 11 f t f t 0 f 19 "0" 100 0 0 100 getpgusername - ));
DESCR("Return username");
-DATA(insert OID = 711 ( userfntest PGUID 11 f t t 1 f 23 "23" 100 0 0 100 userfntest - ));
+DATA(insert OID = 711 ( userfntest PGUID 11 f t t t 1 f 23 "23" 100 0 0 100 userfntest - ));
DESCR("");
-DATA(insert OID = 713 ( oidrand PGUID 11 f t f 2 f 16 "26 23" 100 0 0 100 oidrand - ));
+DATA(insert OID = 713 ( oidrand PGUID 11 f t f t 2 f 16 "26 23" 100 0 0 100 oidrand - ));
DESCR("random");
-DATA(insert OID = 715 ( oidsrand PGUID 11 f t f 1 f 16 "23" 100 0 0 100 oidsrand - ));
+DATA(insert OID = 715 ( oidsrand PGUID 11 f t f t 1 f 16 "23" 100 0 0 100 oidsrand - ));
DESCR("seed random number generator");
-DATA(insert OID = 716 ( oideqint4 PGUID 11 f t t 2 f 16 "26 23" 100 0 0 100 oideqint4 - ));
+DATA(insert OID = 716 ( oideqint4 PGUID 11 f t t t 2 f 16 "26 23" 100 0 0 100 oideqint4 - ));
DESCR("equal");
-DATA(insert OID = 717 ( int4eqoid PGUID 11 f t t 2 f 16 "23 26" 100 0 0 100 int4eqoid - ));
+DATA(insert OID = 717 ( int4eqoid PGUID 11 f t t t 2 f 16 "23 26" 100 0 0 100 int4eqoid - ));
DESCR("equal");
-DATA(insert OID = 720 ( octet_length PGUID 11 f t t 1 f 23 "17" 100 0 0 100 byteaoctetlen - ));
+DATA(insert OID = 720 ( octet_length PGUID 11 f t t t 1 f 23 "17" 100 0 0 100 byteaoctetlen - ));
DESCR("");
-DATA(insert OID = 721 ( get_byte PGUID 11 f t t 2 f 23 "17 23" 100 0 0 100 byteaGetByte - ));
+DATA(insert OID = 721 ( get_byte PGUID 11 f t t t 2 f 23 "17 23" 100 0 0 100 byteaGetByte - ));
DESCR("");
-DATA(insert OID = 722 ( set_byte PGUID 11 f t t 3 f 17 "17 23 23" 100 0 0 100 byteaSetByte - ));
+DATA(insert OID = 722 ( set_byte PGUID 11 f t t t 3 f 17 "17 23 23" 100 0 0 100 byteaSetByte - ));
DESCR("");
-DATA(insert OID = 723 ( get_bit PGUID 11 f t t 2 f 23 "17 23" 100 0 0 100 byteaGetBit - ));
+DATA(insert OID = 723 ( get_bit PGUID 11 f t t t 2 f 23 "17 23" 100 0 0 100 byteaGetBit - ));
DESCR("");
-DATA(insert OID = 724 ( set_bit PGUID 11 f t t 3 f 17 "17 23 23" 100 0 0 100 byteaSetBit - ));
+DATA(insert OID = 724 ( set_bit PGUID 11 f t t t 3 f 17 "17 23 23" 100 0 0 100 byteaSetBit - ));
DESCR("");
-DATA(insert OID = 725 ( dist_pl PGUID 11 f t t 2 f 701 "600 628" 100 0 0 100 dist_pl - ));
+DATA(insert OID = 725 ( dist_pl PGUID 11 f t t t 2 f 701 "600 628" 100 0 0 100 dist_pl - ));
DESCR("distance between point and line");
-DATA(insert OID = 726 ( dist_lb PGUID 11 f t t 2 f 701 "628 603" 100 0 0 100 dist_lb - ));
+DATA(insert OID = 726 ( dist_lb PGUID 11 f t t t 2 f 701 "628 603" 100 0 0 100 dist_lb - ));
DESCR("distance between line and box");
-DATA(insert OID = 727 ( dist_sl PGUID 11 f t t 2 f 701 "601 628" 100 0 0 100 dist_sl - ));
+DATA(insert OID = 727 ( dist_sl PGUID 11 f t t t 2 f 701 "601 628" 100 0 0 100 dist_sl - ));
DESCR("distance between lseg and line");
-DATA(insert OID = 728 ( dist_cpoly PGUID 11 f t t 2 f 701 "718 604" 100 0 0 100 dist_cpoly - ));
+DATA(insert OID = 728 ( dist_cpoly PGUID 11 f t t t 2 f 701 "718 604" 100 0 0 100 dist_cpoly - ));
DESCR("distance between");
-DATA(insert OID = 729 ( poly_distance PGUID 11 f t t 2 f 701 "604 604" 100 0 0 100 poly_distance - ));
+DATA(insert OID = 729 ( poly_distance PGUID 11 f t t t 2 f 701 "604 604" 100 0 0 100 poly_distance - ));
DESCR("distance between");
-DATA(insert OID = 730 ( pqtest PGUID 11 f t f 1 f 23 "25" 100 0 0 100 pqtest - ));
+DATA(insert OID = 730 ( pqtest PGUID 11 f t f t 1 f 23 "25" 100 0 0 100 pqtest - ));
DESCR("");
-DATA(insert OID = 740 ( text_lt PGUID 11 f t t 2 f 16 "25 25" 100 0 0 0 text_lt - ));
+DATA(insert OID = 740 ( text_lt PGUID 11 f t t t 2 f 16 "25 25" 100 0 0 0 text_lt - ));
DESCR("less-than");
-DATA(insert OID = 741 ( text_le PGUID 11 f t t 2 f 16 "25 25" 100 0 0 0 text_le - ));
+DATA(insert OID = 741 ( text_le PGUID 11 f t t t 2 f 16 "25 25" 100 0 0 0 text_le - ));
DESCR("less-than-or-equal");
-DATA(insert OID = 742 ( text_gt PGUID 11 f t t 2 f 16 "25 25" 100 0 0 0 text_gt - ));
+DATA(insert OID = 742 ( text_gt PGUID 11 f t t t 2 f 16 "25 25" 100 0 0 0 text_gt - ));
DESCR("greater-than");
-DATA(insert OID = 743 ( text_ge PGUID 11 f t t 2 f 16 "25 25" 100 0 0 0 text_ge - ));
+DATA(insert OID = 743 ( text_ge PGUID 11 f t t t 2 f 16 "25 25" 100 0 0 0 text_ge - ));
DESCR("greater-than-or-equal");
-DATA(insert OID = 744 ( array_eq PGUID 11 f t t 2 f 16 "0 0" 100 0 0 100 array_eq -));
+DATA(insert OID = 744 ( array_eq PGUID 11 f t t t 2 f 16 "0 0" 100 0 0 100 array_eq -));
DESCR("equal");
-DATA(insert OID = 745 ( array_assgn PGUID 11 f t t 8 f 23 "0 23 0 0 0 23 23 0" 100 0 0 100 array_assgn -));
+DATA(insert OID = 745 ( array_assgn PGUID 11 f t t t 8 f 23 "0 23 0 0 0 23 23 0" 100 0 0 100 array_assgn -));
DESCR("array");
-DATA(insert OID = 746 ( array_clip PGUID 11 f t t 7 f 23 "0 23 0 0 23 23 0" 100 0 0 100 array_clip -));
+DATA(insert OID = 746 ( array_clip PGUID 11 f t t t 7 f 23 "0 23 0 0 23 23 0" 100 0 0 100 array_clip -));
DESCR("array");
-DATA(insert OID = 747 ( array_dims PGUID 11 f t t 1 f 25 "0" 100 0 0 100 array_dims -));
+DATA(insert OID = 747 ( array_dims PGUID 11 f t t t 1 f 25 "0" 100 0 0 100 array_dims -));
DESCR("array(internal)");
-DATA(insert OID = 748 ( array_set PGUID 11 f t t 8 f 23 "0 23 0 0 23 23 23 0" 100 0 0 100 array_set -));
+DATA(insert OID = 748 ( array_set PGUID 11 f t t t 8 f 23 "0 23 0 0 23 23 23 0" 100 0 0 100 array_set -));
DESCR("array");
-DATA(insert OID = 749 ( array_ref PGUID 11 f t t 7 f 23 "0 23 0 23 23 23 0" 100 0 0 100 array_ref -));
+DATA(insert OID = 749 ( array_ref PGUID 11 f t t t 7 f 23 "0 23 0 23 23 23 0" 100 0 0 100 array_ref -));
DESCR("array");
-DATA(insert OID = 750 ( array_in PGUID 11 f t t 3 f 23 "0 0 23" 100 0 0 100 array_in - ));
+DATA(insert OID = 750 ( array_in PGUID 11 f t t t 3 f 23 "0 0 23" 100 0 0 100 array_in - ));
DESCR("array");
-DATA(insert OID = 751 ( array_out PGUID 11 f t t 2 f 23 "0 0" 100 0 0 100 array_out - ));
+DATA(insert OID = 751 ( array_out PGUID 11 f t t t 2 f 23 "0 0" 100 0 0 100 array_out - ));
DESCR("array");
-DATA(insert OID = 752 ( filename_in PGUID 11 f t t 1 f 605 "0" 100 0 0 100 filename_in - ));
+DATA(insert OID = 752 ( filename_in PGUID 11 f t t t 1 f 605 "0" 100 0 0 100 filename_in - ));
DESCR("(internal)");
-DATA(insert OID = 753 ( filename_out PGUID 11 f t t 2 f 19 "0 0" 100 0 0 100 filename_out - ));
+DATA(insert OID = 753 ( filename_out PGUID 11 f t t t 2 f 19 "0 0" 100 0 0 100 filename_out - ));
DESCR("(internal)");
-DATA(insert OID = 760 ( smgrin PGUID 11 f t f 1 f 210 "0" 100 0 0 100 smgrin - ));
+DATA(insert OID = 760 ( smgrin PGUID 11 f t f t 1 f 210 "0" 100 0 0 100 smgrin - ));
DESCR("storage manager(internal)");
-DATA(insert OID = 761 ( smgrout PGUID 11 f t f 1 f 23 "0" 100 0 0 100 smgrout - ));
+DATA(insert OID = 761 ( smgrout PGUID 11 f t f t 1 f 23 "0" 100 0 0 100 smgrout - ));
DESCR("storage manager(internal)");
-DATA(insert OID = 762 ( smgreq PGUID 11 f t f 2 f 16 "210 210" 100 0 0 100 smgreq - ));
+DATA(insert OID = 762 ( smgreq PGUID 11 f t f t 2 f 16 "210 210" 100 0 0 100 smgreq - ));
DESCR("storage manager");
-DATA(insert OID = 763 ( smgrne PGUID 11 f t f 2 f 16 "210 210" 100 0 0 100 smgrne - ));
+DATA(insert OID = 763 ( smgrne PGUID 11 f t f t 2 f 16 "210 210" 100 0 0 100 smgrne - ));
DESCR("storage manager");
-DATA(insert OID = 764 ( lo_import PGUID 11 f t f 1 f 26 "25" 100 0 0 100 lo_import - ));
+DATA(insert OID = 764 ( lo_import PGUID 11 f t f t 1 f 26 "25" 100 0 0 100 lo_import - ));
DESCR("large object import");
-DATA(insert OID = 765 ( lo_export PGUID 11 f t f 2 f 23 "26 25" 100 0 0 100 lo_export - ));
+DATA(insert OID = 765 ( lo_export PGUID 11 f t f t 2 f 23 "26 25" 100 0 0 100 lo_export - ));
DESCR("large object export");
-DATA(insert OID = 766 ( int4inc PGUID 11 f t t 1 f 23 "23" 100 0 0 100 int4inc - ));
+DATA(insert OID = 766 ( int4inc PGUID 11 f t t t 1 f 23 "23" 100 0 0 100 int4inc - ));
DESCR("increment");
-DATA(insert OID = 767 ( int2inc PGUID 11 f t t 1 f 21 "21" 100 0 0 100 int2inc - ));
+DATA(insert OID = 767 ( int2inc PGUID 11 f t t t 1 f 21 "21" 100 0 0 100 int2inc - ));
DESCR("increment");
-DATA(insert OID = 768 ( int4larger PGUID 11 f t t 2 f 23 "23 23" 100 0 0 100 int4larger - ));
+DATA(insert OID = 768 ( int4larger PGUID 11 f t t t 2 f 23 "23 23" 100 0 0 100 int4larger - ));
DESCR("larger of two");
-DATA(insert OID = 769 ( int4smaller PGUID 11 f t t 2 f 23 "23 23" 100 0 0 100 int4smaller - ));
+DATA(insert OID = 769 ( int4smaller PGUID 11 f t t t 2 f 23 "23 23" 100 0 0 100 int4smaller - ));
DESCR("smaller of two");
-DATA(insert OID = 770 ( int2larger PGUID 11 f t t 2 f 21 "21 21" 100 0 0 100 int2larger - ));
+DATA(insert OID = 770 ( int2larger PGUID 11 f t t t 2 f 21 "21 21" 100 0 0 100 int2larger - ));
DESCR("larger of two");
-DATA(insert OID = 771 ( int2smaller PGUID 11 f t t 2 f 21 "21 21" 100 0 0 100 int2smaller - ));
+DATA(insert OID = 771 ( int2smaller PGUID 11 f t t t 2 f 21 "21 21" 100 0 0 100 int2smaller - ));
DESCR("smaller of two");
-DATA(insert OID = 772 ( gistcostestimate PGUID 11 f t f 7 f 0 "0 0 0 0 0 0 0" 100 0 0 100 gistcostestimate - ));
+DATA(insert OID = 772 ( gistcostestimate PGUID 11 f t f t 7 f 0 "0 0 0 0 0 0 0" 100 0 0 100 gistcostestimate - ));
DESCR("gist cost estimator");
-DATA(insert OID = 774 ( gistgettuple PGUID 11 f t f 2 f 23 "0" 100 0 0 100 gistgettuple - ));
+DATA(insert OID = 774 ( gistgettuple PGUID 11 f t f t 2 f 23 "0" 100 0 0 100 gistgettuple - ));
DESCR("gist(internal)");
-DATA(insert OID = 775 ( gistinsert PGUID 11 f t f 5 f 23 "0" 100 0 0 100 gistinsert - ));
+DATA(insert OID = 775 ( gistinsert PGUID 11 f t f t 5 f 23 "0" 100 0 0 100 gistinsert - ));
DESCR("gist(internal)");
-DATA(insert OID = 776 ( gistdelete PGUID 11 f t f 2 f 23 "0" 100 0 0 100 gistdelete - ));
+DATA(insert OID = 776 ( gistdelete PGUID 11 f t f t 2 f 23 "0" 100 0 0 100 gistdelete - ));
DESCR("gist(internal)");
-DATA(insert OID = 777 ( gistbeginscan PGUID 11 f t f 4 f 23 "0" 100 0 0 100 gistbeginscan - ));
+DATA(insert OID = 777 ( gistbeginscan PGUID 11 f t f t 4 f 23 "0" 100 0 0 100 gistbeginscan - ));
DESCR("gist(internal)");
-DATA(insert OID = 778 ( gistrescan PGUID 11 f t f 3 f 23 "0" 100 0 0 100 gistrescan - ));
+DATA(insert OID = 778 ( gistrescan PGUID 11 f t f t 3 f 23 "0" 100 0 0 100 gistrescan - ));
DESCR("gist(internal)");
-DATA(insert OID = 779 ( gistendscan PGUID 11 f t f 1 f 23 "0" 100 0 0 100 gistendscan - ));
+DATA(insert OID = 779 ( gistendscan PGUID 11 f t f t 1 f 23 "0" 100 0 0 100 gistendscan - ));
DESCR("gist(internal)");
-DATA(insert OID = 780 ( gistmarkpos PGUID 11 f t f 1 f 23 "0" 100 0 0 100 gistmarkpos - ));
+DATA(insert OID = 780 ( gistmarkpos PGUID 11 f t f t 1 f 23 "0" 100 0 0 100 gistmarkpos - ));
DESCR("gist(internal)");
-DATA(insert OID = 781 ( gistrestrpos PGUID 11 f t f 1 f 23 "0" 100 0 0 100 gistrestrpos - ));
+DATA(insert OID = 781 ( gistrestrpos PGUID 11 f t f t 1 f 23 "0" 100 0 0 100 gistrestrpos - ));
DESCR("gist(internal)");
-DATA(insert OID = 782 ( gistbuild PGUID 11 f t f 9 f 23 "0" 100 0 0 100 gistbuild - ));
+DATA(insert OID = 782 ( gistbuild PGUID 11 f t f t 9 f 23 "0" 100 0 0 100 gistbuild - ));
DESCR("gist(internal)");
-DATA(insert OID = 784 ( tintervaleq PGUID 11 f t f 2 f 16 "704 704" 100 0 0 100 tintervaleq - ));
+DATA(insert OID = 784 ( tintervaleq PGUID 11 f t f t 2 f 16 "704 704" 100 0 0 100 tintervaleq - ));
DESCR("equal");
-DATA(insert OID = 785 ( tintervalne PGUID 11 f t f 2 f 16 "704 704" 100 0 0 100 tintervalne - ));
+DATA(insert OID = 785 ( tintervalne PGUID 11 f t f t 2 f 16 "704 704" 100 0 0 100 tintervalne - ));
DESCR("not equal");
-DATA(insert OID = 786 ( tintervallt PGUID 11 f t f 2 f 16 "704 704" 100 0 0 100 tintervallt - ));
+DATA(insert OID = 786 ( tintervallt PGUID 11 f t f t 2 f 16 "704 704" 100 0 0 100 tintervallt - ));
DESCR("less-than");
-DATA(insert OID = 787 ( tintervalgt PGUID 11 f t f 2 f 16 "704 704" 100 0 0 100 tintervalgt - ));
+DATA(insert OID = 787 ( tintervalgt PGUID 11 f t f t 2 f 16 "704 704" 100 0 0 100 tintervalgt - ));
DESCR("greater-than");
-DATA(insert OID = 788 ( tintervalle PGUID 11 f t f 2 f 16 "704 704" 100 0 0 100 tintervalle - ));
+DATA(insert OID = 788 ( tintervalle PGUID 11 f t f t 2 f 16 "704 704" 100 0 0 100 tintervalle - ));
DESCR("less-than-or-equal");
-DATA(insert OID = 789 ( tintervalge PGUID 11 f t f 2 f 16 "704 704" 100 0 0 100 tintervalge - ));
+DATA(insert OID = 789 ( tintervalge PGUID 11 f t f t 2 f 16 "704 704" 100 0 0 100 tintervalge - ));
DESCR("greater-than-or-equal");
/* OIDS 800 - 899 */
-DATA(insert OID = 817 ( oid PGUID 11 f t t 1 f 26 "25" 100 0 0 100 text_oid -));
+DATA(insert OID = 817 ( oid PGUID 11 f t t t 1 f 26 "25" 100 0 0 100 text_oid -));
DESCR("convert text to oid");
-DATA(insert OID = 818 ( int2 PGUID 11 f t t 1 f 21 "25" 100 0 0 100 text_int2 -));
+DATA(insert OID = 818 ( int2 PGUID 11 f t t t 1 f 21 "25" 100 0 0 100 text_int2 -));
DESCR("convert text to int2");
-DATA(insert OID = 819 ( int4 PGUID 11 f t t 1 f 23 "25" 100 0 0 100 text_int4 -));
+DATA(insert OID = 819 ( int4 PGUID 11 f t t t 1 f 23 "25" 100 0 0 100 text_int4 -));
DESCR("convert text to int4");
-DATA(insert OID = 838 ( float8 PGUID 11 f t t 1 f 701 "25" 100 0 0 100 text_float8 -));
+DATA(insert OID = 838 ( float8 PGUID 11 f t t t 1 f 701 "25" 100 0 0 100 text_float8 -));
DESCR("convert text to float8");
-DATA(insert OID = 839 ( float4 PGUID 11 f t t 1 f 700 "25" 100 0 0 100 text_float4 -));
+DATA(insert OID = 839 ( float4 PGUID 11 f t t t 1 f 700 "25" 100 0 0 100 text_float4 -));
DESCR("convert text to float4");
-DATA(insert OID = 840 ( text PGUID 11 f t t 1 f 25 "701" 100 0 0 100 float8_text -));
+DATA(insert OID = 840 ( text PGUID 11 f t t t 1 f 25 "701" 100 0 0 100 float8_text -));
DESCR("convert float8 to text");
-DATA(insert OID = 841 ( text PGUID 11 f t t 1 f 25 "700" 100 0 0 100 float4_text -));
+DATA(insert OID = 841 ( text PGUID 11 f t t t 1 f 25 "700" 100 0 0 100 float4_text -));
DESCR("convert float4 to text");
-DATA(insert OID = 846 ( cash_mul_flt4 PGUID 11 f t t 2 f 790 "790 700" 100 0 0 100 cash_mul_flt4 - ));
+DATA(insert OID = 846 ( cash_mul_flt4 PGUID 11 f t t t 2 f 790 "790 700" 100 0 0 100 cash_mul_flt4 - ));
DESCR("multiply");
-DATA(insert OID = 847 ( cash_div_flt4 PGUID 11 f t t 2 f 790 "790 700" 100 0 0 100 cash_div_flt4 - ));
+DATA(insert OID = 847 ( cash_div_flt4 PGUID 11 f t t t 2 f 790 "790 700" 100 0 0 100 cash_div_flt4 - ));
DESCR("divide");
-DATA(insert OID = 848 ( flt4_mul_cash PGUID 11 f t t 2 f 790 "700 790" 100 0 0 100 flt4_mul_cash - ));
+DATA(insert OID = 848 ( flt4_mul_cash PGUID 11 f t t t 2 f 790 "700 790" 100 0 0 100 flt4_mul_cash - ));
DESCR("multiply");
-DATA(insert OID = 849 ( position PGUID 11 f t t 2 f 23 "25 25" 100 0 1 0 textpos - ));
+DATA(insert OID = 849 ( position PGUID 11 f t t t 2 f 23 "25 25" 100 0 1 0 textpos - ));
DESCR("return position of substring");
-DATA(insert OID = 850 ( textlike PGUID 11 f t t 2 f 16 "25 25" 100 0 1 0 textlike - ));
+DATA(insert OID = 850 ( textlike PGUID 11 f t t t 2 f 16 "25 25" 100 0 1 0 textlike - ));
DESCR("matches LIKE expression");
-DATA(insert OID = 851 ( textnlike PGUID 11 f t t 2 f 16 "25 25" 100 0 1 0 textnlike - ));
+DATA(insert OID = 851 ( textnlike PGUID 11 f t t t 2 f 16 "25 25" 100 0 1 0 textnlike - ));
DESCR("does not match LIKE expression");
-DATA(insert OID = 852 ( int48eq PGUID 11 f t t 2 f 16 "23 20" 100 0 0 100 int48eq - ));
+DATA(insert OID = 852 ( int48eq PGUID 11 f t t t 2 f 16 "23 20" 100 0 0 100 int48eq - ));
DESCR("equal");
-DATA(insert OID = 853 ( int48ne PGUID 11 f t t 2 f 16 "23 20" 100 0 0 100 int48ne - ));
+DATA(insert OID = 853 ( int48ne PGUID 11 f t t t 2 f 16 "23 20" 100 0 0 100 int48ne - ));
DESCR("not equal");
-DATA(insert OID = 854 ( int48lt PGUID 11 f t t 2 f 16 "23 20" 100 0 0 100 int48lt - ));
+DATA(insert OID = 854 ( int48lt PGUID 11 f t t t 2 f 16 "23 20" 100 0 0 100 int48lt - ));
DESCR("less-than");
-DATA(insert OID = 855 ( int48gt PGUID 11 f t t 2 f 16 "23 20" 100 0 0 100 int48gt - ));
+DATA(insert OID = 855 ( int48gt PGUID 11 f t t t 2 f 16 "23 20" 100 0 0 100 int48gt - ));
DESCR("greater-than");
-DATA(insert OID = 856 ( int48le PGUID 11 f t t 2 f 16 "23 20" 100 0 0 100 int48le - ));
+DATA(insert OID = 856 ( int48le PGUID 11 f t t t 2 f 16 "23 20" 100 0 0 100 int48le - ));
DESCR("less-than-or-equal");
-DATA(insert OID = 857 ( int48ge PGUID 11 f t t 2 f 16 "23 20" 100 0 0 100 int48ge - ));
+DATA(insert OID = 857 ( int48ge PGUID 11 f t t t 2 f 16 "23 20" 100 0 0 100 int48ge - ));
DESCR("greater-than-or-equal");
-DATA(insert OID = 858 ( namelike PGUID 11 f t t 2 f 16 "19 25" 100 0 0 100 namelike - ));
+DATA(insert OID = 858 ( namelike PGUID 11 f t t t 2 f 16 "19 25" 100 0 0 100 namelike - ));
DESCR("matches LIKE expression");
-DATA(insert OID = 859 ( namenlike PGUID 11 f t t 2 f 16 "19 25" 100 0 0 100 namenlike - ));
+DATA(insert OID = 859 ( namenlike PGUID 11 f t t t 2 f 16 "19 25" 100 0 0 100 namenlike - ));
DESCR("does not match LIKE expression");
-DATA(insert OID = 860 ( bpchar PGUID 11 f t t 1 f 1042 "18" 100 0 0 100 char_bpchar - ));
+DATA(insert OID = 860 ( bpchar PGUID 11 f t t t 1 f 1042 "18" 100 0 0 100 char_bpchar - ));
DESCR("convert char to char()");
-DATA(insert OID = 861 ( char PGUID 11 f t t 1 f 18 "1042" 100 0 0 100 bpchar_char - ));
+DATA(insert OID = 861 ( char PGUID 11 f t t t 1 f 18 "1042" 100 0 0 100 bpchar_char - ));
DESCR("convert char() to char");
-DATA(insert OID = 862 ( int4_mul_cash PGUID 11 f t t 2 f 790 "23 790" 100 0 0 100 int4_mul_cash - ));
+DATA(insert OID = 862 ( int4_mul_cash PGUID 11 f t t t 2 f 790 "23 790" 100 0 0 100 int4_mul_cash - ));
DESCR("multiply");
-DATA(insert OID = 863 ( int2_mul_cash PGUID 11 f t t 2 f 790 "21 790" 100 0 0 100 int2_mul_cash - ));
+DATA(insert OID = 863 ( int2_mul_cash PGUID 11 f t t t 2 f 790 "21 790" 100 0 0 100 int2_mul_cash - ));
DESCR("multiply");
-DATA(insert OID = 864 ( cash_mul_int4 PGUID 11 f t t 2 f 790 "790 23" 100 0 0 100 cash_mul_int4 - ));
+DATA(insert OID = 864 ( cash_mul_int4 PGUID 11 f t t t 2 f 790 "790 23" 100 0 0 100 cash_mul_int4 - ));
DESCR("multiply");
-DATA(insert OID = 865 ( cash_div_int4 PGUID 11 f t t 2 f 790 "790 23" 100 0 0 100 cash_div_int4 - ));
+DATA(insert OID = 865 ( cash_div_int4 PGUID 11 f t t t 2 f 790 "790 23" 100 0 0 100 cash_div_int4 - ));
DESCR("divide");
-DATA(insert OID = 866 ( cash_mul_int2 PGUID 11 f t t 2 f 790 "790 21" 100 0 0 100 cash_mul_int2 - ));
+DATA(insert OID = 866 ( cash_mul_int2 PGUID 11 f t t t 2 f 790 "790 21" 100 0 0 100 cash_mul_int2 - ));
DESCR("multiply");
-DATA(insert OID = 867 ( cash_div_int2 PGUID 11 f t t 2 f 790 "790 21" 100 0 0 100 cash_div_int2 - ));
+DATA(insert OID = 867 ( cash_div_int2 PGUID 11 f t t t 2 f 790 "790 21" 100 0 0 100 cash_div_int2 - ));
DESCR("divide");
-DATA(insert OID = 886 ( cash_in PGUID 11 f t t 1 f 790 "0" 100 0 0 100 cash_in - ));
+DATA(insert OID = 886 ( cash_in PGUID 11 f t t t 1 f 790 "0" 100 0 0 100 cash_in - ));
DESCR("(internal)");
-DATA(insert OID = 887 ( cash_out PGUID 11 f t t 1 f 23 "0" 100 0 0 100 cash_out - ));
+DATA(insert OID = 887 ( cash_out PGUID 11 f t t t 1 f 23 "0" 100 0 0 100 cash_out - ));
DESCR("(internal)");
-DATA(insert OID = 1273 ( cash_words_out PGUID 11 f t t 1 f 25 "790" 100 0 0 100 cash_words_out - ));
+DATA(insert OID = 1273 ( cash_words_out PGUID 11 f t t t 1 f 25 "790" 100 0 0 100 cash_words_out - ));
DESCR("output amount as words");
-DATA(insert OID = 888 ( cash_eq PGUID 11 f t t 2 f 16 "790 790" 100 0 0 100 cash_eq - ));
+DATA(insert OID = 888 ( cash_eq PGUID 11 f t t t 2 f 16 "790 790" 100 0 0 100 cash_eq - ));
DESCR("equal");
-DATA(insert OID = 889 ( cash_ne PGUID 11 f t t 2 f 16 "790 790" 100 0 0 100 cash_ne - ));
+DATA(insert OID = 889 ( cash_ne PGUID 11 f t t t 2 f 16 "790 790" 100 0 0 100 cash_ne - ));
DESCR("not equal");
-DATA(insert OID = 890 ( cash_lt PGUID 11 f t t 2 f 16 "790 790" 100 0 0 100 cash_lt - ));
+DATA(insert OID = 890 ( cash_lt PGUID 11 f t t t 2 f 16 "790 790" 100 0 0 100 cash_lt - ));
DESCR("less-than");
-DATA(insert OID = 891 ( cash_le PGUID 11 f t t 2 f 16 "790 790" 100 0 0 100 cash_le - ));
+DATA(insert OID = 891 ( cash_le PGUID 11 f t t t 2 f 16 "790 790" 100 0 0 100 cash_le - ));
DESCR("less-than-or-equal");
-DATA(insert OID = 892 ( cash_gt PGUID 11 f t t 2 f 16 "790 790" 100 0 0 100 cash_gt - ));
+DATA(insert OID = 892 ( cash_gt PGUID 11 f t t t 2 f 16 "790 790" 100 0 0 100 cash_gt - ));
DESCR("greater-than");
-DATA(insert OID = 893 ( cash_ge PGUID 11 f t t 2 f 16 "790 790" 100 0 0 100 cash_ge - ));
+DATA(insert OID = 893 ( cash_ge PGUID 11 f t t t 2 f 16 "790 790" 100 0 0 100 cash_ge - ));
DESCR("greater-than-or-equal");
-DATA(insert OID = 894 ( cash_pl PGUID 11 f t t 2 f 790 "790 790" 100 0 0 100 cash_pl - ));
+DATA(insert OID = 894 ( cash_pl PGUID 11 f t t t 2 f 790 "790 790" 100 0 0 100 cash_pl - ));
DESCR("addition");
-DATA(insert OID = 895 ( cash_mi PGUID 11 f t t 2 f 790 "790 790" 100 0 0 100 cash_mi - ));
+DATA(insert OID = 895 ( cash_mi PGUID 11 f t t t 2 f 790 "790 790" 100 0 0 100 cash_mi - ));
DESCR("subtract");
-DATA(insert OID = 896 ( cash_mul_flt8 PGUID 11 f t t 2 f 790 "790 701" 100 0 0 100 cash_mul_flt8 - ));
+DATA(insert OID = 896 ( cash_mul_flt8 PGUID 11 f t t t 2 f 790 "790 701" 100 0 0 100 cash_mul_flt8 - ));
DESCR("multiply");
-DATA(insert OID = 897 ( cash_div_flt8 PGUID 11 f t t 2 f 790 "790 701" 100 0 0 100 cash_div_flt8 - ));
+DATA(insert OID = 897 ( cash_div_flt8 PGUID 11 f t t t 2 f 790 "790 701" 100 0 0 100 cash_div_flt8 - ));
DESCR("divide");
-DATA(insert OID = 898 ( cashlarger PGUID 11 f t t 2 f 790 "790 790" 100 0 0 100 cashlarger - ));
+DATA(insert OID = 898 ( cashlarger PGUID 11 f t t t 2 f 790 "790 790" 100 0 0 100 cashlarger - ));
DESCR("larger of two");
-DATA(insert OID = 899 ( cashsmaller PGUID 11 f t t 2 f 790 "790 790" 100 0 0 100 cashsmaller - ));
+DATA(insert OID = 899 ( cashsmaller PGUID 11 f t t t 2 f 790 "790 790" 100 0 0 100 cashsmaller - ));
DESCR("smaller of two");
-DATA(insert OID = 919 ( flt8_mul_cash PGUID 11 f t t 2 f 790 "701 790" 100 0 0 100 flt8_mul_cash - ));
+DATA(insert OID = 919 ( flt8_mul_cash PGUID 11 f t t t 2 f 790 "701 790" 100 0 0 100 flt8_mul_cash - ));
DESCR("multiply");
/* OIDS 900 - 999 */
/* isoldpath, upgradepath, upgradepoly, revertpoly are used to update pre-v6.1 to v6.1 - tgl 97/06/03 */
-DATA(insert OID = 936 ( isoldpath PGUID 11 f t f 1 f 16 "602" 100 0 0 100 isoldpath - ));
+DATA(insert OID = 936 ( isoldpath PGUID 11 f t f t 1 f 16 "602" 100 0 0 100 isoldpath - ));
DESCR("");
-DATA(insert OID = 937 ( upgradepath PGUID 11 f t f 1 f 602 "602" 100 0 0 100 upgradepath - ));
+DATA(insert OID = 937 ( upgradepath PGUID 11 f t f t 1 f 602 "602" 100 0 0 100 upgradepath - ));
DESCR("");
-DATA(insert OID = 938 ( upgradepoly PGUID 11 f t f 1 f 604 "604" 100 0 0 100 upgradepoly - ));
+DATA(insert OID = 938 ( upgradepoly PGUID 11 f t f t 1 f 604 "604" 100 0 0 100 upgradepoly - ));
DESCR("");
-DATA(insert OID = 939 ( revertpoly PGUID 11 f t f 1 f 604 "604" 100 0 0 100 revertpoly - ));
+DATA(insert OID = 939 ( revertpoly PGUID 11 f t f t 1 f 604 "604" 100 0 0 100 revertpoly - ));
DESCR("");
-DATA(insert OID = 940 ( mod PGUID 11 f t t 2 f 21 "21 21" 100 0 0 100 int2mod - ));
+DATA(insert OID = 940 ( mod PGUID 11 f t t t 2 f 21 "21 21" 100 0 0 100 int2mod - ));
DESCR("modulus");
-DATA(insert OID = 941 ( mod PGUID 11 f t t 2 f 23 "23 23" 100 0 0 100 int4mod - ));
+DATA(insert OID = 941 ( mod PGUID 11 f t t t 2 f 23 "23 23" 100 0 0 100 int4mod - ));
DESCR("modulus");
-DATA(insert OID = 942 ( mod PGUID 11 f t t 2 f 23 "21 23" 100 0 0 100 int24mod - ));
+DATA(insert OID = 942 ( mod PGUID 11 f t t t 2 f 23 "21 23" 100 0 0 100 int24mod - ));
DESCR("modulus");
-DATA(insert OID = 943 ( mod PGUID 11 f t t 2 f 23 "23 21" 100 0 0 100 int42mod - ));
+DATA(insert OID = 943 ( mod PGUID 11 f t t t 2 f 23 "23 21" 100 0 0 100 int42mod - ));
DESCR("modulus");
-DATA(insert OID = 945 ( int8mod PGUID 11 f t t 2 f 20 "20 20" 100 0 0 100 int8mod - ));
+DATA(insert OID = 945 ( int8mod PGUID 11 f t t t 2 f 20 "20 20" 100 0 0 100 int8mod - ));
DESCR("modulus");
-DATA(insert OID = 947 ( mod PGUID 11 f t t 2 f 20 "20 20" 100 0 0 100 int8mod - ));
+DATA(insert OID = 947 ( mod PGUID 11 f t t t 2 f 20 "20 20" 100 0 0 100 int8mod - ));
DESCR("modulus");
-DATA(insert OID = 944 ( char PGUID 11 f t t 1 f 18 "25" 100 0 0 100 text_char - ));
+DATA(insert OID = 944 ( char PGUID 11 f t t t 1 f 18 "25" 100 0 0 100 text_char - ));
DESCR("convert text to char");
-DATA(insert OID = 946 ( text PGUID 11 f t t 1 f 25 "18" 100 0 0 100 char_text - ));
+DATA(insert OID = 946 ( text PGUID 11 f t t t 1 f 25 "18" 100 0 0 100 char_text - ));
DESCR("convert char to text");
-DATA(insert OID = 948 ( varchar PGUID 11 f t t 1 f 25 "1043" 100 0 0 100 bpchar_char - ));
+DATA(insert OID = 948 ( varchar PGUID 11 f t t t 1 f 25 "1043" 100 0 0 100 bpchar_char - ));
DESCR("convert varchar() to text");
-DATA(insert OID = 950 ( istrue PGUID 11 f t t 1 f 16 "16" 100 0 0 100 istrue - ));
+DATA(insert OID = 950 ( istrue PGUID 11 f t t t 1 f 16 "16" 100 0 0 100 istrue - ));
DESCR("");
-DATA(insert OID = 951 ( isfalse PGUID 11 f t t 1 f 16 "16" 100 0 0 100 isfalse - ));
+DATA(insert OID = 951 ( isfalse PGUID 11 f t t t 1 f 16 "16" 100 0 0 100 isfalse - ));
DESCR("");
-DATA(insert OID = 952 ( lo_open PGUID 11 f t f 2 f 23 "26 23" 100 0 0 100 lo_open - ));
+DATA(insert OID = 952 ( lo_open PGUID 11 f t f t 2 f 23 "26 23" 100 0 0 100 lo_open - ));
DESCR("large object open");
-DATA(insert OID = 953 ( lo_close PGUID 11 f t f 1 f 23 "23" 100 0 0 100 lo_close - ));
+DATA(insert OID = 953 ( lo_close PGUID 11 f t f t 1 f 23 "23" 100 0 0 100 lo_close - ));
DESCR("large object close");
-DATA(insert OID = 954 ( loread PGUID 11 f t f 2 f 17 "23 23" 100 0 0 100 loread - ));
+DATA(insert OID = 954 ( loread PGUID 11 f t f t 2 f 17 "23 23" 100 0 0 100 loread - ));
DESCR("large object read");
-DATA(insert OID = 955 ( lowrite PGUID 11 f t f 2 f 23 "23 17" 100 0 0 100 lowrite - ));
+DATA(insert OID = 955 ( lowrite PGUID 11 f t f t 2 f 23 "23 17" 100 0 0 100 lowrite - ));
DESCR("large object write");
-DATA(insert OID = 956 ( lo_lseek PGUID 11 f t f 3 f 23 "23 23 23" 100 0 0 100 lo_lseek - ));
+DATA(insert OID = 956 ( lo_lseek PGUID 11 f t f t 3 f 23 "23 23 23" 100 0 0 100 lo_lseek - ));
DESCR("large object seek");
-DATA(insert OID = 957 ( lo_creat PGUID 11 f t f 1 f 26 "23" 100 0 0 100 lo_creat - ));
+DATA(insert OID = 957 ( lo_creat PGUID 11 f t f t 1 f 26 "23" 100 0 0 100 lo_creat - ));
DESCR("large object create");
-DATA(insert OID = 958 ( lo_tell PGUID 11 f t f 1 f 23 "23" 100 0 0 100 lo_tell - ));
+DATA(insert OID = 958 ( lo_tell PGUID 11 f t f t 1 f 23 "23" 100 0 0 100 lo_tell - ));
DESCR("large object position");
-DATA(insert OID = 959 ( on_pl PGUID 11 f t t 2 f 16 "600 628" 100 0 10 100 on_pl - ));
+DATA(insert OID = 959 ( on_pl PGUID 11 f t t t 2 f 16 "600 628" 100 0 10 100 on_pl - ));
DESCR("point on line?");
-DATA(insert OID = 960 ( on_sl PGUID 11 f t t 2 f 16 "601 628" 100 0 10 100 on_sl - ));
+DATA(insert OID = 960 ( on_sl PGUID 11 f t t t 2 f 16 "601 628" 100 0 10 100 on_sl - ));
DESCR("lseg on line?");
-DATA(insert OID = 961 ( close_pl PGUID 11 f t t 2 f 600 "600 628" 100 0 10 100 close_pl - ));
+DATA(insert OID = 961 ( close_pl PGUID 11 f t t t 2 f 600 "600 628" 100 0 10 100 close_pl - ));
DESCR("closest point on line");
-DATA(insert OID = 962 ( close_sl PGUID 11 f t t 2 f 600 "601 628" 100 0 10 100 close_sl - ));
+DATA(insert OID = 962 ( close_sl PGUID 11 f t t t 2 f 600 "601 628" 100 0 10 100 close_sl - ));
DESCR("closest point to line segment on line");
-DATA(insert OID = 963 ( close_lb PGUID 11 f t t 2 f 600 "628 603" 100 0 10 100 close_lb - ));
+DATA(insert OID = 963 ( close_lb PGUID 11 f t t t 2 f 600 "628 603" 100 0 10 100 close_lb - ));
DESCR("closest point to line on box");
-DATA(insert OID = 964 ( lo_unlink PGUID 11 f t f 1 f 23 "26" 100 0 0 100 lo_unlink - ));
+DATA(insert OID = 964 ( lo_unlink PGUID 11 f t f t 1 f 23 "26" 100 0 0 100 lo_unlink - ));
DESCR("large object unlink(delete)");
-DATA(insert OID = 972 ( regproctooid PGUID 11 f t t 1 f 26 "24" 100 0 0 100 regproctooid - ));
+DATA(insert OID = 972 ( regproctooid PGUID 11 f t t t 1 f 26 "24" 100 0 0 100 regproctooid - ));
DESCR("get oid for regproc");
-DATA(insert OID = 973 ( path_inter PGUID 11 f t t 2 f 16 "602 602" 100 0 10 100 path_inter - ));
+DATA(insert OID = 973 ( path_inter PGUID 11 f t t t 2 f 16 "602 602" 100 0 10 100 path_inter - ));
DESCR("paths intersect?");
-DATA(insert OID = 975 ( area PGUID 11 f t t 1 f 701 "603" 100 0 0 100 box_area - ));
+DATA(insert OID = 975 ( area PGUID 11 f t t t 1 f 701 "603" 100 0 0 100 box_area - ));
DESCR("box area");
-DATA(insert OID = 976 ( width PGUID 11 f t t 1 f 701 "603" 100 0 0 100 box_width - ));
+DATA(insert OID = 976 ( width PGUID 11 f t t t 1 f 701 "603" 100 0 0 100 box_width - ));
DESCR("box width");
-DATA(insert OID = 977 ( height PGUID 11 f t t 1 f 701 "603" 100 0 0 100 box_height - ));
+DATA(insert OID = 977 ( height PGUID 11 f t t t 1 f 701 "603" 100 0 0 100 box_height - ));
DESCR("box height");
-DATA(insert OID = 978 ( box_distance PGUID 11 f t t 2 f 701 "603 603" 100 0 0 100 box_distance - ));
+DATA(insert OID = 978 ( box_distance PGUID 11 f t t t 2 f 701 "603 603" 100 0 0 100 box_distance - ));
DESCR("distance between boxes");
-DATA(insert OID = 980 ( box_intersect PGUID 11 f t t 2 f 603 "603 603" 100 0 0 100 box_intersect - ));
+DATA(insert OID = 980 ( box_intersect PGUID 11 f t t t 2 f 603 "603 603" 100 0 0 100 box_intersect - ));
DESCR("box intersection (another box)");
-DATA(insert OID = 981 ( diagonal PGUID 11 f t t 1 f 601 "603" 100 0 0 100 box_diagonal - ));
+DATA(insert OID = 981 ( diagonal PGUID 11 f t t t 1 f 601 "603" 100 0 0 100 box_diagonal - ));
DESCR("box diagonal");
-DATA(insert OID = 982 ( path_n_lt PGUID 11 f t t 2 f 16 "602 602" 100 0 0 100 path_n_lt - ));
+DATA(insert OID = 982 ( path_n_lt PGUID 11 f t t t 2 f 16 "602 602" 100 0 0 100 path_n_lt - ));
DESCR("less-than");
-DATA(insert OID = 983 ( path_n_gt PGUID 11 f t t 2 f 16 "602 602" 100 0 0 100 path_n_gt - ));
+DATA(insert OID = 983 ( path_n_gt PGUID 11 f t t t 2 f 16 "602 602" 100 0 0 100 path_n_gt - ));
DESCR("greater-than");
-DATA(insert OID = 984 ( path_n_eq PGUID 11 f t t 2 f 16 "602 602" 100 0 0 100 path_n_eq - ));
+DATA(insert OID = 984 ( path_n_eq PGUID 11 f t t t 2 f 16 "602 602" 100 0 0 100 path_n_eq - ));
DESCR("equal");
-DATA(insert OID = 985 ( path_n_le PGUID 11 f t t 2 f 16 "602 602" 100 0 0 100 path_n_le - ));
+DATA(insert OID = 985 ( path_n_le PGUID 11 f t t t 2 f 16 "602 602" 100 0 0 100 path_n_le - ));
DESCR("less-than-or-equal");
-DATA(insert OID = 986 ( path_n_ge PGUID 11 f t t 2 f 16 "602 602" 100 0 0 100 path_n_ge - ));
+DATA(insert OID = 986 ( path_n_ge PGUID 11 f t t t 2 f 16 "602 602" 100 0 0 100 path_n_ge - ));
DESCR("greater-than-or-equal");
-DATA(insert OID = 987 ( path_length PGUID 11 f t t 1 f 701 "602" 100 0 1 0 path_length - ));
+DATA(insert OID = 987 ( path_length PGUID 11 f t t t 1 f 701 "602" 100 0 1 0 path_length - ));
DESCR("sum of path segments");
-DATA(insert OID = 988 ( point_ne PGUID 11 f t t 2 f 16 "600 600" 100 0 0 100 point_ne - ));
+DATA(insert OID = 988 ( point_ne PGUID 11 f t t t 2 f 16 "600 600" 100 0 0 100 point_ne - ));
DESCR("not equal");
-DATA(insert OID = 989 ( point_vert PGUID 11 f t t 2 f 16 "600 600" 100 0 0 100 point_vert - ));
+DATA(insert OID = 989 ( point_vert PGUID 11 f t t t 2 f 16 "600 600" 100 0 0 100 point_vert - ));
DESCR("vertical?");
-DATA(insert OID = 990 ( point_horiz PGUID 11 f t t 2 f 16 "600 600" 100 0 0 100 point_horiz - ));
+DATA(insert OID = 990 ( point_horiz PGUID 11 f t t t 2 f 16 "600 600" 100 0 0 100 point_horiz - ));
DESCR("horizontal?");
-DATA(insert OID = 991 ( point_distance PGUID 11 f t t 2 f 701 "600 600" 100 0 0 100 point_distance - ));
+DATA(insert OID = 991 ( point_distance PGUID 11 f t t t 2 f 701 "600 600" 100 0 0 100 point_distance - ));
DESCR("distance between");
-DATA(insert OID = 992 ( slope PGUID 11 f t t 2 f 701 "600 600" 100 0 0 100 point_slope - ));
+DATA(insert OID = 992 ( slope PGUID 11 f t t t 2 f 701 "600 600" 100 0 0 100 point_slope - ));
DESCR("slope between points");
-DATA(insert OID = 993 ( lseg PGUID 11 f t t 2 f 601 "600 600" 100 0 0 100 lseg_construct - ));
+DATA(insert OID = 993 ( lseg PGUID 11 f t t t 2 f 601 "600 600" 100 0 0 100 lseg_construct - ));
DESCR("convert points to line segment");
-DATA(insert OID = 994 ( lseg_intersect PGUID 11 f t t 2 f 16 "601 601" 100 0 0 100 lseg_intersect - ));
+DATA(insert OID = 994 ( lseg_intersect PGUID 11 f t t t 2 f 16 "601 601" 100 0 0 100 lseg_intersect - ));
DESCR("intersects?");
-DATA(insert OID = 995 ( lseg_parallel PGUID 11 f t t 2 f 16 "601 601" 100 0 0 100 lseg_parallel - ));
+DATA(insert OID = 995 ( lseg_parallel PGUID 11 f t t t 2 f 16 "601 601" 100 0 0 100 lseg_parallel - ));
DESCR("parallel?");
-DATA(insert OID = 996 ( lseg_perp PGUID 11 f t t 2 f 16 "601 601" 100 0 0 100 lseg_perp - ));
+DATA(insert OID = 996 ( lseg_perp PGUID 11 f t t t 2 f 16 "601 601" 100 0 0 100 lseg_perp - ));
DESCR("perpendicular?");
-DATA(insert OID = 997 ( lseg_vertical PGUID 11 f t t 1 f 16 "601" 100 0 0 100 lseg_vertical - ));
+DATA(insert OID = 997 ( lseg_vertical PGUID 11 f t t t 1 f 16 "601" 100 0 0 100 lseg_vertical - ));
DESCR("vertical?");
-DATA(insert OID = 998 ( lseg_horizontal PGUID 11 f t t 1 f 16 "601" 100 0 0 100 lseg_horizontal - ));
+DATA(insert OID = 998 ( lseg_horizontal PGUID 11 f t t t 1 f 16 "601" 100 0 0 100 lseg_horizontal - ));
DESCR("horizontal?");
-DATA(insert OID = 999 ( lseg_eq PGUID 11 f t t 2 f 16 "601 601" 100 0 0 100 lseg_eq - ));
+DATA(insert OID = 999 ( lseg_eq PGUID 11 f t t t 2 f 16 "601 601" 100 0 0 100 lseg_eq - ));
DESCR("equal");
/* OIDS 1000 - 1999 */
-DATA(insert OID = 1029 ( nullvalue PGUID 11 f t t 1 f 16 "0" 100 0 0 100 nullvalue - ));
+DATA(insert OID = 1029 ( nullvalue PGUID 11 f t t f 1 f 16 "0" 100 0 0 100 nullvalue - ));
DESCR("(internal)");
-DATA(insert OID = 1030 ( nonnullvalue PGUID 11 f t t 1 f 16 "0" 100 0 0 100 nonnullvalue - ));
+DATA(insert OID = 1030 ( nonnullvalue PGUID 11 f t t f 1 f 16 "0" 100 0 0 100 nonnullvalue - ));
DESCR("(internal)");
-DATA(insert OID = 1031 ( aclitemin PGUID 11 f t f 1 f 1033 "0" 100 0 0 100 aclitemin - ));
+DATA(insert OID = 1031 ( aclitemin PGUID 11 f t f t 1 f 1033 "0" 100 0 0 100 aclitemin - ));
DESCR("(internal)");
-DATA(insert OID = 1032 ( aclitemout PGUID 11 f t f 1 f 23 "0" 100 0 0 100 aclitemout - ));
+DATA(insert OID = 1032 ( aclitemout PGUID 11 f t f t 1 f 23 "0" 100 0 0 100 aclitemout - ));
DESCR("(internal)");
-DATA(insert OID = 1035 ( aclinsert PGUID 11 f t f 2 f 1034 "1034 1033" 100 0 0 100 aclinsert - ));
+DATA(insert OID = 1035 ( aclinsert PGUID 11 f t f t 2 f 1034 "1034 1033" 100 0 0 100 aclinsert - ));
DESCR("addition");
-DATA(insert OID = 1036 ( aclremove PGUID 11 f t f 2 f 1034 "1034 1033" 100 0 0 100 aclremove - ));
+DATA(insert OID = 1036 ( aclremove PGUID 11 f t f t 2 f 1034 "1034 1033" 100 0 0 100 aclremove - ));
DESCR("subtract");
-DATA(insert OID = 1037 ( aclcontains PGUID 11 f t f 2 f 16 "1034 1033" 100 0 0 100 aclcontains - ));
+DATA(insert OID = 1037 ( aclcontains PGUID 11 f t f t 2 f 16 "1034 1033" 100 0 0 100 aclcontains - ));
DESCR("matches regex., case-sensitive");
-DATA(insert OID = 1038 ( seteval PGUID 11 f t f 1 f 23 "26" 100 0 0 100 seteval - ));
+DATA(insert OID = 1038 ( seteval PGUID 11 f t f t 1 f 23 "26" 100 0 0 100 seteval - ));
DESCR("");
-DATA(insert OID = 1044 ( bpcharin PGUID 11 f t t 3 f 1042 "0 0 23" 100 0 0 100 bpcharin - ));
+DATA(insert OID = 1044 ( bpcharin PGUID 11 f t t t 3 f 1042 "0 0 23" 100 0 0 100 bpcharin - ));
DESCR("(internal)");
-DATA(insert OID = 1045 ( bpcharout PGUID 11 f t t 1 f 23 "0" 100 0 0 100 bpcharout - ));
+DATA(insert OID = 1045 ( bpcharout PGUID 11 f t t t 1 f 23 "0" 100 0 0 100 bpcharout - ));
DESCR("(internal)");
-DATA(insert OID = 1046 ( varcharin PGUID 11 f t t 3 f 1043 "0 0 23" 100 0 0 100 varcharin - ));
+DATA(insert OID = 1046 ( varcharin PGUID 11 f t t t 3 f 1043 "0 0 23" 100 0 0 100 varcharin - ));
DESCR("(internal)");
-DATA(insert OID = 1047 ( varcharout PGUID 11 f t t 1 f 23 "0" 100 0 0 100 varcharout - ));
+DATA(insert OID = 1047 ( varcharout PGUID 11 f t t t 1 f 23 "0" 100 0 0 100 varcharout - ));
DESCR("(internal)");
-DATA(insert OID = 1048 ( bpchareq PGUID 11 f t t 2 f 16 "1042 1042" 100 0 0 100 bpchareq - ));
+DATA(insert OID = 1048 ( bpchareq PGUID 11 f t t t 2 f 16 "1042 1042" 100 0 0 100 bpchareq - ));
DESCR("equal");
-DATA(insert OID = 1049 ( bpcharlt PGUID 11 f t t 2 f 16 "1042 1042" 100 0 0 100 bpcharlt - ));
+DATA(insert OID = 1049 ( bpcharlt PGUID 11 f t t t 2 f 16 "1042 1042" 100 0 0 100 bpcharlt - ));
DESCR("less-than");
-DATA(insert OID = 1050 ( bpcharle PGUID 11 f t t 2 f 16 "1042 1042" 100 0 0 100 bpcharle - ));
+DATA(insert OID = 1050 ( bpcharle PGUID 11 f t t t 2 f 16 "1042 1042" 100 0 0 100 bpcharle - ));
DESCR("less-than-or-equal");
-DATA(insert OID = 1051 ( bpchargt PGUID 11 f t t 2 f 16 "1042 1042" 100 0 0 100 bpchargt - ));
+DATA(insert OID = 1051 ( bpchargt PGUID 11 f t t t 2 f 16 "1042 1042" 100 0 0 100 bpchargt - ));
DESCR("greater-than");
-DATA(insert OID = 1052 ( bpcharge PGUID 11 f t t 2 f 16 "1042 1042" 100 0 0 100 bpcharge - ));
+DATA(insert OID = 1052 ( bpcharge PGUID 11 f t t t 2 f 16 "1042 1042" 100 0 0 100 bpcharge - ));
DESCR("greater-than-or-equal");
-DATA(insert OID = 1053 ( bpcharne PGUID 11 f t t 2 f 16 "1042 1042" 100 0 0 100 bpcharne - ));
+DATA(insert OID = 1053 ( bpcharne PGUID 11 f t t t 2 f 16 "1042 1042" 100 0 0 100 bpcharne - ));
DESCR("not equal");
-DATA(insert OID = 1070 ( varchareq PGUID 11 f t t 2 f 16 "1043 1043" 100 0 0 100 varchareq - ));
+DATA(insert OID = 1070 ( varchareq PGUID 11 f t t t 2 f 16 "1043 1043" 100 0 0 100 varchareq - ));
DESCR("equal");
-DATA(insert OID = 1071 ( varcharlt PGUID 11 f t t 2 f 16 "1043 1043" 100 0 0 100 varcharlt - ));
+DATA(insert OID = 1071 ( varcharlt PGUID 11 f t t t 2 f 16 "1043 1043" 100 0 0 100 varcharlt - ));
DESCR("less-than");
-DATA(insert OID = 1072 ( varcharle PGUID 11 f t t 2 f 16 "1043 1043" 100 0 0 100 varcharle - ));
+DATA(insert OID = 1072 ( varcharle PGUID 11 f t t t 2 f 16 "1043 1043" 100 0 0 100 varcharle - ));
DESCR("less-than-or-equal");
-DATA(insert OID = 1073 ( varchargt PGUID 11 f t t 2 f 16 "1043 1043" 100 0 0 100 varchargt - ));
+DATA(insert OID = 1073 ( varchargt PGUID 11 f t t t 2 f 16 "1043 1043" 100 0 0 100 varchargt - ));
DESCR("greater-than");
-DATA(insert OID = 1074 ( varcharge PGUID 11 f t t 2 f 16 "1043 1043" 100 0 0 100 varcharge - ));
+DATA(insert OID = 1074 ( varcharge PGUID 11 f t t t 2 f 16 "1043 1043" 100 0 0 100 varcharge - ));
DESCR("greater-than-or-equal");
-DATA(insert OID = 1075 ( varcharne PGUID 11 f t t 2 f 16 "1043 1043" 100 0 0 100 varcharne - ));
+DATA(insert OID = 1075 ( varcharne PGUID 11 f t t t 2 f 16 "1043 1043" 100 0 0 100 varcharne - ));
DESCR("not equal");
-DATA(insert OID = 1078 ( bpcharcmp PGUID 11 f t t 2 f 23 "1042 1042" 100 0 0 100 bpcharcmp - ));
+DATA(insert OID = 1078 ( bpcharcmp PGUID 11 f t t t 2 f 23 "1042 1042" 100 0 0 100 bpcharcmp - ));
DESCR("less-equal-greater");
-DATA(insert OID = 1079 ( varcharcmp PGUID 11 f t t 2 f 23 "1043 1043" 100 0 0 100 varcharcmp - ));
+DATA(insert OID = 1079 ( varcharcmp PGUID 11 f t t t 2 f 23 "1043 1043" 100 0 0 100 varcharcmp - ));
DESCR("less-equal-greater");
-DATA(insert OID = 1080 ( hashbpchar PGUID 11 f t t 1 f 23 "1042" 100 0 0 100 hashbpchar - ));
+DATA(insert OID = 1080 ( hashbpchar PGUID 11 f t t t 1 f 23 "1042" 100 0 0 100 hashbpchar - ));
DESCR("hash");
-DATA(insert OID = 1081 ( hashvarchar PGUID 11 f t t 1 f 23 "1043" 100 0 0 100 hashvarchar - ));
+DATA(insert OID = 1081 ( hashvarchar PGUID 11 f t t t 1 f 23 "1043" 100 0 0 100 hashvarchar - ));
DESCR("hash");
-DATA(insert OID = 1084 ( date_in PGUID 11 f t f 1 f 1082 "0" 100 0 0 100 date_in - ));
+DATA(insert OID = 1084 ( date_in PGUID 11 f t f t 1 f 1082 "0" 100 0 0 100 date_in - ));
DESCR("(internal)");
-DATA(insert OID = 1085 ( date_out PGUID 11 f t f 1 f 23 "0" 100 0 0 100 date_out - ));
+DATA(insert OID = 1085 ( date_out PGUID 11 f t f t 1 f 23 "0" 100 0 0 100 date_out - ));
DESCR("(internal)");
-DATA(insert OID = 1086 ( date_eq PGUID 11 f t t 2 f 16 "1082 1082" 100 0 0 100 date_eq - ));
+DATA(insert OID = 1086 ( date_eq PGUID 11 f t t t 2 f 16 "1082 1082" 100 0 0 100 date_eq - ));
DESCR("equal");
-DATA(insert OID = 1087 ( date_lt PGUID 11 f t t 2 f 16 "1082 1082" 100 0 0 100 date_lt - ));
+DATA(insert OID = 1087 ( date_lt PGUID 11 f t t t 2 f 16 "1082 1082" 100 0 0 100 date_lt - ));
DESCR("less-than");
-DATA(insert OID = 1088 ( date_le PGUID 11 f t t 2 f 16 "1082 1082" 100 0 0 100 date_le - ));
+DATA(insert OID = 1088 ( date_le PGUID 11 f t t t 2 f 16 "1082 1082" 100 0 0 100 date_le - ));
DESCR("less-than-or-equal");
-DATA(insert OID = 1089 ( date_gt PGUID 11 f t t 2 f 16 "1082 1082" 100 0 0 100 date_gt - ));
+DATA(insert OID = 1089 ( date_gt PGUID 11 f t t t 2 f 16 "1082 1082" 100 0 0 100 date_gt - ));
DESCR("greater-than");
-DATA(insert OID = 1090 ( date_ge PGUID 11 f t t 2 f 16 "1082 1082" 100 0 0 100 date_ge - ));
+DATA(insert OID = 1090 ( date_ge PGUID 11 f t t t 2 f 16 "1082 1082" 100 0 0 100 date_ge - ));
DESCR("greater-than-or-equal");
-DATA(insert OID = 1091 ( date_ne PGUID 11 f t t 2 f 16 "1082 1082" 100 0 0 100 date_ne - ));
+DATA(insert OID = 1091 ( date_ne PGUID 11 f t t t 2 f 16 "1082 1082" 100 0 0 100 date_ne - ));
DESCR("not equal");
-DATA(insert OID = 1092 ( date_cmp PGUID 11 f t t 2 f 23 "1082 1082" 100 0 0 100 date_cmp - ));
+DATA(insert OID = 1092 ( date_cmp PGUID 11 f t t t 2 f 23 "1082 1082" 100 0 0 100 date_cmp - ));
DESCR("less-equal-greater");
/* OIDS 1100 - 1199 */
-DATA(insert OID = 1102 ( time_lt PGUID 11 f t t 2 f 16 "1083 1083" 100 0 0 100 time_lt - ));
+DATA(insert OID = 1102 ( time_lt PGUID 11 f t t t 2 f 16 "1083 1083" 100 0 0 100 time_lt - ));
DESCR("less-than");
-DATA(insert OID = 1103 ( time_le PGUID 11 f t t 2 f 16 "1083 1083" 100 0 0 100 time_le - ));
+DATA(insert OID = 1103 ( time_le PGUID 11 f t t t 2 f 16 "1083 1083" 100 0 0 100 time_le - ));
DESCR("less-than-or-equal");
-DATA(insert OID = 1104 ( time_gt PGUID 11 f t t 2 f 16 "1083 1083" 100 0 0 100 time_gt - ));
+DATA(insert OID = 1104 ( time_gt PGUID 11 f t t t 2 f 16 "1083 1083" 100 0 0 100 time_gt - ));
DESCR("greater-than");
-DATA(insert OID = 1105 ( time_ge PGUID 11 f t t 2 f 16 "1083 1083" 100 0 0 100 time_ge - ));
+DATA(insert OID = 1105 ( time_ge PGUID 11 f t t t 2 f 16 "1083 1083" 100 0 0 100 time_ge - ));
DESCR("greater-than-or-equal");
-DATA(insert OID = 1106 ( time_ne PGUID 11 f t t 2 f 16 "1083 1083" 100 0 0 100 time_ne - ));
+DATA(insert OID = 1106 ( time_ne PGUID 11 f t t t 2 f 16 "1083 1083" 100 0 0 100 time_ne - ));
DESCR("not equal");
-DATA(insert OID = 1107 ( time_cmp PGUID 11 f t t 2 f 23 "1083 1083" 100 0 0 100 time_cmp - ));
+DATA(insert OID = 1107 ( time_cmp PGUID 11 f t t t 2 f 23 "1083 1083" 100 0 0 100 time_cmp - ));
DESCR("less-equal-greater");
-DATA(insert OID = 1138 ( date_larger PGUID 11 f t t 2 f 1082 "1082 1082" 100 0 0 100 date_larger - ));
+DATA(insert OID = 1138 ( date_larger PGUID 11 f t t t 2 f 1082 "1082 1082" 100 0 0 100 date_larger - ));
DESCR("larger of two");
-DATA(insert OID = 1139 ( date_smaller PGUID 11 f t t 2 f 1082 "1082 1082" 100 0 0 100 date_smaller - ));
+DATA(insert OID = 1139 ( date_smaller PGUID 11 f t t t 2 f 1082 "1082 1082" 100 0 0 100 date_smaller - ));
DESCR("smaller of two");
-DATA(insert OID = 1140 ( date_mi PGUID 11 f t t 2 f 23 "1082 1082" 100 0 0 100 date_mi - ));
+DATA(insert OID = 1140 ( date_mi PGUID 11 f t t t 2 f 23 "1082 1082" 100 0 0 100 date_mi - ));
DESCR("subtract");
-DATA(insert OID = 1141 ( date_pli PGUID 11 f t t 2 f 1082 "1082 23" 100 0 0 100 date_pli - ));
+DATA(insert OID = 1141 ( date_pli PGUID 11 f t t t 2 f 1082 "1082 23" 100 0 0 100 date_pli - ));
DESCR("addition");
-DATA(insert OID = 1142 ( date_mii PGUID 11 f t t 2 f 1082 "1082 23" 100 0 0 100 date_mii - ));
+DATA(insert OID = 1142 ( date_mii PGUID 11 f t t t 2 f 1082 "1082 23" 100 0 0 100 date_mii - ));
DESCR("subtract");
-DATA(insert OID = 1143 ( time_in PGUID 11 f t f 1 f 1083 "0" 100 0 0 100 time_in - ));
+DATA(insert OID = 1143 ( time_in PGUID 11 f t f t 1 f 1083 "0" 100 0 0 100 time_in - ));
DESCR("(internal)");
-DATA(insert OID = 1144 ( time_out PGUID 11 f t f 1 f 23 "0" 100 0 0 100 time_out - ));
+DATA(insert OID = 1144 ( time_out PGUID 11 f t f t 1 f 23 "0" 100 0 0 100 time_out - ));
DESCR("(internal)");
-DATA(insert OID = 1145 ( time_eq PGUID 11 f t t 2 f 16 "1083 1083" 100 0 0 100 time_eq - ));
+DATA(insert OID = 1145 ( time_eq PGUID 11 f t t t 2 f 16 "1083 1083" 100 0 0 100 time_eq - ));
DESCR("equal");
-DATA(insert OID = 1146 ( circle_add_pt PGUID 11 f t t 2 f 718 "718 600" 100 0 0 100 circle_add_pt - ));
+DATA(insert OID = 1146 ( circle_add_pt PGUID 11 f t t t 2 f 718 "718 600" 100 0 0 100 circle_add_pt - ));
DESCR("addition");
-DATA(insert OID = 1147 ( circle_sub_pt PGUID 11 f t t 2 f 718 "718 600" 100 0 0 100 circle_sub_pt - ));
+DATA(insert OID = 1147 ( circle_sub_pt PGUID 11 f t t t 2 f 718 "718 600" 100 0 0 100 circle_sub_pt - ));
DESCR("subtract");
-DATA(insert OID = 1148 ( circle_mul_pt PGUID 11 f t t 2 f 718 "718 600" 100 0 0 100 circle_mul_pt - ));
+DATA(insert OID = 1148 ( circle_mul_pt PGUID 11 f t t t 2 f 718 "718 600" 100 0 0 100 circle_mul_pt - ));
DESCR("multiply");
-DATA(insert OID = 1149 ( circle_div_pt PGUID 11 f t t 2 f 718 "718 600" 100 0 0 100 circle_div_pt - ));
+DATA(insert OID = 1149 ( circle_div_pt PGUID 11 f t t t 2 f 718 "718 600" 100 0 0 100 circle_div_pt - ));
DESCR("divide");
-DATA(insert OID = 1150 ( timestamp_in PGUID 11 f t f 1 f 1184 "0" 100 0 0 100 timestamp_in - ));
+DATA(insert OID = 1150 ( timestamp_in PGUID 11 f t f t 1 f 1184 "0" 100 0 0 100 timestamp_in - ));
DESCR("(internal)");
-DATA(insert OID = 1151 ( timestamp_out PGUID 11 f t f 1 f 23 "0" 100 0 0 100 timestamp_out - ));
+DATA(insert OID = 1151 ( timestamp_out PGUID 11 f t f t 1 f 23 "0" 100 0 0 100 timestamp_out - ));
DESCR("(internal)");
-DATA(insert OID = 1152 ( timestamp_eq PGUID 11 f t f 2 f 16 "1184 1184" 100 0 0 100 timestamp_eq - ));
+DATA(insert OID = 1152 ( timestamp_eq PGUID 11 f t f t 2 f 16 "1184 1184" 100 0 0 100 timestamp_eq - ));
DESCR("equal");
-DATA(insert OID = 1153 ( timestamp_ne PGUID 11 f t f 2 f 16 "1184 1184" 100 0 0 100 timestamp_ne - ));
+DATA(insert OID = 1153 ( timestamp_ne PGUID 11 f t f t 2 f 16 "1184 1184" 100 0 0 100 timestamp_ne - ));
DESCR("not equal");
-DATA(insert OID = 1154 ( timestamp_lt PGUID 11 f t f 2 f 16 "1184 1184" 100 0 0 100 timestamp_lt - ));
+DATA(insert OID = 1154 ( timestamp_lt PGUID 11 f t f t 2 f 16 "1184 1184" 100 0 0 100 timestamp_lt - ));
DESCR("less-than");
-DATA(insert OID = 1155 ( timestamp_le PGUID 11 f t f 2 f 16 "1184 1184" 100 0 0 100 timestamp_le - ));
+DATA(insert OID = 1155 ( timestamp_le PGUID 11 f t f t 2 f 16 "1184 1184" 100 0 0 100 timestamp_le - ));
DESCR("less-than-or-equal");
-DATA(insert OID = 1156 ( timestamp_ge PGUID 11 f t f 2 f 16 "1184 1184" 100 0 0 100 timestamp_ge - ));
+DATA(insert OID = 1156 ( timestamp_ge PGUID 11 f t f t 2 f 16 "1184 1184" 100 0 0 100 timestamp_ge - ));
DESCR("greater-than-or-equal");
-DATA(insert OID = 1157 ( timestamp_gt PGUID 11 f t f 2 f 16 "1184 1184" 100 0 0 100 timestamp_gt - ));
+DATA(insert OID = 1157 ( timestamp_gt PGUID 11 f t f t 2 f 16 "1184 1184" 100 0 0 100 timestamp_gt - ));
DESCR("greater-than");
-DATA(insert OID = 1159 ( timezone PGUID 11 f t f 2 f 25 "25 1184" 100 0 0 100 timestamp_zone - ));
+DATA(insert OID = 1159 ( timezone PGUID 11 f t f t 2 f 25 "25 1184" 100 0 0 100 timestamp_zone - ));
DESCR("time zone");
-DATA(insert OID = 1160 ( interval_in PGUID 11 f t f 1 f 1186 "0" 100 0 0 100 interval_in - ));
+DATA(insert OID = 1160 ( interval_in PGUID 11 f t f t 1 f 1186 "0" 100 0 0 100 interval_in - ));
DESCR("(internal)");
-DATA(insert OID = 1161 ( interval_out PGUID 11 f t f 1 f 23 "0" 100 0 0 100 interval_out - ));
+DATA(insert OID = 1161 ( interval_out PGUID 11 f t f t 1 f 23 "0" 100 0 0 100 interval_out - ));
DESCR("(internal)");
-DATA(insert OID = 1162 ( interval_eq PGUID 11 f t f 2 f 16 "1186 1186" 100 0 0 100 interval_eq - ));
+DATA(insert OID = 1162 ( interval_eq PGUID 11 f t f t 2 f 16 "1186 1186" 100 0 0 100 interval_eq - ));
DESCR("equal");
-DATA(insert OID = 1163 ( interval_ne PGUID 11 f t f 2 f 16 "1186 1186" 100 0 0 100 interval_ne - ));
+DATA(insert OID = 1163 ( interval_ne PGUID 11 f t f t 2 f 16 "1186 1186" 100 0 0 100 interval_ne - ));
DESCR("not equal");
-DATA(insert OID = 1164 ( interval_lt PGUID 11 f t f 2 f 16 "1186 1186" 100 0 0 100 interval_lt - ));
+DATA(insert OID = 1164 ( interval_lt PGUID 11 f t f t 2 f 16 "1186 1186" 100 0 0 100 interval_lt - ));
DESCR("less-than");
-DATA(insert OID = 1165 ( interval_le PGUID 11 f t f 2 f 16 "1186 1186" 100 0 0 100 interval_le - ));
+DATA(insert OID = 1165 ( interval_le PGUID 11 f t f t 2 f 16 "1186 1186" 100 0 0 100 interval_le - ));
DESCR("less-than-or-equal");
-DATA(insert OID = 1166 ( interval_ge PGUID 11 f t f 2 f 16 "1186 1186" 100 0 0 100 interval_ge - ));
+DATA(insert OID = 1166 ( interval_ge PGUID 11 f t f t 2 f 16 "1186 1186" 100 0 0 100 interval_ge - ));
DESCR("greater-than-or-equal");
-DATA(insert OID = 1167 ( interval_gt PGUID 11 f t f 2 f 16 "1186 1186" 100 0 0 100 interval_gt - ));
+DATA(insert OID = 1167 ( interval_gt PGUID 11 f t f t 2 f 16 "1186 1186" 100 0 0 100 interval_gt - ));
DESCR("greater-than");
-DATA(insert OID = 1168 ( interval_um PGUID 11 f t f 1 f 1186 "1186" 100 0 0 100 interval_um - ));
+DATA(insert OID = 1168 ( interval_um PGUID 11 f t f t 1 f 1186 "1186" 100 0 0 100 interval_um - ));
DESCR("subtract");
-DATA(insert OID = 1169 ( interval_pl PGUID 11 f t f 2 f 1186 "1186 1186" 100 0 0 100 interval_pl - ));
+DATA(insert OID = 1169 ( interval_pl PGUID 11 f t f t 2 f 1186 "1186 1186" 100 0 0 100 interval_pl - ));
DESCR("addition");
-DATA(insert OID = 1170 ( interval_mi PGUID 11 f t f 2 f 1186 "1186 1186" 100 0 0 100 interval_mi - ));
+DATA(insert OID = 1170 ( interval_mi PGUID 11 f t f t 2 f 1186 "1186 1186" 100 0 0 100 interval_mi - ));
DESCR("subtract");
-DATA(insert OID = 1171 ( date_part PGUID 11 f t f 2 f 701 "25 1184" 100 0 0 100 timestamp_part - ));
+DATA(insert OID = 1171 ( date_part PGUID 11 f t f t 2 f 701 "25 1184" 100 0 0 100 timestamp_part - ));
DESCR("extract field from timestamp");
-DATA(insert OID = 1172 ( date_part PGUID 11 f t f 2 f 701 "25 1186" 100 0 0 100 interval_part - ));
+DATA(insert OID = 1172 ( date_part PGUID 11 f t f t 2 f 701 "25 1186" 100 0 0 100 interval_part - ));
DESCR("extract field from interval");
-DATA(insert OID = 1173 ( timestamp PGUID 11 f t f 1 f 1184 "702" 100 0 0 100 abstime_timestamp - ));
+DATA(insert OID = 1173 ( timestamp PGUID 11 f t f t 1 f 1184 "702" 100 0 0 100 abstime_timestamp - ));
DESCR("convert abstime to timestamp");
-DATA(insert OID = 1174 ( timestamp PGUID 11 f t f 1 f 1184 "1082" 100 0 0 100 date_timestamp - ));
+DATA(insert OID = 1174 ( timestamp PGUID 11 f t f t 1 f 1184 "1082" 100 0 0 100 date_timestamp - ));
DESCR("convert date to timestamp");
-DATA(insert OID = 1176 ( timestamp PGUID 11 f t f 2 f 1184 "1082 1083" 100 0 0 100 datetime_timestamp - ));
+DATA(insert OID = 1176 ( timestamp PGUID 11 f t f t 2 f 1184 "1082 1083" 100 0 0 100 datetime_timestamp - ));
DESCR("convert date and time to timestamp");
-DATA(insert OID = 1177 ( interval PGUID 11 f t f 1 f 1186 "703" 100 0 0 100 reltime_interval - ));
+DATA(insert OID = 1177 ( interval PGUID 11 f t f t 1 f 1186 "703" 100 0 0 100 reltime_interval - ));
DESCR("convert reltime to interval");
-DATA(insert OID = 1178 ( date PGUID 11 f t f 1 f 1082 "1184" 100 0 0 100 timestamp_date - ));
+DATA(insert OID = 1178 ( date PGUID 11 f t f t 1 f 1082 "1184" 100 0 0 100 timestamp_date - ));
DESCR("convert timestamp to date");
-DATA(insert OID = 1179 ( date PGUID 11 f t f 1 f 1082 "702" 100 0 0 100 abstime_date - ));
+DATA(insert OID = 1179 ( date PGUID 11 f t f t 1 f 1082 "702" 100 0 0 100 abstime_date - ));
DESCR("convert abstime to date");
-DATA(insert OID = 1180 ( abstime PGUID 11 f t f 1 f 702 "1184" 100 0 0 100 timestamp_abstime - ));
+DATA(insert OID = 1180 ( abstime PGUID 11 f t f t 1 f 702 "1184" 100 0 0 100 timestamp_abstime - ));
DESCR("convert timestamp to abstime");
-DATA(insert OID = 1188 ( timestamp_mi PGUID 11 f t f 2 f 1186 "1184 1184" 100 0 0 100 timestamp_mi - ));
+DATA(insert OID = 1188 ( timestamp_mi PGUID 11 f t f t 2 f 1186 "1184 1184" 100 0 0 100 timestamp_mi - ));
DESCR("subtract");
-DATA(insert OID = 1189 ( timestamp_pl_span PGUID 11 f t f 2 f 1184 "1184 1186" 100 0 0 100 timestamp_pl_span - ));
+DATA(insert OID = 1189 ( timestamp_pl_span PGUID 11 f t f t 2 f 1184 "1184 1186" 100 0 0 100 timestamp_pl_span - ));
DESCR("plus");
-DATA(insert OID = 1190 ( timestamp_mi_span PGUID 11 f t f 2 f 1184 "1184 1186" 100 0 0 100 timestamp_mi_span - ));
+DATA(insert OID = 1190 ( timestamp_mi_span PGUID 11 f t f t 2 f 1184 "1184 1186" 100 0 0 100 timestamp_mi_span - ));
DESCR("minus");
-DATA(insert OID = 1191 ( timestamp PGUID 11 f t f 1 f 1184 "25" 100 0 0 100 text_timestamp - ));
+DATA(insert OID = 1191 ( timestamp PGUID 11 f t f t 1 f 1184 "25" 100 0 0 100 text_timestamp - ));
DESCR("convert text to timestamp");
-DATA(insert OID = 1192 ( text PGUID 11 f t f 1 f 25 "1184" 100 0 0 100 timestamp_text - ));
+DATA(insert OID = 1192 ( text PGUID 11 f t f t 1 f 25 "1184" 100 0 0 100 timestamp_text - ));
DESCR("convert timestamp to text");
-DATA(insert OID = 1193 ( text PGUID 11 f t f 1 f 25 "1186" 100 0 0 100 interval_text - ));
+DATA(insert OID = 1193 ( text PGUID 11 f t f t 1 f 25 "1186" 100 0 0 100 interval_text - ));
DESCR("convert interval to text");
-DATA(insert OID = 1194 ( reltime PGUID 11 f t f 1 f 703 "1186" 100 0 0 100 interval_reltime - ));
+DATA(insert OID = 1194 ( reltime PGUID 11 f t f t 1 f 703 "1186" 100 0 0 100 interval_reltime - ));
DESCR("convert interval to reltime");
-DATA(insert OID = 1195 ( timestamp_smaller PGUID 11 f t f 2 f 1184 "1184 1184" 100 0 0 100 timestamp_smaller - ));
+DATA(insert OID = 1195 ( timestamp_smaller PGUID 11 f t f t 2 f 1184 "1184 1184" 100 0 0 100 timestamp_smaller - ));
DESCR("smaller of two");
-DATA(insert OID = 1196 ( timestamp_larger PGUID 11 f t f 2 f 1184 "1184 1184" 100 0 0 100 timestamp_larger - ));
+DATA(insert OID = 1196 ( timestamp_larger PGUID 11 f t f t 2 f 1184 "1184 1184" 100 0 0 100 timestamp_larger - ));
DESCR("larger of two");
-DATA(insert OID = 1197 ( interval_smaller PGUID 11 f t f 2 f 1186 "1186 1186" 100 0 0 100 interval_smaller - ));
+DATA(insert OID = 1197 ( interval_smaller PGUID 11 f t f t 2 f 1186 "1186 1186" 100 0 0 100 interval_smaller - ));
DESCR("smaller of two");
-DATA(insert OID = 1198 ( interval_larger PGUID 11 f t f 2 f 1186 "1186 1186" 100 0 0 100 interval_larger - ));
+DATA(insert OID = 1198 ( interval_larger PGUID 11 f t f t 2 f 1186 "1186 1186" 100 0 0 100 interval_larger - ));
DESCR("larger of two");
-DATA(insert OID = 1199 ( age PGUID 11 f t f 2 f 1186 "1184 1184" 100 0 0 100 timestamp_age - ));
+DATA(insert OID = 1199 ( age PGUID 11 f t f t 2 f 1186 "1184 1184" 100 0 0 100 timestamp_age - ));
DESCR("date difference preserving months and years");
/* OIDS 1200 - 1299 */
-DATA(insert OID = 1200 ( reltime PGUID 11 f t t 1 f 703 "23" 100 0 0 100 int4reltime - ));
+DATA(insert OID = 1200 ( reltime PGUID 11 f t t t 1 f 703 "23" 100 0 0 100 int4reltime - ));
DESCR("convert int4 to reltime");
-DATA(insert OID = 1217 ( date_trunc PGUID 11 f t f 2 f 1184 "25 1184" 100 0 0 100 timestamp_trunc - ));
+DATA(insert OID = 1217 ( date_trunc PGUID 11 f t f t 2 f 1184 "25 1184" 100 0 0 100 timestamp_trunc - ));
DESCR("truncate timestamp to specified units");
-DATA(insert OID = 1218 ( date_trunc PGUID 11 f t f 2 f 1186 "25 1186" 100 0 0 100 interval_trunc - ));
+DATA(insert OID = 1218 ( date_trunc PGUID 11 f t f t 2 f 1186 "25 1186" 100 0 0 100 interval_trunc - ));
DESCR("truncate interval to specified units");
-DATA(insert OID = 1230 ( int8abs PGUID 11 f t t 1 f 20 "20" 100 0 0 100 int8abs - ));
+DATA(insert OID = 1230 ( int8abs PGUID 11 f t t t 1 f 20 "20" 100 0 0 100 int8abs - ));
DESCR("absolute value");
-DATA(insert OID = 1236 ( int8larger PGUID 11 f t t 2 f 20 "20 20" 100 0 0 100 int8larger - ));
+DATA(insert OID = 1236 ( int8larger PGUID 11 f t t t 2 f 20 "20 20" 100 0 0 100 int8larger - ));
DESCR("larger of two");
-DATA(insert OID = 1237 ( int8smaller PGUID 11 f t t 2 f 20 "20 20" 100 0 0 100 int8smaller - ));
+DATA(insert OID = 1237 ( int8smaller PGUID 11 f t t t 2 f 20 "20 20" 100 0 0 100 int8smaller - ));
DESCR("smaller of two");
-DATA(insert OID = 1238 ( texticregexeq PGUID 11 f t t 2 f 16 "25 25" 100 0 1 0 texticregexeq - ));
+DATA(insert OID = 1238 ( texticregexeq PGUID 11 f t t t 2 f 16 "25 25" 100 0 1 0 texticregexeq - ));
DESCR("matches regex., case-insensitive");
-DATA(insert OID = 1239 ( texticregexne PGUID 11 f t t 2 f 16 "25 25" 100 0 1 0 texticregexne - ));
+DATA(insert OID = 1239 ( texticregexne PGUID 11 f t t t 2 f 16 "25 25" 100 0 1 0 texticregexne - ));
DESCR("does not match regex., case-insensitive");
-DATA(insert OID = 1240 ( nameicregexeq PGUID 11 f t t 2 f 16 "19 25" 100 0 0 100 nameicregexeq - ));
+DATA(insert OID = 1240 ( nameicregexeq PGUID 11 f t t t 2 f 16 "19 25" 100 0 0 100 nameicregexeq - ));
DESCR("matches regex., case-insensitive");
-DATA(insert OID = 1241 ( nameicregexne PGUID 11 f t t 2 f 16 "19 25" 100 0 0 100 nameicregexne - ));
+DATA(insert OID = 1241 ( nameicregexne PGUID 11 f t t t 2 f 16 "19 25" 100 0 0 100 nameicregexne - ));
DESCR("does not match regex., case-insensitive");
-DATA(insert OID = 1251 ( int4abs PGUID 11 f t t 1 f 23 "23" 100 0 0 100 int4abs - ));
+DATA(insert OID = 1251 ( int4abs PGUID 11 f t t t 1 f 23 "23" 100 0 0 100 int4abs - ));
DESCR("absolute value");
-DATA(insert OID = 1253 ( int2abs PGUID 11 f t t 1 f 21 "21" 100 0 0 100 int2abs - ));
+DATA(insert OID = 1253 ( int2abs PGUID 11 f t t t 1 f 21 "21" 100 0 0 100 int2abs - ));
DESCR("absolute value");
-DATA(insert OID = 1263 ( interval PGUID 11 f t f 1 f 1186 "25" 100 0 0 100 text_interval - ));
+DATA(insert OID = 1263 ( interval PGUID 11 f t f t 1 f 1186 "25" 100 0 0 100 text_interval - ));
DESCR("convert text to interval");
-DATA(insert OID = 1271 ( overlaps PGUID 11 f t t 4 f 16 "1266 1266 1266 1266" 100 0 1 0 overlaps_timetz - ));
+DATA(insert OID = 1271 ( overlaps PGUID 11 f t t t 4 f 16 "1266 1266 1266 1266" 100 0 1 0 overlaps_timetz - ));
DESCR("SQL92 interval comparison");
-DATA(insert OID = 1272 ( datetime_pl PGUID 11 f t f 2 f 1184 "1082 1083" 100 0 0 100 datetime_timestamp - ));
+DATA(insert OID = 1272 ( datetime_pl PGUID 11 f t f t 2 f 1184 "1082 1083" 100 0 0 100 datetime_timestamp - ));
DESCR("convert date and time to timestamp");
-DATA(insert OID = 1274 ( int84pl PGUID 11 f t t 2 f 20 "20 23" 100 0 0 100 int84pl - ));
+DATA(insert OID = 1274 ( int84pl PGUID 11 f t t t 2 f 20 "20 23" 100 0 0 100 int84pl - ));
DESCR("addition");
-DATA(insert OID = 1275 ( int84mi PGUID 11 f t t 2 f 20 "20 23" 100 0 0 100 int84mi - ));
+DATA(insert OID = 1275 ( int84mi PGUID 11 f t t t 2 f 20 "20 23" 100 0 0 100 int84mi - ));
DESCR("subtraction");
-DATA(insert OID = 1276 ( int84mul PGUID 11 f t t 2 f 20 "20 23" 100 0 0 100 int84mul - ));
+DATA(insert OID = 1276 ( int84mul PGUID 11 f t t t 2 f 20 "20 23" 100 0 0 100 int84mul - ));
DESCR("multiply");
-DATA(insert OID = 1277 ( int84div PGUID 11 f t t 2 f 20 "20 23" 100 0 0 100 int84div - ));
+DATA(insert OID = 1277 ( int84div PGUID 11 f t t t 2 f 20 "20 23" 100 0 0 100 int84div - ));
DESCR("divide");
-DATA(insert OID = 1278 ( int48pl PGUID 11 f t t 2 f 20 "23 20" 100 0 0 100 int48pl - ));
+DATA(insert OID = 1278 ( int48pl PGUID 11 f t t t 2 f 20 "23 20" 100 0 0 100 int48pl - ));
DESCR("addition");
-DATA(insert OID = 1279 ( int48mi PGUID 11 f t t 2 f 20 "23 20" 100 0 0 100 int48mi - ));
+DATA(insert OID = 1279 ( int48mi PGUID 11 f t t t 2 f 20 "23 20" 100 0 0 100 int48mi - ));
DESCR("subtraction");
-DATA(insert OID = 1280 ( int48mul PGUID 11 f t t 2 f 20 "23 20" 100 0 0 100 int48mul - ));
+DATA(insert OID = 1280 ( int48mul PGUID 11 f t t t 2 f 20 "23 20" 100 0 0 100 int48mul - ));
DESCR("multiply");
-DATA(insert OID = 1281 ( int48div PGUID 11 f t t 2 f 20 "23 20" 100 0 0 100 int48div - ));
+DATA(insert OID = 1281 ( int48div PGUID 11 f t t t 2 f 20 "23 20" 100 0 0 100 int48div - ));
DESCR("divide");
-DATA(insert OID = 1288 ( text PGUID 11 f t t 1 f 25 "20" 100 0 0 100 int8_text - ));
+DATA(insert OID = 1288 ( text PGUID 11 f t t t 1 f 25 "20" 100 0 0 100 int8_text - ));
DESCR("convert int8 to text");
-DATA(insert OID = 1289 ( int8 PGUID 11 f t t 1 f 20 "25" 100 0 0 100 text_int8 - ));
+DATA(insert OID = 1289 ( int8 PGUID 11 f t t t 1 f 20 "25" 100 0 0 100 text_int8 - ));
DESCR("convert text to int8");
-DATA(insert OID = 1290 ( _bpchar PGUID 11 f t t 2 f 1014 "1014 23" 100 0 0 100 _bpchar - ));
+DATA(insert OID = 1290 ( _bpchar PGUID 11 f t t t 2 f 1014 "1014 23" 100 0 0 100 _bpchar - ));
DESCR("truncate _char()");
-DATA(insert OID = 1291 ( _varchar PGUID 11 f t t 2 f 1015 "1015 23" 100 0 0 100 _varchar - ));
+DATA(insert OID = 1291 ( _varchar PGUID 11 f t t t 2 f 1015 "1015 23" 100 0 0 100 _varchar - ));
DESCR("truncate _varchar()");
-DATA(insert OID = 1292 ( tideq PGUID 11 f t f 2 f 16 "27 27" 100 0 0 100 tideq - ));
+DATA(insert OID = 1292 ( tideq PGUID 11 f t f t 2 f 16 "27 27" 100 0 0 100 tideq - ));
DESCR("equal");
-DATA(insert OID = 1293 ( currtid PGUID 11 f t f 2 f 27 "26 27" 100 0 0 100 currtid_byreloid - ));
+DATA(insert OID = 1293 ( currtid PGUID 11 f t f t 2 f 27 "26 27" 100 0 0 100 currtid_byreloid - ));
DESCR("latest tid of a tuple");
-DATA(insert OID = 1294 ( currtid2 PGUID 11 f t f 2 f 27 "25 27" 100 0 0 100 currtid_byrelname - ));
+DATA(insert OID = 1294 ( currtid2 PGUID 11 f t f t 2 f 27 "25 27" 100 0 0 100 currtid_byrelname - ));
DESCR("latest tid of a tuple");
-DATA(insert OID = 1296 ( timedate_pl PGUID 14 f t f 2 f 1184 "1083 1082" 100 0 0 100 "select datetime_pl($2, $1)" - ));
+DATA(insert OID = 1296 ( timedate_pl PGUID 14 f t f t 2 f 1184 "1083 1082" 100 0 0 100 "select datetime_pl($2, $1)" - ));
DESCR("convert time and date to timestamp");
-DATA(insert OID = 1297 ( datetimetz_pl PGUID 11 f t f 2 f 1184 "1082 1266" 100 0 0 100 datetimetz_timestamp - ));
+DATA(insert OID = 1297 ( datetimetz_pl PGUID 11 f t f t 2 f 1184 "1082 1266" 100 0 0 100 datetimetz_timestamp - ));
DESCR("convert date and time with time zone to timestamp");
-DATA(insert OID = 1298 ( timetzdate_pl PGUID 14 f t f 2 f 1184 "1266 1082" 100 0 0 100 "select datetimetz_pl($2, $1)" - ));
+DATA(insert OID = 1298 ( timetzdate_pl PGUID 14 f t f t 2 f 1184 "1266 1082" 100 0 0 100 "select datetimetz_pl($2, $1)" - ));
DESCR("convert time with time zone and date to timestamp");
-DATA(insert OID = 1299 ( now PGUID 11 f t f 0 f 1184 "0" 100 0 0 100 now - ));
+DATA(insert OID = 1299 ( now PGUID 11 f t f t 0 f 1184 "0" 100 0 0 100 now - ));
DESCR("current transaction time");
/* OIDS 1300 - 1399 */
-DATA(insert OID = 1300 ( positionsel PGUID 11 f t f 5 f 701 "26 26 21 0 23" 100 0 0 100 positionsel - ));
+DATA(insert OID = 1300 ( positionsel PGUID 11 f t f t 5 f 701 "26 26 21 0 23" 100 0 0 100 positionsel - ));
DESCR("restriction selectivity for position-comparison operators");
-DATA(insert OID = 1301 ( positionjoinsel PGUID 11 f t f 5 f 701 "26 26 21 26 21" 100 0 0 100 positionjoinsel - ));
+DATA(insert OID = 1301 ( positionjoinsel PGUID 11 f t f t 5 f 701 "26 26 21 26 21" 100 0 0 100 positionjoinsel - ));
DESCR("join selectivity for position-comparison operators");
-DATA(insert OID = 1302 ( contsel PGUID 11 f t f 5 f 701 "26 26 21 0 23" 100 0 0 100 contsel - ));
+DATA(insert OID = 1302 ( contsel PGUID 11 f t f t 5 f 701 "26 26 21 0 23" 100 0 0 100 contsel - ));
DESCR("restriction selectivity for containment comparison operators");
-DATA(insert OID = 1303 ( contjoinsel PGUID 11 f t f 5 f 701 "26 26 21 26 21" 100 0 0 100 contjoinsel - ));
+DATA(insert OID = 1303 ( contjoinsel PGUID 11 f t f t 5 f 701 "26 26 21 26 21" 100 0 0 100 contjoinsel - ));
DESCR("join selectivity for containment comparison operators");
-DATA(insert OID = 1304 ( overlaps PGUID 11 f t t 4 f 16 "1184 1184 1184 1184" 100 0 1 0 overlaps_timestamp - ));
+DATA(insert OID = 1304 ( overlaps PGUID 11 f t t t 4 f 16 "1184 1184 1184 1184" 100 0 1 0 overlaps_timestamp - ));
DESCR("SQL92 interval comparison");
-DATA(insert OID = 1305 ( overlaps PGUID 14 f t t 4 f 16 "1184 1186 1184 1186" 100 0 1 0 "select overlaps($1, ($1 + $2), $3, ($3 + $4))" - ));
+DATA(insert OID = 1305 ( overlaps PGUID 14 f t t t 4 f 16 "1184 1186 1184 1186" 100 0 1 0 "select overlaps($1, ($1 + $2), $3, ($3 + $4))" - ));
DESCR("SQL92 interval comparison");
-DATA(insert OID = 1306 ( overlaps PGUID 14 f t t 4 f 16 "1184 1184 1184 1186" 100 0 1 0 "select overlaps($1, $2, $3, ($3 + $4))" - ));
+DATA(insert OID = 1306 ( overlaps PGUID 14 f t t t 4 f 16 "1184 1184 1184 1186" 100 0 1 0 "select overlaps($1, $2, $3, ($3 + $4))" - ));
DESCR("SQL92 interval comparison");
-DATA(insert OID = 1307 ( overlaps PGUID 14 f t t 4 f 16 "1184 1186 1184 1184" 100 0 1 0 "select overlaps($1, ($1 + $2), $3, $4)" - ));
+DATA(insert OID = 1307 ( overlaps PGUID 14 f t t t 4 f 16 "1184 1186 1184 1184" 100 0 1 0 "select overlaps($1, ($1 + $2), $3, $4)" - ));
DESCR("SQL92 interval comparison");
-DATA(insert OID = 1308 ( overlaps PGUID 11 f t t 4 f 16 "1083 1083 1083 1083" 100 0 1 0 overlaps_time - ));
+DATA(insert OID = 1308 ( overlaps PGUID 11 f t t t 4 f 16 "1083 1083 1083 1083" 100 0 1 0 overlaps_time - ));
DESCR("SQL92 interval comparison");
-DATA(insert OID = 1309 ( overlaps PGUID 14 f t t 4 f 16 "1083 1186 1083 1186" 100 0 1 0 "select overlaps($1, ($1 + $2), $3, ($3 + $4))" - ));
+DATA(insert OID = 1309 ( overlaps PGUID 14 f t t t 4 f 16 "1083 1186 1083 1186" 100 0 1 0 "select overlaps($1, ($1 + $2), $3, ($3 + $4))" - ));
DESCR("SQL92 interval comparison");
-DATA(insert OID = 1310 ( overlaps PGUID 14 f t t 4 f 16 "1083 1083 1083 1186" 100 0 1 0 "select overlaps($1, $2, $3, ($3 + $4))" - ));
+DATA(insert OID = 1310 ( overlaps PGUID 14 f t t t 4 f 16 "1083 1083 1083 1186" 100 0 1 0 "select overlaps($1, $2, $3, ($3 + $4))" - ));
DESCR("SQL92 interval comparison");
-DATA(insert OID = 1311 ( overlaps PGUID 14 f t t 4 f 16 "1083 1186 1083 1083" 100 0 1 0 "select overlaps($1, ($1 + $2), $3, $4)" - ));
+DATA(insert OID = 1311 ( overlaps PGUID 14 f t t t 4 f 16 "1083 1186 1083 1083" 100 0 1 0 "select overlaps($1, ($1 + $2), $3, $4)" - ));
DESCR("SQL92 interval comparison");
-DATA(insert OID = 1314 ( timestamp_cmp PGUID 11 f t f 2 f 23 "1184 1184" 100 0 0 100 timestamp_cmp - ));
+DATA(insert OID = 1314 ( timestamp_cmp PGUID 11 f t f t 2 f 23 "1184 1184" 100 0 0 100 timestamp_cmp - ));
DESCR("less-equal-greater");
-DATA(insert OID = 1315 ( interval_cmp PGUID 11 f t f 2 f 23 "1186 1186" 100 0 0 100 interval_cmp - ));
+DATA(insert OID = 1315 ( interval_cmp PGUID 11 f t f t 2 f 23 "1186 1186" 100 0 0 100 interval_cmp - ));
DESCR("less-equal-greater");
-DATA(insert OID = 1316 ( time PGUID 11 f t f 1 f 1083 "1184" 100 0 0 100 timestamp_time - ));
+DATA(insert OID = 1316 ( time PGUID 11 f t f t 1 f 1083 "1184" 100 0 0 100 timestamp_time - ));
DESCR("convert timestamp to time");
-DATA(insert OID = 1317 ( length PGUID 11 f t t 1 f 23 "25" 100 0 1 0 textlen - ));
+DATA(insert OID = 1317 ( length PGUID 11 f t t t 1 f 23 "25" 100 0 1 0 textlen - ));
DESCR("length");
-DATA(insert OID = 1318 ( length PGUID 11 f t t 1 f 23 "1042" 100 0 0 100 bpcharlen - ));
+DATA(insert OID = 1318 ( length PGUID 11 f t t t 1 f 23 "1042" 100 0 0 100 bpcharlen - ));
DESCR("character length");
-DATA(insert OID = 1319 ( length PGUID 11 f t t 1 f 23 "1043" 100 0 0 100 varcharlen - ));
+DATA(insert OID = 1319 ( length PGUID 11 f t t t 1 f 23 "1043" 100 0 0 100 varcharlen - ));
DESCR("character length");
-DATA(insert OID = 1326 ( interval_div PGUID 11 f t f 2 f 1186 "1186 701" 100 0 0 100 interval_div - ));
+DATA(insert OID = 1326 ( interval_div PGUID 11 f t f t 2 f 1186 "1186 701" 100 0 0 100 interval_div - ));
DESCR("divide");
-DATA(insert OID = 1339 ( dlog10 PGUID 11 f t t 1 f 701 "701" 100 0 0 100 dlog10 - ));
+DATA(insert OID = 1339 ( dlog10 PGUID 11 f t t t 1 f 701 "701" 100 0 0 100 dlog10 - ));
DESCR("base 10 logarithm");
-DATA(insert OID = 1340 ( log PGUID 11 f t t 1 f 701 "701" 100 0 0 100 dlog10 - ));
+DATA(insert OID = 1340 ( log PGUID 11 f t t t 1 f 701 "701" 100 0 0 100 dlog10 - ));
DESCR("base 10 logarithm");
-DATA(insert OID = 1341 ( ln PGUID 11 f t t 1 f 701 "701" 100 0 0 100 dlog1 - ));
+DATA(insert OID = 1341 ( ln PGUID 11 f t t t 1 f 701 "701" 100 0 0 100 dlog1 - ));
DESCR("natural logarithm");
-DATA(insert OID = 1342 ( round PGUID 11 f t t 1 f 701 "701" 100 0 0 100 dround - ));
+DATA(insert OID = 1342 ( round PGUID 11 f t t t 1 f 701 "701" 100 0 0 100 dround - ));
DESCR("round to integral part");
-DATA(insert OID = 1343 ( trunc PGUID 11 f t t 1 f 701 "701" 100 0 0 100 dtrunc - ));
+DATA(insert OID = 1343 ( trunc PGUID 11 f t t t 1 f 701 "701" 100 0 0 100 dtrunc - ));
DESCR("truncate to integral part");
-DATA(insert OID = 1344 ( sqrt PGUID 11 f t t 1 f 701 "701" 100 0 0 100 dsqrt - ));
+DATA(insert OID = 1344 ( sqrt PGUID 11 f t t t 1 f 701 "701" 100 0 0 100 dsqrt - ));
DESCR("square root");
-DATA(insert OID = 1345 ( cbrt PGUID 11 f t t 1 f 701 "701" 100 0 0 100 dcbrt - ));
+DATA(insert OID = 1345 ( cbrt PGUID 11 f t t t 1 f 701 "701" 100 0 0 100 dcbrt - ));
DESCR("cube root");
-DATA(insert OID = 1346 ( pow PGUID 11 f t t 2 f 701 "701 701" 100 0 0 100 dpow - ));
+DATA(insert OID = 1346 ( pow PGUID 11 f t t t 2 f 701 "701 701" 100 0 0 100 dpow - ));
DESCR("exponentiation");
-DATA(insert OID = 1347 ( exp PGUID 11 f t t 1 f 701 "701" 100 0 0 100 dexp - ));
+DATA(insert OID = 1347 ( exp PGUID 11 f t t t 1 f 701 "701" 100 0 0 100 dexp - ));
DESCR("exponential");
-DATA(insert OID = 1348 ( obj_description PGUID 14 f t f 1 f 25 "26" 100 0 0 100 "select description from pg_description where objoid = $1" - ));
+DATA(insert OID = 1348 ( obj_description PGUID 14 f t f t 1 f 25 "26" 100 0 0 100 "select description from pg_description where objoid = $1" - ));
DESCR("get description for object id");
-DATA(insert OID = 1349 ( oidvectortypes PGUID 11 f t f 1 f 25 "30" 100 0 0 100 oidvectortypes - ));
+DATA(insert OID = 1349 ( oidvectortypes PGUID 11 f t f t 1 f 25 "30" 100 0 0 100 oidvectortypes - ));
DESCR("print type names of oidvector field");
-DATA(insert OID = 1350 ( timetz_in PGUID 11 f t f 1 f 1266 "0" 100 0 0 100 timetz_in - ));
+DATA(insert OID = 1350 ( timetz_in PGUID 11 f t f t 1 f 1266 "0" 100 0 0 100 timetz_in - ));
DESCR("(internal)");
-DATA(insert OID = 1351 ( timetz_out PGUID 11 f t f 1 f 23 "0" 100 0 0 100 timetz_out - ));
+DATA(insert OID = 1351 ( timetz_out PGUID 11 f t f t 1 f 23 "0" 100 0 0 100 timetz_out - ));
DESCR("(internal)");
-DATA(insert OID = 1352 ( timetz_eq PGUID 11 f t t 2 f 16 "1266 1266" 100 0 0 100 timetz_eq - ));
+DATA(insert OID = 1352 ( timetz_eq PGUID 11 f t t t 2 f 16 "1266 1266" 100 0 0 100 timetz_eq - ));
DESCR("equal");
-DATA(insert OID = 1353 ( timetz_ne PGUID 11 f t t 2 f 16 "1266 1266" 100 0 0 100 timetz_ne - ));
+DATA(insert OID = 1353 ( timetz_ne PGUID 11 f t t t 2 f 16 "1266 1266" 100 0 0 100 timetz_ne - ));
DESCR("not equal");
-DATA(insert OID = 1354 ( timetz_lt PGUID 11 f t t 2 f 16 "1266 1266" 100 0 0 100 timetz_lt - ));
+DATA(insert OID = 1354 ( timetz_lt PGUID 11 f t t t 2 f 16 "1266 1266" 100 0 0 100 timetz_lt - ));
DESCR("less-than");
-DATA(insert OID = 1355 ( timetz_le PGUID 11 f t t 2 f 16 "1266 1266" 100 0 0 100 timetz_le - ));
+DATA(insert OID = 1355 ( timetz_le PGUID 11 f t t t 2 f 16 "1266 1266" 100 0 0 100 timetz_le - ));
DESCR("less-than-or-equal");
-DATA(insert OID = 1356 ( timetz_ge PGUID 11 f t t 2 f 16 "1266 1266" 100 0 0 100 timetz_ge - ));
+DATA(insert OID = 1356 ( timetz_ge PGUID 11 f t t t 2 f 16 "1266 1266" 100 0 0 100 timetz_ge - ));
DESCR("greater-than-or-equal");
-DATA(insert OID = 1357 ( timetz_gt PGUID 11 f t t 2 f 16 "1266 1266" 100 0 0 100 timetz_gt - ));
+DATA(insert OID = 1357 ( timetz_gt PGUID 11 f t t t 2 f 16 "1266 1266" 100 0 0 100 timetz_gt - ));
DESCR("greater-than");
-DATA(insert OID = 1358 ( timetz_cmp PGUID 11 f t t 2 f 23 "1266 1266" 100 0 0 100 timetz_cmp - ));
+DATA(insert OID = 1358 ( timetz_cmp PGUID 11 f t t t 2 f 23 "1266 1266" 100 0 0 100 timetz_cmp - ));
DESCR("less-equal-greater");
-DATA(insert OID = 1359 ( timestamp PGUID 11 f t f 2 f 1184 "1082 1266" 100 0 0 100 datetimetz_timestamp - ));
+DATA(insert OID = 1359 ( timestamp PGUID 11 f t f t 2 f 1184 "1082 1266" 100 0 0 100 datetimetz_timestamp - ));
DESCR("convert date and time with time zone to timestamp");
-DATA(insert OID = 1362 ( time PGUID 14 f t t 1 f 1083 "1083" 100 0 0 100 "select $1" - ));
+DATA(insert OID = 1362 ( time PGUID 14 f t t t 1 f 1083 "1083" 100 0 0 100 "select $1" - ));
DESCR("convert (noop)");
-DATA(insert OID = 1364 ( time PGUID 14 f t f 1 f 1083 "702" 100 0 0 100 "select time(timestamp($1))" - ));
+DATA(insert OID = 1364 ( time PGUID 14 f t f t 1 f 1083 "702" 100 0 0 100 "select time(timestamp($1))" - ));
DESCR("convert abstime to time");
-DATA(insert OID = 1365 ( abstime PGUID 14 f t f 1 f 702 "702" 100 0 0 100 "select $1" - ));
+DATA(insert OID = 1365 ( abstime PGUID 14 f t f t 1 f 702 "702" 100 0 0 100 "select $1" - ));
DESCR("convert (noop)");
-DATA(insert OID = 1367 ( reltime PGUID 14 f t t 1 f 703 "703" 100 0 0 100 "select $1" - ));
+DATA(insert OID = 1367 ( reltime PGUID 14 f t t t 1 f 703 "703" 100 0 0 100 "select $1" - ));
DESCR("convert (noop)");
-DATA(insert OID = 1368 ( timestamp PGUID 14 f t f 1 f 1184 "1184" 100 0 0 100 "select $1" - ));
+DATA(insert OID = 1368 ( timestamp PGUID 14 f t f t 1 f 1184 "1184" 100 0 0 100 "select $1" - ));
DESCR("convert (noop)");
-DATA(insert OID = 1369 ( interval PGUID 14 f t t 1 f 1186 "1186" 100 0 0 100 "select $1" - ));
+DATA(insert OID = 1369 ( interval PGUID 14 f t t t 1 f 1186 "1186" 100 0 0 100 "select $1" - ));
DESCR("convert (noop)");
-DATA(insert OID = 1370 ( interval PGUID 11 f t f 1 f 1186 "1083" 100 0 0 100 time_interval - ));
+DATA(insert OID = 1370 ( interval PGUID 11 f t f t 1 f 1186 "1083" 100 0 0 100 time_interval - ));
DESCR("convert time to interval");
-DATA(insert OID = 1371 ( date PGUID 14 f t t 1 f 1082 "1082" 100 0 0 100 "select $1" - ));
+DATA(insert OID = 1371 ( date PGUID 14 f t t t 1 f 1082 "1082" 100 0 0 100 "select $1" - ));
DESCR("convert (noop)");
-DATA(insert OID = 1372 ( char_length PGUID 11 f t t 1 f 23 "1042" 100 0 0 100 bpcharlen - ));
+DATA(insert OID = 1372 ( char_length PGUID 11 f t t t 1 f 23 "1042" 100 0 0 100 bpcharlen - ));
DESCR("character length");
-DATA(insert OID = 1373 ( char_length PGUID 11 f t t 1 f 23 "1043" 100 0 0 100 varcharlen - ));
+DATA(insert OID = 1373 ( char_length PGUID 11 f t t t 1 f 23 "1043" 100 0 0 100 varcharlen - ));
DESCR("character length");
-DATA(insert OID = 1374 ( octet_length PGUID 11 f t t 1 f 23 "25" 100 0 0 100 textoctetlen - ));
+DATA(insert OID = 1374 ( octet_length PGUID 11 f t t t 1 f 23 "25" 100 0 0 100 textoctetlen - ));
DESCR("octet length");
-DATA(insert OID = 1375 ( octet_length PGUID 11 f t t 1 f 23 "1042" 100 0 0 100 bpcharoctetlen - ));
+DATA(insert OID = 1375 ( octet_length PGUID 11 f t t t 1 f 23 "1042" 100 0 0 100 bpcharoctetlen - ));
DESCR("octet length");
-DATA(insert OID = 1376 ( octet_length PGUID 11 f t t 1 f 23 "1043" 100 0 0 100 varcharoctetlen - ));
+DATA(insert OID = 1376 ( octet_length PGUID 11 f t t t 1 f 23 "1043" 100 0 0 100 varcharoctetlen - ));
DESCR("octet length");
-DATA(insert OID = 1377 ( time_larger PGUID 11 f t t 2 f 1083 "1083 1083" 100 0 0 100 time_larger - ));
+DATA(insert OID = 1377 ( time_larger PGUID 11 f t t t 2 f 1083 "1083 1083" 100 0 0 100 time_larger - ));
DESCR("larger of two");
-DATA(insert OID = 1378 ( time_smaller PGUID 11 f t t 2 f 1083 "1083 1083" 100 0 0 100 time_smaller - ));
+DATA(insert OID = 1378 ( time_smaller PGUID 11 f t t t 2 f 1083 "1083 1083" 100 0 0 100 time_smaller - ));
DESCR("smaller of two");
-DATA(insert OID = 1379 ( timetz_larger PGUID 11 f t t 2 f 1083 "1266 1266" 100 0 0 100 timetz_larger - ));
+DATA(insert OID = 1379 ( timetz_larger PGUID 11 f t t t 2 f 1083 "1266 1266" 100 0 0 100 timetz_larger - ));
DESCR("larger of two");
-DATA(insert OID = 1380 ( timetz_smaller PGUID 11 f t t 2 f 1083 "1266 1266" 100 0 0 100 timetz_smaller - ));
+DATA(insert OID = 1380 ( timetz_smaller PGUID 11 f t t t 2 f 1083 "1266 1266" 100 0 0 100 timetz_smaller - ));
DESCR("smaller of two");
-DATA(insert OID = 1381 ( char_length PGUID 11 f t t 1 f 23 "25" 100 0 1 0 textlen - ));
+DATA(insert OID = 1381 ( char_length PGUID 11 f t t t 1 f 23 "25" 100 0 1 0 textlen - ));
DESCR("length");
-DATA(insert OID = 1382 ( date_part PGUID 14 f t f 2 f 701 "25 702" 100 0 0 100 "select date_part($1, timestamp($2))" - ));
+DATA(insert OID = 1382 ( date_part PGUID 14 f t f t 2 f 701 "25 702" 100 0 0 100 "select date_part($1, timestamp($2))" - ));
DESCR("extract field from abstime");
-DATA(insert OID = 1383 ( date_part PGUID 14 f t f 2 f 701 "25 703" 100 0 0 100 "select date_part($1, interval($2))" - ));
+DATA(insert OID = 1383 ( date_part PGUID 14 f t f t 2 f 701 "25 703" 100 0 0 100 "select date_part($1, interval($2))" - ));
DESCR("extract field from reltime");
-DATA(insert OID = 1384 ( date_part PGUID 14 f t f 2 f 701 "25 1082" 100 0 0 100 "select date_part($1, timestamp($2))" - ));
+DATA(insert OID = 1384 ( date_part PGUID 14 f t f t 2 f 701 "25 1082" 100 0 0 100 "select date_part($1, timestamp($2))" - ));
DESCR("extract field from date");
-DATA(insert OID = 1385 ( date_part PGUID 14 f t f 2 f 701 "25 1083" 100 0 0 100 "select date_part($1, interval($2))" - ));
+DATA(insert OID = 1385 ( date_part PGUID 14 f t f t 2 f 701 "25 1083" 100 0 0 100 "select date_part($1, interval($2))" - ));
DESCR("extract field from time");
-DATA(insert OID = 1386 ( age PGUID 14 f t f 1 f 1186 "1184" 100 0 0 100 "select age(\'today\', $1)" - ));
+DATA(insert OID = 1386 ( age PGUID 14 f t f t 1 f 1186 "1184" 100 0 0 100 "select age(\'today\', $1)" - ));
DESCR("date difference from today preserving months and years");
-DATA(insert OID = 1387 ( timetz PGUID 14 f t f 1 f 1266 "1266" 100 0 0 100 "select $1" - ));
+DATA(insert OID = 1387 ( timetz PGUID 14 f t f t 1 f 1266 "1266" 100 0 0 100 "select $1" - ));
DESCR("noop conversion");
-DATA(insert OID = 1388 ( timetz PGUID 11 f t f 1 f 1266 "1184" 100 0 0 100 timestamp_timetz - ));
+DATA(insert OID = 1388 ( timetz PGUID 11 f t f t 1 f 1266 "1184" 100 0 0 100 timestamp_timetz - ));
DESCR("convert timestamp to time");
-DATA(insert OID = 1389 ( isfinite PGUID 11 f t f 1 f 16 "1184" 100 0 0 100 timestamp_finite - ));
+DATA(insert OID = 1389 ( isfinite PGUID 11 f t f t 1 f 16 "1184" 100 0 0 100 timestamp_finite - ));
DESCR("boolean test");
-DATA(insert OID = 1390 ( isfinite PGUID 11 f t f 1 f 16 "1186" 100 0 0 100 interval_finite - ));
+DATA(insert OID = 1390 ( isfinite PGUID 11 f t f t 1 f 16 "1186" 100 0 0 100 interval_finite - ));
DESCR("boolean test");
-DATA(insert OID = 1391 ( factorial PGUID 11 f t t 1 f 23 "21" 100 0 0 100 int2fac - ));
+DATA(insert OID = 1391 ( factorial PGUID 11 f t t t 1 f 23 "21" 100 0 0 100 int2fac - ));
DESCR("factorial");
-DATA(insert OID = 1392 ( factorial PGUID 11 f t t 1 f 23 "23" 100 0 0 100 int4fac - ));
+DATA(insert OID = 1392 ( factorial PGUID 11 f t t t 1 f 23 "23" 100 0 0 100 int4fac - ));
DESCR("factorial");
-DATA(insert OID = 1393 ( factorial PGUID 11 f t t 1 f 20 "20" 100 0 0 100 int8fac - ));
+DATA(insert OID = 1393 ( factorial PGUID 11 f t t t 1 f 20 "20" 100 0 0 100 int8fac - ));
DESCR("factorial");
-DATA(insert OID = 1394 ( abs PGUID 11 f t t 1 f 700 "700" 100 0 0 100 float4abs - ));
+DATA(insert OID = 1394 ( abs PGUID 11 f t t t 1 f 700 "700" 100 0 0 100 float4abs - ));
DESCR("absolute value");
-DATA(insert OID = 1395 ( abs PGUID 11 f t t 1 f 701 "701" 100 0 0 100 float8abs - ));
+DATA(insert OID = 1395 ( abs PGUID 11 f t t t 1 f 701 "701" 100 0 0 100 float8abs - ));
DESCR("absolute value");
-DATA(insert OID = 1396 ( abs PGUID 11 f t t 1 f 20 "20" 100 0 0 100 int8abs - ));
+DATA(insert OID = 1396 ( abs PGUID 11 f t t t 1 f 20 "20" 100 0 0 100 int8abs - ));
DESCR("absolute value");
-DATA(insert OID = 1397 ( abs PGUID 11 f t t 1 f 23 "23" 100 0 0 100 int4abs - ));
+DATA(insert OID = 1397 ( abs PGUID 11 f t t t 1 f 23 "23" 100 0 0 100 int4abs - ));
DESCR("absolute value");
-DATA(insert OID = 1398 ( abs PGUID 11 f t t 1 f 21 "21" 100 0 0 100 int2abs - ));
+DATA(insert OID = 1398 ( abs PGUID 11 f t t t 1 f 21 "21" 100 0 0 100 int2abs - ));
DESCR("absolute value");
/* OIDS 1400 - 1499 */
-DATA(insert OID = 1400 ( name PGUID 11 f t t 1 f 19 "1043" 100 0 0 100 text_name - ));
+DATA(insert OID = 1400 ( name PGUID 11 f t t t 1 f 19 "1043" 100 0 0 100 text_name - ));
DESCR("convert varchar to name");
-DATA(insert OID = 1401 ( varchar PGUID 11 f t t 1 f 1043 "19" 100 0 0 100 name_text - ));
+DATA(insert OID = 1401 ( varchar PGUID 11 f t t t 1 f 1043 "19" 100 0 0 100 name_text - ));
DESCR("convert convert name to varchar");
-DATA(insert OID = 1402 ( float4 PGUID 14 f t t 1 f 700 "700" 100 0 0 100 "select $1" - ));
+DATA(insert OID = 1402 ( float4 PGUID 14 f t t t 1 f 700 "700" 100 0 0 100 "select $1" - ));
DESCR("convert float4 to float4 (no-op)");
-DATA(insert OID = 1403 ( int2 PGUID 14 f t t 1 f 21 "21" 100 0 0 100 "select $1" - ));
+DATA(insert OID = 1403 ( int2 PGUID 14 f t t t 1 f 21 "21" 100 0 0 100 "select $1" - ));
DESCR("convert (no-op)");
-DATA(insert OID = 1404 ( float8 PGUID 14 f t t 1 f 701 "701" 100 0 0 100 "select $1" - ));
+DATA(insert OID = 1404 ( float8 PGUID 14 f t t t 1 f 701 "701" 100 0 0 100 "select $1" - ));
DESCR("convert (no-op)");
-DATA(insert OID = 1405 ( int4 PGUID 14 f t t 1 f 23 "23" 100 0 0 100 "select $1" - ));
+DATA(insert OID = 1405 ( int4 PGUID 14 f t t t 1 f 23 "23" 100 0 0 100 "select $1" - ));
DESCR("convert (no-op)");
-DATA(insert OID = 1406 ( isvertical PGUID 11 f t t 2 f 16 "600 600" 100 0 0 100 point_vert - ));
+DATA(insert OID = 1406 ( isvertical PGUID 11 f t t t 2 f 16 "600 600" 100 0 0 100 point_vert - ));
DESCR("vertical?");
-DATA(insert OID = 1407 ( ishorizontal PGUID 11 f t t 2 f 16 "600 600" 100 0 0 100 point_horiz - ));
+DATA(insert OID = 1407 ( ishorizontal PGUID 11 f t t t 2 f 16 "600 600" 100 0 0 100 point_horiz - ));
DESCR("horizontal?");
-DATA(insert OID = 1408 ( isparallel PGUID 11 f t t 2 f 16 "601 601" 100 0 0 100 lseg_parallel - ));
+DATA(insert OID = 1408 ( isparallel PGUID 11 f t t t 2 f 16 "601 601" 100 0 0 100 lseg_parallel - ));
DESCR("parallel?");
-DATA(insert OID = 1409 ( isperp PGUID 11 f t t 2 f 16 "601 601" 100 0 0 100 lseg_perp - ));
+DATA(insert OID = 1409 ( isperp PGUID 11 f t t t 2 f 16 "601 601" 100 0 0 100 lseg_perp - ));
DESCR("perpendicular?");
-DATA(insert OID = 1410 ( isvertical PGUID 11 f t t 1 f 16 "601" 100 0 0 100 lseg_vertical - ));
+DATA(insert OID = 1410 ( isvertical PGUID 11 f t t t 1 f 16 "601" 100 0 0 100 lseg_vertical - ));
DESCR("vertical?");
-DATA(insert OID = 1411 ( ishorizontal PGUID 11 f t t 1 f 16 "601" 100 0 0 100 lseg_horizontal - ));
+DATA(insert OID = 1411 ( ishorizontal PGUID 11 f t t t 1 f 16 "601" 100 0 0 100 lseg_horizontal - ));
DESCR("horizontal?");
-DATA(insert OID = 1412 ( isparallel PGUID 11 f t t 2 f 16 "628 628" 100 0 0 100 line_parallel - ));
+DATA(insert OID = 1412 ( isparallel PGUID 11 f t t t 2 f 16 "628 628" 100 0 0 100 line_parallel - ));
DESCR("lines parallel?");
-DATA(insert OID = 1413 ( isperp PGUID 11 f t t 2 f 16 "628 628" 100 0 0 100 line_perp - ));
+DATA(insert OID = 1413 ( isperp PGUID 11 f t t t 2 f 16 "628 628" 100 0 0 100 line_perp - ));
DESCR("lines perpendicular?");
-DATA(insert OID = 1414 ( isvertical PGUID 11 f t t 1 f 16 "628" 100 0 0 100 line_vertical - ));
+DATA(insert OID = 1414 ( isvertical PGUID 11 f t t t 1 f 16 "628" 100 0 0 100 line_vertical - ));
DESCR("lines vertical?");
-DATA(insert OID = 1415 ( ishorizontal PGUID 11 f t t 1 f 16 "628" 100 0 0 100 line_horizontal - ));
+DATA(insert OID = 1415 ( ishorizontal PGUID 11 f t t t 1 f 16 "628" 100 0 0 100 line_horizontal - ));
DESCR("lines horizontal?");
-DATA(insert OID = 1416 ( point PGUID 11 f t t 1 f 600 "718" 100 0 1 0 circle_center - ));
+DATA(insert OID = 1416 ( point PGUID 11 f t t t 1 f 600 "718" 100 0 1 0 circle_center - ));
DESCR("center of");
-DATA(insert OID = 1421 ( box PGUID 11 f t t 2 f 603 "600 600" 100 0 0 100 box - ));
+DATA(insert OID = 1421 ( box PGUID 11 f t t t 2 f 603 "600 600" 100 0 0 100 box - ));
DESCR("convert points to box");
-DATA(insert OID = 1422 ( box_add PGUID 11 f t t 2 f 603 "603 600" 100 0 0 100 box_add - ));
+DATA(insert OID = 1422 ( box_add PGUID 11 f t t t 2 f 603 "603 600" 100 0 0 100 box_add - ));
DESCR("add point to box (translate)");
-DATA(insert OID = 1423 ( box_sub PGUID 11 f t t 2 f 603 "603 600" 100 0 0 100 box_sub - ));
+DATA(insert OID = 1423 ( box_sub PGUID 11 f t t t 2 f 603 "603 600" 100 0 0 100 box_sub - ));
DESCR("subtract point from box (translate)");
-DATA(insert OID = 1424 ( box_mul PGUID 11 f t t 2 f 603 "603 600" 100 0 0 100 box_mul - ));
+DATA(insert OID = 1424 ( box_mul PGUID 11 f t t t 2 f 603 "603 600" 100 0 0 100 box_mul - ));
DESCR("multiply box by point (scale)");
-DATA(insert OID = 1425 ( box_div PGUID 11 f t t 2 f 603 "603 600" 100 0 0 100 box_div - ));
+DATA(insert OID = 1425 ( box_div PGUID 11 f t t t 2 f 603 "603 600" 100 0 0 100 box_div - ));
DESCR("divide box by point (scale)");
-DATA(insert OID = 1426 ( path_contain_pt PGUID 14 f t t 2 f 16 "602 600" 100 0 0 100 "select on_ppath($2, $1)" - ));
+DATA(insert OID = 1426 ( path_contain_pt PGUID 14 f t t t 2 f 16 "602 600" 100 0 0 100 "select on_ppath($2, $1)" - ));
DESCR("path contains point?");
-DATA(insert OID = 1428 ( poly_contain_pt PGUID 11 f t t 2 f 16 "604 600" 100 0 0 100 poly_contain_pt - ));
+DATA(insert OID = 1428 ( poly_contain_pt PGUID 11 f t t t 2 f 16 "604 600" 100 0 0 100 poly_contain_pt - ));
DESCR("polygon contains point?");
-DATA(insert OID = 1429 ( pt_contained_poly PGUID 11 f t t 2 f 16 "600 604" 100 0 0 100 pt_contained_poly - ));
+DATA(insert OID = 1429 ( pt_contained_poly PGUID 11 f t t t 2 f 16 "600 604" 100 0 0 100 pt_contained_poly - ));
DESCR("point contained by polygon?");
-DATA(insert OID = 1430 ( isclosed PGUID 11 f t t 1 f 16 "602" 100 0 0 100 path_isclosed - ));
+DATA(insert OID = 1430 ( isclosed PGUID 11 f t t t 1 f 16 "602" 100 0 0 100 path_isclosed - ));
DESCR("path closed?");
-DATA(insert OID = 1431 ( isopen PGUID 11 f t t 1 f 16 "602" 100 0 0 100 path_isopen - ));
+DATA(insert OID = 1431 ( isopen PGUID 11 f t t t 1 f 16 "602" 100 0 0 100 path_isopen - ));
DESCR("path open?");
-DATA(insert OID = 1432 ( path_npoints PGUID 11 f t t 1 f 23 "602" 100 0 0 100 path_npoints - ));
+DATA(insert OID = 1432 ( path_npoints PGUID 11 f t t t 1 f 23 "602" 100 0 0 100 path_npoints - ));
DESCR("# points in path");
/* pclose and popen might better be named close and open, but that crashes initdb.
* - thomas 97/04/20
*/
-DATA(insert OID = 1433 ( pclose PGUID 11 f t t 1 f 602 "602" 100 0 0 100 path_close - ));
+DATA(insert OID = 1433 ( pclose PGUID 11 f t t t 1 f 602 "602" 100 0 0 100 path_close - ));
DESCR("close path");
-DATA(insert OID = 1434 ( popen PGUID 11 f t t 1 f 602 "602" 100 0 0 100 path_open - ));
+DATA(insert OID = 1434 ( popen PGUID 11 f t t t 1 f 602 "602" 100 0 0 100 path_open - ));
DESCR("open path");
-DATA(insert OID = 1435 ( path_add PGUID 11 f t t 2 f 602 "602 602" 100 0 0 100 path_add - ));
+DATA(insert OID = 1435 ( path_add PGUID 11 f t t t 2 f 602 "602 602" 100 0 0 100 path_add - ));
DESCR("addition");
-DATA(insert OID = 1436 ( path_add_pt PGUID 11 f t t 2 f 602 "602 600" 100 0 0 100 path_add_pt - ));
+DATA(insert OID = 1436 ( path_add_pt PGUID 11 f t t t 2 f 602 "602 600" 100 0 0 100 path_add_pt - ));
DESCR("addition");
-DATA(insert OID = 1437 ( path_sub_pt PGUID 11 f t t 2 f 602 "602 600" 100 0 0 100 path_sub_pt - ));
+DATA(insert OID = 1437 ( path_sub_pt PGUID 11 f t t t 2 f 602 "602 600" 100 0 0 100 path_sub_pt - ));
DESCR("subtract");
-DATA(insert OID = 1438 ( path_mul_pt PGUID 11 f t t 2 f 602 "602 600" 100 0 0 100 path_mul_pt - ));
+DATA(insert OID = 1438 ( path_mul_pt PGUID 11 f t t t 2 f 602 "602 600" 100 0 0 100 path_mul_pt - ));
DESCR("multiply");
-DATA(insert OID = 1439 ( path_div_pt PGUID 11 f t t 2 f 602 "602 600" 100 0 0 100 path_div_pt - ));
+DATA(insert OID = 1439 ( path_div_pt PGUID 11 f t t t 2 f 602 "602 600" 100 0 0 100 path_div_pt - ));
DESCR("divide");
-DATA(insert OID = 1440 ( point PGUID 11 f t t 2 f 600 "701 701" 100 0 0 100 point - ));
+DATA(insert OID = 1440 ( point PGUID 11 f t t t 2 f 600 "701 701" 100 0 0 100 point - ));
DESCR("convert x, y to point");
-DATA(insert OID = 1441 ( point_add PGUID 11 f t t 2 f 600 "600 600" 100 0 0 100 point_add - ));
+DATA(insert OID = 1441 ( point_add PGUID 11 f t t t 2 f 600 "600 600" 100 0 0 100 point_add - ));
DESCR("add points (translate)");
-DATA(insert OID = 1442 ( point_sub PGUID 11 f t t 2 f 600 "600 600" 100 0 0 100 point_sub - ));
+DATA(insert OID = 1442 ( point_sub PGUID 11 f t t t 2 f 600 "600 600" 100 0 0 100 point_sub - ));
DESCR("subtract points (translate)");
-DATA(insert OID = 1443 ( point_mul PGUID 11 f t t 2 f 600 "600 600" 100 0 0 100 point_mul - ));
+DATA(insert OID = 1443 ( point_mul PGUID 11 f t t t 2 f 600 "600 600" 100 0 0 100 point_mul - ));
DESCR("multiply points (scale/rotate)");
-DATA(insert OID = 1444 ( point_div PGUID 11 f t t 2 f 600 "600 600" 100 0 0 100 point_div - ));
+DATA(insert OID = 1444 ( point_div PGUID 11 f t t t 2 f 600 "600 600" 100 0 0 100 point_div - ));
DESCR("divide points (scale/rotate)");
-DATA(insert OID = 1445 ( poly_npoints PGUID 11 f t t 1 f 23 "604" 100 0 0 100 poly_npoints - ));
+DATA(insert OID = 1445 ( poly_npoints PGUID 11 f t t t 1 f 23 "604" 100 0 0 100 poly_npoints - ));
DESCR("number of points in polygon");
-DATA(insert OID = 1446 ( box PGUID 11 f t t 1 f 603 "604" 100 0 0 100 poly_box - ));
+DATA(insert OID = 1446 ( box PGUID 11 f t t t 1 f 603 "604" 100 0 0 100 poly_box - ));
DESCR("convert polygon to bounding box");
-DATA(insert OID = 1447 ( path PGUID 11 f t t 1 f 602 "604" 100 0 0 100 poly_path - ));
+DATA(insert OID = 1447 ( path PGUID 11 f t t t 1 f 602 "604" 100 0 0 100 poly_path - ));
DESCR("convert polygon to path");
-DATA(insert OID = 1448 ( polygon PGUID 11 f t t 1 f 604 "603" 100 0 0 100 box_poly - ));
+DATA(insert OID = 1448 ( polygon PGUID 11 f t t t 1 f 604 "603" 100 0 0 100 box_poly - ));
DESCR("convert box to polygon");
-DATA(insert OID = 1449 ( polygon PGUID 11 f t t 1 f 604 "602" 100 0 0 100 path_poly - ));
+DATA(insert OID = 1449 ( polygon PGUID 11 f t t t 1 f 604 "602" 100 0 0 100 path_poly - ));
DESCR("convert path to polygon");
-DATA(insert OID = 1450 ( circle_in PGUID 11 f t t 1 f 718 "0" 100 0 1 0 circle_in - ));
+DATA(insert OID = 1450 ( circle_in PGUID 11 f t t t 1 f 718 "0" 100 0 1 0 circle_in - ));
DESCR("(internal)");
-DATA(insert OID = 1451 ( circle_out PGUID 11 f t t 1 f 23 "0" 100 0 1 0 circle_out - ));
+DATA(insert OID = 1451 ( circle_out PGUID 11 f t t t 1 f 23 "0" 100 0 1 0 circle_out - ));
DESCR("(internal)");
-DATA(insert OID = 1452 ( circle_same PGUID 11 f t t 2 f 16 "718 718" 100 0 1 0 circle_same - ));
+DATA(insert OID = 1452 ( circle_same PGUID 11 f t t t 2 f 16 "718 718" 100 0 1 0 circle_same - ));
DESCR("same as");
-DATA(insert OID = 1453 ( circle_contain PGUID 11 f t t 2 f 16 "718 718" 100 0 1 0 circle_contain - ));
+DATA(insert OID = 1453 ( circle_contain PGUID 11 f t t t 2 f 16 "718 718" 100 0 1 0 circle_contain - ));
DESCR("contains");
-DATA(insert OID = 1454 ( circle_left PGUID 11 f t t 2 f 16 "718 718" 100 0 1 0 circle_left - ));
+DATA(insert OID = 1454 ( circle_left PGUID 11 f t t t 2 f 16 "718 718" 100 0 1 0 circle_left - ));
DESCR("is left of");
-DATA(insert OID = 1455 ( circle_overleft PGUID 11 f t t 2 f 16 "718 718" 100 0 1 0 circle_overleft - ));
+DATA(insert OID = 1455 ( circle_overleft PGUID 11 f t t t 2 f 16 "718 718" 100 0 1 0 circle_overleft - ));
DESCR("overlaps, but does not extend to right of");
-DATA(insert OID = 1456 ( circle_overright PGUID 11 f t t 2 f 16 "718 718" 100 0 1 0 circle_overright - ));
+DATA(insert OID = 1456 ( circle_overright PGUID 11 f t t t 2 f 16 "718 718" 100 0 1 0 circle_overright - ));
DESCR("");
-DATA(insert OID = 1457 ( circle_right PGUID 11 f t t 2 f 16 "718 718" 100 0 1 0 circle_right - ));
+DATA(insert OID = 1457 ( circle_right PGUID 11 f t t t 2 f 16 "718 718" 100 0 1 0 circle_right - ));
DESCR("is left of");
-DATA(insert OID = 1458 ( circle_contained PGUID 11 f t t 2 f 16 "718 718" 100 0 1 0 circle_contained - ));
+DATA(insert OID = 1458 ( circle_contained PGUID 11 f t t t 2 f 16 "718 718" 100 0 1 0 circle_contained - ));
DESCR("");
-DATA(insert OID = 1459 ( circle_overlap PGUID 11 f t t 2 f 16 "718 718" 100 0 1 0 circle_overlap - ));
+DATA(insert OID = 1459 ( circle_overlap PGUID 11 f t t t 2 f 16 "718 718" 100 0 1 0 circle_overlap - ));
DESCR("overlaps");
-DATA(insert OID = 1460 ( circle_below PGUID 11 f t t 2 f 16 "718 718" 100 0 1 0 circle_below - ));
+DATA(insert OID = 1460 ( circle_below PGUID 11 f t t t 2 f 16 "718 718" 100 0 1 0 circle_below - ));
DESCR("is below");
-DATA(insert OID = 1461 ( circle_above PGUID 11 f t t 2 f 16 "718 718" 100 0 1 0 circle_above - ));
+DATA(insert OID = 1461 ( circle_above PGUID 11 f t t t 2 f 16 "718 718" 100 0 1 0 circle_above - ));
DESCR("is above");
-DATA(insert OID = 1462 ( circle_eq PGUID 11 f t t 2 f 16 "718 718" 100 0 1 0 circle_eq - ));
+DATA(insert OID = 1462 ( circle_eq PGUID 11 f t t t 2 f 16 "718 718" 100 0 1 0 circle_eq - ));
DESCR("equal");
-DATA(insert OID = 1463 ( circle_ne PGUID 11 f t t 2 f 16 "718 718" 100 0 1 0 circle_ne - ));
+DATA(insert OID = 1463 ( circle_ne PGUID 11 f t t t 2 f 16 "718 718" 100 0 1 0 circle_ne - ));
DESCR("not equal");
-DATA(insert OID = 1464 ( circle_lt PGUID 11 f t t 2 f 16 "718 718" 100 0 1 0 circle_lt - ));
+DATA(insert OID = 1464 ( circle_lt PGUID 11 f t t t 2 f 16 "718 718" 100 0 1 0 circle_lt - ));
DESCR("less-than");
-DATA(insert OID = 1465 ( circle_gt PGUID 11 f t t 2 f 16 "718 718" 100 0 1 0 circle_gt - ));
+DATA(insert OID = 1465 ( circle_gt PGUID 11 f t t t 2 f 16 "718 718" 100 0 1 0 circle_gt - ));
DESCR("greater-than");
-DATA(insert OID = 1466 ( circle_le PGUID 11 f t t 2 f 16 "718 718" 100 0 1 0 circle_le - ));
+DATA(insert OID = 1466 ( circle_le PGUID 11 f t t t 2 f 16 "718 718" 100 0 1 0 circle_le - ));
DESCR("less-than-or-equal");
-DATA(insert OID = 1467 ( circle_ge PGUID 11 f t t 2 f 16 "718 718" 100 0 1 0 circle_ge - ));
+DATA(insert OID = 1467 ( circle_ge PGUID 11 f t t t 2 f 16 "718 718" 100 0 1 0 circle_ge - ));
DESCR("greater-than-or-equal");
-DATA(insert OID = 1468 ( area PGUID 11 f t t 1 f 701 "718" 100 0 1 0 circle_area - ));
+DATA(insert OID = 1468 ( area PGUID 11 f t t t 1 f 701 "718" 100 0 1 0 circle_area - ));
DESCR("area of circle");
-DATA(insert OID = 1469 ( diameter PGUID 11 f t t 1 f 701 "718" 100 0 1 0 circle_diameter - ));
+DATA(insert OID = 1469 ( diameter PGUID 11 f t t t 1 f 701 "718" 100 0 1 0 circle_diameter - ));
DESCR("diameter of circle");
-DATA(insert OID = 1470 ( radius PGUID 11 f t t 1 f 701 "718" 100 0 1 0 circle_radius - ));
+DATA(insert OID = 1470 ( radius PGUID 11 f t t t 1 f 701 "718" 100 0 1 0 circle_radius - ));
DESCR("radius of circle");
-DATA(insert OID = 1471 ( circle_distance PGUID 11 f t t 2 f 701 "718 718" 100 0 1 0 circle_distance - ));
+DATA(insert OID = 1471 ( circle_distance PGUID 11 f t t t 2 f 701 "718 718" 100 0 1 0 circle_distance - ));
DESCR("distance between");
-DATA(insert OID = 1472 ( circle_center PGUID 11 f t t 1 f 600 "718" 100 0 1 0 circle_center - ));
+DATA(insert OID = 1472 ( circle_center PGUID 11 f t t t 1 f 600 "718" 100 0 1 0 circle_center - ));
DESCR("center of");
-DATA(insert OID = 1473 ( circle PGUID 11 f t t 2 f 718 "600 701" 100 0 1 0 circle - ));
+DATA(insert OID = 1473 ( circle PGUID 11 f t t t 2 f 718 "600 701" 100 0 1 0 circle - ));
DESCR("convert point and radius to circle");
-DATA(insert OID = 1474 ( circle PGUID 11 f t t 1 f 718 "604" 100 0 1 0 poly_circle - ));
+DATA(insert OID = 1474 ( circle PGUID 11 f t t t 1 f 718 "604" 100 0 1 0 poly_circle - ));
DESCR("convert polygon to circle");
-DATA(insert OID = 1475 ( polygon PGUID 11 f t t 2 f 604 "23 718" 100 0 1 0 circle_poly - ));
+DATA(insert OID = 1475 ( polygon PGUID 11 f t t t 2 f 604 "23 718" 100 0 1 0 circle_poly - ));
DESCR("convert vertex count and circle to polygon");
-DATA(insert OID = 1476 ( dist_pc PGUID 11 f t t 2 f 701 "600 718" 100 0 1 0 dist_pc - ));
+DATA(insert OID = 1476 ( dist_pc PGUID 11 f t t t 2 f 701 "600 718" 100 0 1 0 dist_pc - ));
DESCR("distance between point and circle");
-DATA(insert OID = 1477 ( circle_contain_pt PGUID 11 f t t 2 f 16 "718 600" 100 0 0 100 circle_contain_pt - ));
+DATA(insert OID = 1477 ( circle_contain_pt PGUID 11 f t t t 2 f 16 "718 600" 100 0 0 100 circle_contain_pt - ));
DESCR("circle contains point?");
-DATA(insert OID = 1478 ( pt_contained_circle PGUID 11 f t t 2 f 16 "600 718" 100 0 0 100 pt_contained_circle - ));
+DATA(insert OID = 1478 ( pt_contained_circle PGUID 11 f t t t 2 f 16 "600 718" 100 0 0 100 pt_contained_circle - ));
DESCR("point inside circle?");
-DATA(insert OID = 1479 ( circle PGUID 11 f t t 1 f 718 "603" 100 0 1 0 box_circle - ));
+DATA(insert OID = 1479 ( circle PGUID 11 f t t t 1 f 718 "603" 100 0 1 0 box_circle - ));
DESCR("convert box to circle");
-DATA(insert OID = 1480 ( box PGUID 11 f t t 1 f 603 "718" 100 0 1 0 circle_box - ));
+DATA(insert OID = 1480 ( box PGUID 11 f t t t 1 f 603 "718" 100 0 1 0 circle_box - ));
DESCR("convert circle to box");
-DATA(insert OID = 1481 ( tinterval PGUID 11 f t f 2 f 704 "702 702" 100 0 0 100 mktinterval - ));
+DATA(insert OID = 1481 ( tinterval PGUID 11 f t f t 2 f 704 "702 702" 100 0 0 100 mktinterval - ));
DESCR("convert to tinterval");
-DATA(insert OID = 1482 ( lseg_ne PGUID 11 f t t 2 f 16 "601 601" 100 0 0 100 lseg_ne - ));
+DATA(insert OID = 1482 ( lseg_ne PGUID 11 f t t t 2 f 16 "601 601" 100 0 0 100 lseg_ne - ));
DESCR("not equal");
-DATA(insert OID = 1483 ( lseg_lt PGUID 11 f t t 2 f 16 "601 601" 100 0 0 100 lseg_lt - ));
+DATA(insert OID = 1483 ( lseg_lt PGUID 11 f t t t 2 f 16 "601 601" 100 0 0 100 lseg_lt - ));
DESCR("less-than");
-DATA(insert OID = 1484 ( lseg_le PGUID 11 f t t 2 f 16 "601 601" 100 0 0 100 lseg_le - ));
+DATA(insert OID = 1484 ( lseg_le PGUID 11 f t t t 2 f 16 "601 601" 100 0 0 100 lseg_le - ));
DESCR("less-than-or-equal");
-DATA(insert OID = 1485 ( lseg_gt PGUID 11 f t t 2 f 16 "601 601" 100 0 0 100 lseg_gt - ));
+DATA(insert OID = 1485 ( lseg_gt PGUID 11 f t t t 2 f 16 "601 601" 100 0 0 100 lseg_gt - ));
DESCR("greater-than");
-DATA(insert OID = 1486 ( lseg_ge PGUID 11 f t t 2 f 16 "601 601" 100 0 0 100 lseg_ge - ));
+DATA(insert OID = 1486 ( lseg_ge PGUID 11 f t t t 2 f 16 "601 601" 100 0 0 100 lseg_ge - ));
DESCR("greater-than-or-equal");
-DATA(insert OID = 1487 ( lseg_length PGUID 11 f t t 1 f 701 "601" 100 0 1 0 lseg_length - ));
+DATA(insert OID = 1487 ( lseg_length PGUID 11 f t t t 1 f 701 "601" 100 0 1 0 lseg_length - ));
DESCR("distance between endpoints");
-DATA(insert OID = 1488 ( close_ls PGUID 11 f t t 2 f 600 "628 601" 100 0 10 100 close_ls - ));
+DATA(insert OID = 1488 ( close_ls PGUID 11 f t t t 2 f 600 "628 601" 100 0 10 100 close_ls - ));
DESCR("closest point to line on line segment");
-DATA(insert OID = 1489 ( close_lseg PGUID 11 f t t 2 f 600 "601 601" 100 0 10 100 close_lseg - ));
+DATA(insert OID = 1489 ( close_lseg PGUID 11 f t t t 2 f 600 "601 601" 100 0 10 100 close_lseg - ));
DESCR("closest point to line segment on line segment");
-DATA(insert OID = 1490 ( line_in PGUID 11 f t t 1 f 628 "0" 100 0 0 100 line_in - ));
+DATA(insert OID = 1490 ( line_in PGUID 11 f t t t 1 f 628 "0" 100 0 0 100 line_in - ));
DESCR("(internal)");
-DATA(insert OID = 1491 ( line_out PGUID 11 f t t 1 f 23 "0" 100 0 0 100 line_out - ));
+DATA(insert OID = 1491 ( line_out PGUID 11 f t t t 1 f 23 "0" 100 0 0 100 line_out - ));
DESCR("(internal)");
-DATA(insert OID = 1492 ( line_eq PGUID 11 f t t 2 f 16 "628 628" 100 0 0 100 line_eq - ));
+DATA(insert OID = 1492 ( line_eq PGUID 11 f t t t 2 f 16 "628 628" 100 0 0 100 line_eq - ));
DESCR("lines equal?");
-DATA(insert OID = 1493 ( line PGUID 11 f t t 2 f 628 "600 600" 100 0 0 100 line_construct_pp - ));
+DATA(insert OID = 1493 ( line PGUID 11 f t t t 2 f 628 "600 600" 100 0 0 100 line_construct_pp - ));
DESCR("line from points");
-DATA(insert OID = 1494 ( line_interpt PGUID 11 f t t 2 f 600 "628 628" 100 0 0 100 line_interpt - ));
+DATA(insert OID = 1494 ( line_interpt PGUID 11 f t t t 2 f 600 "628 628" 100 0 0 100 line_interpt - ));
DESCR("intersection point");
-DATA(insert OID = 1495 ( line_intersect PGUID 11 f t t 2 f 16 "628 628" 100 0 0 100 line_intersect - ));
+DATA(insert OID = 1495 ( line_intersect PGUID 11 f t t t 2 f 16 "628 628" 100 0 0 100 line_intersect - ));
DESCR("lines intersect?");
-DATA(insert OID = 1496 ( line_parallel PGUID 11 f t t 2 f 16 "628 628" 100 0 0 100 line_parallel - ));
+DATA(insert OID = 1496 ( line_parallel PGUID 11 f t t t 2 f 16 "628 628" 100 0 0 100 line_parallel - ));
DESCR("lines parallel?");
-DATA(insert OID = 1497 ( line_perp PGUID 11 f t t 2 f 16 "628 628" 100 0 0 100 line_perp - ));
+DATA(insert OID = 1497 ( line_perp PGUID 11 f t t t 2 f 16 "628 628" 100 0 0 100 line_perp - ));
DESCR("lines perpendicular?");
-DATA(insert OID = 1498 ( line_vertical PGUID 11 f t t 1 f 16 "628" 100 0 0 100 line_vertical - ));
+DATA(insert OID = 1498 ( line_vertical PGUID 11 f t t t 1 f 16 "628" 100 0 0 100 line_vertical - ));
DESCR("lines vertical?");
-DATA(insert OID = 1499 ( line_horizontal PGUID 11 f t t 1 f 16 "628" 100 0 0 100 line_horizontal - ));
+DATA(insert OID = 1499 ( line_horizontal PGUID 11 f t t t 1 f 16 "628" 100 0 0 100 line_horizontal - ));
DESCR("lines horizontal?");
/* OIDS 1500 - 1599 */
-DATA(insert OID = 1530 ( length PGUID 11 f t t 1 f 701 "601" 100 0 1 0 lseg_length - ));
+DATA(insert OID = 1530 ( length PGUID 11 f t t t 1 f 701 "601" 100 0 1 0 lseg_length - ));
DESCR("distance between endpoints");
-DATA(insert OID = 1531 ( length PGUID 11 f t t 1 f 701 "602" 100 0 1 0 path_length - ));
+DATA(insert OID = 1531 ( length PGUID 11 f t t t 1 f 701 "602" 100 0 1 0 path_length - ));
DESCR("sum of path segments");
-DATA(insert OID = 1532 ( point PGUID 11 f t t 1 f 600 "601" 100 0 0 100 lseg_center - ));
+DATA(insert OID = 1532 ( point PGUID 11 f t t t 1 f 600 "601" 100 0 0 100 lseg_center - ));
DESCR("center of");
-DATA(insert OID = 1533 ( point PGUID 11 f t t 1 f 600 "602" 100 0 0 100 path_center - ));
+DATA(insert OID = 1533 ( point PGUID 11 f t t t 1 f 600 "602" 100 0 0 100 path_center - ));
DESCR("center of");
-DATA(insert OID = 1534 ( point PGUID 11 f t t 1 f 600 "603" 100 1 0 100 box_center - ));
+DATA(insert OID = 1534 ( point PGUID 11 f t t t 1 f 600 "603" 100 1 0 100 box_center - ));
DESCR("center of");
-DATA(insert OID = 1540 ( point PGUID 11 f t t 1 f 600 "604" 100 0 0 100 poly_center - ));
+DATA(insert OID = 1540 ( point PGUID 11 f t t t 1 f 600 "604" 100 0 0 100 poly_center - ));
DESCR("center of");
-DATA(insert OID = 1541 ( lseg PGUID 11 f t t 1 f 601 "603" 100 0 0 100 box_diagonal - ));
+DATA(insert OID = 1541 ( lseg PGUID 11 f t t t 1 f 601 "603" 100 0 0 100 box_diagonal - ));
DESCR("");
-DATA(insert OID = 1542 ( center PGUID 11 f t t 1 f 600 "603" 100 1 0 100 box_center - ));
+DATA(insert OID = 1542 ( center PGUID 11 f t t t 1 f 600 "603" 100 1 0 100 box_center - ));
DESCR("center of");
-DATA(insert OID = 1543 ( center PGUID 11 f t t 1 f 600 "718" 100 0 1 0 circle_center - ));
+DATA(insert OID = 1543 ( center PGUID 11 f t t t 1 f 600 "718" 100 0 1 0 circle_center - ));
DESCR("center of");
-DATA(insert OID = 1544 ( polygon PGUID 14 f t t 1 f 604 "718" 100 0 0 100 "select polygon(12, $1)" - ));
+DATA(insert OID = 1544 ( polygon PGUID 14 f t t t 1 f 604 "718" 100 0 0 100 "select polygon(12, $1)" - ));
DESCR("convert circle to 12-vertex polygon");
-DATA(insert OID = 1545 ( npoints PGUID 11 f t t 1 f 23 "602" 100 0 0 100 path_npoints - ));
+DATA(insert OID = 1545 ( npoints PGUID 11 f t t t 1 f 23 "602" 100 0 0 100 path_npoints - ));
DESCR("# points in path");
-DATA(insert OID = 1556 ( npoints PGUID 11 f t t 1 f 23 "604" 100 0 0 100 poly_npoints - ));
+DATA(insert OID = 1556 ( npoints PGUID 11 f t t t 1 f 23 "604" 100 0 0 100 poly_npoints - ));
DESCR("number of points in polygon");
-DATA(insert OID = 1564 ( zpbit_in PGUID 11 f t t 1 f 1560 "0" 100 0 0 100 zpbit_in - ));
+DATA(insert OID = 1564 ( zpbit_in PGUID 11 f t t t 1 f 1560 "0" 100 0 0 100 zpbit_in - ));
DESCR("(internal)");
-DATA(insert OID = 1565 ( zpbit_out PGUID 11 f t t 1 f 23 "0" 100 0 0 100 zpbit_out - ));
+DATA(insert OID = 1565 ( zpbit_out PGUID 11 f t t t 1 f 23 "0" 100 0 0 100 zpbit_out - ));
DESCR("(internal)");
-DATA(insert OID = 1569 ( like PGUID 11 f t t 2 f 16 "25 25" 100 0 1 0 textlike - ));
+DATA(insert OID = 1569 ( like PGUID 11 f t t t 2 f 16 "25 25" 100 0 1 0 textlike - ));
DESCR("matches LIKE expression");
-DATA(insert OID = 1570 ( notlike PGUID 11 f t t 2 f 16 "25 25" 100 0 1 0 textnlike - ));
+DATA(insert OID = 1570 ( notlike PGUID 11 f t t t 2 f 16 "25 25" 100 0 1 0 textnlike - ));
DESCR("does not match LIKE expression");
-DATA(insert OID = 1571 ( like PGUID 11 f t t 2 f 16 "19 25" 100 0 0 100 namelike - ));
+DATA(insert OID = 1571 ( like PGUID 11 f t t t 2 f 16 "19 25" 100 0 0 100 namelike - ));
DESCR("matches LIKE expression");
-DATA(insert OID = 1572 ( notlike PGUID 11 f t t 2 f 16 "19 25" 100 0 0 100 namenlike - ));
+DATA(insert OID = 1572 ( notlike PGUID 11 f t t t 2 f 16 "19 25" 100 0 0 100 namenlike - ));
DESCR("does not match LIKE expression");
-DATA(insert OID = 1573 ( int8 PGUID 14 f t t 1 f 20 "20" 100 0 0 100 "select $1" - ));
+DATA(insert OID = 1573 ( int8 PGUID 14 f t t t 1 f 20 "20" 100 0 0 100 "select $1" - ));
DESCR("convert int8 to int8 (no-op)");
/* SEQUENCEs nextval & currval functions */
-DATA(insert OID = 1574 ( nextval PGUID 11 f t f 1 f 23 "25" 100 0 0 100 nextval - ));
+DATA(insert OID = 1574 ( nextval PGUID 11 f t f t 1 f 23 "25" 100 0 0 100 nextval - ));
DESCR("sequence next value");
-DATA(insert OID = 1575 ( currval PGUID 11 f t f 1 f 23 "25" 100 0 0 100 currval - ));
+DATA(insert OID = 1575 ( currval PGUID 11 f t f t 1 f 23 "25" 100 0 0 100 currval - ));
DESCR("sequence current value");
-DATA(insert OID = 1576 ( setval PGUID 11 f t f 2 f 23 "25 23" 100 0 0 100 setval - ));
+DATA(insert OID = 1576 ( setval PGUID 11 f t f t 2 f 23 "25 23" 100 0 0 100 setval - ));
DESCR("sequence set value");
-DATA(insert OID = 1579 ( varbit_in PGUID 11 f t t 1 f 1562 "0" 100 0 0 100 varbit_in - ));
+DATA(insert OID = 1579 ( varbit_in PGUID 11 f t t t 1 f 1562 "0" 100 0 0 100 varbit_in - ));
DESCR("(internal)");
-DATA(insert OID = 1580 ( varbit_out PGUID 11 f t t 1 f 23 "0" 100 0 0 100 varbit_out - ));
+DATA(insert OID = 1580 ( varbit_out PGUID 11 f t t t 1 f 23 "0" 100 0 0 100 varbit_out - ));
DESCR("(internal)");
-DATA(insert OID = 1581 ( biteq PGUID 11 f t t 2 f 16 "1560 1560" 100 0 1 0 biteq - ));
+DATA(insert OID = 1581 ( biteq PGUID 11 f t t t 2 f 16 "1560 1560" 100 0 1 0 biteq - ));
DESCR("equal");
-DATA(insert OID = 1582 ( bitne PGUID 11 f t t 2 f 16 "1560 1560" 100 0 1 0 bitne - ));
+DATA(insert OID = 1582 ( bitne PGUID 11 f t t t 2 f 16 "1560 1560" 100 0 1 0 bitne - ));
DESCR("not equal");
-DATA(insert OID = 1592 ( bitge PGUID 11 f t t 2 f 16 "1560 1560" 100 0 1 0 bitge - ));
+DATA(insert OID = 1592 ( bitge PGUID 11 f t t t 2 f 16 "1560 1560" 100 0 1 0 bitge - ));
DESCR("greater than or equal");
-DATA(insert OID = 1593 ( bitgt PGUID 11 f t t 2 f 16 "1560 1560" 100 0 1 0 bitgt - ));
+DATA(insert OID = 1593 ( bitgt PGUID 11 f t t t 2 f 16 "1560 1560" 100 0 1 0 bitgt - ));
DESCR("greater than");
-DATA(insert OID = 1594 ( bitle PGUID 11 f t t 2 f 16 "1560 1560" 100 0 1 0 bitle - ));
+DATA(insert OID = 1594 ( bitle PGUID 11 f t t t 2 f 16 "1560 1560" 100 0 1 0 bitle - ));
DESCR("less than or equal");
-DATA(insert OID = 1595 ( bitlt PGUID 11 f t t 2 f 16 "1560 1560" 100 0 1 0 bitlt - ));
+DATA(insert OID = 1595 ( bitlt PGUID 11 f t t t 2 f 16 "1560 1560" 100 0 1 0 bitlt - ));
DESCR("less than");
-DATA(insert OID = 1596 ( bitcmp PGUID 11 f t t 2 f 23 "1560 1560" 100 0 1 0 bitcmp - ));
+DATA(insert OID = 1596 ( bitcmp PGUID 11 f t t t 2 f 23 "1560 1560" 100 0 1 0 bitcmp - ));
DESCR("compare");
-DATA(insert OID = 1598 ( random PGUID 11 f t f 0 f 701 "0" 100 0 0 100 drandom - ));
+DATA(insert OID = 1598 ( random PGUID 11 f t f t 0 f 701 "0" 100 0 0 100 drandom - ));
DESCR("radians to degrees");
-DATA(insert OID = 1599 ( setseed PGUID 11 f t t 1 f 23 "701" 100 0 0 100 setseed - ));
+DATA(insert OID = 1599 ( setseed PGUID 11 f t t t 1 f 23 "701" 100 0 0 100 setseed - ));
DESCR("radians to degrees");
/* OIDS 1600 - 1699 */
-DATA(insert OID = 1600 ( asin PGUID 11 f t t 1 f 701 "701" 100 0 0 100 dasin - ));
+DATA(insert OID = 1600 ( asin PGUID 11 f t t t 1 f 701 "701" 100 0 0 100 dasin - ));
DESCR("arcsine");
-DATA(insert OID = 1601 ( acos PGUID 11 f t t 1 f 701 "701" 100 0 0 100 dacos - ));
+DATA(insert OID = 1601 ( acos PGUID 11 f t t t 1 f 701 "701" 100 0 0 100 dacos - ));
DESCR("arcsine");
-DATA(insert OID = 1602 ( atan PGUID 11 f t t 1 f 701 "701" 100 0 0 100 datan - ));
+DATA(insert OID = 1602 ( atan PGUID 11 f t t t 1 f 701 "701" 100 0 0 100 datan - ));
DESCR("arctangent");
-DATA(insert OID = 1603 ( atan2 PGUID 11 f t t 2 f 701 "701 701" 100 0 0 100 datan2 - ));
+DATA(insert OID = 1603 ( atan2 PGUID 11 f t t t 2 f 701 "701 701" 100 0 0 100 datan2 - ));
DESCR("arctangent, two arguments");
-DATA(insert OID = 1604 ( sin PGUID 11 f t t 1 f 701 "701" 100 0 0 100 dsin - ));
+DATA(insert OID = 1604 ( sin PGUID 11 f t t t 1 f 701 "701" 100 0 0 100 dsin - ));
DESCR("sine");
-DATA(insert OID = 1605 ( cos PGUID 11 f t t 1 f 701 "701" 100 0 0 100 dcos - ));
+DATA(insert OID = 1605 ( cos PGUID 11 f t t t 1 f 701 "701" 100 0 0 100 dcos - ));
DESCR("cosine");
-DATA(insert OID = 1606 ( tan PGUID 11 f t t 1 f 701 "701" 100 0 0 100 dtan - ));
+DATA(insert OID = 1606 ( tan PGUID 11 f t t t 1 f 701 "701" 100 0 0 100 dtan - ));
DESCR("tangent");
-DATA(insert OID = 1607 ( cot PGUID 11 f t t 1 f 701 "701" 100 0 0 100 dcot - ));
+DATA(insert OID = 1607 ( cot PGUID 11 f t t t 1 f 701 "701" 100 0 0 100 dcot - ));
DESCR("cotangent");
-DATA(insert OID = 1608 ( degrees PGUID 11 f t t 1 f 701 "701" 100 0 0 100 degrees - ));
+DATA(insert OID = 1608 ( degrees PGUID 11 f t t t 1 f 701 "701" 100 0 0 100 degrees - ));
DESCR("radians to degrees");
-DATA(insert OID = 1609 ( radians PGUID 11 f t t 1 f 701 "701" 100 0 0 100 radians - ));
+DATA(insert OID = 1609 ( radians PGUID 11 f t t t 1 f 701 "701" 100 0 0 100 radians - ));
DESCR("radians to degrees");
-DATA(insert OID = 1610 ( pi PGUID 11 f t t 0 f 701 "0" 100 0 0 100 dpi - ));
+DATA(insert OID = 1610 ( pi PGUID 11 f t t t 0 f 701 "0" 100 0 0 100 dpi - ));
DESCR("PI");
-DATA(insert OID = 1618 ( interval_mul PGUID 11 f t t 2 f 1186 "1186 701" 100 0 0 100 interval_mul - ));
+DATA(insert OID = 1618 ( interval_mul PGUID 11 f t t t 2 f 1186 "1186 701" 100 0 0 100 interval_mul - ));
DESCR("multiply interval");
-DATA(insert OID = 1619 ( varchar PGUID 11 f t t 1 f 1043 "23" 100 0 0 100 int4_text - ));
+DATA(insert OID = 1619 ( varchar PGUID 11 f t t t 1 f 1043 "23" 100 0 0 100 int4_text - ));
DESCR("convert int4 to varchar");
-DATA(insert OID = 1620 ( ascii PGUID 11 f t t 1 f 23 "25" 100 0 0 100 ascii - ));
+DATA(insert OID = 1620 ( ascii PGUID 11 f t t t 1 f 23 "25" 100 0 0 100 ascii - ));
DESCR("convert first char to int4");
-DATA(insert OID = 1621 ( ichar PGUID 11 f t t 1 f 25 "23" 100 0 0 100 ichar - ));
+DATA(insert OID = 1621 ( ichar PGUID 11 f t t t 1 f 25 "23" 100 0 0 100 ichar - ));
DESCR("convert int4 to char");
-DATA(insert OID = 1622 ( repeat PGUID 11 f t t 2 f 25 "25 23" 100 0 0 100 repeat - ));
+DATA(insert OID = 1622 ( repeat PGUID 11 f t t t 2 f 25 "25 23" 100 0 0 100 repeat - ));
DESCR("replicate string int4 times");
-DATA(insert OID = 1623 ( varchar PGUID 11 f t t 1 f 1043 "20" 100 0 0 100 int8_text - ));
+DATA(insert OID = 1623 ( varchar PGUID 11 f t t t 1 f 1043 "20" 100 0 0 100 int8_text - ));
DESCR("convert int8 to varchar");
-DATA(insert OID = 1624 ( mul_d_interval PGUID 11 f t t 2 f 1186 "701 1186" 100 0 0 100 mul_d_interval - ));
+DATA(insert OID = 1624 ( mul_d_interval PGUID 11 f t t t 2 f 1186 "701 1186" 100 0 0 100 mul_d_interval - ));
/* OID's 1625 - 1639 LZTEXT data type */
-DATA(insert OID = 1626 ( lztextin PGUID 11 f t t 1 f 1625 "0" 100 0 0 100 lztextin - ));
+DATA(insert OID = 1626 ( lztextin PGUID 11 f t t t 1 f 1625 "0" 100 0 0 100 lztextin - ));
DESCR("(internal)");
-DATA(insert OID = 1627 ( lztextout PGUID 11 f t t 1 f 23 "0" 100 0 0 100 lztextout - ));
+DATA(insert OID = 1627 ( lztextout PGUID 11 f t t t 1 f 23 "0" 100 0 0 100 lztextout - ));
DESCR("(internal)");
-DATA(insert OID = 1629 ( text PGUID 11 f t t 1 f 25 "1625" 100 0 0 100 lztext_text -));
+DATA(insert OID = 1629 ( text PGUID 11 f t t t 1 f 25 "1625" 100 0 0 100 lztext_text -));
DESCR("convert lztext to text");
-DATA(insert OID = 1631 ( lztext PGUID 11 f t t 1 f 1625 "25" 100 0 0 100 text_lztext -));
+DATA(insert OID = 1631 ( lztext PGUID 11 f t t t 1 f 1625 "25" 100 0 0 100 text_lztext -));
DESCR("convert text to lztext");
-DATA(insert OID = 1632 ( lztext PGUID 14 f t t 1 f 1625 "1625" 100 0 0 100 "select $1" -));
+DATA(insert OID = 1632 ( lztext PGUID 14 f t t t 1 f 1625 "1625" 100 0 0 100 "select $1" -));
DESCR("convert text to lztext");
-DATA(insert OID = 1633 ( char_length PGUID 11 f t t 1 f 23 "1625" 100 0 1 0 lztextlen - ));
+DATA(insert OID = 1633 ( char_length PGUID 11 f t t t 1 f 23 "1625" 100 0 1 0 lztextlen - ));
DESCR("length");
-DATA(insert OID = 1634 ( length PGUID 11 f t t 1 f 23 "1625" 100 0 1 0 lztextlen - ));
+DATA(insert OID = 1634 ( length PGUID 11 f t t t 1 f 23 "1625" 100 0 1 0 lztextlen - ));
DESCR("length");
-DATA(insert OID = 1635 ( octet_length PGUID 11 f t t 1 f 23 "1625" 100 0 1 0 lztextoctetlen - ));
+DATA(insert OID = 1635 ( octet_length PGUID 11 f t t t 1 f 23 "1625" 100 0 1 0 lztextoctetlen - ));
DESCR("octet length");
-DATA(insert OID = 1636 ( lztext_cmp PGUID 11 f t t 2 f 23 "1625 1625" 100 0 1 0 lztext_cmp - ));
+DATA(insert OID = 1636 ( lztext_cmp PGUID 11 f t t t 2 f 23 "1625 1625" 100 0 1 0 lztext_cmp - ));
DESCR("compare lztext");
-DATA(insert OID = 1637 ( lztext_eq PGUID 11 f t t 2 f 16 "1625 1625" 100 0 1 0 lztext_eq - ));
+DATA(insert OID = 1637 ( lztext_eq PGUID 11 f t t t 2 f 16 "1625 1625" 100 0 1 0 lztext_eq - ));
DESCR("equal");
-DATA(insert OID = 1638 ( lztext_ne PGUID 11 f t t 2 f 16 "1625 1625" 100 0 1 0 lztext_ne - ));
+DATA(insert OID = 1638 ( lztext_ne PGUID 11 f t t t 2 f 16 "1625 1625" 100 0 1 0 lztext_ne - ));
DESCR("not equal");
-DATA(insert OID = 1639 ( lztext_gt PGUID 11 f t t 2 f 16 "1625 1625" 100 0 1 0 lztext_gt - ));
+DATA(insert OID = 1639 ( lztext_gt PGUID 11 f t t t 2 f 16 "1625 1625" 100 0 1 0 lztext_gt - ));
DESCR("greater-than");
-DATA(insert OID = 1664 ( lztext_ge PGUID 11 f t t 2 f 16 "1625 1625" 100 0 1 0 lztext_ge - ));
+DATA(insert OID = 1664 ( lztext_ge PGUID 11 f t t t 2 f 16 "1625 1625" 100 0 1 0 lztext_ge - ));
DESCR("greater-than-or-equal");
-DATA(insert OID = 1665 ( lztext_lt PGUID 11 f t t 2 f 16 "1625 1625" 100 0 1 0 lztext_lt - ));
+DATA(insert OID = 1665 ( lztext_lt PGUID 11 f t t t 2 f 16 "1625 1625" 100 0 1 0 lztext_lt - ));
DESCR("less-than");
-DATA(insert OID = 1656 ( lztext_le PGUID 11 f t t 2 f 16 "1625 1625" 100 0 1 0 lztext_le - ));
+DATA(insert OID = 1656 ( lztext_le PGUID 11 f t t t 2 f 16 "1625 1625" 100 0 1 0 lztext_le - ));
DESCR("less-than-or-equal");
+DATA(insert OID = 1689 ( update_pg_pwd PGUID 11 f t f t 0 f 0 "" 100 0 0 100 update_pg_pwd - ));
+DESCR("update pg_pwd file");
+
/* Oracle Compatibility Related Functions - By Edmund Mergl <E.Mergl@bawue.de> */
-DATA(insert OID = 868 ( strpos PGUID 11 f t t 2 f 23 "25 25" 100 0 0 100 textpos - ));
+DATA(insert OID = 868 ( strpos PGUID 11 f t t t 2 f 23 "25 25" 100 0 0 100 textpos - ));
DESCR("find position of substring");
-DATA(insert OID = 870 ( lower PGUID 11 f t t 1 f 25 "25" 100 0 0 100 lower - ));
+DATA(insert OID = 870 ( lower PGUID 11 f t t t 1 f 25 "25" 100 0 0 100 lower - ));
DESCR("lowercase");
-DATA(insert OID = 871 ( upper PGUID 11 f t t 1 f 25 "25" 100 0 0 100 upper - ));
+DATA(insert OID = 871 ( upper PGUID 11 f t t t 1 f 25 "25" 100 0 0 100 upper - ));
DESCR("uppercase");
-DATA(insert OID = 872 ( initcap PGUID 11 f t t 1 f 25 "25" 100 0 0 100 initcap - ));
+DATA(insert OID = 872 ( initcap PGUID 11 f t t t 1 f 25 "25" 100 0 0 100 initcap - ));
DESCR("capitalize each word");
-DATA(insert OID = 873 ( lpad PGUID 11 f t t 3 f 25 "25 23 25" 100 0 0 100 lpad - ));
+DATA(insert OID = 873 ( lpad PGUID 11 f t t t 3 f 25 "25 23 25" 100 0 0 100 lpad - ));
DESCR("left-pad string to length");
-DATA(insert OID = 874 ( rpad PGUID 11 f t t 3 f 25 "25 23 25" 100 0 0 100 rpad - ));
+DATA(insert OID = 874 ( rpad PGUID 11 f t t t 3 f 25 "25 23 25" 100 0 0 100 rpad - ));
DESCR("right-pad string to length");
-DATA(insert OID = 875 ( ltrim PGUID 11 f t t 2 f 25 "25 25" 100 0 0 100 ltrim - ));
+DATA(insert OID = 875 ( ltrim PGUID 11 f t t t 2 f 25 "25 25" 100 0 0 100 ltrim - ));
DESCR("left-pad string to length");
-DATA(insert OID = 876 ( rtrim PGUID 11 f t t 2 f 25 "25 25" 100 0 0 100 rtrim - ));
+DATA(insert OID = 876 ( rtrim PGUID 11 f t t t 2 f 25 "25 25" 100 0 0 100 rtrim - ));
DESCR("right-pad string to length");
-DATA(insert OID = 877 ( substr PGUID 11 f t t 3 f 25 "25 23 23" 100 0 0 100 text_substr - ));
+DATA(insert OID = 877 ( substr PGUID 11 f t t t 3 f 25 "25 23 23" 100 0 0 100 text_substr - ));
DESCR("return portion of string");
-DATA(insert OID = 878 ( translate PGUID 11 f t t 3 f 25 "25 25 25" 100 0 0 100 translate - ));
+DATA(insert OID = 878 ( translate PGUID 11 f t t t 3 f 25 "25 25 25" 100 0 0 100 translate - ));
DESCR("modify string by substring replacement");
-DATA(insert OID = 879 ( lpad PGUID 14 f t t 2 f 25 "25 23" 100 0 0 100 "select lpad($1, $2, \' \')" - ));
+DATA(insert OID = 879 ( lpad PGUID 14 f t t t 2 f 25 "25 23" 100 0 0 100 "select lpad($1, $2, \' \')" - ));
DESCR("left-pad string to length");
-DATA(insert OID = 880 ( rpad PGUID 14 f t t 2 f 25 "25 23" 100 0 0 100 "select rpad($1, $2, \' \')" - ));
+DATA(insert OID = 880 ( rpad PGUID 14 f t t t 2 f 25 "25 23" 100 0 0 100 "select rpad($1, $2, \' \')" - ));
DESCR("right-pad string to length");
-DATA(insert OID = 881 ( ltrim PGUID 14 f t t 1 f 25 "25" 100 0 0 100 "select ltrim($1, \' \')" - ));
+DATA(insert OID = 881 ( ltrim PGUID 14 f t t t 1 f 25 "25" 100 0 0 100 "select ltrim($1, \' \')" - ));
DESCR("remove initial characters from string");
-DATA(insert OID = 882 ( rtrim PGUID 14 f t t 1 f 25 "25" 100 0 0 100 "select rtrim($1, \' \')" - ));
+DATA(insert OID = 882 ( rtrim PGUID 14 f t t t 1 f 25 "25" 100 0 0 100 "select rtrim($1, \' \')" - ));
DESCR("remove trailing characters from string");
-DATA(insert OID = 883 ( substr PGUID 14 f t t 2 f 25 "25 23" 100 0 0 100 "select substr($1, $2, -1)" - ));
+DATA(insert OID = 883 ( substr PGUID 14 f t t t 2 f 25 "25 23" 100 0 0 100 "select substr($1, $2, -1)" - ));
DESCR("return portion of string");
-DATA(insert OID = 884 ( btrim PGUID 11 f t t 2 f 25 "25 25" 100 0 0 100 btrim - ));
+DATA(insert OID = 884 ( btrim PGUID 11 f t t t 2 f 25 "25 25" 100 0 0 100 btrim - ));
DESCR("trim both ends of string");
-DATA(insert OID = 885 ( btrim PGUID 14 f t t 1 f 25 "25" 100 0 0 100 "select btrim($1, \' \')" - ));
+DATA(insert OID = 885 ( btrim PGUID 14 f t t t 1 f 25 "25" 100 0 0 100 "select btrim($1, \' \')" - ));
DESCR("trim both ends of string");
/* for multi-byte support */
-DATA(insert OID = 1039 ( getdatabaseencoding PGUID 11 f t f 0 f 19 "0" 100 0 0 100 getdatabaseencoding - ));
+DATA(insert OID = 1039 ( getdatabaseencoding PGUID 11 f t f t 0 f 19 "0" 100 0 0 100 getdatabaseencoding - ));
DESCR("encoding name of current database");
-DATA(insert OID = 1295 ( pg_char_to_encoding PGUID 11 f t f 1 f 23 "19" 100 0 0 100 pg_char_to_encoding - ));
+DATA(insert OID = 1295 ( pg_char_to_encoding PGUID 11 f t f t 1 f 23 "19" 100 0 0 100 pg_char_to_encoding - ));
DESCR("convert encoding name to encoding id");
-DATA(insert OID = 1597 ( pg_encoding_to_char PGUID 11 f t f 1 f 19 "23" 100 0 0 100 pg_encoding_to_char - ));
+DATA(insert OID = 1597 ( pg_encoding_to_char PGUID 11 f t f t 1 f 19 "23" 100 0 0 100 pg_encoding_to_char - ));
DESCR("convert encoding id to encoding name");
/* System-view support functions */
-DATA(insert OID = 1640 ( pg_get_ruledef PGUID 11 f t f 1 f 25 "19" 100 0 0 100 pg_get_ruledef - ));
+DATA(insert OID = 1640 ( pg_get_ruledef PGUID 11 f t f t 1 f 25 "19" 100 0 0 100 pg_get_ruledef - ));
DESCR("source text of a rule");
-DATA(insert OID = 1641 ( pg_get_viewdef PGUID 11 f t f 1 f 25 "19" 100 0 0 100 pg_get_viewdef - ));
+DATA(insert OID = 1641 ( pg_get_viewdef PGUID 11 f t f t 1 f 25 "19" 100 0 0 100 pg_get_viewdef - ));
DESCR("select statement of a view");
-DATA(insert OID = 1642 ( pg_get_userbyid PGUID 11 f t f 1 f 19 "23" 100 0 0 100 pg_get_userbyid - ));
+DATA(insert OID = 1642 ( pg_get_userbyid PGUID 11 f t f t 1 f 19 "23" 100 0 0 100 pg_get_userbyid - ));
DESCR("user name by UID (with fallback)");
-DATA(insert OID = 1643 ( pg_get_indexdef PGUID 11 f t f 1 f 25 "26" 100 0 0 100 pg_get_indexdef - ));
+DATA(insert OID = 1643 ( pg_get_indexdef PGUID 11 f t f t 1 f 25 "26" 100 0 0 100 pg_get_indexdef - ));
DESCR("index description");
/* Generic referential integrity constraint triggers */
-DATA(insert OID = 1644 ( RI_FKey_check_ins PGUID 11 f t f 0 f 0 "" 100 0 0 100 RI_FKey_check_ins - ));
+DATA(insert OID = 1644 ( RI_FKey_check_ins PGUID 11 f t f t 0 f 0 "" 100 0 0 100 RI_FKey_check_ins - ));
DESCR("referential integrity FOREIGN KEY ... REFERENCES");
-DATA(insert OID = 1645 ( RI_FKey_check_upd PGUID 11 f t f 0 f 0 "" 100 0 0 100 RI_FKey_check_upd - ));
+DATA(insert OID = 1645 ( RI_FKey_check_upd PGUID 11 f t f t 0 f 0 "" 100 0 0 100 RI_FKey_check_upd - ));
DESCR("referential integrity FOREIGN KEY ... REFERENCES");
-DATA(insert OID = 1646 ( RI_FKey_cascade_del PGUID 11 f t f 0 f 0 "" 100 0 0 100 RI_FKey_cascade_del - ));
+DATA(insert OID = 1646 ( RI_FKey_cascade_del PGUID 11 f t f t 0 f 0 "" 100 0 0 100 RI_FKey_cascade_del - ));
DESCR("referential integrity ON DELETE CASCADE");
-DATA(insert OID = 1647 ( RI_FKey_cascade_upd PGUID 11 f t f 0 f 0 "" 100 0 0 100 RI_FKey_cascade_upd - ));
+DATA(insert OID = 1647 ( RI_FKey_cascade_upd PGUID 11 f t f t 0 f 0 "" 100 0 0 100 RI_FKey_cascade_upd - ));
DESCR("referential integrity ON UPDATE CASCADE");
-DATA(insert OID = 1648 ( RI_FKey_restrict_del PGUID 11 f t f 0 f 0 "" 100 0 0 100 RI_FKey_restrict_del - ));
+DATA(insert OID = 1648 ( RI_FKey_restrict_del PGUID 11 f t f t 0 f 0 "" 100 0 0 100 RI_FKey_restrict_del - ));
DESCR("referential integrity ON DELETE RESTRICT");
-DATA(insert OID = 1649 ( RI_FKey_restrict_upd PGUID 11 f t f 0 f 0 "" 100 0 0 100 RI_FKey_restrict_upd - ));
+DATA(insert OID = 1649 ( RI_FKey_restrict_upd PGUID 11 f t f t 0 f 0 "" 100 0 0 100 RI_FKey_restrict_upd - ));
DESCR("referential integrity ON UPDATE RESTRICT");
-DATA(insert OID = 1650 ( RI_FKey_setnull_del PGUID 11 f t f 0 f 0 "" 100 0 0 100 RI_FKey_setnull_del - ));
+DATA(insert OID = 1650 ( RI_FKey_setnull_del PGUID 11 f t f t 0 f 0 "" 100 0 0 100 RI_FKey_setnull_del - ));
DESCR("referential integrity ON DELETE SET NULL");
-DATA(insert OID = 1651 ( RI_FKey_setnull_upd PGUID 11 f t f 0 f 0 "" 100 0 0 100 RI_FKey_setnull_upd - ));
+DATA(insert OID = 1651 ( RI_FKey_setnull_upd PGUID 11 f t f t 0 f 0 "" 100 0 0 100 RI_FKey_setnull_upd - ));
DESCR("referential integrity ON UPDATE SET NULL");
-DATA(insert OID = 1652 ( RI_FKey_setdefault_del PGUID 11 f t f 0 f 0 "" 100 0 0 100 RI_FKey_setdefault_del - ));
+DATA(insert OID = 1652 ( RI_FKey_setdefault_del PGUID 11 f t f t 0 f 0 "" 100 0 0 100 RI_FKey_setdefault_del - ));
DESCR("referential integrity ON DELETE SET DEFAULT");
-DATA(insert OID = 1653 ( RI_FKey_setdefault_upd PGUID 11 f t f 0 f 0 "" 100 0 0 100 RI_FKey_setdefault_upd - ));
+DATA(insert OID = 1653 ( RI_FKey_setdefault_upd PGUID 11 f t f t 0 f 0 "" 100 0 0 100 RI_FKey_setdefault_upd - ));
DESCR("referential integrity ON UPDATE SET DEFAULT");
-DATA(insert OID = 1654 ( RI_FKey_noaction_del PGUID 11 f t f 0 f 0 "" 100 0 0 100 RI_FKey_noaction_del - ));
+DATA(insert OID = 1654 ( RI_FKey_noaction_del PGUID 11 f t f t 0 f 0 "" 100 0 0 100 RI_FKey_noaction_del - ));
DESCR("referential integrity ON DELETE NO ACTION");
-DATA(insert OID = 1655 ( RI_FKey_noaction_upd PGUID 11 f t f 0 f 0 "" 100 0 0 100 RI_FKey_noaction_upd - ));
+DATA(insert OID = 1655 ( RI_FKey_noaction_upd PGUID 11 f t f t 0 f 0 "" 100 0 0 100 RI_FKey_noaction_upd - ));
DESCR("referential integrity ON UPDATE NO ACTION");
-DATA(insert OID = 1666 ( varbiteq PGUID 11 f t t 2 f 16 "1562 1562" 100 0 1 0 varbiteq - ));
+DATA(insert OID = 1666 ( varbiteq PGUID 11 f t t t 2 f 16 "1562 1562" 100 0 1 0 varbiteq - ));
DESCR("equal");
-DATA(insert OID = 1667 ( varbitne PGUID 11 f t t 2 f 16 "1562 1562" 100 0 1 0 varbitne - ));
+DATA(insert OID = 1667 ( varbitne PGUID 11 f t t t 2 f 16 "1562 1562" 100 0 1 0 varbitne - ));
DESCR("not equal");
-DATA(insert OID = 1668 ( varbitge PGUID 11 f t t 2 f 16 "1562 1562" 100 0 1 0 varbitge - ));
+DATA(insert OID = 1668 ( varbitge PGUID 11 f t t t 2 f 16 "1562 1562" 100 0 1 0 varbitge - ));
DESCR("greater than or equal");
-DATA(insert OID = 1669 ( varbitgt PGUID 11 f t t 2 f 16 "1562 1562" 100 0 1 0 varbitgt - ));
+DATA(insert OID = 1669 ( varbitgt PGUID 11 f t t t 2 f 16 "1562 1562" 100 0 1 0 varbitgt - ));
DESCR("greater than");
-DATA(insert OID = 1670 ( varbitle PGUID 11 f t t 2 f 16 "1562 1562" 100 0 1 0 varbitle - ));
+DATA(insert OID = 1670 ( varbitle PGUID 11 f t t t 2 f 16 "1562 1562" 100 0 1 0 varbitle - ));
DESCR("less than or equal");
-DATA(insert OID = 1671 ( varbitlt PGUID 11 f t t 2 f 16 "1562 1562" 100 0 1 0 varbitlt - ));
+DATA(insert OID = 1671 ( varbitlt PGUID 11 f t t t 2 f 16 "1562 1562" 100 0 1 0 varbitlt - ));
DESCR("less than");
-DATA(insert OID = 1672 ( varbitcmp PGUID 11 f t t 2 f 23 "1562 1562" 100 0 1 0 varbitcmp - ));
+DATA(insert OID = 1672 ( varbitcmp PGUID 11 f t t t 2 f 23 "1562 1562" 100 0 1 0 varbitcmp - ));
DESCR("compare");
-DATA(insert OID = 1673 ( bitand PGUID 11 f t t 2 f 1560 "1560 1560" 100 0 1 0 bitand - ));
+DATA(insert OID = 1673 ( bitand PGUID 11 f t t t 2 f 1560 "1560 1560" 100 0 1 0 bitand - ));
DESCR("bitwise and");
-DATA(insert OID = 1674 ( bitor PGUID 11 f t t 2 f 1560 "1560 1560" 100 0 1 0 bitor - ));
+DATA(insert OID = 1674 ( bitor PGUID 11 f t t t 2 f 1560 "1560 1560" 100 0 1 0 bitor - ));
DESCR("bitwise or");
-DATA(insert OID = 1675 ( bitxor PGUID 11 f t t 2 f 1560 "1560 1560" 100 0 1 0 bitxor - ));
+DATA(insert OID = 1675 ( bitxor PGUID 11 f t t t 2 f 1560 "1560 1560" 100 0 1 0 bitxor - ));
DESCR("bitwise exclusive or");
-DATA(insert OID = 1676 ( bitnot PGUID 11 f t t 2 f 1560 "1560 1560" 100 0 1 0 bitnot - ));
+DATA(insert OID = 1676 ( bitnot PGUID 11 f t t t 2 f 1560 "1560 1560" 100 0 1 0 bitnot - ));
DESCR("bitwise negation");
-DATA(insert OID = 1677 ( bitshiftright PGUID 11 f t t 2 f 1560 "1560 1560" 100 0 1 0 bitshiftright - ));
+DATA(insert OID = 1677 ( bitshiftright PGUID 11 f t t t 2 f 1560 "1560 1560" 100 0 1 0 bitshiftright - ));
DESCR("bitwise right shift");
-DATA(insert OID = 1678 ( bitshiftleft PGUID 11 f t t 2 f 1560 "1560 1560" 100 0 1 0 bitshiftleft - ));
+DATA(insert OID = 1678 ( bitshiftleft PGUID 11 f t t t 2 f 1560 "1560 1560" 100 0 1 0 bitshiftleft - ));
DESCR("bitwise left shift");
-DATA(insert OID = 1679 ( bitcat PGUID 11 f t t 2 f 1560 "1560 1560" 100 0 1 0 bitcat - ));
+DATA(insert OID = 1679 ( bitcat PGUID 11 f t t t 2 f 1560 "1560 1560" 100 0 1 0 bitcat - ));
DESCR("bitwise concatenation");
-DATA(insert OID = 1680 ( bitsubstr PGUID 11 f t t 2 f 1560 "1560 1560" 100 0 1 0 bitsubstr - ));
+DATA(insert OID = 1680 ( bitsubstr PGUID 11 f t t t 2 f 1560 "1560 1560" 100 0 1 0 bitsubstr - ));
DESCR("bitwise field");
-DATA(insert OID = 1681 ( varbitand PGUID 11 f t t 2 f 1562 "1562 1562" 100 0 1 0 varbitand - ));
+DATA(insert OID = 1681 ( varbitand PGUID 11 f t t t 2 f 1562 "1562 1562" 100 0 1 0 varbitand - ));
DESCR("bitwise and");
-DATA(insert OID = 1682 ( varbitor PGUID 11 f t t 2 f 1562 "1562 1562" 100 0 1 0 varbitor - ));
+DATA(insert OID = 1682 ( varbitor PGUID 11 f t t t 2 f 1562 "1562 1562" 100 0 1 0 varbitor - ));
DESCR("bitwise or");
-DATA(insert OID = 1683 ( varbitxor PGUID 11 f t t 2 f 1562 "1562 1562" 100 0 1 0 varbitxor - ));
+DATA(insert OID = 1683 ( varbitxor PGUID 11 f t t t 2 f 1562 "1562 1562" 100 0 1 0 varbitxor - ));
DESCR("bitwise exclusive or");
-DATA(insert OID = 1684 ( varbitnot PGUID 11 f t t 2 f 1562 "1562 1562" 100 0 1 0 varbitnot - ));
+DATA(insert OID = 1684 ( varbitnot PGUID 11 f t t t 2 f 1562 "1562 1562" 100 0 1 0 varbitnot - ));
DESCR("bitwise negation");
-DATA(insert OID = 1685 ( varbitshiftright PGUID 11 f t t 2 f 1562 "1562 1562" 100 0 1 0 varbitshiftright - ));
+DATA(insert OID = 1685 ( varbitshiftright PGUID 11 f t t t 2 f 1562 "1562 1562" 100 0 1 0 varbitshiftright - ));
DESCR("bitwise right shift");
-DATA(insert OID = 1686 ( varbitshiftleft PGUID 11 f t t 2 f 1562 "1562 1562" 100 0 1 0 varbitshiftleft - ));
+DATA(insert OID = 1686 ( varbitshiftleft PGUID 11 f t t t 2 f 1562 "1562 1562" 100 0 1 0 varbitshiftleft - ));
DESCR("bitwise left shift");
-DATA(insert OID = 1687 ( varbitcat PGUID 11 f t t 2 f 1562 "1562 1562" 100 0 1 0 varbitcat - ));
+DATA(insert OID = 1687 ( varbitcat PGUID 11 f t t t 2 f 1562 "1562 1562" 100 0 1 0 varbitcat - ));
DESCR("bitwise concatenation");
-DATA(insert OID = 1688 ( varbitsubstr PGUID 11 f t t 2 f 1562 "1562 1562" 100 0 1 0 varbitsubstr - ));
+DATA(insert OID = 1688 ( varbitsubstr PGUID 11 f t t t 2 f 1562 "1562 1562" 100 0 1 0 varbitsubstr - ));
DESCR("bitwise field");
/* for mac type support */
-DATA(insert OID = 436 ( macaddr_in PGUID 11 f t t 1 f 829 "0" 100 0 0 100 macaddr_in - ));
+DATA(insert OID = 436 ( macaddr_in PGUID 11 f t t t 1 f 829 "0" 100 0 0 100 macaddr_in - ));
DESCR("(internal)");
-DATA(insert OID = 437 ( macaddr_out PGUID 11 f t t 1 f 23 "0" 100 0 0 100 macaddr_out - ));
+DATA(insert OID = 437 ( macaddr_out PGUID 11 f t t t 1 f 23 "0" 100 0 0 100 macaddr_out - ));
DESCR("(internal)");
-DATA(insert OID = 830 ( macaddr_eq PGUID 11 f t t 2 f 16 "829 829" 100 0 0 100 macaddr_eq - ));
+DATA(insert OID = 830 ( macaddr_eq PGUID 11 f t t t 2 f 16 "829 829" 100 0 0 100 macaddr_eq - ));
DESCR("equal");
-DATA(insert OID = 831 ( macaddr_lt PGUID 11 f t t 2 f 16 "829 829" 100 0 0 100 macaddr_lt - ));
+DATA(insert OID = 831 ( macaddr_lt PGUID 11 f t t t 2 f 16 "829 829" 100 0 0 100 macaddr_lt - ));
DESCR("less-than");
-DATA(insert OID = 832 ( macaddr_le PGUID 11 f t t 2 f 16 "829 829" 100 0 0 100 macaddr_le - ));
+DATA(insert OID = 832 ( macaddr_le PGUID 11 f t t t 2 f 16 "829 829" 100 0 0 100 macaddr_le - ));
DESCR("less-than-or-equal");
-DATA(insert OID = 833 ( macaddr_gt PGUID 11 f t t 2 f 16 "829 829" 100 0 0 100 macaddr_gt - ));
+DATA(insert OID = 833 ( macaddr_gt PGUID 11 f t t t 2 f 16 "829 829" 100 0 0 100 macaddr_gt - ));
DESCR("greater-than");
-DATA(insert OID = 834 ( macaddr_ge PGUID 11 f t t 2 f 16 "829 829" 100 0 0 100 macaddr_ge - ));
+DATA(insert OID = 834 ( macaddr_ge PGUID 11 f t t t 2 f 16 "829 829" 100 0 0 100 macaddr_ge - ));
DESCR("greater-than-or-equal");
-DATA(insert OID = 835 ( macaddr_ne PGUID 11 f t t 2 f 16 "829 829" 100 0 0 100 macaddr_ne - ));
+DATA(insert OID = 835 ( macaddr_ne PGUID 11 f t t t 2 f 16 "829 829" 100 0 0 100 macaddr_ne - ));
DESCR("not equal");
-DATA(insert OID = 836 ( macaddr_cmp PGUID 11 f t t 2 f 23 "829 829" 100 0 0 100 macaddr_cmp - ));
+DATA(insert OID = 836 ( macaddr_cmp PGUID 11 f t t t 2 f 23 "829 829" 100 0 0 100 macaddr_cmp - ));
DESCR("less-equal-greater");
-DATA(insert OID = 837 ( macaddr_manuf PGUID 11 f t t 1 f 25 "829" 100 0 0 100 macaddr_manuf - ));
+DATA(insert OID = 837 ( macaddr_manuf PGUID 11 f t t t 1 f 25 "829" 100 0 0 100 macaddr_manuf - ));
DESCR("MAC manufacturer");
/* for inet type support */
-DATA(insert OID = 910 ( inet_in PGUID 11 f t t 1 f 869 "0" 100 0 0 100 inet_in - ));
+DATA(insert OID = 910 ( inet_in PGUID 11 f t t t 1 f 869 "0" 100 0 0 100 inet_in - ));
DESCR("(internal)");
-DATA(insert OID = 911 ( inet_out PGUID 11 f t t 1 f 23 "0" 100 0 0 100 inet_out - ));
+DATA(insert OID = 911 ( inet_out PGUID 11 f t t t 1 f 23 "0" 100 0 0 100 inet_out - ));
DESCR("(internal)");
/* for cidr type support */
-DATA(insert OID = 1267 ( cidr_in PGUID 11 f t t 1 f 650 "0" 100 0 0 100 cidr_in - ));
+DATA(insert OID = 1267 ( cidr_in PGUID 11 f t t t 1 f 650 "0" 100 0 0 100 cidr_in - ));
DESCR("(internal)");
-DATA(insert OID = 1427 ( cidr_out PGUID 11 f t t 1 f 23 "0" 100 0 0 100 cidr_out - ));
+DATA(insert OID = 1427 ( cidr_out PGUID 11 f t t t 1 f 23 "0" 100 0 0 100 cidr_out - ));
DESCR("(internal)");
/* these are used for both inet and cidr */
-DATA(insert OID = 920 ( network_eq PGUID 11 f t t 2 f 16 "869 869" 100 0 0 100 network_eq - ));
+DATA(insert OID = 920 ( network_eq PGUID 11 f t t t 2 f 16 "869 869" 100 0 0 100 network_eq - ));
DESCR("equal");
-DATA(insert OID = 921 ( network_lt PGUID 11 f t t 2 f 16 "869 869" 100 0 0 100 network_lt - ));
+DATA(insert OID = 921 ( network_lt PGUID 11 f t t t 2 f 16 "869 869" 100 0 0 100 network_lt - ));
DESCR("less-than");
-DATA(insert OID = 922 ( network_le PGUID 11 f t t 2 f 16 "869 869" 100 0 0 100 network_le - ));
+DATA(insert OID = 922 ( network_le PGUID 11 f t t t 2 f 16 "869 869" 100 0 0 100 network_le - ));
DESCR("less-than-or-equal");
-DATA(insert OID = 923 ( network_gt PGUID 11 f t t 2 f 16 "869 869" 100 0 0 100 network_gt - ));
+DATA(insert OID = 923 ( network_gt PGUID 11 f t t t 2 f 16 "869 869" 100 0 0 100 network_gt - ));
DESCR("greater-than");
-DATA(insert OID = 924 ( network_ge PGUID 11 f t t 2 f 16 "869 869" 100 0 0 100 network_ge - ));
+DATA(insert OID = 924 ( network_ge PGUID 11 f t t t 2 f 16 "869 869" 100 0 0 100 network_ge - ));
DESCR("greater-than-or-equal");
-DATA(insert OID = 925 ( network_ne PGUID 11 f t t 2 f 16 "869 869" 100 0 0 100 network_ne - ));
+DATA(insert OID = 925 ( network_ne PGUID 11 f t t t 2 f 16 "869 869" 100 0 0 100 network_ne - ));
DESCR("not equal");
-DATA(insert OID = 926 ( network_cmp PGUID 11 f t t 2 f 23 "869 869" 100 0 0 100 network_cmp - ));
+DATA(insert OID = 926 ( network_cmp PGUID 11 f t t t 2 f 23 "869 869" 100 0 0 100 network_cmp - ));
DESCR("less-equal-greater");
-DATA(insert OID = 927 ( network_sub PGUID 11 f t t 2 f 16 "869 869" 100 0 0 100 network_sub - ));
+DATA(insert OID = 927 ( network_sub PGUID 11 f t t t 2 f 16 "869 869" 100 0 0 100 network_sub - ));
DESCR("is-subnet");
-DATA(insert OID = 928 ( network_subeq PGUID 11 f t t 2 f 16 "869 869" 100 0 0 100 network_subeq - ));
+DATA(insert OID = 928 ( network_subeq PGUID 11 f t t t 2 f 16 "869 869" 100 0 0 100 network_subeq - ));
DESCR("is-subnet-or-equal");
-DATA(insert OID = 929 ( network_sup PGUID 11 f t t 2 f 16 "869 869" 100 0 0 100 network_sup - ));
+DATA(insert OID = 929 ( network_sup PGUID 11 f t t t 2 f 16 "869 869" 100 0 0 100 network_sup - ));
DESCR("is-supernet");
-DATA(insert OID = 930 ( network_supeq PGUID 11 f t t 2 f 16 "869 869" 100 0 0 100 network_supeq - ));
+DATA(insert OID = 930 ( network_supeq PGUID 11 f t t t 2 f 16 "869 869" 100 0 0 100 network_supeq - ));
DESCR("is-supernet-or-equal");
/* inet/cidr versions */
-DATA(insert OID = 696 ( netmask PGUID 11 f t t 1 f 25 "869" 100 0 0 100 network_netmask - ));
+DATA(insert OID = 696 ( netmask PGUID 11 f t t t 1 f 25 "869" 100 0 0 100 network_netmask - ));
DESCR("netmask of address");
-DATA(insert OID = 697 ( masklen PGUID 11 f t t 1 f 23 "869" 100 0 0 100 network_masklen - ));
+DATA(insert OID = 697 ( masklen PGUID 11 f t t t 1 f 23 "869" 100 0 0 100 network_masklen - ));
DESCR("netmask length");
-DATA(insert OID = 698 ( broadcast PGUID 11 f t t 1 f 25 "869" 100 0 0 100 network_broadcast - ));
+DATA(insert OID = 698 ( broadcast PGUID 11 f t t t 1 f 25 "869" 100 0 0 100 network_broadcast - ));
DESCR("broadcast address");
-DATA(insert OID = 699 ( host PGUID 11 f t t 1 f 25 "869" 100 0 0 100 network_host - ));
+DATA(insert OID = 699 ( host PGUID 11 f t t t 1 f 25 "869" 100 0 0 100 network_host - ));
DESCR("host address");
-DATA(insert OID = 683 ( network PGUID 11 f t t 1 f 25 "869" 100 0 0 100 network_network - ));
+DATA(insert OID = 683 ( network PGUID 11 f t t t 1 f 25 "869" 100 0 0 100 network_network - ));
DESCR("network address");
-DATA(insert OID = 1691 ( boolle PGUID 11 f t t 2 f 16 "16 16" 100 0 0 100 boolle - ));
+DATA(insert OID = 1691 ( boolle PGUID 11 f t t t 2 f 16 "16 16" 100 0 0 100 boolle - ));
DESCR("less-than-or-equal");
-DATA(insert OID = 1692 ( boolge PGUID 11 f t t 2 f 16 "16 16" 100 0 0 100 boolge - ));
+DATA(insert OID = 1692 ( boolge PGUID 11 f t t t 2 f 16 "16 16" 100 0 0 100 boolge - ));
DESCR("greater-than-or-equal");
-DATA(insert OID = 1693 ( btboolcmp PGUID 11 f t t 2 f 23 "16 16" 100 0 0 100 btboolcmp - ));
+DATA(insert OID = 1693 ( btboolcmp PGUID 11 f t t t 2 f 23 "16 16" 100 0 0 100 btboolcmp - ));
DESCR("btree less-equal-greater");
/* OID's 1700 - 1799 NUMERIC data type */
-DATA(insert OID = 1701 ( numeric_in PGUID 11 f t t 3 f 1700 "0 0 23" 100 0 0 100 numeric_in - ));
+DATA(insert OID = 1701 ( numeric_in PGUID 11 f t t t 3 f 1700 "0 0 23" 100 0 0 100 numeric_in - ));
DESCR("(internal)");
-DATA(insert OID = 1702 ( numeric_out PGUID 11 f t t 1 f 23 "0" 100 0 0 100 numeric_out - ));
+DATA(insert OID = 1702 ( numeric_out PGUID 11 f t t t 1 f 23 "0" 100 0 0 100 numeric_out - ));
DESCR("(internal)");
-DATA(insert OID = 1703 ( numeric PGUID 11 f t t 2 f 1700 "1700 23" 100 0 0 100 numeric - ));
+DATA(insert OID = 1703 ( numeric PGUID 11 f t t t 2 f 1700 "1700 23" 100 0 0 100 numeric - ));
DESCR("(internal)");
-DATA(insert OID = 1704 ( numeric_abs PGUID 11 f t t 1 f 1700 "1700" 100 0 0 100 numeric_abs - ));
+DATA(insert OID = 1704 ( numeric_abs PGUID 11 f t t t 1 f 1700 "1700" 100 0 0 100 numeric_abs - ));
DESCR("absolute value");
-DATA(insert OID = 1705 ( abs PGUID 11 f t t 1 f 1700 "1700" 100 0 0 100 numeric_abs - ));
+DATA(insert OID = 1705 ( abs PGUID 11 f t t t 1 f 1700 "1700" 100 0 0 100 numeric_abs - ));
DESCR("absolute value");
-DATA(insert OID = 1706 ( sign PGUID 11 f t t 1 f 1700 "1700" 100 0 0 100 numeric_sign - ));
+DATA(insert OID = 1706 ( sign PGUID 11 f t t t 1 f 1700 "1700" 100 0 0 100 numeric_sign - ));
DESCR("sign of value");
-DATA(insert OID = 1707 ( round PGUID 11 f t t 2 f 1700 "1700 23" 100 0 0 100 numeric_round - ));
+DATA(insert OID = 1707 ( round PGUID 11 f t t t 2 f 1700 "1700 23" 100 0 0 100 numeric_round - ));
DESCR("value rounded to 'scale'");
-DATA(insert OID = 1708 ( round PGUID 14 f t t 1 f 1700 "1700" 100 0 0 100 "select numeric_round($1,0)" - ));
+DATA(insert OID = 1708 ( round PGUID 14 f t t t 1 f 1700 "1700" 100 0 0 100 "select numeric_round($1,0)" - ));
DESCR("value rounded to 'scale' of zero");
-DATA(insert OID = 1709 ( trunc PGUID 11 f t t 2 f 1700 "1700 23" 100 0 0 100 numeric_trunc - ));
+DATA(insert OID = 1709 ( trunc PGUID 11 f t t t 2 f 1700 "1700 23" 100 0 0 100 numeric_trunc - ));
DESCR("value truncated to 'scale'");
-DATA(insert OID = 1710 ( trunc PGUID 14 f t t 1 f 1700 "1700" 100 0 0 100 "select trunc($1,0)" - ));
+DATA(insert OID = 1710 ( trunc PGUID 14 f t t t 1 f 1700 "1700" 100 0 0 100 "select trunc($1,0)" - ));
DESCR("value truncated to 'scale' of zero");
-DATA(insert OID = 1711 ( ceil PGUID 11 f t t 1 f 1700 "1700" 100 0 0 100 numeric_ceil - ));
+DATA(insert OID = 1711 ( ceil PGUID 11 f t t t 1 f 1700 "1700" 100 0 0 100 numeric_ceil - ));
DESCR("smallest integer >= value");
-DATA(insert OID = 1712 ( floor PGUID 11 f t t 1 f 1700 "1700" 100 0 0 100 numeric_floor - ));
+DATA(insert OID = 1712 ( floor PGUID 11 f t t t 1 f 1700 "1700" 100 0 0 100 numeric_floor - ));
DESCR("largest integer <= value");
-DATA(insert OID = 1718 ( numeric_eq PGUID 11 f t t 2 f 16 "1700 1700" 100 0 0 100 numeric_eq - ));
+DATA(insert OID = 1718 ( numeric_eq PGUID 11 f t t t 2 f 16 "1700 1700" 100 0 0 100 numeric_eq - ));
DESCR("equal");
-DATA(insert OID = 1719 ( numeric_ne PGUID 11 f t t 2 f 16 "1700 1700" 100 0 0 100 numeric_ne - ));
+DATA(insert OID = 1719 ( numeric_ne PGUID 11 f t t t 2 f 16 "1700 1700" 100 0 0 100 numeric_ne - ));
DESCR("not equal");
-DATA(insert OID = 1720 ( numeric_gt PGUID 11 f t t 2 f 16 "1700 1700" 100 0 0 100 numeric_gt - ));
+DATA(insert OID = 1720 ( numeric_gt PGUID 11 f t t t 2 f 16 "1700 1700" 100 0 0 100 numeric_gt - ));
DESCR("greater-than");
-DATA(insert OID = 1721 ( numeric_ge PGUID 11 f t t 2 f 16 "1700 1700" 100 0 0 100 numeric_ge - ));
+DATA(insert OID = 1721 ( numeric_ge PGUID 11 f t t t 2 f 16 "1700 1700" 100 0 0 100 numeric_ge - ));
DESCR("greater-than-or-equal");
-DATA(insert OID = 1722 ( numeric_lt PGUID 11 f t t 2 f 16 "1700 1700" 100 0 0 100 numeric_lt - ));
+DATA(insert OID = 1722 ( numeric_lt PGUID 11 f t t t 2 f 16 "1700 1700" 100 0 0 100 numeric_lt - ));
DESCR("lower-than");
-DATA(insert OID = 1723 ( numeric_le PGUID 11 f t t 2 f 16 "1700 1700" 100 0 0 100 numeric_le - ));
+DATA(insert OID = 1723 ( numeric_le PGUID 11 f t t t 2 f 16 "1700 1700" 100 0 0 100 numeric_le - ));
DESCR("lower-than-or-equal");
-DATA(insert OID = 1724 ( numeric_add PGUID 11 f t t 2 f 1700 "1700 1700" 100 0 0 100 numeric_add - ));
+DATA(insert OID = 1724 ( numeric_add PGUID 11 f t t t 2 f 1700 "1700 1700" 100 0 0 100 numeric_add - ));
DESCR("addition");
-DATA(insert OID = 1725 ( numeric_sub PGUID 11 f t t 2 f 1700 "1700 1700" 100 0 0 100 numeric_sub - ));
+DATA(insert OID = 1725 ( numeric_sub PGUID 11 f t t t 2 f 1700 "1700 1700" 100 0 0 100 numeric_sub - ));
DESCR("subtract");
-DATA(insert OID = 1726 ( numeric_mul PGUID 11 f t t 2 f 1700 "1700 1700" 100 0 0 100 numeric_mul - ));
+DATA(insert OID = 1726 ( numeric_mul PGUID 11 f t t t 2 f 1700 "1700 1700" 100 0 0 100 numeric_mul - ));
DESCR("multiply");
-DATA(insert OID = 1727 ( numeric_div PGUID 11 f t t 2 f 1700 "1700 1700" 100 0 0 100 numeric_div - ));
+DATA(insert OID = 1727 ( numeric_div PGUID 11 f t t t 2 f 1700 "1700 1700" 100 0 0 100 numeric_div - ));
DESCR("divide");
-DATA(insert OID = 1728 ( mod PGUID 11 f t t 2 f 1700 "1700 1700" 100 0 0 100 numeric_mod - ));
+DATA(insert OID = 1728 ( mod PGUID 11 f t t t 2 f 1700 "1700 1700" 100 0 0 100 numeric_mod - ));
DESCR("modulus");
-DATA(insert OID = 1729 ( numeric_mod PGUID 11 f t t 2 f 1700 "1700 1700" 100 0 0 100 numeric_mod - ));
+DATA(insert OID = 1729 ( numeric_mod PGUID 11 f t t t 2 f 1700 "1700 1700" 100 0 0 100 numeric_mod - ));
DESCR("modulus");
-DATA(insert OID = 1730 ( sqrt PGUID 11 f t t 1 f 1700 "1700" 100 0 0 100 numeric_sqrt - ));
+DATA(insert OID = 1730 ( sqrt PGUID 11 f t t t 1 f 1700 "1700" 100 0 0 100 numeric_sqrt - ));
DESCR("square root");
-DATA(insert OID = 1731 ( numeric_sqrt PGUID 11 f t t 1 f 1700 "1700" 100 0 0 100 numeric_sqrt - ));
+DATA(insert OID = 1731 ( numeric_sqrt PGUID 11 f t t t 1 f 1700 "1700" 100 0 0 100 numeric_sqrt - ));
DESCR("square root");
-DATA(insert OID = 1732 ( exp PGUID 11 f t t 1 f 1700 "1700" 100 0 0 100 numeric_exp - ));
+DATA(insert OID = 1732 ( exp PGUID 11 f t t t 1 f 1700 "1700" 100 0 0 100 numeric_exp - ));
DESCR("e raised to the power of n");
-DATA(insert OID = 1733 ( numeric_exp PGUID 11 f t t 1 f 1700 "1700" 100 0 0 100 numeric_exp - ));
+DATA(insert OID = 1733 ( numeric_exp PGUID 11 f t t t 1 f 1700 "1700" 100 0 0 100 numeric_exp - ));
DESCR("e raised to the power of n");
-DATA(insert OID = 1734 ( ln PGUID 11 f t t 1 f 1700 "1700" 100 0 0 100 numeric_ln - ));
+DATA(insert OID = 1734 ( ln PGUID 11 f t t t 1 f 1700 "1700" 100 0 0 100 numeric_ln - ));
DESCR("natural logarithm of n");
-DATA(insert OID = 1735 ( numeric_ln PGUID 11 f t t 1 f 1700 "1700" 100 0 0 100 numeric_ln - ));
+DATA(insert OID = 1735 ( numeric_ln PGUID 11 f t t t 1 f 1700 "1700" 100 0 0 100 numeric_ln - ));
DESCR("natural logarithm of n");
-DATA(insert OID = 1736 ( log PGUID 11 f t t 2 f 1700 "1700 1700" 100 0 0 100 numeric_log - ));
+DATA(insert OID = 1736 ( log PGUID 11 f t t t 2 f 1700 "1700 1700" 100 0 0 100 numeric_log - ));
DESCR("logarithm base m of n");
-DATA(insert OID = 1737 ( numeric_log PGUID 11 f t t 2 f 1700 "1700 1700" 100 0 0 100 numeric_log - ));
+DATA(insert OID = 1737 ( numeric_log PGUID 11 f t t t 2 f 1700 "1700 1700" 100 0 0 100 numeric_log - ));
DESCR("logarithm base m of n");
-DATA(insert OID = 1738 ( pow PGUID 11 f t t 2 f 1700 "1700 1700" 100 0 0 100 numeric_power - ));
+DATA(insert OID = 1738 ( pow PGUID 11 f t t t 2 f 1700 "1700 1700" 100 0 0 100 numeric_power - ));
DESCR("m raised to the power of n");
-DATA(insert OID = 1739 ( numeric_power PGUID 11 f t t 2 f 1700 "1700 1700" 100 0 0 100 numeric_power - ));
+DATA(insert OID = 1739 ( numeric_power PGUID 11 f t t t 2 f 1700 "1700 1700" 100 0 0 100 numeric_power - ));
DESCR("m raised to the power of n");
-DATA(insert OID = 1740 ( numeric PGUID 11 f t t 1 f 1700 "23" 100 0 0 100 int4_numeric - ));
+DATA(insert OID = 1740 ( numeric PGUID 11 f t t t 1 f 1700 "23" 100 0 0 100 int4_numeric - ));
DESCR("(internal)");
-DATA(insert OID = 1741 ( log PGUID 14 f t t 1 f 1700 "1700" 100 0 0 100 "select log(10, $1)" - ));
+DATA(insert OID = 1741 ( log PGUID 14 f t t t 1 f 1700 "1700" 100 0 0 100 "select log(10, $1)" - ));
DESCR("logarithm base 10 of n");
-DATA(insert OID = 1742 ( numeric PGUID 11 f t t 1 f 1700 "700" 100 0 0 100 float4_numeric - ));
+DATA(insert OID = 1742 ( numeric PGUID 11 f t t t 1 f 1700 "700" 100 0 0 100 float4_numeric - ));
DESCR("(internal)");
-DATA(insert OID = 1743 ( numeric PGUID 11 f t t 1 f 1700 "701" 100 0 0 100 float8_numeric - ));
+DATA(insert OID = 1743 ( numeric PGUID 11 f t t t 1 f 1700 "701" 100 0 0 100 float8_numeric - ));
DESCR("(internal)");
-DATA(insert OID = 1744 ( int4 PGUID 11 f t t 1 f 23 "1700" 100 0 0 100 numeric_int4 - ));
+DATA(insert OID = 1744 ( int4 PGUID 11 f t t t 1 f 23 "1700" 100 0 0 100 numeric_int4 - ));
DESCR("(internal)");
-DATA(insert OID = 1745 ( float4 PGUID 11 f t t 1 f 700 "1700" 100 0 0 100 numeric_float4 - ));
+DATA(insert OID = 1745 ( float4 PGUID 11 f t t t 1 f 700 "1700" 100 0 0 100 numeric_float4 - ));
DESCR("(internal)");
-DATA(insert OID = 1746 ( float8 PGUID 11 f t t 1 f 701 "1700" 100 0 0 100 numeric_float8 - ));
+DATA(insert OID = 1746 ( float8 PGUID 11 f t t t 1 f 701 "1700" 100 0 0 100 numeric_float8 - ));
DESCR("(internal)");
-DATA(insert OID = 1764 ( numeric_inc PGUID 11 f t t 1 f 1700 "1700" 100 0 0 100 numeric_inc - ));
+DATA(insert OID = 1764 ( numeric_inc PGUID 11 f t t t 1 f 1700 "1700" 100 0 0 100 numeric_inc - ));
DESCR("increment by one");
-DATA(insert OID = 1765 ( numeric_dec PGUID 11 f t t 1 f 1700 "1700" 100 0 0 100 numeric_dec - ));
+DATA(insert OID = 1765 ( numeric_dec PGUID 11 f t t t 1 f 1700 "1700" 100 0 0 100 numeric_dec - ));
DESCR("decrement by one");
-DATA(insert OID = 1766 ( numeric_smaller PGUID 11 f t t 2 f 1700 "1700 1700" 100 0 0 100 numeric_smaller - ));
+DATA(insert OID = 1766 ( numeric_smaller PGUID 11 f t t t 2 f 1700 "1700 1700" 100 0 0 100 numeric_smaller - ));
DESCR("smaller of two numbers");
-DATA(insert OID = 1767 ( numeric_larger PGUID 11 f t t 2 f 1700 "1700 1700" 100 0 0 100 numeric_larger - ));
+DATA(insert OID = 1767 ( numeric_larger PGUID 11 f t t t 2 f 1700 "1700 1700" 100 0 0 100 numeric_larger - ));
DESCR("larger of two numbers");
-DATA(insert OID = 1769 ( numeric_cmp PGUID 11 f t t 2 f 23 "1700 1700" 100 0 0 100 numeric_cmp - ));
+DATA(insert OID = 1769 ( numeric_cmp PGUID 11 f t t t 2 f 23 "1700 1700" 100 0 0 100 numeric_cmp - ));
DESCR("compare two numbers");
-DATA(insert OID = 1771 ( numeric_uminus PGUID 11 f t t 1 f 1700 "1700" 100 0 0 100 numeric_uminus - ));
+DATA(insert OID = 1771 ( numeric_uminus PGUID 11 f t t t 1 f 1700 "1700" 100 0 0 100 numeric_uminus - ));
DESCR("negate");
-DATA(insert OID = 1779 ( int8 PGUID 11 f t t 1 f 20 "1700" 100 0 0 100 numeric_int8 - ));
+DATA(insert OID = 1779 ( int8 PGUID 11 f t t t 1 f 20 "1700" 100 0 0 100 numeric_int8 - ));
DESCR("(internal)");
-DATA(insert OID = 1781 ( numeric PGUID 11 f t t 1 f 1700 "20" 100 0 0 100 int8_numeric - ));
+DATA(insert OID = 1781 ( numeric PGUID 11 f t t t 1 f 1700 "20" 100 0 0 100 int8_numeric - ));
DESCR("(internal)");
-DATA(insert OID = 1782 ( numeric PGUID 11 f t t 1 f 1700 "21" 100 0 0 100 int2_numeric - ));
+DATA(insert OID = 1782 ( numeric PGUID 11 f t t t 1 f 1700 "21" 100 0 0 100 int2_numeric - ));
DESCR("(internal)");
-DATA(insert OID = 1783 ( int2 PGUID 11 f t t 1 f 21 "1700" 100 0 0 100 numeric_int2 - ));
+DATA(insert OID = 1783 ( int2 PGUID 11 f t t t 1 f 21 "1700" 100 0 0 100 numeric_int2 - ));
DESCR("(internal)");
/* formatting */
-DATA(insert OID = 1770 ( to_char PGUID 11 f t f 2 f 25 "1184 25" 100 0 0 100 timestamp_to_char - ));
+DATA(insert OID = 1770 ( to_char PGUID 11 f t f t 2 f 25 "1184 25" 100 0 0 100 timestamp_to_char - ));
DESCR("format timestamp to text");
-DATA(insert OID = 1772 ( to_char PGUID 11 f t f 2 f 25 "1700 25" 100 0 0 100 numeric_to_char - ));
+DATA(insert OID = 1772 ( to_char PGUID 11 f t f t 2 f 25 "1700 25" 100 0 0 100 numeric_to_char - ));
DESCR("format numeric to text");
-DATA(insert OID = 1773 ( to_char PGUID 11 f t f 2 f 25 "23 25" 100 0 0 100 int4_to_char - ));
+DATA(insert OID = 1773 ( to_char PGUID 11 f t f t 2 f 25 "23 25" 100 0 0 100 int4_to_char - ));
DESCR("format int4 to text");
-DATA(insert OID = 1774 ( to_char PGUID 11 f t f 2 f 25 "20 25" 100 0 0 100 int8_to_char - ));
+DATA(insert OID = 1774 ( to_char PGUID 11 f t f t 2 f 25 "20 25" 100 0 0 100 int8_to_char - ));
DESCR("format int8 to text");
-DATA(insert OID = 1775 ( to_char PGUID 11 f t f 2 f 25 "700 25" 100 0 0 100 float4_to_char - ));
+DATA(insert OID = 1775 ( to_char PGUID 11 f t f t 2 f 25 "700 25" 100 0 0 100 float4_to_char - ));
DESCR("format float4 to text");
-DATA(insert OID = 1776 ( to_char PGUID 11 f t f 2 f 25 "701 25" 100 0 0 100 float8_to_char - ));
+DATA(insert OID = 1776 ( to_char PGUID 11 f t f t 2 f 25 "701 25" 100 0 0 100 float8_to_char - ));
DESCR("format float8 to text");
-DATA(insert OID = 1777 ( to_number PGUID 11 f t f 2 f 1700 "25 25" 100 0 0 100 numeric_to_number - ));
+DATA(insert OID = 1777 ( to_number PGUID 11 f t f t 2 f 1700 "25 25" 100 0 0 100 numeric_to_number - ));
DESCR("convert text to numeric");
-DATA(insert OID = 1778 ( to_timestamp PGUID 11 f t f 2 f 1184 "25 25" 100 0 0 100 to_timestamp - ));
+DATA(insert OID = 1778 ( to_timestamp PGUID 11 f t f t 2 f 1184 "25 25" 100 0 0 100 to_timestamp - ));
DESCR("convert text to timestamp");
-DATA(insert OID = 1780 ( to_date PGUID 11 f t f 2 f 1082 "25 25" 100 0 0 100 to_date - ));
+DATA(insert OID = 1780 ( to_date PGUID 11 f t f t 2 f 1082 "25 25" 100 0 0 100 to_date - ));
DESCR("convert text to date");
/* Selectivity estimators for LIKE and related operators */
-DATA(insert OID = 1818 ( regexeqsel PGUID 11 f t f 5 f 701 "26 26 21 0 23" 100 0 0 100 regexeqsel - ));
+DATA(insert OID = 1818 ( regexeqsel PGUID 11 f t f t 5 f 701 "26 26 21 0 23" 100 0 0 100 regexeqsel - ));
DESCR("restriction selectivity of regex match");
-DATA(insert OID = 1819 ( likesel PGUID 11 f t f 5 f 701 "26 26 21 0 23" 100 0 0 100 likesel - ));
+DATA(insert OID = 1819 ( likesel PGUID 11 f t f t 5 f 701 "26 26 21 0 23" 100 0 0 100 likesel - ));
DESCR("restriction selectivity of LIKE");
-DATA(insert OID = 1820 ( icregexeqsel PGUID 11 f t f 5 f 701 "26 26 21 0 23" 100 0 0 100 icregexeqsel - ));
+DATA(insert OID = 1820 ( icregexeqsel PGUID 11 f t f t 5 f 701 "26 26 21 0 23" 100 0 0 100 icregexeqsel - ));
DESCR("restriction selectivity of case-insensitive regex match");
-DATA(insert OID = 1821 ( regexnesel PGUID 11 f t f 5 f 701 "26 26 21 0 23" 100 0 0 100 regexnesel - ));
+DATA(insert OID = 1821 ( regexnesel PGUID 11 f t f t 5 f 701 "26 26 21 0 23" 100 0 0 100 regexnesel - ));
DESCR("restriction selectivity of regex non-match");
-DATA(insert OID = 1822 ( nlikesel PGUID 11 f t f 5 f 701 "26 26 21 0 23" 100 0 0 100 nlikesel - ));
+DATA(insert OID = 1822 ( nlikesel PGUID 11 f t f t 5 f 701 "26 26 21 0 23" 100 0 0 100 nlikesel - ));
DESCR("restriction selectivity of NOT LIKE");
-DATA(insert OID = 1823 ( icregexnesel PGUID 11 f t f 5 f 701 "26 26 21 0 23" 100 0 0 100 icregexnesel - ));
+DATA(insert OID = 1823 ( icregexnesel PGUID 11 f t f t 5 f 701 "26 26 21 0 23" 100 0 0 100 icregexnesel - ));
DESCR("restriction selectivity of case-insensitive regex non-match");
-DATA(insert OID = 1824 ( regexeqjoinsel PGUID 11 f t f 5 f 701 "26 26 21 26 21" 100 0 0 100 regexeqjoinsel - ));
+DATA(insert OID = 1824 ( regexeqjoinsel PGUID 11 f t f t 5 f 701 "26 26 21 26 21" 100 0 0 100 regexeqjoinsel - ));
DESCR("join selectivity of regex match");
-DATA(insert OID = 1825 ( likejoinsel PGUID 11 f t f 5 f 701 "26 26 21 26 21" 100 0 0 100 likejoinsel - ));
+DATA(insert OID = 1825 ( likejoinsel PGUID 11 f t f t 5 f 701 "26 26 21 26 21" 100 0 0 100 likejoinsel - ));
DESCR("join selectivity of LIKE");
-DATA(insert OID = 1826 ( icregexeqjoinsel PGUID 11 f t f 5 f 701 "26 26 21 26 21" 100 0 0 100 icregexeqjoinsel - ));
+DATA(insert OID = 1826 ( icregexeqjoinsel PGUID 11 f t f t 5 f 701 "26 26 21 26 21" 100 0 0 100 icregexeqjoinsel - ));
DESCR("join selectivity of case-insensitive regex match");
-DATA(insert OID = 1827 ( regexnejoinsel PGUID 11 f t f 5 f 701 "26 26 21 26 21" 100 0 0 100 regexnejoinsel - ));
+DATA(insert OID = 1827 ( regexnejoinsel PGUID 11 f t f t 5 f 701 "26 26 21 26 21" 100 0 0 100 regexnejoinsel - ));
DESCR("join selectivity of regex non-match");
-DATA(insert OID = 1828 ( nlikejoinsel PGUID 11 f t f 5 f 701 "26 26 21 26 21" 100 0 0 100 nlikejoinsel - ));
+DATA(insert OID = 1828 ( nlikejoinsel PGUID 11 f t f t 5 f 701 "26 26 21 26 21" 100 0 0 100 nlikejoinsel - ));
DESCR("join selectivity of NOT LIKE");
-DATA(insert OID = 1829 ( icregexnejoinsel PGUID 11 f t f 5 f 701 "26 26 21 26 21" 100 0 0 100 icregexnejoinsel - ));
+DATA(insert OID = 1829 ( icregexnejoinsel PGUID 11 f t f t 5 f 701 "26 26 21 26 21" 100 0 0 100 icregexnejoinsel - ));
DESCR("join selectivity of case-insensitive regex non-match");
@@ -2472,8 +2475,9 @@ extern Oid ProcedureCreate(char *procedureName,
char *languageName,
char *prosrc,
char *probin,
- bool canCache,
bool trusted,
+ bool canCache,
+ bool isStrict,
int32 byte_pct,
int32 perbyte_cpu,
int32 percall_cpu,
diff --git a/src/include/executor/functions.h b/src/include/executor/functions.h
index 1c64712ebe3..26f2daac535 100644
--- a/src/include/executor/functions.h
+++ b/src/include/executor/functions.h
@@ -7,7 +7,7 @@
* Portions Copyright (c) 1996-2000, PostgreSQL, Inc
* Portions Copyright (c) 1994, Regents of the University of California
*
- * $Id: functions.h,v 1.11 2000/01/26 05:58:05 momjian Exp $
+ * $Id: functions.h,v 1.12 2000/05/28 17:56:18 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -18,9 +18,11 @@
#include "utils/syscache.h"
extern Datum ProjectAttribute(TupleDesc TD, TargetEntry *tlist,
- HeapTuple tup, bool *isnullP);
+ HeapTuple tup, bool *isnullP);
-extern Datum postquel_function(Func *funcNode, char **args,
- bool *isNull, bool *isDone);
+extern Datum postquel_function(FunctionCallInfo fcinfo,
+ FunctionCachePtr fcache,
+ List *func_tlist,
+ bool *isDone);
#endif /* FUNCTIONS_H */
diff --git a/src/include/fmgr.h b/src/include/fmgr.h
new file mode 100644
index 00000000000..18b01f7fad1
--- /dev/null
+++ b/src/include/fmgr.h
@@ -0,0 +1,301 @@
+/*-------------------------------------------------------------------------
+ *
+ * fmgr.h
+ * Definitions for the Postgres function manager and function-call
+ * interface.
+ *
+ * This file must be included by all Postgres modules that either define
+ * or call fmgr-callable functions.
+ *
+ *
+ * Portions Copyright (c) 1996-2000, PostgreSQL, Inc
+ * Portions Copyright (c) 1994, Regents of the University of California
+ *
+ * $Id: fmgr.h,v 1.1 2000/05/28 17:56:12 tgl Exp $
+ *
+ *-------------------------------------------------------------------------
+ */
+#ifndef FMGR_H
+#define FMGR_H
+
+
+/*
+ * All functions that can be called directly by fmgr must have this signature.
+ * (Other functions can be called by using a handler that does have this
+ * signature.)
+ */
+
+typedef struct FunctionCallInfoData *FunctionCallInfo;
+
+typedef Datum (*PGFunction) (FunctionCallInfo fcinfo);
+
+/*
+ * This struct holds the system-catalog information that must be looked up
+ * before a function can be called through fmgr. If the same function is
+ * to be called multiple times, the lookup need be done only once and the
+ * info struct saved for re-use.
+ */
+typedef struct
+{
+ PGFunction fn_addr; /* pointer to function or handler to be called */
+ Oid fn_oid; /* OID of function (NOT of handler, if any) */
+ short fn_nargs; /* 0..FUNC_MAX_ARGS, or -1 if variable arg count */
+ bool fn_strict; /* function is "strict" (NULL in => NULL out) */
+ void *fn_extra; /* extra space for use by handler */
+} FmgrInfo;
+
+/*
+ * This struct is the data actually passed to an fmgr-called function.
+ */
+typedef struct FunctionCallInfoData
+{
+ FmgrInfo *flinfo; /* ptr to lookup info used for this call */
+ struct Node *context; /* pass info about context of call */
+ struct Node *resultinfo; /* pass or return extra info about result */
+ bool isnull; /* function must set true if result is NULL */
+ short nargs; /* # arguments actually passed */
+ Datum arg[FUNC_MAX_ARGS]; /* Arguments passed to function */
+ bool argnull[FUNC_MAX_ARGS]; /* T if arg[i] is actually NULL */
+} FunctionCallInfoData;
+
+/*
+ * This routine fills a FmgrInfo struct, given the OID
+ * of the function to be called.
+ */
+extern void fmgr_info(Oid functionId, FmgrInfo *finfo);
+
+/*
+ * This macro invokes a function given a filled-in FunctionCallInfoData
+ * struct. The macro result is the returned Datum --- but note that
+ * caller must still check fcinfo->isnull! Also, if function is strict,
+ * it is caller's responsibility to verify that no null arguments are present
+ * before calling.
+ */
+#define FunctionCallInvoke(fcinfo) ((* (fcinfo)->flinfo->fn_addr) (fcinfo))
+
+
+/*-------------------------------------------------------------------------
+ * Support macros to ease writing fmgr-compatible functions
+ *
+ * A C-coded fmgr-compatible function should be declared as
+ *
+ * Datum
+ * function_name(PG_FUNCTION_ARGS)
+ * {
+ * ...
+ * }
+ *
+ * It should access its arguments using appropriate PG_GETARG_xxx macros
+ * and should return its result using PG_RETURN_xxx.
+ *
+ *-------------------------------------------------------------------------
+ */
+
+/* Standard parameter list for fmgr-compatible functions */
+#define PG_FUNCTION_ARGS FunctionCallInfo fcinfo
+
+/* If function is not marked "proisstrict" in pg_proc, it must check for
+ * null arguments using this macro. Do not try to GETARG a null argument!
+ */
+#define PG_ARGISNULL(n) (fcinfo->argnull[n])
+
+/* Macros for fetching arguments of standard types */
+
+#define PG_GETARG_INT32(n) DatumGetInt32(fcinfo->arg[n])
+#define PG_GETARG_INT16(n) DatumGetInt16(fcinfo->arg[n])
+#define PG_GETARG_CHAR(n) DatumGetChar(fcinfo->arg[n])
+#define PG_GETARG_BOOL(n) DatumGetBool(fcinfo->arg[n])
+#define PG_GETARG_OID(n) DatumGetObjectId(fcinfo->arg[n])
+#define PG_GETARG_POINTER(n) DatumGetPointer(fcinfo->arg[n])
+/* these macros hide the pass-by-reference-ness of the datatype: */
+#define PG_GETARG_FLOAT4(n) DatumGetFloat4(fcinfo->arg[n])
+#define PG_GETARG_FLOAT8(n) DatumGetFloat8(fcinfo->arg[n])
+#define PG_GETARG_INT64(n) DatumGetInt64(fcinfo->arg[n])
+/* use this if you want the raw, possibly-toasted input datum: */
+#define PG_GETARG_RAW_VARLENA_P(n) ((struct varlena *) PG_GETARG_POINTER(n))
+/* use this if you want the input datum de-toasted: */
+#define PG_GETARG_VARLENA_P(n) \
+ (VARATT_IS_EXTENDED(PG_GETARG_RAW_VARLENA_P(n)) ? \
+ (struct varlena *) heap_tuple_untoast_attr((varattrib *) PG_GETARG_RAW_VARLENA_P(n)) : \
+ PG_GETARG_RAW_VARLENA_P(n))
+/* GETARG macros for varlena types will typically look like this: */
+#define PG_GETARG_TEXT_P(n) ((text *) PG_GETARG_VARLENA_P(n))
+
+/* To return a NULL do this: */
+#define PG_RETURN_NULL() \
+ do { fcinfo->isnull = true; return (Datum) 0; } while (0)
+
+/* Macros for returning results of standard types */
+
+#define PG_RETURN_INT32(x) return Int32GetDatum(x)
+#define PG_RETURN_INT16(x) return Int16GetDatum(x)
+#define PG_RETURN_CHAR(x) return CharGetDatum(x)
+#define PG_RETURN_BOOL(x) return BoolGetDatum(x)
+#define PG_RETURN_OID(x) return ObjectIdGetDatum(x)
+#define PG_RETURN_POINTER(x) return PointerGetDatum(x)
+/* these macros hide the pass-by-reference-ness of the datatype: */
+#define PG_RETURN_FLOAT4(x) return Float4GetDatum(x)
+#define PG_RETURN_FLOAT8(x) return Float8GetDatum(x)
+#define PG_RETURN_INT64(x) return Int64GetDatum(x)
+/* RETURN macros for other pass-by-ref types will typically look like this: */
+#define PG_RETURN_TEXT_P(x) PG_RETURN_POINTER(x)
+
+
+/*-------------------------------------------------------------------------
+ * Support routines and macros for callers of fmgr-compatible functions
+ *-------------------------------------------------------------------------
+ */
+
+/* These are for invocation of a specifically named function with a
+ * directly-computed parameter list. Note that neither arguments nor result
+ * are allowed to be NULL.
+ */
+extern Datum DirectFunctionCall1(PGFunction func, Datum arg1);
+extern Datum DirectFunctionCall2(PGFunction func, Datum arg1, Datum arg2);
+extern Datum DirectFunctionCall3(PGFunction func, Datum arg1, Datum arg2,
+ Datum arg3);
+extern Datum DirectFunctionCall4(PGFunction func, Datum arg1, Datum arg2,
+ Datum arg3, Datum arg4);
+extern Datum DirectFunctionCall5(PGFunction func, Datum arg1, Datum arg2,
+ Datum arg3, Datum arg4, Datum arg5);
+extern Datum DirectFunctionCall6(PGFunction func, Datum arg1, Datum arg2,
+ Datum arg3, Datum arg4, Datum arg5,
+ Datum arg6);
+extern Datum DirectFunctionCall7(PGFunction func, Datum arg1, Datum arg2,
+ Datum arg3, Datum arg4, Datum arg5,
+ Datum arg6, Datum arg7);
+extern Datum DirectFunctionCall8(PGFunction func, Datum arg1, Datum arg2,
+ Datum arg3, Datum arg4, Datum arg5,
+ Datum arg6, Datum arg7, Datum arg8);
+extern Datum DirectFunctionCall9(PGFunction func, Datum arg1, Datum arg2,
+ Datum arg3, Datum arg4, Datum arg5,
+ Datum arg6, Datum arg7, Datum arg8,
+ Datum arg9);
+
+/* These are for invocation of a previously-looked-up function with a
+ * directly-computed parameter list. Note that neither arguments nor result
+ * are allowed to be NULL.
+ */
+extern Datum FunctionCall1(FmgrInfo *flinfo, Datum arg1);
+extern Datum FunctionCall2(FmgrInfo *flinfo, Datum arg1, Datum arg2);
+extern Datum FunctionCall3(FmgrInfo *flinfo, Datum arg1, Datum arg2,
+ Datum arg3);
+extern Datum FunctionCall4(FmgrInfo *flinfo, Datum arg1, Datum arg2,
+ Datum arg3, Datum arg4);
+extern Datum FunctionCall5(FmgrInfo *flinfo, Datum arg1, Datum arg2,
+ Datum arg3, Datum arg4, Datum arg5);
+extern Datum FunctionCall6(FmgrInfo *flinfo, Datum arg1, Datum arg2,
+ Datum arg3, Datum arg4, Datum arg5,
+ Datum arg6);
+extern Datum FunctionCall7(FmgrInfo *flinfo, Datum arg1, Datum arg2,
+ Datum arg3, Datum arg4, Datum arg5,
+ Datum arg6, Datum arg7);
+extern Datum FunctionCall8(FmgrInfo *flinfo, Datum arg1, Datum arg2,
+ Datum arg3, Datum arg4, Datum arg5,
+ Datum arg6, Datum arg7, Datum arg8);
+extern Datum FunctionCall9(FmgrInfo *flinfo, Datum arg1, Datum arg2,
+ Datum arg3, Datum arg4, Datum arg5,
+ Datum arg6, Datum arg7, Datum arg8,
+ Datum arg9);
+
+/* These are for invocation of a function identified by OID with a
+ * directly-computed parameter list. Note that neither arguments nor result
+ * are allowed to be NULL. These are essentially FunctionLookup() followed
+ * by FunctionCallN(). If the same function is to be invoked repeatedly,
+ * do the FunctionLookup() once and then use FunctionCallN().
+ */
+extern Datum OidFunctionCall1(Oid functionId, Datum arg1);
+extern Datum OidFunctionCall2(Oid functionId, Datum arg1, Datum arg2);
+extern Datum OidFunctionCall3(Oid functionId, Datum arg1, Datum arg2,
+ Datum arg3);
+extern Datum OidFunctionCall4(Oid functionId, Datum arg1, Datum arg2,
+ Datum arg3, Datum arg4);
+extern Datum OidFunctionCall5(Oid functionId, Datum arg1, Datum arg2,
+ Datum arg3, Datum arg4, Datum arg5);
+extern Datum OidFunctionCall6(Oid functionId, Datum arg1, Datum arg2,
+ Datum arg3, Datum arg4, Datum arg5,
+ Datum arg6);
+extern Datum OidFunctionCall7(Oid functionId, Datum arg1, Datum arg2,
+ Datum arg3, Datum arg4, Datum arg5,
+ Datum arg6, Datum arg7);
+extern Datum OidFunctionCall8(Oid functionId, Datum arg1, Datum arg2,
+ Datum arg3, Datum arg4, Datum arg5,
+ Datum arg6, Datum arg7, Datum arg8);
+extern Datum OidFunctionCall9(Oid functionId, Datum arg1, Datum arg2,
+ Datum arg3, Datum arg4, Datum arg5,
+ Datum arg6, Datum arg7, Datum arg8,
+ Datum arg9);
+
+
+/*
+ * Routines in fmgr.c
+ */
+extern Oid fmgr_internal_language(const char *proname);
+
+/*
+ * Routines in dfmgr.c
+ */
+extern PGFunction fmgr_dynamic(Oid functionId);
+extern PGFunction load_external_function(char *filename, char *funcname);
+extern void load_file(char *filename);
+
+
+/*-------------------------------------------------------------------------
+ *
+ * !!! OLD INTERFACE !!!
+ *
+ * All the definitions below here are associated with the old fmgr API.
+ * They will go away as soon as we have converted all call points to use
+ * the new API. Note that old-style callee functions do not depend on
+ * these definitions, so we don't need to have converted all of them before
+ * dropping the old API ... just all the old-style call points.
+ *
+ *-------------------------------------------------------------------------
+ */
+
+/* ptr to func returning (char *) */
+#if defined(__mc68000__) && defined(__ELF__)
+/* The m68k SVR4 ABI defines that pointers are returned in %a0 instead of
+ * %d0. So if a function pointer is declared to return a pointer, the
+ * compiler may look only into %a0, but if the called function was declared
+ * to return return an integer type, it puts its value only into %d0. So the
+ * caller doesn't pink up the correct return value. The solution is to
+ * declare the function pointer to return int, so the compiler picks up the
+ * return value from %d0. (Functions returning pointers put their value
+ * *additionally* into %d0 for compability.) The price is that there are
+ * some warnings about int->pointer conversions...
+ */
+typedef int32 ((*func_ptr) ());
+#else
+typedef char *((*func_ptr) ());
+#endif
+
+typedef struct {
+ char *data[FUNC_MAX_ARGS];
+} FmgrValues;
+
+/*
+ * defined in fmgr.c
+ */
+extern char *fmgr(Oid procedureId, ... );
+extern char *fmgr_faddr_link(char *arg0, ...);
+
+/*
+ * Macros for calling through the result of fmgr_info.
+ */
+
+/* We don't make this static so fmgr_faddr() macros can access it */
+extern FmgrInfo *fmgr_pl_finfo;
+
+#define fmgr_faddr(finfo) (fmgr_pl_finfo = (finfo), (func_ptr) fmgr_faddr_link)
+
+#define FMGR_PTR2(FINFO, ARG1, ARG2) ((*(fmgr_faddr(FINFO))) (ARG1, ARG2))
+
+/*
+ * Flags for the builtin oprrest selectivity routines.
+ * XXX These do not belong here ... put 'em in some planner/optimizer header.
+ */
+#define SEL_CONSTANT 1 /* operator's non-var arg is a constant */
+#define SEL_RIGHT 2 /* operator's non-var arg is on the right */
+
+#endif /* FMGR_H */
diff --git a/src/include/postgres.h b/src/include/postgres.h
index 0d16c553527..ee02a3c0c38 100644
--- a/src/include/postgres.h
+++ b/src/include/postgres.h
@@ -7,7 +7,7 @@
* Portions Copyright (c) 1996-2000, PostgreSQL, Inc
* Portions Copyright (c) 1995, Regents of the University of California
*
- * $Id: postgres.h,v 1.38 2000/04/12 17:16:24 momjian Exp $
+ * $Id: postgres.h,v 1.39 2000/05/28 17:56:12 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -47,11 +47,6 @@
* ----------------------------------------------------------------
*/
-typedef int16 int2;
-typedef int32 int4;
-typedef float float4;
-typedef double float8;
-
typedef int4 aclitem;
#define InvalidOid 0
@@ -61,26 +56,6 @@ typedef int4 aclitem;
typedef Oid regproc;
typedef Oid RegProcedure;
-/* ptr to func returning (char *) */
-#if defined(__mc68000__) && defined(__ELF__)
-/* The m68k SVR4 ABI defines that pointers are returned in %a0 instead of
- * %d0. So if a function pointer is declared to return a pointer, the
- * compiler may look only into %a0, but if the called function was declared
- * to return return an integer type, it puts its value only into %d0. So the
- * caller doesn't pink up the correct return value. The solution is to
- * declare the function pointer to return int, so the compiler picks up the
- * return value from %d0. (Functions returning pointers put their value
- * *additionally* into %d0 for compability.) The price is that there are
- * some warnings about int->pointer conversions...
- */
-typedef int32 ((*func_ptr) ());
-
-#else
-typedef char *((*func_ptr) ());
-
-#endif
-
-
#define RegProcedureIsValid(p) OidIsValid(p)
/* ----------------------------------------------------------------
diff --git a/src/include/utils/dynamic_loader.h b/src/include/utils/dynamic_loader.h
index a83baae40eb..535d5c6d3ac 100644
--- a/src/include/utils/dynamic_loader.h
+++ b/src/include/utils/dynamic_loader.h
@@ -7,7 +7,7 @@
* Portions Copyright (c) 1996-2000, PostgreSQL, Inc
* Portions Copyright (c) 1994, Regents of the University of California
*
- * $Id: dynamic_loader.h,v 1.14 2000/01/26 05:58:37 momjian Exp $
+ * $Id: dynamic_loader.h,v 1.15 2000/05/28 17:56:20 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -19,26 +19,12 @@
/* we need this include because port files use them */
#include "postgres.h"
-#ifdef MIN
-#undef MIN
-#undef MAX
-#endif /* MIN */
+/* and this one for typedef PGFunction */
+#include "fmgr.h"
-/*
- * List of dynamically loaded files.
- */
-
-typedef struct df_files
-{
- char filename[MAXPGPATH]; /* Full pathname of file */
- dev_t device; /* Device file is on */
- ino_t inode; /* Inode number of file */
- void *handle; /* a handle for pg_dl* functions */
- struct df_files *next;
-} DynamicFileList;
extern void *pg_dlopen(char *filename);
-extern func_ptr pg_dlsym(void *handle, char *funcname);
+extern PGFunction pg_dlsym(void *handle, char *funcname);
extern void pg_dlclose(void *handle);
extern char *pg_dlerror(void);
diff --git a/src/include/utils/fcache.h b/src/include/utils/fcache.h
index 24e6db1f0c8..db3a05baf4b 100644
--- a/src/include/utils/fcache.h
+++ b/src/include/utils/fcache.h
@@ -7,7 +7,7 @@
* Portions Copyright (c) 1996-2000, PostgreSQL, Inc
* Portions Copyright (c) 1994, Regents of the University of California
*
- * $Id: fcache.h,v 1.10 2000/01/26 05:58:38 momjian Exp $
+ * $Id: fcache.h,v 1.11 2000/05/28 17:56:20 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -19,22 +19,11 @@
typedef struct
{
- int typlen; /* length of the return type */
- int typbyval; /* true if return type is pass by value */
- FmgrInfo func; /* address of function to call (for c
- * funcs) */
+ FmgrInfo func; /* info for fmgr call mechanism */
Oid foid; /* oid of the function in pg_proc */
Oid language; /* oid of the language in pg_language */
- int nargs; /* number of arguments */
-
- /* Might want to make these two arrays of size MAXFUNCARGS */
-
- Oid *argOidVect; /* oids of all the arguments */
- bool *nullVect; /* keep track of null arguments */
-
- char *src; /* source code of the function */
- char *bin; /* binary object code ?? */
- char *func_state; /* fuction_state struct for execution */
+ int typlen; /* length of the return type */
+ bool typbyval; /* true if return type is pass by value */
bool oneResult; /* true we only want 1 result from the
* function */
@@ -42,17 +31,23 @@ typedef struct
* expr whose argument is func returning a
* set ugh! */
+ int nargs; /* actual number of arguments */
+ Oid *argOidVect; /* oids of all the argument types */
+
+ char *src; /* source code of the function */
+ char *bin; /* binary object code ?? */
+ char *func_state; /* function_state struct for execution */
+
Pointer funcSlot; /* if one result we need to copy it before
* we end execution of the function and
* free stuff */
- char *setArg; /* current argument for nested dot
+ Datum setArg; /* current argument for nested dot
* execution Nested dot expressions mean
* we have funcs whose argument is a set
* of tuples */
+} FunctionCache;
- bool istrusted; /* trusted fn? */
-} FunctionCache,
- *FunctionCachePtr;
+typedef FunctionCache *FunctionCachePtr;
#endif /* FCACHE_H */
diff --git a/src/include/utils/fmgrtab.h b/src/include/utils/fmgrtab.h
index 21e28904d53..e6cfe519650 100644
--- a/src/include/utils/fmgrtab.h
+++ b/src/include/utils/fmgrtab.h
@@ -1,30 +1,39 @@
/*-------------------------------------------------------------------------
*
* fmgrtab.h
- *
- *
+ * The function manager's table of internal functions.
*
* Portions Copyright (c) 1996-2000, PostgreSQL, Inc
* Portions Copyright (c) 1994, Regents of the University of California
*
- * $Id: fmgrtab.h,v 1.12 2000/01/26 05:58:38 momjian Exp $
+ * $Id: fmgrtab.h,v 1.13 2000/05/28 17:56:20 tgl Exp $
*
*-------------------------------------------------------------------------
*/
#ifndef FMGRTAB_H
#define FMGRTAB_H
+#include "fmgr.h"
+
+
+/*
+ * This table stores info about all the built-in functions (ie, functions
+ * that are compiled into the Postgres executable). The table entries are
+ * required to appear in Oid order, so that binary search can be used.
+ */
typedef struct
{
- Oid proid;
- int nargs;
- func_ptr func;
- char *funcName;
-} FmgrCall;
+ Oid foid; /* OID of the function */
+ const char *funcName; /* C name of the function */
+ short nargs; /* 0..FUNC_MAX_ARGS, or -1 if variable count */
+ bool strict; /* T if function is "strict" */
+ bool oldstyle; /* T if function uses old fmgr interface */
+ PGFunction func; /* pointer to compiled function */
+} FmgrBuiltin;
+
+extern const FmgrBuiltin fmgr_builtins[];
-extern FmgrCall *fmgr_isbuiltin(Oid id);
-extern func_ptr fmgr_lookupByName(char *name);
-extern void load_file(char *filename);
+extern const int fmgr_nbuiltins; /* number of entries in table */
#endif /* FMGRTAB_H */
diff --git a/src/include/utils/int8.h b/src/include/utils/int8.h
index dab1e0addd1..b8ad531ab28 100644
--- a/src/include/utils/int8.h
+++ b/src/include/utils/int8.h
@@ -7,7 +7,7 @@
* Portions Copyright (c) 1996-2000, PostgreSQL, Inc
* Portions Copyright (c) 1994, Regents of the University of California
*
- * $Id: int8.h,v 1.20 2000/04/12 17:16:55 momjian Exp $
+ * $Id: int8.h,v 1.21 2000/05/28 17:56:20 tgl Exp $
*
* NOTES
* These data types are supported on all 64-bit architectures, and may
@@ -24,28 +24,6 @@
#ifndef INT8_H
#define INT8_H
-#ifdef HAVE_LONG_INT_64
-/* Plain "long int" fits, use it */
-typedef long int int64;
-
-#else
-#ifdef HAVE_LONG_LONG_INT_64
-/* We have working support for "long long int", use that */
-typedef long long int int64;
-
-#else
-/* Won't actually work, but fall back to long int so that int8.c compiles */
-typedef long int int64;
-
-#define INT64_IS_BUSTED
-#endif
-#endif
-
-/* this should be set in config.h: */
-#ifndef INT64_FORMAT
-#define INT64_FORMAT "%ld"
-#endif
-
extern int64 *int8in(char *str);
extern char *int8out(int64 *val);
diff --git a/src/interfaces/libpq/Makefile.in b/src/interfaces/libpq/Makefile.in
index 7e384345929..a5c43a45124 100644
--- a/src/interfaces/libpq/Makefile.in
+++ b/src/interfaces/libpq/Makefile.in
@@ -6,7 +6,7 @@
# Copyright (c) 1994, Regents of the University of California
#
# IDENTIFICATION
-# $Header: /cvsroot/pgsql/src/interfaces/libpq/Attic/Makefile.in,v 1.57 2000/05/27 04:13:05 momjian Exp $
+# $Header: /cvsroot/pgsql/src/interfaces/libpq/Attic/Makefile.in,v 1.58 2000/05/28 17:56:25 tgl Exp $
#
#-------------------------------------------------------------------------
@@ -70,15 +70,6 @@ big5.c: $(SRCDIR)/backend/utils/mb/big5.c
endif
-# The following rules cause dependencies in the backend directory to
-# get made if they don't exist, but don't cause them to get remade if they
-# are out of date.
-fe-lobj.o: $(SRCDIR)/backend/fmgr.h
-
-$(SRCDIR)/backend/fmgr.h:
- $(MAKE) -C $(SRCDIR)/backend fmgr.h
-
-
.PHONY: install install-headers
install: install-headers install-lib $(install-shlib-dep)
diff --git a/src/pl/plperl/plperl.c b/src/pl/plperl/plperl.c
index 86ffbb265f9..b440be12de8 100644
--- a/src/pl/plperl/plperl.c
+++ b/src/pl/plperl/plperl.c
@@ -32,6 +32,9 @@
* OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES,
* ENHANCEMENTS, OR MODIFICATIONS.
*
+ * IDENTIFICATION
+ * $Header: /cvsroot/pgsql/src/pl/plperl/plperl.c,v 1.7 2000/05/28 17:56:26 tgl Exp $
+ *
**********************************************************************/
@@ -130,17 +133,15 @@ static Tcl_HashTable *plperl_query_hash = NULL;
static void plperl_init_all(void);
static void plperl_init_safe_interp(void);
-Datum plperl_call_handler(FmgrInfo *proinfo,
- FmgrValues *proargs, bool *isNull);
+Datum plperl_call_handler(PG_FUNCTION_ARGS);
-static Datum plperl_func_handler(FmgrInfo *proinfo,
- FmgrValues *proargs, bool *isNull);
+static Datum plperl_func_handler(PG_FUNCTION_ARGS);
static SV *plperl_build_tuple_argument(HeapTuple tuple, TupleDesc tupdesc);
static void plperl_init_shared_libs(void);
#ifdef REALLYHAVEITONTHEBALL
-static HeapTuple plperl_trigger_handler(FmgrInfo *proinfo);
+static HeapTuple plperl_trigger_handler(PG_FUNCTION_ARGS);
static int plperl_elog(ClientData cdata, Tcl_Interp *interp,
int argc, char *argv[]);
@@ -258,9 +259,7 @@ plperl_init_safe_interp(void)
/* keep non-static */
Datum
-plperl_call_handler(FmgrInfo *proinfo,
- FmgrValues *proargs,
- bool *isNull)
+plperl_call_handler(PG_FUNCTION_ARGS)
{
Datum retval;
@@ -285,13 +284,13 @@ plperl_call_handler(FmgrInfo *proinfo,
* call appropriate subhandler
************************************************************/
if (CurrentTriggerData == NULL)
- retval = plperl_func_handler(proinfo, proargs, isNull);
+ retval = plperl_func_handler(fcinfo);
else
{
elog(ERROR, "plperl: can't use perl in triggers yet.");
/*
- * retval = (Datum) plperl_trigger_handler(proinfo);
+ * retval = (Datum) plperl_trigger_handler(fcinfo);
*/
/* make the compiler happy */
retval = (Datum) 0;
@@ -390,7 +389,7 @@ plperl_init_shared_libs(void)
**********************************************************************/
static
SV *
-plperl_call_perl_func(plperl_proc_desc * desc, FmgrValues *pargs)
+plperl_call_perl_func(plperl_proc_desc * desc, FunctionCallInfo fcinfo)
{
dSP;
@@ -407,25 +406,34 @@ plperl_call_perl_func(plperl_proc_desc * desc, FmgrValues *pargs)
{
if (desc->arg_is_rel[i])
{
+ TupleTableSlot *slot = (TupleTableSlot *) fcinfo->arg[i];
+ SV *hashref;
+ Assert(slot != NULL && ! fcinfo->argnull[i]);
/*
* plperl_build_tuple_argument better return a mortal SV.
*/
- SV *hashref = plperl_build_tuple_argument(
- ((TupleTableSlot *) (pargs->data[i]))->val,
- ((TupleTableSlot *) (pargs->data[i]))->ttc_tupleDescriptor);
-
+ hashref = plperl_build_tuple_argument(slot->val,
+ slot->ttc_tupleDescriptor);
XPUSHs(hashref);
}
else
{
- char *tmp = (*fmgr_faddr(&(desc->arg_out_func[i])))
- (pargs->data[i],
- desc->arg_out_elem[i],
- desc->arg_out_len[i]);
-
- XPUSHs(sv_2mortal(newSVpv(tmp, 0)));
- pfree(tmp);
+ if (fcinfo->argnull[i])
+ {
+ XPUSHs(&PL_sv_undef);
+ }
+ else
+ {
+ char *tmp;
+
+ tmp = (*fmgr_faddr(&(desc->arg_out_func[i])))
+ (fcinfo->arg[i],
+ desc->arg_out_elem[i],
+ desc->arg_out_len[i]);
+ XPUSHs(sv_2mortal(newSVpv(tmp, 0)));
+ pfree(tmp);
+ }
}
}
PUTBACK;
@@ -466,14 +474,11 @@ plperl_call_perl_func(plperl_proc_desc * desc, FmgrValues *pargs)
* plperl_func_handler() - Handler for regular function calls
**********************************************************************/
static Datum
-plperl_func_handler(FmgrInfo *proinfo,
- FmgrValues *proargs,
- bool *isNull)
+plperl_func_handler(PG_FUNCTION_ARGS)
{
int i;
char internal_proname[512];
int proname_len;
- char *stroid;
plperl_proc_desc *prodesc;
SV *perlret;
Datum retval;
@@ -482,10 +487,7 @@ plperl_func_handler(FmgrInfo *proinfo,
/************************************************************
* Build our internal proc name from the functions Oid
************************************************************/
- stroid = oidout(proinfo->fn_oid);
- strcpy(internal_proname, "__PLperl_proc_");
- strcat(internal_proname, stroid);
- pfree(stroid);
+ sprintf(internal_proname, "__PLPerl_proc_%u", fcinfo->flinfo->fn_oid);
proname_len = strlen(internal_proname);
/************************************************************
@@ -518,14 +520,14 @@ plperl_func_handler(FmgrInfo *proinfo,
* Lookup the pg_proc tuple by Oid
************************************************************/
procTup = SearchSysCacheTuple(PROCOID,
- ObjectIdGetDatum(proinfo->fn_oid),
+ ObjectIdGetDatum(fcinfo->flinfo->fn_oid),
0, 0, 0);
if (!HeapTupleIsValid(procTup))
{
free(prodesc->proname);
free(prodesc);
elog(ERROR, "plperl: cache lookup for proc %u failed",
- proinfo->fn_oid);
+ fcinfo->flinfo->fn_oid);
}
procStruct = (Form_pg_proc) GETSTRUCT(procTup);
@@ -560,8 +562,8 @@ plperl_func_handler(FmgrInfo *proinfo,
* Get the required information for output conversion
* of all procedure arguments
************************************************************/
- prodesc->nargs = proinfo->fn_nargs;
- for (i = 0; i < proinfo->fn_nargs; i++)
+ prodesc->nargs = procStruct->pronargs;
+ for (i = 0; i < prodesc->nargs; i++)
{
typeTup = SearchSysCacheTuple(TYPEOID,
ObjectIdGetDatum(procStruct->proargtypes[i]),
@@ -639,7 +641,7 @@ plperl_func_handler(FmgrInfo *proinfo,
/************************************************************
* Call the Perl function
************************************************************/
- perlret = plperl_call_perl_func(prodesc, proargs);
+ perlret = plperl_call_perl_func(prodesc, fcinfo);
/************************************************************
* Disconnect from SPI manager and then create the return
@@ -650,10 +652,19 @@ plperl_func_handler(FmgrInfo *proinfo,
if (SPI_finish() != SPI_OK_FINISH)
elog(ERROR, "plperl: SPI_finish() failed");
- retval = (Datum) (*fmgr_faddr(&prodesc->result_in_func))
- (SvPV(perlret, na),
- prodesc->result_in_elem,
- prodesc->result_in_len);
+ /* XXX is this the approved way to check for an undef result? */
+ if (perlret == &PL_sv_undef)
+ {
+ retval = (Datum) 0;
+ fcinfo->isnull = true;
+ }
+ else
+ {
+ retval = FunctionCall3(&prodesc->result_in_func,
+ PointerGetDatum(SvPV(perlret, na)),
+ ObjectIdGetDatum(prodesc->result_in_elem),
+ Int32GetDatum(prodesc->result_in_len));
+ }
SvREFCNT_dec(perlret);
@@ -674,7 +685,7 @@ plperl_func_handler(FmgrInfo *proinfo,
* plperl_trigger_handler() - Handler for trigger calls
**********************************************************************/
static HeapTuple
-plperl_trigger_handler(FmgrInfo *proinfo)
+plperl_trigger_handler(PG_FUNCTION_ARGS)
{
TriggerData *trigdata;
char internal_proname[512];
@@ -708,10 +719,7 @@ plperl_trigger_handler(FmgrInfo *proinfo)
/************************************************************
* Build our internal proc name from the functions Oid
************************************************************/
- stroid = oidout(proinfo->fn_oid);
- strcpy(internal_proname, "__PLTcl_proc_");
- strcat(internal_proname, stroid);
- pfree(stroid);
+ sprintf(internal_proname, "__PLPerl_proc_%u", fcinfo->flinfo->fn_oid);
/************************************************************
* Lookup the internal proc name in the hashtable
@@ -741,14 +749,14 @@ plperl_trigger_handler(FmgrInfo *proinfo)
* Lookup the pg_proc tuple by Oid
************************************************************/
procTup = SearchSysCacheTuple(PROCOID,
- ObjectIdGetDatum(proinfo->fn_oid),
+ ObjectIdGetDatum(fcinfo->flinfo->fn_oid),
0, 0, 0);
if (!HeapTupleIsValid(procTup))
{
free(prodesc->proname);
free(prodesc);
elog(ERROR, "plperl: cache lookup for proc %u failed",
- proinfo->fn_oid);
+ fcinfo->flinfo->fn_oid);
}
procStruct = (Form_pg_proc) GETSTRUCT(procTup);
diff --git a/src/pl/plpgsql/src/pl_exec.c b/src/pl/plpgsql/src/pl_exec.c
index a2565a43637..e587aecba60 100644
--- a/src/pl/plpgsql/src/pl_exec.c
+++ b/src/pl/plpgsql/src/pl_exec.c
@@ -3,7 +3,7 @@
* procedural language
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/pl/plpgsql/src/pl_exec.c,v 1.21 2000/04/28 00:12:44 tgl Exp $
+ * $Header: /cvsroot/pgsql/src/pl/plpgsql/src/pl_exec.c,v 1.22 2000/05/28 17:56:28 tgl Exp $
*
* This software is copyrighted by Jan Wieck - Hamburg.
*
@@ -141,8 +141,7 @@ static void exec_set_found(PLpgSQL_execstate * estate, bool state);
* ----------
*/
Datum
-plpgsql_exec_function(PLpgSQL_function * func,
- FmgrValues *args, bool *isNull)
+plpgsql_exec_function(PLpgSQL_function * func, FunctionCallInfo fcinfo)
{
PLpgSQL_execstate estate;
int i;
@@ -302,21 +301,22 @@ plpgsql_exec_function(PLpgSQL_function * func,
{
PLpgSQL_var *var = (PLpgSQL_var *) estate.datums[n];
- var->value = (Datum) (args->data[i]);
- var->isnull = *isNull;
+ var->value = fcinfo->arg[i];
+ var->isnull = fcinfo->argnull[i];
var->shouldfree = false;
}
break;
case PLPGSQL_DTYPE_ROW:
{
+ PLpgSQL_row *row = (PLpgSQL_row *) estate.datums[n];
+ TupleTableSlot *slot = (TupleTableSlot *) fcinfo->arg[i];
HeapTuple tup;
TupleDesc tupdesc;
- PLpgSQL_row *row = (PLpgSQL_row *) estate.datums[n];
-
- tup = ((TupleTableSlot *) (args->data[i]))->val;
- tupdesc = ((TupleTableSlot *) (args->data[i]))->ttc_tupleDescriptor;
+ Assert(slot != NULL && ! fcinfo->argnull[i]);
+ tup = slot->val;
+ tupdesc = slot->ttc_tupleDescriptor;
exec_move_row(&estate, NULL, row, tup, tupdesc);
}
break;
@@ -384,7 +384,7 @@ plpgsql_exec_function(PLpgSQL_function * func,
error_info_stmt = NULL;
error_info_text = "while casting return value to functions return type";
- *isNull = estate.retisnull;
+ fcinfo->isnull = estate.retisnull;
if (!estate.retistuple)
{
@@ -393,14 +393,14 @@ plpgsql_exec_function(PLpgSQL_function * func,
&(func->fn_retinput),
func->fn_rettypelem,
-1,
- isNull);
+ &fcinfo->isnull);
/* ----------
* If the functions return type isn't by value,
* copy the value into upper executor memory context.
* ----------
*/
- if (!*isNull && !func->fn_retbyval)
+ if (!fcinfo->isnull && !func->fn_retbyval)
{
int len;
Datum tmp;
diff --git a/src/pl/plpgsql/src/pl_handler.c b/src/pl/plpgsql/src/pl_handler.c
index 0215eea6bba..54ecb1f4e89 100644
--- a/src/pl/plpgsql/src/pl_handler.c
+++ b/src/pl/plpgsql/src/pl_handler.c
@@ -3,7 +3,7 @@
* procedural language
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/pl/plpgsql/src/pl_handler.c,v 1.3 1999/07/15 15:21:48 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/pl/plpgsql/src/pl_handler.c,v 1.4 2000/05/28 17:56:28 tgl Exp $
*
* This software is copyrighted by Jan Wieck - Hamburg.
*
@@ -45,147 +45,107 @@
#include "plpgsql.h"
#include "pl.tab.h"
-#include "executor/spi.h"
-#include "commands/trigger.h"
-#include "utils/builtins.h"
-#include "fmgr.h"
#include "access/heapam.h"
-
-#include "utils/syscache.h"
#include "catalog/pg_proc.h"
#include "catalog/pg_type.h"
+#include "utils/builtins.h"
+#include "utils/syscache.h"
+/*
+ * Head of list of already-compiled functions
+ */
static PLpgSQL_function *compiled_functions = NULL;
-Datum plpgsql_call_handler(FmgrInfo *proinfo,
- FmgrValues *proargs, bool *isNull);
-
-static Datum plpgsql_func_handler(FmgrInfo *proinfo,
- FmgrValues *proargs, bool *isNull);
-
-static HeapTuple plpgsql_trigger_handler(FmgrInfo *proinfo);
-
-
/* ----------
- * plpgsql_call_handler - This is the only visible function
- * of the PL interpreter. The PostgreSQL
- * function manager and trigger manager
- * call this function for execution of
- * PL/pgSQL procedures.
+ * plpgsql_call_handler
+ *
+ * This is the only visible function of the PL interpreter.
+ * The PostgreSQL function manager and trigger manager
+ * call this function for execution of PL/pgSQL procedures.
* ----------
*/
Datum
-plpgsql_call_handler(FmgrInfo *proinfo,
- FmgrValues *proargs,
- bool *isNull)
+plpgsql_call_handler(PG_FUNCTION_ARGS)
{
+ TriggerData *trigdata;
+ bool isTrigger;
+ PLpgSQL_function *func;
Datum retval;
/* ----------
- * Connect to SPI manager
- * ----------
- */
- if (SPI_connect() != SPI_OK_CONNECT)
- elog(ERROR, "plpgsql: cannot connect to SPI manager");
-
- /* ----------
- * Determine if called as function or trigger and
- * call appropriate subhandler
- * ----------
- */
- if (CurrentTriggerData == NULL)
- retval = plpgsql_func_handler(proinfo, proargs, isNull);
- else
- retval = (Datum) plpgsql_trigger_handler(proinfo);
-
- /* ----------
- * Disconnect from SPI manager
+ * Save the current trigger data local
+ *
+ * XXX this should go away in favor of using fcinfo->context
* ----------
*/
- if (SPI_finish() != SPI_OK_FINISH)
- elog(ERROR, "plpgsql: SPI_finish() failed");
-
- return retval;
-}
-
-
-/* ----------
- * plpgsql_func_handler() - Handler for regular function calls
- * ----------
- */
-static Datum
-plpgsql_func_handler(FmgrInfo *proinfo,
- FmgrValues *proargs,
- bool *isNull)
-{
- PLpgSQL_function *func;
+ trigdata = CurrentTriggerData;
+ CurrentTriggerData = NULL;
+ isTrigger = (trigdata != NULL);
/* ----------
- * Check if we already compiled this function
+ * Connect to SPI manager
* ----------
*/
- for (func = compiled_functions; func != NULL; func = func->next)
- {
- if (proinfo->fn_oid == func->fn_oid)
- break;
- }
+ if (SPI_connect() != SPI_OK_CONNECT)
+ elog(ERROR, "plpgsql: cannot connect to SPI manager");
/* ----------
- * If not, do so and add it to the compiled ones
+ * Check if we already compiled this function and saved the pointer
+ * (ie, current FmgrInfo has been used before)
* ----------
*/
+ func = (PLpgSQL_function *) fcinfo->flinfo->fn_extra;
if (func == NULL)
{
- func = plpgsql_compile(proinfo->fn_oid, T_FUNCTION);
-
- func->next = compiled_functions;
- compiled_functions = func;
+ /* ----------
+ * Check if we already compiled this function
+ * ----------
+ */
+ Oid funcOid = fcinfo->flinfo->fn_oid;
+
+ for (func = compiled_functions; func != NULL; func = func->next)
+ {
+ if (funcOid == func->fn_oid)
+ break;
+ }
+
+ /* ----------
+ * If not, do so and add it to the compiled ones
+ * ----------
+ */
+ if (func == NULL)
+ {
+ func = plpgsql_compile(funcOid,
+ isTrigger ? T_TRIGGER : T_FUNCTION);
+ func->next = compiled_functions;
+ compiled_functions = func;
+ }
+
+ /* ----------
+ * Save pointer in FmgrInfo to avoid search on subsequent calls
+ * ----------
+ */
+ fcinfo->flinfo->fn_extra = (void *) func;
}
- return plpgsql_exec_function(func, proargs, isNull);
-}
-
-
-/* ----------
- * plpgsql_trigger_handler() - Handler for trigger calls
- * ----------
- */
-static HeapTuple
-plpgsql_trigger_handler(FmgrInfo *proinfo)
-{
- TriggerData *trigdata;
- PLpgSQL_function *func;
-
/* ----------
- * Save the current trigger data local
- * ----------
- */
- trigdata = CurrentTriggerData;
- CurrentTriggerData = NULL;
-
- /* ----------
- * Check if we already compiled this trigger procedure
+ * Determine if called as function or trigger and
+ * call appropriate subhandler
* ----------
*/
- for (func = compiled_functions; func != NULL; func = func->next)
- {
- if (proinfo->fn_oid == func->fn_oid)
- break;
- }
+ if (isTrigger)
+ retval = PointerGetDatum(plpgsql_exec_trigger(func, trigdata));
+ else
+ retval = plpgsql_exec_function(func, fcinfo);
/* ----------
- * If not, do so and add it to the compiled ones
+ * Disconnect from SPI manager
* ----------
*/
- if (func == NULL)
- {
- func = plpgsql_compile(proinfo->fn_oid, T_TRIGGER);
-
- func->next = compiled_functions;
- compiled_functions = func;
- }
+ if (SPI_finish() != SPI_OK_FINISH)
+ elog(ERROR, "plpgsql: SPI_finish() failed");
- return plpgsql_exec_trigger(func, trigdata);
+ return retval;
}
diff --git a/src/pl/plpgsql/src/plpgsql.h b/src/pl/plpgsql/src/plpgsql.h
index 5efbccff8a0..f4246980fca 100644
--- a/src/pl/plpgsql/src/plpgsql.h
+++ b/src/pl/plpgsql/src/plpgsql.h
@@ -3,7 +3,7 @@
* procedural language
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/pl/plpgsql/src/plpgsql.h,v 1.8 2000/01/20 05:44:34 tgl Exp $
+ * $Header: /cvsroot/pgsql/src/pl/plpgsql/src/plpgsql.h,v 1.9 2000/05/28 17:56:28 tgl Exp $
*
* This software is copyrighted by Jan Wieck - Hamburg.
*
@@ -38,9 +38,10 @@
#define PLPGSQL_H
#include "postgres.h"
+
+#include "fmgr.h"
#include "executor/spi.h"
#include "commands/trigger.h"
-#include "fmgr.h"
/**********************************************************************
* Definitions
@@ -451,15 +452,20 @@ extern void plpgsql_adddatum(PLpgSQL_datum * new);
extern int plpgsql_add_initdatums(int **varnos);
extern void plpgsql_comperrinfo(void);
+/* ----------
+ * Functions in pl_handler.c
+ * ----------
+ */
+extern Datum plpgsql_call_handler(PG_FUNCTION_ARGS);
/* ----------
* Functions in pl_exec.c
* ----------
*/
extern Datum plpgsql_exec_function(PLpgSQL_function * func,
- FmgrValues *args, bool *isNull);
+ FunctionCallInfo fcinfo);
extern HeapTuple plpgsql_exec_trigger(PLpgSQL_function * func,
- TriggerData *trigdata);
+ TriggerData *trigdata);
/* ----------
diff --git a/src/pl/tcl/pltcl.c b/src/pl/tcl/pltcl.c
index a57812e20a4..c968471ed94 100644
--- a/src/pl/tcl/pltcl.c
+++ b/src/pl/tcl/pltcl.c
@@ -2,9 +2,6 @@
* pltcl.c - PostgreSQL support for Tcl as
* procedural language (PL)
*
- * IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/pl/tcl/pltcl.c,v 1.22 2000/05/23 01:59:05 tgl Exp $
- *
* This software is copyrighted by Jan Wieck - Hamburg.
*
* The author hereby grants permission to use, copy, modify,
@@ -33,6 +30,9 @@
* OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES,
* ENHANCEMENTS, OR MODIFICATIONS.
*
+ * IDENTIFICATION
+ * $Header: /cvsroot/pgsql/src/pl/tcl/pltcl.c,v 1.23 2000/05/28 17:56:29 tgl Exp $
+ *
**********************************************************************/
#include <tcl.h>
@@ -111,13 +111,11 @@ static void pltcl_init_load_unknown(void);
#endif /* PLTCL_UNKNOWN_SUPPORT */
-Datum pltcl_call_handler(FmgrInfo *proinfo,
- FmgrValues *proargs, bool *isNull);
+Datum pltcl_call_handler(PG_FUNCTION_ARGS);
-static Datum pltcl_func_handler(FmgrInfo *proinfo,
- FmgrValues *proargs, bool *isNull);
+static Datum pltcl_func_handler(PG_FUNCTION_ARGS);
-static HeapTuple pltcl_trigger_handler(FmgrInfo *proinfo);
+static HeapTuple pltcl_trigger_handler(PG_FUNCTION_ARGS);
static int pltcl_elog(ClientData cdata, Tcl_Interp *interp,
int argc, char *argv[]);
@@ -368,9 +366,7 @@ pltcl_init_load_unknown(void)
/* keep non-static */
Datum
-pltcl_call_handler(FmgrInfo *proinfo,
- FmgrValues *proargs,
- bool *isNull)
+pltcl_call_handler(PG_FUNCTION_ARGS)
{
Datum retval;
@@ -395,9 +391,9 @@ pltcl_call_handler(FmgrInfo *proinfo,
* call appropriate subhandler
************************************************************/
if (CurrentTriggerData == NULL)
- retval = pltcl_func_handler(proinfo, proargs, isNull);
+ retval = pltcl_func_handler(fcinfo);
else
- retval = (Datum) pltcl_trigger_handler(proinfo);
+ retval = (Datum) pltcl_trigger_handler(fcinfo);
pltcl_call_level--;
@@ -408,13 +404,10 @@ pltcl_call_handler(FmgrInfo *proinfo,
* pltcl_func_handler() - Handler for regular function calls
**********************************************************************/
static Datum
-pltcl_func_handler(FmgrInfo *proinfo,
- FmgrValues *proargs,
- bool *isNull)
+pltcl_func_handler(PG_FUNCTION_ARGS)
{
int i;
char internal_proname[512];
- char *stroid;
Tcl_HashEntry *hashent;
int hashnew;
pltcl_proc_desc *volatile prodesc;
@@ -427,10 +420,7 @@ pltcl_func_handler(FmgrInfo *proinfo,
/************************************************************
* Build our internal proc name from the functions Oid
************************************************************/
- stroid = oidout(proinfo->fn_oid);
- strcpy(internal_proname, "__PLTcl_proc_");
- strcat(internal_proname, stroid);
- pfree(stroid);
+ sprintf(internal_proname, "__PLTcl_proc_%u", fcinfo->flinfo->fn_oid);
/************************************************************
* Lookup the internal proc name in the hashtable
@@ -467,14 +457,14 @@ pltcl_func_handler(FmgrInfo *proinfo,
* Lookup the pg_proc tuple by Oid
************************************************************/
procTup = SearchSysCacheTuple(PROCOID,
- ObjectIdGetDatum(proinfo->fn_oid),
+ ObjectIdGetDatum(fcinfo->flinfo->fn_oid),
0, 0, 0);
if (!HeapTupleIsValid(procTup))
{
free(prodesc->proname);
free(prodesc);
elog(ERROR, "pltcl: cache lookup for proc %u failed",
- proinfo->fn_oid);
+ fcinfo->flinfo->fn_oid);
}
procStruct = (Form_pg_proc) GETSTRUCT(procTup);
@@ -508,9 +498,9 @@ pltcl_func_handler(FmgrInfo *proinfo,
* Get the required information for output conversion
* of all procedure arguments
************************************************************/
- prodesc->nargs = proinfo->fn_nargs;
+ prodesc->nargs = procStruct->pronargs;
proc_internal_args[0] = '\0';
- for (i = 0; i < proinfo->fn_nargs; i++)
+ for (i = 0; i < prodesc->nargs; i++)
{
typeTup = SearchSysCacheTuple(TYPEOID,
ObjectIdGetDatum(procStruct->proargtypes[i]),
@@ -564,7 +554,7 @@ pltcl_func_handler(FmgrInfo *proinfo,
Tcl_DStringAppend(&proc_internal_body, "upvar #0 ", -1);
Tcl_DStringAppend(&proc_internal_body, internal_proname, -1);
Tcl_DStringAppend(&proc_internal_body, " GD\n", -1);
- for (i = 0; i < proinfo->fn_nargs; i++)
+ for (i = 0; i < fcinfo->nargs; i++)
{
if (!prodesc->arg_is_rel[i])
continue;
@@ -640,10 +630,12 @@ pltcl_func_handler(FmgrInfo *proinfo,
/**************************************************
* For tuple values, add a list for 'array set ...'
**************************************************/
+ TupleTableSlot *slot = (TupleTableSlot *) fcinfo->arg[i];
+
+ Assert(slot != NULL && ! fcinfo->argnull[i]);
Tcl_DStringInit(&list_tmp);
- pltcl_build_tuple_argument(
- ((TupleTableSlot *) (proargs->data[i]))->val,
- ((TupleTableSlot *) (proargs->data[i]))->ttc_tupleDescriptor,
+ pltcl_build_tuple_argument(slot->val,
+ slot->ttc_tupleDescriptor,
&list_tmp);
Tcl_DStringAppendElement(&tcl_cmd, Tcl_DStringValue(&list_tmp));
Tcl_DStringFree(&list_tmp);
@@ -655,14 +647,21 @@ pltcl_func_handler(FmgrInfo *proinfo,
* Single values are added as string element
* of their external representation
**************************************************/
- char *tmp;
-
- tmp = (*fmgr_faddr(&(prodesc->arg_out_func[i])))
- (proargs->data[i],
- prodesc->arg_out_elem[i],
- prodesc->arg_out_len[i]);
- Tcl_DStringAppendElement(&tcl_cmd, tmp);
- pfree(tmp);
+ if (fcinfo->argnull[i])
+ {
+ Tcl_DStringAppendElement(&tcl_cmd, "");
+ }
+ else
+ {
+ char *tmp;
+
+ tmp = (*fmgr_faddr(&(prodesc->arg_out_func[i])))
+ (fcinfo->arg[i],
+ prodesc->arg_out_elem[i],
+ prodesc->arg_out_len[i]);
+ Tcl_DStringAppendElement(&tcl_cmd, tmp);
+ pfree(tmp);
+ }
}
}
Tcl_DStringFree(&list_tmp);
@@ -719,10 +718,10 @@ pltcl_func_handler(FmgrInfo *proinfo,
if (SPI_finish() != SPI_OK_FINISH)
elog(ERROR, "pltcl: SPI_finish() failed");
- retval = (Datum) (*fmgr_faddr(&prodesc->result_in_func))
- (pltcl_safe_interp->result,
- prodesc->result_in_elem,
- -1);
+ retval = FunctionCall3(&prodesc->result_in_func,
+ PointerGetDatum(pltcl_safe_interp->result),
+ ObjectIdGetDatum(prodesc->result_in_elem),
+ Int32GetDatum(-1));
memcpy(&Warn_restart, &save_restart, sizeof(Warn_restart));
return retval;
@@ -733,7 +732,7 @@ pltcl_func_handler(FmgrInfo *proinfo,
* pltcl_trigger_handler() - Handler for trigger calls
**********************************************************************/
static HeapTuple
-pltcl_trigger_handler(FmgrInfo *proinfo)
+pltcl_trigger_handler(PG_FUNCTION_ARGS)
{
TriggerData *trigdata;
char internal_proname[512];
@@ -767,10 +766,7 @@ pltcl_trigger_handler(FmgrInfo *proinfo)
/************************************************************
* Build our internal proc name from the functions Oid
************************************************************/
- stroid = oidout(proinfo->fn_oid);
- strcpy(internal_proname, "__PLTcl_proc_");
- strcat(internal_proname, stroid);
- pfree(stroid);
+ sprintf(internal_proname, "__PLTcl_proc_%u", fcinfo->flinfo->fn_oid);
/************************************************************
* Lookup the internal proc name in the hashtable
@@ -800,14 +796,14 @@ pltcl_trigger_handler(FmgrInfo *proinfo)
* Lookup the pg_proc tuple by Oid
************************************************************/
procTup = SearchSysCacheTuple(PROCOID,
- ObjectIdGetDatum(proinfo->fn_oid),
+ ObjectIdGetDatum(fcinfo->flinfo->fn_oid),
0, 0, 0);
if (!HeapTupleIsValid(procTup))
{
free(prodesc->proname);
free(prodesc);
elog(ERROR, "pltcl: cache lookup for proc %u failed",
- proinfo->fn_oid);
+ fcinfo->flinfo->fn_oid);
}
procStruct = (Form_pg_proc) GETSTRUCT(procTup);