aboutsummaryrefslogtreecommitdiff
path: root/src/backend/utils/fmgr/fmgr.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend/utils/fmgr/fmgr.c')
-rw-r--r--src/backend/utils/fmgr/fmgr.c93
1 files changed, 82 insertions, 11 deletions
diff --git a/src/backend/utils/fmgr/fmgr.c b/src/backend/utils/fmgr/fmgr.c
index 6506f4a5192..4dd03f02679 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 *);