]> granicus.if.org Git - postgresql/commitdiff
Remove unnecessary EvalPlanQual support code --- since this plan node
authorTom Lane <tgl@sss.pgh.pa.us>
Tue, 15 May 2001 16:11:58 +0000 (16:11 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Tue, 15 May 2001 16:11:58 +0000 (16:11 +0000)
type never scans a relation directly, it can't be an EPQ target.
Explicitly drop subplan's tuple table to ensure we have no buffer pin
leaks.

src/backend/executor/nodeSubqueryscan.c

index 5eb0af0352c1ddeb773d59855a8acdf6fe042ef2..43ca323e786afee2f44c07aff4af8c2d7e80facf 100644 (file)
@@ -12,7 +12,7 @@
  *
  *
  * IDENTIFICATION
- *       $Header: /cvsroot/pgsql/src/backend/executor/nodeSubqueryscan.c,v 1.7 2001/05/08 19:47:02 tgl Exp $
+ *       $Header: /cvsroot/pgsql/src/backend/executor/nodeSubqueryscan.c,v 1.8 2001/05/15 16:11:58 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -61,28 +61,11 @@ SubqueryNext(SubqueryScan *node)
        estate = node->scan.plan.state;
        subquerystate = (SubqueryScanState *) node->scan.scanstate;
        direction = estate->es_direction;
-       slot = subquerystate->csstate.css_ScanTupleSlot;
 
        /*
-        * Check if we are evaluating PlanQual for tuple of this relation.
-        * Additional checking is not good, but no other way for now. We could
-        * introduce new nodes for this case and handle SubqueryScan -->
-        * NewNode switching in Init/ReScan plan...
+        * We need not support EvalPlanQual here, since we are not scanning
+        * a real relation.
         */
-       if (estate->es_evTuple != NULL &&
-               estate->es_evTuple[node->scan.scanrelid - 1] != NULL)
-       {
-               ExecClearTuple(slot);
-               if (estate->es_evTupleNull[node->scan.scanrelid - 1])
-                       return slot;            /* return empty slot */
-
-               ExecStoreTuple(estate->es_evTuple[node->scan.scanrelid - 1],
-                                          slot, InvalidBuffer, false);
-
-               /* Flag for the next call that no more tuples */
-               estate->es_evTupleNull[node->scan.scanrelid - 1] = true;
-               return (slot);
-       }
 
        /*
         * get the next tuple from the sub-query
@@ -234,12 +217,16 @@ ExecEndSubqueryScan(SubqueryScan *node)
         */
        ExecEndNode(node->subplan, node->subplan);
 
-       /* XXX we seem to be leaking the sub-EState and tuple table... */
-
+       /*
+        * clean up subquery's tuple table
+        */
        subquerystate->csstate.css_ScanTupleSlot = NULL;
+       ExecDropTupleTable(subquerystate->sss_SubEState->es_tupleTable, true);
+
+       /* XXX we seem to be leaking the sub-EState... */
 
        /*
-        * clean out the tuple table
+        * clean out the upper tuple table
         */
        ExecClearTuple(subquerystate->csstate.cstate.cs_ResultTupleSlot);
 }
@@ -259,14 +246,6 @@ ExecSubqueryReScan(SubqueryScan *node, ExprContext *exprCtxt, Plan *parent)
        subquerystate = (SubqueryScanState *) node->scan.scanstate;
        estate = node->scan.plan.state;
 
-       /* If this is re-scanning of PlanQual ... */
-       if (estate->es_evTuple != NULL &&
-               estate->es_evTuple[node->scan.scanrelid - 1] != NULL)
-       {
-               estate->es_evTupleNull[node->scan.scanrelid - 1] = false;
-               return;
-       }
-
        /*
         * ExecReScan doesn't know about my subplan, so I have to do
         * changed-parameter signaling myself.