aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/backend/executor/execMain.c18
1 files changed, 9 insertions, 9 deletions
diff --git a/src/backend/executor/execMain.c b/src/backend/executor/execMain.c
index f074ce951fd..00137272e24 100644
--- a/src/backend/executor/execMain.c
+++ b/src/backend/executor/execMain.c
@@ -26,7 +26,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/executor/execMain.c,v 1.68 1999/01/29 11:56:00 vadim Exp $
+ * $Header: /cvsroot/pgsql/src/backend/executor/execMain.c,v 1.69 1999/01/29 13:24:36 vadim Exp $
*
*-------------------------------------------------------------------------
*/
@@ -1593,7 +1593,7 @@ EvalPlanQual(EState *estate, Index rti, ItemPointer tid)
/* try to reuse plan used previously */
evalPlanQual *newepq = (epq != NULL) ? epq->free : NULL;
- if (newepq == NULL)
+ if (newepq == NULL) /* first call or freePQ stack is empty */
{
newepq = (evalPlanQual*) palloc(sizeof(evalPlanQual));
/* Init EState */
@@ -1614,21 +1614,18 @@ EvalPlanQual(EState *estate, Index rti, ItemPointer tid)
/* ... rest */
newepq->plan = copyObject(estate->es_origPlan);
newepq->free = NULL;
- if (epq == NULL)
+ epqstate->es_evTupleNull = (bool*)
+ palloc(length(estate->es_range_table) * sizeof(bool));
+ if (epq == NULL) /* first call */
{
epqstate->es_evTuple = (HeapTuple*)
palloc(length(estate->es_range_table) * sizeof(HeapTuple));
memset(epqstate->es_evTuple, 0,
length(estate->es_range_table) * sizeof(HeapTuple));
- epqstate->es_evTupleNull = (bool*)
- palloc(length(estate->es_range_table) * sizeof(bool));
- memset(epqstate->es_evTupleNull, false,
- length(estate->es_range_table) * sizeof(bool));
}
else
{
epqstate->es_evTuple = epq->estate.es_evTuple;
- epqstate->es_evTupleNull = epq->estate.es_evTupleNull;
}
}
else
@@ -1697,8 +1694,9 @@ EvalPlanQual(EState *estate, Index rti, ItemPointer tid)
/*
* Nice! We got tuple - now copy it.
*/
+ if (epqstate->es_evTuple[epq->rti - 1] != NULL)
+ pfree(epqstate->es_evTuple[epq->rti - 1]);
epqstate->es_evTuple[epq->rti - 1] = heap_copytuple(&tuple);
- epqstate->es_evTupleNull[epq->rti - 1] = false;
ReleaseBuffer(buffer);
break;
}
@@ -1738,6 +1736,8 @@ EvalPlanQual(EState *estate, Index rti, ItemPointer tid)
if (estate->es_origPlan->nParamExec > 0)
memset(epqstate->es_param_exec_vals, 0,
estate->es_origPlan->nParamExec * sizeof(ParamExecData));
+ memset(epqstate->es_evTupleNull, false,
+ length(estate->es_range_table) * sizeof(bool));
ExecInitNode(epq->plan, epqstate, NULL);
/*