mirror of
https://github.com/postgres/postgres.git
synced 2025-06-14 18:42:34 +03:00
Make number of args to a function configurable.
This commit is contained in:
@ -7,7 +7,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/backend/access/hash/hashfunc.c,v 1.21 2000/01/10 16:13:10 momjian Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/access/hash/hashfunc.c,v 1.22 2000/01/10 17:14:28 momjian Exp $
|
||||
*
|
||||
* NOTES
|
||||
* These functions are stored in pg_amproc. For each operator class
|
||||
@ -145,7 +145,7 @@ hashoidvector(Oid *key)
|
||||
int i;
|
||||
uint32 result = 0;
|
||||
|
||||
for (i = 0; i < 8; i++)
|
||||
for (i = 0; i < INDEX_MAX_KEYS; i++)
|
||||
result = result ^ (~(uint32) key[i]);
|
||||
return result;
|
||||
}
|
||||
|
@ -7,7 +7,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/backend/access/nbtree/nbtcompare.c,v 1.29 2000/01/10 16:13:10 momjian Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/access/nbtree/nbtcompare.c,v 1.30 2000/01/10 17:14:29 momjian Exp $
|
||||
*
|
||||
* NOTES
|
||||
* These functions are stored in pg_amproc. For each operator class
|
||||
@ -98,7 +98,7 @@ btoidvectorcmp(Oid *a, Oid *b)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < 8; i++)
|
||||
for (i = 0; i < INDEX_MAX_KEYS; i++)
|
||||
/* we use this because we need the int4gt, etc */
|
||||
if (!int4eq(a[i], b[i]))
|
||||
{
|
||||
|
@ -7,7 +7,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/backend/catalog/pg_aggregate.c,v 1.26 1999/11/22 17:55:58 momjian Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/catalog/pg_aggregate.c,v 1.27 2000/01/10 17:14:31 momjian Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@ -71,11 +71,11 @@ AggregateCreate(char *aggName,
|
||||
Oid xret1 = InvalidOid;
|
||||
Oid xret2 = InvalidOid;
|
||||
Oid fret = InvalidOid;
|
||||
Oid fnArgs[8];
|
||||
Oid fnArgs[FUNC_MAX_ARGS];
|
||||
NameData aname;
|
||||
TupleDesc tupDesc;
|
||||
|
||||
MemSet(fnArgs, 0, 8 * sizeof(Oid));
|
||||
MemSet(fnArgs, 0, FUNC_MAX_ARGS * sizeof(Oid));
|
||||
|
||||
/* sanity checks */
|
||||
if (!aggName)
|
||||
|
@ -7,7 +7,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/backend/catalog/pg_operator.c,v 1.46 2000/01/05 18:23:45 momjian Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/catalog/pg_operator.c,v 1.47 2000/01/10 17:14:31 momjian Exp $
|
||||
*
|
||||
* NOTES
|
||||
* these routines moved here from commands/define.c and somewhat cleaned up.
|
||||
@ -482,7 +482,7 @@ OperatorDef(char *operatorName,
|
||||
bool rightDefined = false;
|
||||
bool selfCommutator = false;
|
||||
char *name[4];
|
||||
Oid typeId[8];
|
||||
Oid typeId[FUNC_MAX_ARGS];
|
||||
int nargs;
|
||||
NameData oname;
|
||||
TupleDesc tupDesc;
|
||||
@ -556,7 +556,7 @@ OperatorDef(char *operatorName,
|
||||
* have to worry about deleting them later.
|
||||
* ----------------
|
||||
*/
|
||||
MemSet(typeId, 0, 8 * sizeof(Oid));
|
||||
MemSet(typeId, 0, FUNC_MAX_ARGS * sizeof(Oid));
|
||||
if (!leftTypeName)
|
||||
{
|
||||
typeId[0] = rightTypeId;
|
||||
@ -592,7 +592,7 @@ OperatorDef(char *operatorName,
|
||||
*/
|
||||
if (restrictionName)
|
||||
{ /* optional */
|
||||
MemSet(typeId, 0, 8 * sizeof(Oid));
|
||||
MemSet(typeId, 0, FUNC_MAX_ARGS * sizeof(Oid));
|
||||
typeId[0] = OIDOID; /* operator OID */
|
||||
typeId[1] = OIDOID; /* relation OID */
|
||||
typeId[2] = INT2OID; /* attribute number */
|
||||
@ -617,7 +617,7 @@ OperatorDef(char *operatorName,
|
||||
*/
|
||||
if (joinName)
|
||||
{ /* optional */
|
||||
MemSet(typeId, 0, 8 * sizeof(Oid));
|
||||
MemSet(typeId, 0, FUNC_MAX_ARGS * sizeof(Oid));
|
||||
typeId[0] = OIDOID; /* operator OID */
|
||||
typeId[1] = OIDOID; /* relation OID 1 */
|
||||
typeId[2] = INT2OID; /* attribute number 1 */
|
||||
|
@ -7,7 +7,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/backend/catalog/pg_proc.c,v 1.36 1999/11/22 17:55:58 momjian Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/catalog/pg_proc.c,v 1.37 2000/01/10 17:14:31 momjian Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@ -61,7 +61,7 @@ ProcedureCreate(char *procedureName,
|
||||
List *x;
|
||||
List *querytree_list;
|
||||
List *plan_list;
|
||||
Oid typev[8];
|
||||
Oid typev[FUNC_MAX_ARGS];
|
||||
Oid relid;
|
||||
Oid toid;
|
||||
NameData procname;
|
||||
@ -75,13 +75,13 @@ ProcedureCreate(char *procedureName,
|
||||
Assert(PointerIsValid(probin));
|
||||
|
||||
parameterCount = 0;
|
||||
MemSet(typev, 0, 8 * sizeof(Oid));
|
||||
MemSet(typev, 0, FUNC_MAX_ARGS * sizeof(Oid));
|
||||
foreach(x, argList)
|
||||
{
|
||||
Value *t = lfirst(x);
|
||||
|
||||
if (parameterCount == 8)
|
||||
elog(ERROR, "Procedures cannot take more than 8 arguments");
|
||||
if (parameterCount == FUNC_MAX_ARGS)
|
||||
elog(ERROR, "Procedures cannot take more than %d arguments",FUNC_MAX_ARGS);
|
||||
|
||||
if (strcmp(strVal(t), "opaque") == 0)
|
||||
{
|
||||
|
@ -7,7 +7,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/backend/catalog/pg_type.c,v 1.44 1999/12/16 22:19:39 wieck Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/catalog/pg_type.c,v 1.45 2000/01/10 17:14:31 momjian Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@ -305,7 +305,7 @@ TypeCreate(char *typeName,
|
||||
bool defined;
|
||||
NameData name;
|
||||
TupleDesc tupDesc;
|
||||
Oid argList[8];
|
||||
Oid argList[FUNC_MAX_ARGS];
|
||||
|
||||
static ScanKeyData typeKey[1] = {
|
||||
{0, Anum_pg_type_typname, F_NAMEEQ}
|
||||
@ -393,7 +393,7 @@ TypeCreate(char *typeName,
|
||||
* First look for a 1-argument func with all argtypes 0. This is
|
||||
* valid for all four kinds of procedure.
|
||||
*/
|
||||
MemSet(argList, 0, 8 * sizeof(Oid));
|
||||
MemSet(argList, 0, FUNC_MAX_ARGS * sizeof(Oid));
|
||||
|
||||
tup = SearchSysCacheTuple(PROCNAME,
|
||||
PointerGetDatum(procname),
|
||||
|
@ -7,7 +7,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/backend/commands/_deadcode/Attic/recipe.c,v 1.7 1999/07/16 04:58:42 momjian Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/commands/_deadcode/Attic/recipe.c,v 1.8 2000/01/10 17:14:33 momjian Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@ -695,14 +695,14 @@ getParamTypes(TgElement * elem, Oid *typev)
|
||||
j;
|
||||
|
||||
parameterCount = 0;
|
||||
for (i = 0; i < 8; i++)
|
||||
for (i = 0; i < FUNC_MAX_ARGS; i++)
|
||||
typev[i] = 0;
|
||||
for (j = 0; j < elem->inTypes->num; j++)
|
||||
{
|
||||
if (parameterCount == 8)
|
||||
if (parameterCount == FUNC_MAX_ARGS)
|
||||
{
|
||||
elog(ERROR,
|
||||
"getParamTypes: Ingredients cannot take > 8 arguments");
|
||||
"getParamTypes: Ingredients cannot take > %d arguments",FUNC_MAX_ARGS);
|
||||
}
|
||||
t = elem->inTypes->val[j];
|
||||
if (strcmp(t, "opaque") == 0)
|
||||
@ -810,7 +810,7 @@ tg_parseSubQuery(TgRecipe * r, TgNode * n, TeeInfo * teeInfo)
|
||||
{
|
||||
TgElement *elem;
|
||||
char *funcName;
|
||||
Oid typev[8], /* eight arguments maximum */
|
||||
Oid typev[FUNC_MAX_ARGS], /* eight arguments maximum */
|
||||
relid;
|
||||
int i,
|
||||
parameterCount;
|
||||
|
@ -589,7 +589,7 @@ void CommentAggregate(char *aggregate, char *argument, char *comment) {
|
||||
void CommentProc(char *function, List *arguments, char *comment) {
|
||||
|
||||
HeapTuple argtuple, functuple;
|
||||
Oid oid, argoids[8];
|
||||
Oid oid, argoids[FUNC_MAX_ARGS];
|
||||
char *user, *argument;
|
||||
int i, argcount;
|
||||
|
||||
@ -597,7 +597,7 @@ void CommentProc(char *function, List *arguments, char *comment) {
|
||||
|
||||
argcount = length(arguments);
|
||||
if (argcount > 0) {
|
||||
MemSet(argoids, 0, 8 * sizeof(Oid));
|
||||
MemSet(argoids, 0, FUNC_MAX_ARGS * sizeof(Oid));
|
||||
for (i = 0; i < argcount; i++) {
|
||||
argument = strVal(lfirst(arguments));
|
||||
arguments = lnext(arguments);
|
||||
|
@ -7,7 +7,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/backend/commands/indexcmds.c,v 1.16 1999/12/16 22:19:41 wieck Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/commands/indexcmds.c,v 1.17 2000/01/10 17:14:32 momjian Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@ -414,7 +414,7 @@ FuncIndexArgs(IndexElem *funcIndex,
|
||||
}
|
||||
*opOidP = tuple->t_data->t_oid;
|
||||
|
||||
MemSet(argTypes, 0, 8 * sizeof(Oid));
|
||||
MemSet(argTypes, 0, FUNC_MAX_ARGS * sizeof(Oid));
|
||||
|
||||
/*
|
||||
* process the function arguments
|
||||
|
@ -50,7 +50,7 @@ CreateProceduralLanguage(CreatePLangStmt *stmt)
|
||||
HeapTuple langTup;
|
||||
HeapTuple procTup;
|
||||
|
||||
Oid typev[8];
|
||||
Oid typev[FUNC_MAX_ARGS];
|
||||
char nulls[Natts_pg_language];
|
||||
Datum values[Natts_pg_language];
|
||||
Relation rel;
|
||||
|
@ -7,7 +7,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/backend/commands/Attic/remove.c,v 1.42 1999/12/16 22:19:41 wieck Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/commands/Attic/remove.c,v 1.43 2000/01/10 17:14:32 momjian Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@ -315,13 +315,13 @@ RemoveFunction(char *functionName, /* function name to be removed */
|
||||
{
|
||||
Relation relation;
|
||||
HeapTuple tup;
|
||||
Oid argList[8];
|
||||
Oid argList[FUNC_MAX_ARGS];
|
||||
char *userName;
|
||||
char *typename;
|
||||
int i;
|
||||
|
||||
|
||||
MemSet(argList, 0, 8 * sizeof(Oid));
|
||||
MemSet(argList, 0, FUNC_MAX_ARGS * sizeof(Oid));
|
||||
for (i = 0; i < nargs; i++)
|
||||
{
|
||||
typename = strVal(lfirst(argNameList));
|
||||
|
@ -41,7 +41,7 @@ void
|
||||
CreateTrigger(CreateTrigStmt *stmt)
|
||||
{
|
||||
int16 tgtype;
|
||||
int16 tgattr[8] = {0};
|
||||
int16 tgattr[FUNC_MAX_ARGS] = {0};
|
||||
Datum values[Natts_pg_trigger];
|
||||
char nulls[Natts_pg_trigger];
|
||||
Relation rel;
|
||||
@ -53,7 +53,7 @@ CreateTrigger(CreateTrigStmt *stmt)
|
||||
Relation idescs[Num_pg_trigger_indices];
|
||||
Relation ridescs[Num_pg_class_indices];
|
||||
MemoryContext oldcxt;
|
||||
Oid fargtypes[8];
|
||||
Oid fargtypes[FUNC_MAX_ARGS];
|
||||
int found = 0;
|
||||
int i;
|
||||
char constrtrigname[NAMEDATALEN];
|
||||
@ -144,7 +144,7 @@ CreateTrigger(CreateTrigStmt *stmt)
|
||||
}
|
||||
heap_endscan(tgscan);
|
||||
|
||||
MemSet(fargtypes, 0, 8 * sizeof(Oid));
|
||||
MemSet(fargtypes, 0, FUNC_MAX_ARGS * sizeof(Oid));
|
||||
tuple = SearchSysCacheTuple(PROCNAME,
|
||||
PointerGetDatum(stmt->funcname),
|
||||
Int32GetDatum(0),
|
||||
@ -473,7 +473,7 @@ RelationBuildTriggers(Relation relation)
|
||||
build->tgdeferrable = pg_trigger->tgdeferrable;
|
||||
build->tginitdeferred = pg_trigger->tginitdeferred;
|
||||
build->tgnargs = pg_trigger->tgnargs;
|
||||
memcpy(build->tgattr, &(pg_trigger->tgattr), 8 * sizeof(int16));
|
||||
memcpy(build->tgattr, &(pg_trigger->tgattr), FUNC_MAX_ARGS * sizeof(int16));
|
||||
val = (struct varlena *) fastgetattr(&tuple,
|
||||
Anum_pg_trigger_tgargs,
|
||||
tgrel->rd_att, &isnull);
|
||||
|
@ -7,7 +7,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/backend/executor/execQual.c,v 1.64 1999/11/12 06:39:34 tgl Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/executor/execQual.c,v 1.65 2000/01/10 17:14:34 momjian Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@ -656,7 +656,7 @@ ExecMakeFunctionResult(Node *node,
|
||||
bool *isNull,
|
||||
bool *isDone)
|
||||
{
|
||||
Datum argV[MAXFMGRARGS];
|
||||
Datum argV[FUNC_MAX_ARGS];
|
||||
FunctionCachePtr fcache;
|
||||
Func *funcNode = NULL;
|
||||
Oper *operNode = NULL;
|
||||
@ -690,7 +690,7 @@ ExecMakeFunctionResult(Node *node,
|
||||
{
|
||||
bool argDone;
|
||||
|
||||
if (fcache->nargs > MAXFMGRARGS)
|
||||
if (fcache->nargs > FUNC_MAX_ARGS)
|
||||
elog(ERROR, "ExecMakeFunctionResult: too many arguments");
|
||||
|
||||
/*
|
||||
|
@ -8,7 +8,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/backend/libpq/Attic/be-pqexec.c,v 1.25 2000/01/05 18:23:47 momjian Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/libpq/Attic/be-pqexec.c,v 1.26 2000/01/10 17:14:35 momjian Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@ -57,7 +57,7 @@ PQfn(int fnid,
|
||||
int nargs)
|
||||
{
|
||||
char *retval; /* XXX - should be datum, maybe ? */
|
||||
char *arg[8];
|
||||
char *arg[FUNC_MAX_ARGS];
|
||||
int i;
|
||||
|
||||
/* ----------------
|
||||
@ -304,8 +304,8 @@ pqtest_PQfn(char *q)
|
||||
v,
|
||||
f,
|
||||
offsets;
|
||||
char *fields[8];
|
||||
PQArgBlock pqargs[7];
|
||||
char *fields[FUNC_MAX_ARGS];
|
||||
PQArgBlock pqargs[FUNC_MAX_ARGS];
|
||||
int res;
|
||||
char *pqres;
|
||||
|
||||
@ -313,7 +313,7 @@ pqtest_PQfn(char *q)
|
||||
* parse q into fields
|
||||
* ----------------
|
||||
*/
|
||||
i = strparse(q, fields, &offsets, 8);
|
||||
i = strparse(q, fields, &offsets, FUNC_MAX_ARGS);
|
||||
printf("pqtest_PQfn: strparse returns %d fields\n", i); /* debug */
|
||||
if (i == 0)
|
||||
return -1;
|
||||
@ -331,7 +331,7 @@ pqtest_PQfn(char *q)
|
||||
* build a PQArgBlock
|
||||
* ----------------
|
||||
*/
|
||||
for (j = 1; j < i && j < 8; j++)
|
||||
for (j = 1; j < i && j < FUNC_MAX_ARGS; j++)
|
||||
{
|
||||
k = j - 1;
|
||||
v = atoi(fields[j]);
|
||||
|
@ -7,7 +7,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/backend/parser/parse_coerce.c,v 2.26 1999/12/10 07:37:35 tgl Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/parser/parse_coerce.c,v 2.27 2000/01/10 17:14:36 momjian Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@ -142,7 +142,7 @@ can_coerce_type(int nargs, Oid *input_typeids, Oid *func_typeids)
|
||||
HeapTuple ftup;
|
||||
int i;
|
||||
Type tp;
|
||||
Oid oid_array[MAXFARGS];
|
||||
Oid oid_array[FUNC_MAX_ARGS];
|
||||
|
||||
/* run through argument list... */
|
||||
for (i = 0; i < nargs; i++)
|
||||
@ -170,7 +170,7 @@ can_coerce_type(int nargs, Oid *input_typeids, Oid *func_typeids)
|
||||
*/
|
||||
else if (input_typeids[i] != UNKNOWNOID)
|
||||
{
|
||||
MemSet(oid_array, 0, MAXFARGS * sizeof(Oid));
|
||||
MemSet(oid_array, 0, FUNC_MAX_ARGS * sizeof(Oid));
|
||||
oid_array[0] = input_typeids[i];
|
||||
|
||||
/*
|
||||
|
@ -7,7 +7,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/backend/parser/parse_func.c,v 1.65 1999/12/16 22:19:48 wieck Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/parser/parse_func.c,v 1.66 2000/01/10 17:14:36 momjian Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@ -236,7 +236,7 @@ ParseFuncOrColumn(ParseState *pstate, char *funcname, List *fargs,
|
||||
Oid relid;
|
||||
int nargs = length(fargs);
|
||||
Func *funcnode;
|
||||
Oid oid_array[MAXFARGS];
|
||||
Oid oid_array[FUNC_MAX_ARGS];
|
||||
Oid *true_oid_array;
|
||||
Node *retval;
|
||||
bool retset;
|
||||
@ -435,7 +435,7 @@ ParseFuncOrColumn(ParseState *pstate, char *funcname, List *fargs,
|
||||
* transform relation name arguments into varnodes of the appropriate
|
||||
* form.
|
||||
*/
|
||||
MemSet(oid_array, 0, MAXFARGS * sizeof(Oid));
|
||||
MemSet(oid_array, 0, FUNC_MAX_ARGS * sizeof(Oid));
|
||||
|
||||
nargs = 0;
|
||||
foreach(i, fargs)
|
||||
@ -496,12 +496,12 @@ ParseFuncOrColumn(ParseState *pstate, char *funcname, List *fargs,
|
||||
}
|
||||
|
||||
/* Most of the rest of the parser just assumes that functions do not
|
||||
* have more than MAXFARGS parameters. We have to test here to protect
|
||||
* have more than FUNC_MAX_ARGS parameters. We have to test here to protect
|
||||
* against array overruns, etc.
|
||||
*/
|
||||
if (nargs >= MAXFARGS)
|
||||
if (nargs >= FUNC_MAX_ARGS)
|
||||
elog(ERROR, "Cannot pass more than %d arguments to a function",
|
||||
MAXFARGS);
|
||||
FUNC_MAX_ARGS);
|
||||
|
||||
oid_array[nargs++] = toid;
|
||||
}
|
||||
@ -710,8 +710,8 @@ func_get_candidates(char *funcname, int nargs)
|
||||
current_candidate = (CandidateList)
|
||||
palloc(sizeof(struct _CandidateList));
|
||||
current_candidate->args = (Oid *)
|
||||
palloc(MAXFARGS * sizeof(Oid));
|
||||
MemSet(current_candidate->args, 0, MAXFARGS * sizeof(Oid));
|
||||
palloc(FUNC_MAX_ARGS * sizeof(Oid));
|
||||
MemSet(current_candidate->args, 0, FUNC_MAX_ARGS * sizeof(Oid));
|
||||
for (i = 0; i < nargs; i++)
|
||||
current_candidate->args[i] = pgProcP->proargtypes[i];
|
||||
|
||||
@ -1067,9 +1067,9 @@ argtype_inherit(int nargs, Oid *oid_array)
|
||||
{
|
||||
Oid relid;
|
||||
int i;
|
||||
InhPaths arginh[MAXFARGS];
|
||||
InhPaths arginh[FUNC_MAX_ARGS];
|
||||
|
||||
for (i = 0; i < MAXFARGS; i++)
|
||||
for (i = 0; i < FUNC_MAX_ARGS; i++)
|
||||
{
|
||||
if (i < nargs)
|
||||
{
|
||||
@ -1203,7 +1203,7 @@ gen_cross_product(InhPaths *arginh, int nargs)
|
||||
Oid *oneres;
|
||||
int i,
|
||||
j;
|
||||
int cur[MAXFARGS];
|
||||
int cur[FUNC_MAX_ARGS];
|
||||
|
||||
nanswers = 1;
|
||||
for (i = 0; i < nargs; i++)
|
||||
@ -1217,8 +1217,8 @@ gen_cross_product(InhPaths *arginh, int nargs)
|
||||
/* compute the cross product from right to left */
|
||||
for (;;)
|
||||
{
|
||||
oneres = (Oid *) palloc(MAXFARGS * sizeof(Oid));
|
||||
MemSet(oneres, 0, MAXFARGS * sizeof(Oid));
|
||||
oneres = (Oid *) palloc(FUNC_MAX_ARGS * sizeof(Oid));
|
||||
MemSet(oneres, 0, FUNC_MAX_ARGS * sizeof(Oid));
|
||||
|
||||
for (i = nargs - 1; i >= 0 && cur[i] > arginh[i].nsupers; i--)
|
||||
continue;
|
||||
@ -1508,7 +1508,7 @@ ParseComplexProjection(ParseState *pstate,
|
||||
void
|
||||
func_error(char *caller, char *funcname, int nargs, Oid *argtypes, char *msg)
|
||||
{
|
||||
char p[(NAMEDATALEN + 2) * MAXFMGRARGS],
|
||||
char p[(NAMEDATALEN + 2) * FUNC_MAX_ARGS],
|
||||
*ptr;
|
||||
int i;
|
||||
|
||||
|
@ -7,7 +7,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/backend/parser/parse_target.c,v 1.50 1999/12/10 07:37:35 tgl Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/parser/parse_target.c,v 1.51 2000/01/10 17:14:36 momjian Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@ -318,14 +318,14 @@ SizeTargetExpr(ParseState *pstate,
|
||||
int32 attrtypmod)
|
||||
{
|
||||
char *funcname;
|
||||
Oid oid_array[MAXFARGS];
|
||||
Oid oid_array[FUNC_MAX_ARGS];
|
||||
HeapTuple ftup;
|
||||
int i;
|
||||
|
||||
funcname = typeidTypeName(attrtype);
|
||||
oid_array[0] = attrtype;
|
||||
oid_array[1] = INT4OID;
|
||||
for (i = 2; i < MAXFARGS; i++)
|
||||
for (i = 2; i < FUNC_MAX_ARGS; i++)
|
||||
oid_array[i] = InvalidOid;
|
||||
|
||||
/* attempt to find with arguments exactly as specified... */
|
||||
|
@ -7,7 +7,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/backend/tcop/fastpath.c,v 1.32 2000/01/10 16:13:13 momjian Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/tcop/fastpath.c,v 1.33 2000/01/10 17:14:37 momjian Exp $
|
||||
*
|
||||
* NOTES
|
||||
* This cruft is the server side of PQfn.
|
||||
@ -116,7 +116,7 @@ SendFunctionResult(Oid fid, /* function id */
|
||||
/*
|
||||
* This structure saves enough state so that one can avoid having to
|
||||
* do catalog lookups over and over again. (Each RPC can require up
|
||||
* to MAXFMGRARGS+2 lookups, which is quite tedious.)
|
||||
* to FUNC_MAX_ARGS+2 lookups, which is quite tedious.)
|
||||
*
|
||||
* The previous incarnation of this code just assumed that any argument
|
||||
* of size <= 4 was by value; this is not correct. There is no cheap
|
||||
@ -127,8 +127,8 @@ struct fp_info
|
||||
{
|
||||
Oid funcid;
|
||||
int nargs;
|
||||
bool argbyval[MAXFMGRARGS];
|
||||
int32 arglen[MAXFMGRARGS]; /* signed (for varlena) */
|
||||
bool argbyval[FUNC_MAX_ARGS];
|
||||
int32 arglen[FUNC_MAX_ARGS]; /* signed (for varlena) */
|
||||
bool retbyval;
|
||||
int32 retlen; /* signed (for varlena) */
|
||||
TransactionId xid;
|
||||
@ -278,7 +278,7 @@ HandleFunctionRequest()
|
||||
int argsize;
|
||||
int nargs;
|
||||
int tmp;
|
||||
char *arg[8];
|
||||
char *arg[FUNC_MAX_ARGS];
|
||||
char *retval;
|
||||
int i;
|
||||
uint32 palloced;
|
||||
@ -317,7 +317,7 @@ HandleFunctionRequest()
|
||||
* need to remember, so that we pfree() it after the call.
|
||||
*/
|
||||
palloced = 0x0;
|
||||
for (i = 0; i < 8; ++i)
|
||||
for (i = 0; i < FUNC_MAX_ARGS; ++i)
|
||||
{
|
||||
if (i >= nargs)
|
||||
arg[i] = (char *) NULL;
|
||||
|
@ -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))
|
||||
{
|
||||
|
@ -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 $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@ -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"),
|
||||
|
@ -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:
|
||||
|
||||
/*
|
||||
* XXX Note that functions with >8 arguments can only be
|
||||
* called from inside the system, not from the user level,
|
||||
* since the catalogs only store 8 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]);
|
||||
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 >FUNC_MAX_ARGS arguments can only be
|
||||
* called from inside the system, not from the user level,
|
||||
* 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[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 *);
|
||||
|
@ -21,7 +21,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/bin/pg_dump/pg_dump.c,v 1.130 2000/01/10 16:13:16 momjian Exp $
|
||||
* $Header: /cvsroot/pgsql/src/bin/pg_dump/pg_dump.c,v 1.131 2000/01/10 17:14:40 momjian Exp $
|
||||
*
|
||||
* Modifications - 6/10/96 - dave@bensoft.com - version 1.13.dhb
|
||||
*
|
||||
@ -1069,7 +1069,7 @@ clearFuncInfo(FuncInfo *fun, int numFuncs)
|
||||
free(fun[i].proname);
|
||||
if (fun[i].usename)
|
||||
free(fun[i].usename);
|
||||
for (a = 0; a < 8; ++a)
|
||||
for (a = 0; a < FUNC_MAX_ARGS ; ++a)
|
||||
if (fun[i].argtypes[a])
|
||||
free(fun[i].argtypes[a]);
|
||||
if (fun[i].prorettype)
|
||||
|
@ -5,7 +5,7 @@
|
||||
*
|
||||
* Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
* $Id: pg_dump.h,v 1.43 1999/12/27 15:42:44 momjian Exp $
|
||||
* $Id: pg_dump.h,v 1.44 2000/01/10 17:14:40 momjian Exp $
|
||||
*
|
||||
* Modifications - 6/12/96 - dave@bensoft.com - version 1.13.dhb.2
|
||||
*
|
||||
@ -61,7 +61,7 @@ typedef struct _funcInfo
|
||||
char *proowner;
|
||||
int lang;
|
||||
int nargs;
|
||||
char *argtypes[8]; /* should be derived from obj/fmgr.h
|
||||
char *argtypes[FUNC_MAX_ARGS]; /* should be derived from obj/fmgr.h
|
||||
* instead of hardwired */
|
||||
char *prorettype;
|
||||
int retset; /* 1 if the function returns a set, 0
|
||||
|
@ -6,7 +6,7 @@
|
||||
*
|
||||
* Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
* $Id: funcindex.h,v 1.7 1999/02/13 23:20:50 momjian Exp $
|
||||
* $Id: funcindex.h,v 1.8 2000/01/10 17:14:42 momjian Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@ -16,7 +16,7 @@
|
||||
typedef struct
|
||||
{
|
||||
int nargs;
|
||||
Oid arglist[8];
|
||||
Oid arglist[FUNC_MAX_ARGS];
|
||||
Oid procOid;
|
||||
NameData funcName;
|
||||
} FuncIndexInfo;
|
||||
|
@ -93,9 +93,11 @@
|
||||
#define INDEXSCAN_PATCH
|
||||
|
||||
/*
|
||||
* Maximum number of columns in an index.
|
||||
* Maximum number of columns in an index and maximum number of args
|
||||
* to a function. They must be the same value.
|
||||
*/
|
||||
#define INDEX_MAX_KEYS 8
|
||||
#define FUNC_MAX_ARGS INDEX_MAX_KEYS
|
||||
|
||||
/*
|
||||
* Enables debugging print statements in the date/time support routines.
|
||||
|
@ -6,7 +6,7 @@
|
||||
*
|
||||
* Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
* $Id: parse_func.h,v 1.20 1999/12/10 07:37:33 tgl Exp $
|
||||
* $Id: parse_func.h,v 1.21 2000/01/10 17:14:43 momjian Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@ -15,9 +15,6 @@
|
||||
|
||||
#include "parser/parse_node.h"
|
||||
|
||||
|
||||
#define MAXFARGS 8 /* max # args to a c or postquel function */
|
||||
|
||||
/*
|
||||
* This structure is used to explore the inheritance hierarchy above
|
||||
* nodes in the type tree in order to disambiguate among polymorphic
|
||||
|
@ -6,7 +6,7 @@
|
||||
*
|
||||
* Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
* $Id: rel.h,v 1.30 1999/11/16 04:14:03 momjian Exp $
|
||||
* $Id: rel.h,v 1.31 2000/01/10 17:14:44 momjian Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@ -51,7 +51,7 @@ typedef struct Trigger
|
||||
bool tgdeferrable;
|
||||
bool tginitdeferred;
|
||||
int16 tgnargs;
|
||||
int16 tgattr[8];
|
||||
int16 tgattr[FUNC_MAX_ARGS];
|
||||
char **tgargs;
|
||||
} Trigger;
|
||||
|
||||
|
@ -3,7 +3,7 @@
|
||||
* procedural language
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/pl/plpgsql/src/pl_comp.c,v 1.14 1999/12/20 01:41:32 tgl Exp $
|
||||
* $Header: /cvsroot/pgsql/src/pl/plpgsql/src/pl_comp.c,v 1.15 2000/01/10 17:14:45 momjian Exp $
|
||||
*
|
||||
* This software is copyrighted by Jan Wieck - Hamburg.
|
||||
*
|
||||
@ -114,7 +114,7 @@ plpgsql_compile(Oid fn_oid, int functype)
|
||||
PLpgSQL_row *row;
|
||||
PLpgSQL_rec *rec;
|
||||
int i;
|
||||
int arg_varnos[MAXFMGRARGS];
|
||||
int arg_varnos[FUNC_MAX_ARGS];
|
||||
|
||||
/* ----------
|
||||
* Initialize the compiler
|
||||
|
@ -3,7 +3,7 @@
|
||||
* procedural language
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/pl/plpgsql/src/plpgsql.h,v 1.4 1999/07/17 20:18:47 momjian Exp $
|
||||
* $Header: /cvsroot/pgsql/src/pl/plpgsql/src/plpgsql.h,v 1.5 2000/01/10 17:14:45 momjian Exp $
|
||||
*
|
||||
* This software is copyrighted by Jan Wieck - Hamburg.
|
||||
*
|
||||
@ -377,7 +377,7 @@ typedef struct PLpgSQL_function
|
||||
bool fn_retset;
|
||||
|
||||
int fn_nargs;
|
||||
int fn_argvarnos[MAXFMGRARGS];
|
||||
int fn_argvarnos[FUNC_MAX_ARGS];
|
||||
int found_varno;
|
||||
int new_varno;
|
||||
int old_varno;
|
||||
|
@ -3,7 +3,7 @@
|
||||
* procedural language (PL)
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/pl/tcl/pltcl.c,v 1.16 2000/01/05 18:23:54 momjian Exp $
|
||||
* $Header: /cvsroot/pgsql/src/pl/tcl/pltcl.c,v 1.17 2000/01/10 17:14:46 momjian Exp $
|
||||
*
|
||||
* This software is copyrighted by Jan Wieck - Hamburg.
|
||||
*
|
||||
@ -67,10 +67,10 @@ typedef struct pltcl_proc_desc
|
||||
Oid result_in_elem;
|
||||
int result_in_len;
|
||||
int nargs;
|
||||
FmgrInfo arg_out_func[MAXFMGRARGS];
|
||||
Oid arg_out_elem[MAXFMGRARGS];
|
||||
int arg_out_len[MAXFMGRARGS];
|
||||
int arg_is_rel[MAXFMGRARGS];
|
||||
FmgrInfo arg_out_func[FUNC_MAX_ARGS];
|
||||
Oid arg_out_elem[FUNC_MAX_ARGS];
|
||||
int arg_out_len[FUNC_MAX_ARGS];
|
||||
int arg_is_rel[FUNC_MAX_ARGS];
|
||||
} pltcl_proc_desc;
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user