summaryrefslogtreecommitdiff
path: root/src/backend/utils
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend/utils')
-rw-r--r--src/backend/utils/adt/regproc.c13
-rw-r--r--src/backend/utils/adt/selfuncs.c10
-rw-r--r--src/backend/utils/fmgr/fmgr.c93
3 files changed, 93 insertions, 23 deletions
diff --git a/src/backend/utils/adt/regproc.c b/src/backend/utils/adt/regproc.c
index d15c7a4393..faeb380441 100644
--- a/src/backend/utils/adt/regproc.c
+++ b/src/backend/utils/adt/regproc.c
@@ -7,7 +7,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/utils/adt/regproc.c,v 1.48 2000/01/10 16:13:14 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/utils/adt/regproc.c,v 1.49 2000/01/10 17:14:38 momjian Exp $
*
*-------------------------------------------------------------------------
*/
@@ -238,7 +238,6 @@ oidvectortypes(Oid *oidArray)
HeapTuple typetup;
text *result;
int num;
- Oid *sp;
if (oidArray == NULL)
{
@@ -247,16 +246,16 @@ oidvectortypes(Oid *oidArray)
return result;
}
- result = (text *) palloc(NAMEDATALEN * 8 + 8 + VARHDRSZ);
+ result = (text *) palloc(NAMEDATALEN * FUNC_MAX_ARGS +
+ FUNC_MAX_ARGS + VARHDRSZ);
*VARDATA(result) = '\0';
- sp = oidArray;
- for (num = 8; num != 0; num--, sp++)
+ for (num = 0; num < FUNC_MAX_ARGS; num++)
{
- if (*sp != InvalidOid)
+ if (oidArray[num] != InvalidOid)
{
typetup = SearchSysCacheTuple(TYPEOID,
- ObjectIdGetDatum(*sp),
+ ObjectIdGetDatum(oidArray[num]),
0, 0, 0);
if (HeapTupleIsValid(typetup))
{
diff --git a/src/backend/utils/adt/selfuncs.c b/src/backend/utils/adt/selfuncs.c
index 3424155dfb..5755926e9d 100644
--- a/src/backend/utils/adt/selfuncs.c
+++ b/src/backend/utils/adt/selfuncs.c
@@ -10,7 +10,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/utils/adt/selfuncs.c,v 1.45 2000/01/09 00:26:20 tgl Exp $
+ * $Header: /cvsroot/pgsql/src/backend/utils/adt/selfuncs.c,v 1.46 2000/01/10 17:14:38 momjian Exp $
*
*-------------------------------------------------------------------------
*/
@@ -253,7 +253,7 @@ intltsel(Oid opid,
rtype = ((Form_pg_operator) GETSTRUCT(oprtuple))->oprright;
/* Convert the constant to a uniform comparison scale. */
- if (! convert_to_scale(value,
+ if (! convert_to_scale(value,
((flag & SEL_RIGHT) ? rtype : ltype),
&val))
{
@@ -310,7 +310,7 @@ intltsel(Oid opid,
* stats are out of date and return a default...
*/
*result = DEFAULT_INEQ_SEL;
- }
+ }
else if (val <= low || val >= high)
{
/* If given value is outside the statistical range, return a
@@ -512,10 +512,10 @@ convert_to_scale(Datum value, Oid typid,
/* See whether there is a registered type-conversion function,
* namely a procedure named "float8" with the right signature.
*/
- Oid oid_array[MAXFARGS];
+ Oid oid_array[FUNC_MAX_ARGS];
HeapTuple ftup;
- MemSet(oid_array, 0, MAXFARGS * sizeof(Oid));
+ MemSet(oid_array, 0, FUNC_MAX_ARGS * sizeof(Oid));
oid_array[0] = typid;
ftup = SearchSysCacheTuple(PROCNAME,
PointerGetDatum("float8"),
diff --git a/src/backend/utils/fmgr/fmgr.c b/src/backend/utils/fmgr/fmgr.c
index 6506f4a519..4dd03f0267 100644
--- a/src/backend/utils/fmgr/fmgr.c
+++ b/src/backend/utils/fmgr/fmgr.c
@@ -7,7 +7,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/utils/fmgr/fmgr.c,v 1.33 1999/11/22 17:56:33 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/utils/fmgr/fmgr.c,v 1.34 2000/01/10 17:14:39 momjian Exp $
*
*-------------------------------------------------------------------------
*/
@@ -44,9 +44,9 @@ fmgr_pl(char *arg0,...)
values.data[0] = arg0;
if (n_arguments > 1)
{
- if (n_arguments > MAXFMGRARGS)
+ if (n_arguments > FUNC_MAX_ARGS)
elog(ERROR, "fmgr_pl: function %u: too many arguments (%d > %d)",
- fmgr_pl_finfo->fn_oid, n_arguments, MAXFMGRARGS);
+ 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 *);
@@ -165,22 +165,93 @@ fmgr_c(FmgrInfo *finfo,
values->data[6], values->data[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]);
+ break;
+ 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]);
+ break;
+ 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]);
+ break;
+ 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]);
+ break;
+ 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]);
+ break;
+ 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]);
+ break;
+ 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]);
+ break;
+ 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;
+ case 17:
/*
- * XXX Note that functions with >8 arguments can only be
+ * XXX Note that functions with >FUNC_MAX_ARGS arguments can only be
* called from inside the system, not from the user level,
- * since the catalogs only store 8 argument types for user
+ * since the catalogs only store FUNC_MAX_ARGS argument types for user
* type-checking!
*/
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[8], values->data[9],
+ values->data[10], values->data[11],
+ values->data[12], values->data[13],
+ values->data[14], values->data[15]);
break;
default:
elog(ERROR, "fmgr_c: function %u: too many arguments (%d > %d)",
- finfo->fn_oid, n_arguments, MAXFMGRARGS);
+ finfo->fn_oid, n_arguments, FUNC_MAX_ARGS);
break;
}
return returnValue;
@@ -323,9 +394,9 @@ fmgr(Oid procedureId,...)
fmgr_info(procedureId, &finfo);
pronargs = finfo.fn_nargs;
- if (pronargs > MAXFMGRARGS)
+ if (pronargs > FUNC_MAX_ARGS)
elog(ERROR, "fmgr: function %u: too many arguments (%d > %d)",
- procedureId, pronargs, MAXFMGRARGS);
+ procedureId, pronargs, FUNC_MAX_ARGS);
va_start(pvar, procedureId);
for (i = 0; i < pronargs; ++i)
@@ -364,10 +435,10 @@ fmgr_ptr(FmgrInfo *finfo,...)
va_start(pvar, finfo);
n_arguments = va_arg(pvar, int);
local_finfo->fn_nargs = n_arguments;
- if (n_arguments > MAXFMGRARGS)
+ if (n_arguments > FUNC_MAX_ARGS)
{
elog(ERROR, "fmgr_ptr: function %u: too many arguments (%d > %d)",
- func_id, n_arguments, MAXFMGRARGS);
+ func_id, n_arguments, FUNC_MAX_ARGS);
}
for (i = 0; i < n_arguments; ++i)
values.data[i] = va_arg(pvar, char *);