From 9f198423dfb333bea532f2268fbc6eb62b93445a Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Thu, 2 Mar 2000 04:06:39 +0000 Subject: [PATCH] Hmm, it seems nodeMaterial has been broken for a good long while; closing a relcache entry more times than you open it is not cool. --- src/backend/executor/nodeMaterial.c | 28 +++++++++++++--------------- 1 file changed, 13 insertions(+), 15 deletions(-) diff --git a/src/backend/executor/nodeMaterial.c b/src/backend/executor/nodeMaterial.c index ecf33f4c20..4348f89ccc 100644 --- a/src/backend/executor/nodeMaterial.c +++ b/src/backend/executor/nodeMaterial.c @@ -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); } /* ---------------------------------------------------------------- -- 2.11.0