diff options
Diffstat (limited to 'src/backend/utils')
| -rw-r--r-- | src/backend/utils/adt/regproc.c | 13 | ||||
| -rw-r--r-- | src/backend/utils/adt/selfuncs.c | 10 | ||||
| -rw-r--r-- | src/backend/utils/fmgr/fmgr.c | 93 |
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 *); |
