OSDN Git Service

Hmm, it seems nodeMaterial has been broken for a good long while;
authorTom Lane <tgl@sss.pgh.pa.us>
Thu, 2 Mar 2000 04:06:39 +0000 (04:06 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Thu, 2 Mar 2000 04:06:39 +0000 (04:06 +0000)
closing a relcache entry more times than you open it is not cool.

src/backend/executor/nodeMaterial.c

index ecf33f4..4348f89 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *       $Header: /cvsroot/pgsql/src/backend/executor/nodeMaterial.c,v 1.29 2000/01/26 05:56:23 momjian Exp $
+ *       $Header: /cvsroot/pgsql/src/backend/executor/nodeMaterial.c,v 1.30 2000/03/02 04:06:39 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -86,7 +86,7 @@ ExecMaterial(Material *node)
                estate->es_direction = ForwardScanDirection;
 
                /* ----------------
-                *       if we couldn't create the temp or current relations then
+                *       if we couldn't create the temp relation then
                 *       we print a warning and return NULL.
                 * ----------------
                 */
@@ -97,13 +97,6 @@ ExecMaterial(Material *node)
                        return NULL;
                }
 
-               currentRelation = matstate->csstate.css_currentRelation;
-               if (currentRelation == NULL)
-               {
-                       elog(DEBUG, "ExecMaterial: current relation is NULL! aborting...");
-                       return NULL;
-               }
-
                /* ----------------
                 *       retrieve tuples from the subplan and
                 *       insert them in the temporary relation
@@ -121,7 +114,6 @@ ExecMaterial(Material *node)
 
                        ExecClearTuple(slot);
                }
-               currentRelation = tempRelation;
 
                /* ----------------
                 *       restore to user specified direction
@@ -134,6 +126,7 @@ ExecMaterial(Material *node)
                 *       sorted relation and update the sortstate information
                 * ----------------
                 */
+               currentRelation = tempRelation;
                currentScanDesc = heap_beginscan(currentRelation,               /* relation */
                                                                                 ScanDirectionIsBackward(dir),
                                                                                 SnapshotSelf,  /* seeself */
@@ -265,7 +258,6 @@ ExecInitMaterial(Material *node, EState *estate, Plan *parent)
         *      create the temporary relation
         * ----------------
         */
-/*       len = ExecTargetListLength(node->plan.targetlist); */
        tempDesc = ExecCreatR(tupType, _NONAME_RELATION_ID_);
 
        /* ----------------
@@ -273,7 +265,7 @@ ExecInitMaterial(Material *node, EState *estate, Plan *parent)
         * ----------------
         */
        matstate->mat_TempRelation = tempDesc;
-       matstate->csstate.css_currentRelation = tempDesc;
+       matstate->csstate.css_currentRelation = NULL;
 
        /* ----------------
         *      return relation oid of temporary relation in a list
@@ -312,12 +304,11 @@ ExecEndMaterial(Material *node)
        matstate = node->matstate;
        tempRelation = matstate->mat_TempRelation;
 
-       heap_drop(tempRelation);
-
        /* ----------------
-        *      close the temp relation and shut down the scan.
+        *      shut down the scan, but don't close the temp relation
         * ----------------
         */
+       matstate->csstate.css_currentRelation = NULL;
        ExecCloseR((Plan *) node);
 
        /* ----------------
@@ -332,6 +323,13 @@ ExecEndMaterial(Material *node)
         * ----------------
         */
        ExecClearTuple(matstate->csstate.css_ScanTupleSlot);
+
+       /* ----------------
+        *      delete the temp relation
+        * ----------------
+        */
+       if (tempRelation != NULL)
+               heap_drop(tempRelation);
 }
 
 /* ----------------------------------------------------------------