mirror of
https://github.com/postgres/postgres.git
synced 2025-06-16 06:01:02 +03:00
Use makeNode() to allocate structures that have to be cast to Node *,
rather than allocating them on the stack. Fixes complaint from gcc 3.3.1.
This commit is contained in:
@ -8,7 +8,7 @@
|
|||||||
*
|
*
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* IDENTIFICATION
|
||||||
* $Header: /cvsroot/pgsql/src/backend/commands/tablecmds.c,v 1.88 2003/10/11 18:04:25 momjian Exp $
|
* $Header: /cvsroot/pgsql/src/backend/commands/tablecmds.c,v 1.89 2003/10/12 23:19:21 momjian Exp $
|
||||||
*
|
*
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
@ -3449,6 +3449,7 @@ validateForeignKeyConstraint(FkConstraint *fkconstraint,
|
|||||||
Relation pkrel)
|
Relation pkrel)
|
||||||
{
|
{
|
||||||
HeapScanDesc scan;
|
HeapScanDesc scan;
|
||||||
|
TriggerData *trigdata = makeNode(TriggerData); /* must be Node aligned */
|
||||||
HeapTuple tuple;
|
HeapTuple tuple;
|
||||||
Trigger trig;
|
Trigger trig;
|
||||||
List *list;
|
List *list;
|
||||||
@ -3506,7 +3507,6 @@ validateForeignKeyConstraint(FkConstraint *fkconstraint,
|
|||||||
while ((tuple = heap_getnext(scan, ForwardScanDirection)) != NULL)
|
while ((tuple = heap_getnext(scan, ForwardScanDirection)) != NULL)
|
||||||
{
|
{
|
||||||
FunctionCallInfoData fcinfo;
|
FunctionCallInfoData fcinfo;
|
||||||
TriggerData trigdata;
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Make a call to the trigger function
|
* Make a call to the trigger function
|
||||||
@ -3518,20 +3518,21 @@ validateForeignKeyConstraint(FkConstraint *fkconstraint,
|
|||||||
/*
|
/*
|
||||||
* We assume RI_FKey_check_ins won't look at flinfo...
|
* We assume RI_FKey_check_ins won't look at flinfo...
|
||||||
*/
|
*/
|
||||||
trigdata.type = T_TriggerData;
|
trigdata->type = T_TriggerData;
|
||||||
trigdata.tg_event = TRIGGER_EVENT_INSERT | TRIGGER_EVENT_ROW;
|
trigdata->tg_event = TRIGGER_EVENT_INSERT | TRIGGER_EVENT_ROW;
|
||||||
trigdata.tg_relation = rel;
|
trigdata->tg_relation = rel;
|
||||||
trigdata.tg_trigtuple = tuple;
|
trigdata->tg_trigtuple = tuple;
|
||||||
trigdata.tg_newtuple = NULL;
|
trigdata->tg_newtuple = NULL;
|
||||||
trigdata.tg_trigger = &trig;
|
trigdata->tg_trigger = &trig;
|
||||||
|
|
||||||
fcinfo.context = (Node *) &trigdata;
|
fcinfo.context = (Node *) trigdata;
|
||||||
|
|
||||||
RI_FKey_check_ins(&fcinfo);
|
RI_FKey_check_ins(&fcinfo);
|
||||||
}
|
}
|
||||||
|
|
||||||
heap_endscan(scan);
|
heap_endscan(scan);
|
||||||
|
|
||||||
|
pfree(trigdata);
|
||||||
pfree(trig.tgargs);
|
pfree(trig.tgargs);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
*
|
*
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* IDENTIFICATION
|
||||||
* $Header: /cvsroot/pgsql/src/backend/executor/execQual.c,v 1.148 2003/10/11 18:04:25 momjian Exp $
|
* $Header: /cvsroot/pgsql/src/backend/executor/execQual.c,v 1.149 2003/10/12 23:19:21 momjian Exp $
|
||||||
*
|
*
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
@ -699,7 +699,8 @@ ExecMakeFunctionResult(FuncExprState *fcache,
|
|||||||
List *arguments = fcache->args;
|
List *arguments = fcache->args;
|
||||||
Datum result;
|
Datum result;
|
||||||
FunctionCallInfoData fcinfo;
|
FunctionCallInfoData fcinfo;
|
||||||
ReturnSetInfo rsinfo; /* for functions returning sets */
|
/* for functions returning sets, must be aligned as Node, so use makeNode */
|
||||||
|
ReturnSetInfo *rsinfo = makeNode(ReturnSetInfo);
|
||||||
ExprDoneCond argDone;
|
ExprDoneCond argDone;
|
||||||
bool hasSetArg;
|
bool hasSetArg;
|
||||||
int i;
|
int i;
|
||||||
@ -746,15 +747,15 @@ ExecMakeFunctionResult(FuncExprState *fcache,
|
|||||||
*/
|
*/
|
||||||
if (fcache->func.fn_retset)
|
if (fcache->func.fn_retset)
|
||||||
{
|
{
|
||||||
fcinfo.resultinfo = (Node *) &rsinfo;
|
fcinfo.resultinfo = (Node *) rsinfo;
|
||||||
rsinfo.type = T_ReturnSetInfo;
|
rsinfo->type = T_ReturnSetInfo;
|
||||||
rsinfo.econtext = econtext;
|
rsinfo->econtext = econtext;
|
||||||
rsinfo.expectedDesc = NULL;
|
rsinfo->expectedDesc = NULL;
|
||||||
rsinfo.allowedModes = (int) SFRM_ValuePerCall;
|
rsinfo->allowedModes = (int) SFRM_ValuePerCall;
|
||||||
rsinfo.returnMode = SFRM_ValuePerCall;
|
rsinfo->returnMode = SFRM_ValuePerCall;
|
||||||
/* isDone is filled below */
|
/* isDone is filled below */
|
||||||
rsinfo.setResult = NULL;
|
rsinfo->setResult = NULL;
|
||||||
rsinfo.setDesc = NULL;
|
rsinfo->setDesc = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -803,10 +804,10 @@ ExecMakeFunctionResult(FuncExprState *fcache,
|
|||||||
if (callit)
|
if (callit)
|
||||||
{
|
{
|
||||||
fcinfo.isnull = false;
|
fcinfo.isnull = false;
|
||||||
rsinfo.isDone = ExprSingleResult;
|
rsinfo->isDone = ExprSingleResult;
|
||||||
result = FunctionCallInvoke(&fcinfo);
|
result = FunctionCallInvoke(&fcinfo);
|
||||||
*isNull = fcinfo.isnull;
|
*isNull = fcinfo.isnull;
|
||||||
*isDone = rsinfo.isDone;
|
*isDone = rsinfo->isDone;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -903,7 +904,7 @@ ExecMakeTableFunctionResult(ExprState *funcexpr,
|
|||||||
TupleDesc tupdesc = NULL;
|
TupleDesc tupdesc = NULL;
|
||||||
Oid funcrettype;
|
Oid funcrettype;
|
||||||
FunctionCallInfoData fcinfo;
|
FunctionCallInfoData fcinfo;
|
||||||
ReturnSetInfo rsinfo;
|
ReturnSetInfo *rsinfo = makeNode(ReturnSetInfo); /* must be Node aligned */
|
||||||
MemoryContext callerContext;
|
MemoryContext callerContext;
|
||||||
MemoryContext oldcontext;
|
MemoryContext oldcontext;
|
||||||
TupleTableSlot *slot;
|
TupleTableSlot *slot;
|
||||||
@ -992,15 +993,15 @@ ExecMakeTableFunctionResult(ExprState *funcexpr,
|
|||||||
* doesn't actually get to see the resultinfo, but set it up anyway
|
* doesn't actually get to see the resultinfo, but set it up anyway
|
||||||
* because we use some of the fields as our own state variables.
|
* because we use some of the fields as our own state variables.
|
||||||
*/
|
*/
|
||||||
fcinfo.resultinfo = (Node *) &rsinfo;
|
fcinfo.resultinfo = (Node *) rsinfo;
|
||||||
rsinfo.type = T_ReturnSetInfo;
|
rsinfo->type = T_ReturnSetInfo;
|
||||||
rsinfo.econtext = econtext;
|
rsinfo->econtext = econtext;
|
||||||
rsinfo.expectedDesc = expectedDesc;
|
rsinfo->expectedDesc = expectedDesc;
|
||||||
rsinfo.allowedModes = (int) (SFRM_ValuePerCall | SFRM_Materialize);
|
rsinfo->allowedModes = (int) (SFRM_ValuePerCall | SFRM_Materialize);
|
||||||
rsinfo.returnMode = SFRM_ValuePerCall;
|
rsinfo->returnMode = SFRM_ValuePerCall;
|
||||||
/* isDone is filled below */
|
/* isDone is filled below */
|
||||||
rsinfo.setResult = NULL;
|
rsinfo->setResult = NULL;
|
||||||
rsinfo.setDesc = NULL;
|
rsinfo->setDesc = NULL;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Switch to short-lived context for calling the function or
|
* Switch to short-lived context for calling the function or
|
||||||
@ -1028,17 +1029,17 @@ ExecMakeTableFunctionResult(ExprState *funcexpr,
|
|||||||
if (direct_function_call)
|
if (direct_function_call)
|
||||||
{
|
{
|
||||||
fcinfo.isnull = false;
|
fcinfo.isnull = false;
|
||||||
rsinfo.isDone = ExprSingleResult;
|
rsinfo->isDone = ExprSingleResult;
|
||||||
result = FunctionCallInvoke(&fcinfo);
|
result = FunctionCallInvoke(&fcinfo);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
result = ExecEvalExpr(funcexpr, econtext,
|
result = ExecEvalExpr(funcexpr, econtext,
|
||||||
&fcinfo.isnull, &rsinfo.isDone);
|
&fcinfo.isnull, &rsinfo->isDone);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Which protocol does function want to use? */
|
/* Which protocol does function want to use? */
|
||||||
if (rsinfo.returnMode == SFRM_ValuePerCall)
|
if (rsinfo->returnMode == SFRM_ValuePerCall)
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
* Check for end of result set.
|
* Check for end of result set.
|
||||||
@ -1047,7 +1048,7 @@ ExecMakeTableFunctionResult(ExprState *funcexpr,
|
|||||||
* tupdesc or tuplestore (since we can't get a tupdesc in the
|
* tupdesc or tuplestore (since we can't get a tupdesc in the
|
||||||
* function-returning-tuple case)
|
* function-returning-tuple case)
|
||||||
*/
|
*/
|
||||||
if (rsinfo.isDone == ExprEndResult)
|
if (rsinfo->isDone == ExprEndResult)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -1093,8 +1094,8 @@ ExecMakeTableFunctionResult(ExprState *funcexpr,
|
|||||||
}
|
}
|
||||||
tupstore = tuplestore_begin_heap(true, false, SortMem);
|
tupstore = tuplestore_begin_heap(true, false, SortMem);
|
||||||
MemoryContextSwitchTo(oldcontext);
|
MemoryContextSwitchTo(oldcontext);
|
||||||
rsinfo.setResult = tupstore;
|
rsinfo->setResult = tupstore;
|
||||||
rsinfo.setDesc = tupdesc;
|
rsinfo->setDesc = tupdesc;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -1127,13 +1128,13 @@ ExecMakeTableFunctionResult(ExprState *funcexpr,
|
|||||||
/*
|
/*
|
||||||
* Are we done?
|
* Are we done?
|
||||||
*/
|
*/
|
||||||
if (rsinfo.isDone != ExprMultipleResult)
|
if (rsinfo->isDone != ExprMultipleResult)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
else if (rsinfo.returnMode == SFRM_Materialize)
|
else if (rsinfo->returnMode == SFRM_Materialize)
|
||||||
{
|
{
|
||||||
/* check we're on the same page as the function author */
|
/* check we're on the same page as the function author */
|
||||||
if (!first_time || rsinfo.isDone != ExprSingleResult)
|
if (!first_time || rsinfo->isDone != ExprSingleResult)
|
||||||
ereport(ERROR,
|
ereport(ERROR,
|
||||||
(errcode(ERRCODE_E_R_I_E_SRF_PROTOCOL_VIOLATED),
|
(errcode(ERRCODE_E_R_I_E_SRF_PROTOCOL_VIOLATED),
|
||||||
errmsg("table-function protocol for materialize mode was not followed")));
|
errmsg("table-function protocol for materialize mode was not followed")));
|
||||||
@ -1144,7 +1145,7 @@ ExecMakeTableFunctionResult(ExprState *funcexpr,
|
|||||||
ereport(ERROR,
|
ereport(ERROR,
|
||||||
(errcode(ERRCODE_E_R_I_E_SRF_PROTOCOL_VIOLATED),
|
(errcode(ERRCODE_E_R_I_E_SRF_PROTOCOL_VIOLATED),
|
||||||
errmsg("unrecognized table-function returnMode: %d",
|
errmsg("unrecognized table-function returnMode: %d",
|
||||||
(int) rsinfo.returnMode)));
|
(int) rsinfo->returnMode)));
|
||||||
|
|
||||||
first_time = false;
|
first_time = false;
|
||||||
}
|
}
|
||||||
@ -1152,8 +1153,8 @@ ExecMakeTableFunctionResult(ExprState *funcexpr,
|
|||||||
MemoryContextSwitchTo(callerContext);
|
MemoryContextSwitchTo(callerContext);
|
||||||
|
|
||||||
/* The returned pointers are those in rsinfo */
|
/* The returned pointers are those in rsinfo */
|
||||||
*returnDesc = rsinfo.setDesc;
|
*returnDesc = rsinfo->setDesc;
|
||||||
return rsinfo.setResult;
|
return rsinfo->setResult;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -10,7 +10,7 @@
|
|||||||
* Portions Copyright (c) 1994, Regents of the University of California
|
* Portions Copyright (c) 1994, Regents of the University of California
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* IDENTIFICATION
|
||||||
* $Header: /cvsroot/pgsql/src/backend/port/sysv_shmem.c,v 1.19 2003/10/11 18:04:25 momjian Exp $
|
* $Header: /cvsroot/pgsql/src/backend/port/sysv_shmem.c,v 1.20 2003/10/12 23:19:21 momjian Exp $
|
||||||
*
|
*
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
@ -365,7 +365,7 @@ PGSharedMemoryAttach(IpcMemoryKey key, IpcMemoryId *shmid)
|
|||||||
|
|
||||||
if (hdr->magic != PGShmemMagic)
|
if (hdr->magic != PGShmemMagic)
|
||||||
{
|
{
|
||||||
shmdt(hdr);
|
shmdt((void *)hdr);
|
||||||
return NULL; /* segment belongs to a non-Postgres app */
|
return NULL; /* segment belongs to a non-Postgres app */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user