diff --git a/src/backend/executor/execProcnode.c b/src/backend/executor/execProcnode.c index 4d288bc8d41f5..b4b5c562c0f2a 100644 --- a/src/backend/executor/execProcnode.c +++ b/src/backend/executor/execProcnode.c @@ -667,22 +667,10 @@ ExecEndNode(PlanState *node) ExecEndTableFuncScan((TableFuncScanState *) node); break; - case T_ValuesScanState: - ExecEndValuesScan((ValuesScanState *) node); - break; - case T_CteScanState: ExecEndCteScan((CteScanState *) node); break; - case T_NamedTuplestoreScanState: - ExecEndNamedTuplestoreScan((NamedTuplestoreScanState *) node); - break; - - case T_WorkTableScanState: - ExecEndWorkTableScan((WorkTableScanState *) node); - break; - case T_ForeignScanState: ExecEndForeignScan((ForeignScanState *) node); break; @@ -757,6 +745,12 @@ ExecEndNode(PlanState *node) ExecEndLimit((LimitState *) node); break; + /* No clean up actions for these nodes. */ + case T_ValuesScanState: + case T_NamedTuplestoreScanState: + case T_WorkTableScanState: + break; + default: elog(ERROR, "unrecognized node type: %d", (int) nodeTag(node)); break; diff --git a/src/backend/executor/execUtils.c b/src/backend/executor/execUtils.c index c06b228858335..16704c0c2f183 100644 --- a/src/backend/executor/execUtils.c +++ b/src/backend/executor/execUtils.c @@ -638,32 +638,6 @@ tlist_matches_tupdesc(PlanState *ps, List *tlist, int varno, TupleDesc tupdesc) return true; } -/* ---------------- - * ExecFreeExprContext - * - * A plan node's ExprContext should be freed explicitly during executor - * shutdown because there may be shutdown callbacks to call. (Other resources - * made by the above routines, such as projection info, don't need to be freed - * explicitly because they're just memory in the per-query memory context.) - * - * However ... there is no particular need to do it during ExecEndNode, - * because FreeExecutorState will free any remaining ExprContexts within - * the EState. Letting FreeExecutorState do it allows the ExprContexts to - * be freed in reverse order of creation, rather than order of creation as - * will happen if we delete them here, which saves O(N^2) work in the list - * cleanup inside FreeExprContext. - * ---------------- - */ -void -ExecFreeExprContext(PlanState *planstate) -{ - /* - * Per above discussion, don't actually delete the ExprContext. We do - * unlink it from the plan node, though. - */ - planstate->ps_ExprContext = NULL; -} - /* ---------------------------------------------------------------- * Scan node support diff --git a/src/backend/executor/nodeAgg.c b/src/backend/executor/nodeAgg.c index 468db94fe5ba0..f154f28902850 100644 --- a/src/backend/executor/nodeAgg.c +++ b/src/backend/executor/nodeAgg.c @@ -4357,16 +4357,6 @@ ExecEndAgg(AggState *node) if (node->hashcontext) ReScanExprContext(node->hashcontext); - /* - * We don't actually free any ExprContexts here (see comment in - * ExecFreeExprContext), just unlinking the output one from the plan node - * suffices. - */ - ExecFreeExprContext(&node->ss.ps); - - /* clean up tuple table */ - ExecClearTuple(node->ss.ss_ScanTupleSlot); - outerPlan = outerPlanState(node); ExecEndNode(outerPlan); } diff --git a/src/backend/executor/nodeBitmapHeapscan.c b/src/backend/executor/nodeBitmapHeapscan.c index f35df0b8bfb47..2db0acfc76ac2 100644 --- a/src/backend/executor/nodeBitmapHeapscan.c +++ b/src/backend/executor/nodeBitmapHeapscan.c @@ -655,18 +655,6 @@ ExecEndBitmapHeapScan(BitmapHeapScanState *node) */ scanDesc = node->ss.ss_currentScanDesc; - /* - * Free the exprcontext - */ - ExecFreeExprContext(&node->ss.ps); - - /* - * clear out tuple table slots - */ - if (node->ss.ps.ps_ResultTupleSlot) - ExecClearTuple(node->ss.ps.ps_ResultTupleSlot); - ExecClearTuple(node->ss.ss_ScanTupleSlot); - /* * close down subplans */ diff --git a/src/backend/executor/nodeBitmapIndexscan.c b/src/backend/executor/nodeBitmapIndexscan.c index 83ec9ede899ec..7cf8532bc9590 100644 --- a/src/backend/executor/nodeBitmapIndexscan.c +++ b/src/backend/executor/nodeBitmapIndexscan.c @@ -184,14 +184,6 @@ ExecEndBitmapIndexScan(BitmapIndexScanState *node) indexRelationDesc = node->biss_RelationDesc; indexScanDesc = node->biss_ScanDesc; - /* - * Free the exprcontext ... now dead code, see ExecFreeExprContext - */ -#ifdef NOT_USED - if (node->biss_RuntimeContext) - FreeExprContext(node->biss_RuntimeContext, true); -#endif - /* * close the index relation (no-op if we didn't open it) */ diff --git a/src/backend/executor/nodeCtescan.c b/src/backend/executor/nodeCtescan.c index cc4c4243e2fb5..a0c0c4be337d7 100644 --- a/src/backend/executor/nodeCtescan.c +++ b/src/backend/executor/nodeCtescan.c @@ -287,18 +287,6 @@ ExecInitCteScan(CteScan *node, EState *estate, int eflags) void ExecEndCteScan(CteScanState *node) { - /* - * Free exprcontext - */ - ExecFreeExprContext(&node->ss.ps); - - /* - * clean out the tuple table - */ - if (node->ss.ps.ps_ResultTupleSlot) - ExecClearTuple(node->ss.ps.ps_ResultTupleSlot); - ExecClearTuple(node->ss.ss_ScanTupleSlot); - /* * If I am the leader, free the tuplestore. */ diff --git a/src/backend/executor/nodeCustom.c b/src/backend/executor/nodeCustom.c index bd42c65b29385..28b5bb9353ab2 100644 --- a/src/backend/executor/nodeCustom.c +++ b/src/backend/executor/nodeCustom.c @@ -129,13 +129,6 @@ ExecEndCustomScan(CustomScanState *node) { Assert(node->methods->EndCustomScan != NULL); node->methods->EndCustomScan(node); - - /* Free the exprcontext */ - ExecFreeExprContext(&node->ss.ps); - - /* Clean out the tuple table */ - ExecClearTuple(node->ss.ps.ps_ResultTupleSlot); - ExecClearTuple(node->ss.ss_ScanTupleSlot); } void diff --git a/src/backend/executor/nodeForeignscan.c b/src/backend/executor/nodeForeignscan.c index c2139acca0752..73913ebb18423 100644 --- a/src/backend/executor/nodeForeignscan.c +++ b/src/backend/executor/nodeForeignscan.c @@ -312,14 +312,6 @@ ExecEndForeignScan(ForeignScanState *node) /* Shut down any outer plan. */ if (outerPlanState(node)) ExecEndNode(outerPlanState(node)); - - /* Free the exprcontext */ - ExecFreeExprContext(&node->ss.ps); - - /* clean out the tuple table */ - if (node->ss.ps.ps_ResultTupleSlot) - ExecClearTuple(node->ss.ps.ps_ResultTupleSlot); - ExecClearTuple(node->ss.ss_ScanTupleSlot); } /* ---------------------------------------------------------------- diff --git a/src/backend/executor/nodeFunctionscan.c b/src/backend/executor/nodeFunctionscan.c index dd06ef8aee868..2dddbcda14123 100644 --- a/src/backend/executor/nodeFunctionscan.c +++ b/src/backend/executor/nodeFunctionscan.c @@ -523,18 +523,6 @@ ExecEndFunctionScan(FunctionScanState *node) { int i; - /* - * Free the exprcontext - */ - ExecFreeExprContext(&node->ss.ps); - - /* - * clean out the tuple table - */ - if (node->ss.ps.ps_ResultTupleSlot) - ExecClearTuple(node->ss.ps.ps_ResultTupleSlot); - ExecClearTuple(node->ss.ss_ScanTupleSlot); - /* * Release slots and tuplestore resources */ @@ -542,9 +530,6 @@ ExecEndFunctionScan(FunctionScanState *node) { FunctionScanPerFuncState *fs = &node->funcstates[i]; - if (fs->func_slot) - ExecClearTuple(fs->func_slot); - if (fs->tstore != NULL) { tuplestore_end(node->funcstates[i].tstore); diff --git a/src/backend/executor/nodeGather.c b/src/backend/executor/nodeGather.c index 307fc10eea7bd..bb2500a469041 100644 --- a/src/backend/executor/nodeGather.c +++ b/src/backend/executor/nodeGather.c @@ -250,9 +250,6 @@ ExecEndGather(GatherState *node) { ExecEndNode(outerPlanState(node)); /* let children clean up first */ ExecShutdownGather(node); - ExecFreeExprContext(&node->ps); - if (node->ps.ps_ResultTupleSlot) - ExecClearTuple(node->ps.ps_ResultTupleSlot); } /* diff --git a/src/backend/executor/nodeGatherMerge.c b/src/backend/executor/nodeGatherMerge.c index 9d5e1a46e9e2a..7a71a58509cb0 100644 --- a/src/backend/executor/nodeGatherMerge.c +++ b/src/backend/executor/nodeGatherMerge.c @@ -290,9 +290,6 @@ ExecEndGatherMerge(GatherMergeState *node) { ExecEndNode(outerPlanState(node)); /* let children clean up first */ ExecShutdownGatherMerge(node); - ExecFreeExprContext(&node->ps); - if (node->ps.ps_ResultTupleSlot) - ExecClearTuple(node->ps.ps_ResultTupleSlot); } /* ---------------------------------------------------------------- diff --git a/src/backend/executor/nodeGroup.c b/src/backend/executor/nodeGroup.c index 25a1618952e6b..8c650f0e46d58 100644 --- a/src/backend/executor/nodeGroup.c +++ b/src/backend/executor/nodeGroup.c @@ -228,11 +228,6 @@ ExecEndGroup(GroupState *node) { PlanState *outerPlan; - ExecFreeExprContext(&node->ss.ps); - - /* clean up tuple table */ - ExecClearTuple(node->ss.ss_ScanTupleSlot); - outerPlan = outerPlanState(node); ExecEndNode(outerPlan); } diff --git a/src/backend/executor/nodeHash.c b/src/backend/executor/nodeHash.c index 8b5c35b82b884..e72f0986c268f 100644 --- a/src/backend/executor/nodeHash.c +++ b/src/backend/executor/nodeHash.c @@ -415,11 +415,6 @@ ExecEndHash(HashState *node) { PlanState *outerPlan; - /* - * free exprcontext - */ - ExecFreeExprContext(&node->ps); - /* * shut down the subplan */ diff --git a/src/backend/executor/nodeHashjoin.c b/src/backend/executor/nodeHashjoin.c index 980746128bcbe..aea44a9d566aa 100644 --- a/src/backend/executor/nodeHashjoin.c +++ b/src/backend/executor/nodeHashjoin.c @@ -867,18 +867,6 @@ ExecEndHashJoin(HashJoinState *node) node->hj_HashTable = NULL; } - /* - * Free the exprcontext - */ - ExecFreeExprContext(&node->js.ps); - - /* - * clean out the tuple table - */ - ExecClearTuple(node->js.ps.ps_ResultTupleSlot); - ExecClearTuple(node->hj_OuterTupleSlot); - ExecClearTuple(node->hj_HashTupleSlot); - /* * clean up subtrees */ diff --git a/src/backend/executor/nodeIncrementalSort.c b/src/backend/executor/nodeIncrementalSort.c index 7683e3341cde9..cd094a190cb6a 100644 --- a/src/backend/executor/nodeIncrementalSort.c +++ b/src/backend/executor/nodeIncrementalSort.c @@ -1079,11 +1079,6 @@ ExecEndIncrementalSort(IncrementalSortState *node) { SO_printf("ExecEndIncrementalSort: shutting down sort node\n"); - /* clean out the scan tuple */ - ExecClearTuple(node->ss.ss_ScanTupleSlot); - /* must drop pointer to sort result tuple */ - ExecClearTuple(node->ss.ps.ps_ResultTupleSlot); - /* must drop standalone tuple slots from outer node */ ExecDropSingleTupleTableSlot(node->group_pivot); ExecDropSingleTupleTableSlot(node->transfer_tuple); diff --git a/src/backend/executor/nodeIndexonlyscan.c b/src/backend/executor/nodeIndexonlyscan.c index 0b43a9b969901..f1db35665c8bc 100644 --- a/src/backend/executor/nodeIndexonlyscan.c +++ b/src/backend/executor/nodeIndexonlyscan.c @@ -380,22 +380,6 @@ ExecEndIndexOnlyScan(IndexOnlyScanState *node) node->ioss_VMBuffer = InvalidBuffer; } - /* - * Free the exprcontext(s) ... now dead code, see ExecFreeExprContext - */ -#ifdef NOT_USED - ExecFreeExprContext(&node->ss.ps); - if (node->ioss_RuntimeContext) - FreeExprContext(node->ioss_RuntimeContext, true); -#endif - - /* - * clear out tuple table slots - */ - if (node->ss.ps.ps_ResultTupleSlot) - ExecClearTuple(node->ss.ps.ps_ResultTupleSlot); - ExecClearTuple(node->ss.ss_ScanTupleSlot); - /* * close the index relation (no-op if we didn't open it) */ diff --git a/src/backend/executor/nodeIndexscan.c b/src/backend/executor/nodeIndexscan.c index 4540c7781d2d2..14b9c00217a84 100644 --- a/src/backend/executor/nodeIndexscan.c +++ b/src/backend/executor/nodeIndexscan.c @@ -794,22 +794,6 @@ ExecEndIndexScan(IndexScanState *node) indexRelationDesc = node->iss_RelationDesc; indexScanDesc = node->iss_ScanDesc; - /* - * Free the exprcontext(s) ... now dead code, see ExecFreeExprContext - */ -#ifdef NOT_USED - ExecFreeExprContext(&node->ss.ps); - if (node->iss_RuntimeContext) - FreeExprContext(node->iss_RuntimeContext, true); -#endif - - /* - * clear out tuple table slots - */ - if (node->ss.ps.ps_ResultTupleSlot) - ExecClearTuple(node->ss.ps.ps_ResultTupleSlot); - ExecClearTuple(node->ss.ss_ScanTupleSlot); - /* * close the index relation (no-op if we didn't open it) */ diff --git a/src/backend/executor/nodeLimit.c b/src/backend/executor/nodeLimit.c index 425fbfc405fda..5654158e3e937 100644 --- a/src/backend/executor/nodeLimit.c +++ b/src/backend/executor/nodeLimit.c @@ -534,7 +534,6 @@ ExecInitLimit(Limit *node, EState *estate, int eflags) void ExecEndLimit(LimitState *node) { - ExecFreeExprContext(&node->ps); ExecEndNode(outerPlanState(node)); } diff --git a/src/backend/executor/nodeMaterial.c b/src/backend/executor/nodeMaterial.c index 09632678b0332..753ea289151d1 100644 --- a/src/backend/executor/nodeMaterial.c +++ b/src/backend/executor/nodeMaterial.c @@ -239,11 +239,6 @@ ExecInitMaterial(Material *node, EState *estate, int eflags) void ExecEndMaterial(MaterialState *node) { - /* - * clean out the tuple table - */ - ExecClearTuple(node->ss.ss_ScanTupleSlot); - /* * Release tuplestore resources */ diff --git a/src/backend/executor/nodeMemoize.c b/src/backend/executor/nodeMemoize.c index 4f04269e2621b..94bf4792873a8 100644 --- a/src/backend/executor/nodeMemoize.c +++ b/src/backend/executor/nodeMemoize.c @@ -1091,15 +1091,6 @@ ExecEndMemoize(MemoizeState *node) /* Remove the cache context */ MemoryContextDelete(node->tableContext); - ExecClearTuple(node->ss.ss_ScanTupleSlot); - /* must drop pointer to cache result tuple */ - ExecClearTuple(node->ss.ps.ps_ResultTupleSlot); - - /* - * free exprcontext - */ - ExecFreeExprContext(&node->ss.ps); - /* * shut down the subplan */ diff --git a/src/backend/executor/nodeMergejoin.c b/src/backend/executor/nodeMergejoin.c index 00f96d045e0bb..ed3ebe92e528f 100644 --- a/src/backend/executor/nodeMergejoin.c +++ b/src/backend/executor/nodeMergejoin.c @@ -1643,17 +1643,6 @@ ExecEndMergeJoin(MergeJoinState *node) MJ1_printf("ExecEndMergeJoin: %s\n", "ending node processing"); - /* - * Free the exprcontext - */ - ExecFreeExprContext(&node->js.ps); - - /* - * clean out the tuple table - */ - ExecClearTuple(node->js.ps.ps_ResultTupleSlot); - ExecClearTuple(node->mj_MarkedTupleSlot); - /* * shut down the subplans */ diff --git a/src/backend/executor/nodeModifyTable.c b/src/backend/executor/nodeModifyTable.c index 5005d8c0d12ca..d21a178ad5a06 100644 --- a/src/backend/executor/nodeModifyTable.c +++ b/src/backend/executor/nodeModifyTable.c @@ -4446,17 +4446,6 @@ ExecEndModifyTable(ModifyTableState *node) ExecDropSingleTupleTableSlot(node->mt_root_tuple_slot); } - /* - * Free the exprcontext - */ - ExecFreeExprContext(&node->ps); - - /* - * clean out the tuple table - */ - if (node->ps.ps_ResultTupleSlot) - ExecClearTuple(node->ps.ps_ResultTupleSlot); - /* * Terminate EPQ execution if active */ diff --git a/src/backend/executor/nodeNamedtuplestorescan.c b/src/backend/executor/nodeNamedtuplestorescan.c index 46832ad82fbcc..3547dc2b10ea9 100644 --- a/src/backend/executor/nodeNamedtuplestorescan.c +++ b/src/backend/executor/nodeNamedtuplestorescan.c @@ -155,28 +155,6 @@ ExecInitNamedTuplestoreScan(NamedTuplestoreScan *node, EState *estate, int eflag return scanstate; } -/* ---------------------------------------------------------------- - * ExecEndNamedTuplestoreScan - * - * frees any storage allocated through C routines. - * ---------------------------------------------------------------- - */ -void -ExecEndNamedTuplestoreScan(NamedTuplestoreScanState *node) -{ - /* - * Free exprcontext - */ - ExecFreeExprContext(&node->ss.ps); - - /* - * clean out the tuple table - */ - if (node->ss.ps.ps_ResultTupleSlot) - ExecClearTuple(node->ss.ps.ps_ResultTupleSlot); - ExecClearTuple(node->ss.ss_ScanTupleSlot); -} - /* ---------------------------------------------------------------- * ExecReScanNamedTuplestoreScan * diff --git a/src/backend/executor/nodeNestloop.c b/src/backend/executor/nodeNestloop.c index b3d52e69ecb70..ebd1406843b56 100644 --- a/src/backend/executor/nodeNestloop.c +++ b/src/backend/executor/nodeNestloop.c @@ -364,16 +364,6 @@ ExecEndNestLoop(NestLoopState *node) NL1_printf("ExecEndNestLoop: %s\n", "ending node processing"); - /* - * Free the exprcontext - */ - ExecFreeExprContext(&node->js.ps); - - /* - * clean out the tuple table - */ - ExecClearTuple(node->js.ps.ps_ResultTupleSlot); - /* * close down subplans */ diff --git a/src/backend/executor/nodeProjectSet.c b/src/backend/executor/nodeProjectSet.c index f6ff3dc44c1ca..b4bbdc89b19cf 100644 --- a/src/backend/executor/nodeProjectSet.c +++ b/src/backend/executor/nodeProjectSet.c @@ -320,16 +320,6 @@ ExecInitProjectSet(ProjectSet *node, EState *estate, int eflags) void ExecEndProjectSet(ProjectSetState *node) { - /* - * Free the exprcontext - */ - ExecFreeExprContext(&node->ps); - - /* - * clean out the tuple table - */ - ExecClearTuple(node->ps.ps_ResultTupleSlot); - /* * shut down subplans */ diff --git a/src/backend/executor/nodeResult.c b/src/backend/executor/nodeResult.c index 4219712d306f9..e9f5732f33b90 100644 --- a/src/backend/executor/nodeResult.c +++ b/src/backend/executor/nodeResult.c @@ -240,16 +240,6 @@ ExecInitResult(Result *node, EState *estate, int eflags) void ExecEndResult(ResultState *node) { - /* - * Free the exprcontext - */ - ExecFreeExprContext(&node->ps); - - /* - * clean out the tuple table - */ - ExecClearTuple(node->ps.ps_ResultTupleSlot); - /* * shut down subplans */ diff --git a/src/backend/executor/nodeSamplescan.c b/src/backend/executor/nodeSamplescan.c index d7e22b1dbbaeb..41c1ea37ad482 100644 --- a/src/backend/executor/nodeSamplescan.c +++ b/src/backend/executor/nodeSamplescan.c @@ -188,18 +188,6 @@ ExecEndSampleScan(SampleScanState *node) if (node->tsmroutine->EndSampleScan) node->tsmroutine->EndSampleScan(node); - /* - * Free the exprcontext - */ - ExecFreeExprContext(&node->ss.ps); - - /* - * clean out the tuple table - */ - if (node->ss.ps.ps_ResultTupleSlot) - ExecClearTuple(node->ss.ps.ps_ResultTupleSlot); - ExecClearTuple(node->ss.ss_ScanTupleSlot); - /* * close heap scan */ diff --git a/src/backend/executor/nodeSeqscan.c b/src/backend/executor/nodeSeqscan.c index 4da0f28f7baa6..49a5933aff698 100644 --- a/src/backend/executor/nodeSeqscan.c +++ b/src/backend/executor/nodeSeqscan.c @@ -190,18 +190,6 @@ ExecEndSeqScan(SeqScanState *node) */ scanDesc = node->ss.ss_currentScanDesc; - /* - * Free the exprcontext - */ - ExecFreeExprContext(&node->ss.ps); - - /* - * clean out the tuple table - */ - if (node->ss.ps.ps_ResultTupleSlot) - ExecClearTuple(node->ss.ps.ps_ResultTupleSlot); - ExecClearTuple(node->ss.ss_ScanTupleSlot); - /* * close heap scan */ diff --git a/src/backend/executor/nodeSetOp.c b/src/backend/executor/nodeSetOp.c index 4bc2406b89817..98c1b84d43638 100644 --- a/src/backend/executor/nodeSetOp.c +++ b/src/backend/executor/nodeSetOp.c @@ -582,13 +582,9 @@ ExecInitSetOp(SetOp *node, EState *estate, int eflags) void ExecEndSetOp(SetOpState *node) { - /* clean up tuple table */ - ExecClearTuple(node->ps.ps_ResultTupleSlot); - /* free subsidiary stuff including hashtable */ if (node->tableContext) MemoryContextDelete(node->tableContext); - ExecFreeExprContext(&node->ps); ExecEndNode(outerPlanState(node)); } diff --git a/src/backend/executor/nodeSort.c b/src/backend/executor/nodeSort.c index c6c72c6e67852..eea7f2ae15027 100644 --- a/src/backend/executor/nodeSort.c +++ b/src/backend/executor/nodeSort.c @@ -303,13 +303,6 @@ ExecEndSort(SortState *node) SO1_printf("ExecEndSort: %s\n", "shutting down sort node"); - /* - * clean out the tuple table - */ - ExecClearTuple(node->ss.ss_ScanTupleSlot); - /* must drop pointer to sort result tuple */ - ExecClearTuple(node->ss.ps.ps_ResultTupleSlot); - /* * Release tuplesort resources */ diff --git a/src/backend/executor/nodeSubqueryscan.c b/src/backend/executor/nodeSubqueryscan.c index 42471bfc041c7..1ee62956601c7 100644 --- a/src/backend/executor/nodeSubqueryscan.c +++ b/src/backend/executor/nodeSubqueryscan.c @@ -167,18 +167,6 @@ ExecInitSubqueryScan(SubqueryScan *node, EState *estate, int eflags) void ExecEndSubqueryScan(SubqueryScanState *node) { - /* - * Free the exprcontext - */ - ExecFreeExprContext(&node->ss.ps); - - /* - * clean out the upper tuple table - */ - if (node->ss.ps.ps_ResultTupleSlot) - ExecClearTuple(node->ss.ps.ps_ResultTupleSlot); - ExecClearTuple(node->ss.ss_ScanTupleSlot); - /* * close down subquery */ diff --git a/src/backend/executor/nodeTableFuncscan.c b/src/backend/executor/nodeTableFuncscan.c index 791cbd2372400..a60dcd49434fd 100644 --- a/src/backend/executor/nodeTableFuncscan.c +++ b/src/backend/executor/nodeTableFuncscan.c @@ -213,18 +213,6 @@ ExecInitTableFuncScan(TableFuncScan *node, EState *estate, int eflags) void ExecEndTableFuncScan(TableFuncScanState *node) { - /* - * Free the exprcontext - */ - ExecFreeExprContext(&node->ss.ps); - - /* - * clean out the tuple table - */ - if (node->ss.ps.ps_ResultTupleSlot) - ExecClearTuple(node->ss.ps.ps_ResultTupleSlot); - ExecClearTuple(node->ss.ss_ScanTupleSlot); - /* * Release tuplestore resources */ diff --git a/src/backend/executor/nodeTidrangescan.c b/src/backend/executor/nodeTidrangescan.c index 2124c55ef53ec..da622d3f5f3f4 100644 --- a/src/backend/executor/nodeTidrangescan.c +++ b/src/backend/executor/nodeTidrangescan.c @@ -331,18 +331,6 @@ ExecEndTidRangeScan(TidRangeScanState *node) if (scan != NULL) table_endscan(scan); - - /* - * Free the exprcontext - */ - ExecFreeExprContext(&node->ss.ps); - - /* - * clear out tuple table slots - */ - if (node->ss.ps.ps_ResultTupleSlot) - ExecClearTuple(node->ss.ps.ps_ResultTupleSlot); - ExecClearTuple(node->ss.ss_ScanTupleSlot); } /* ---------------------------------------------------------------- diff --git a/src/backend/executor/nodeTidscan.c b/src/backend/executor/nodeTidscan.c index 862bd0330bc7b..15055077d0324 100644 --- a/src/backend/executor/nodeTidscan.c +++ b/src/backend/executor/nodeTidscan.c @@ -472,18 +472,6 @@ ExecEndTidScan(TidScanState *node) { if (node->ss.ss_currentScanDesc) table_endscan(node->ss.ss_currentScanDesc); - - /* - * Free the exprcontext - */ - ExecFreeExprContext(&node->ss.ps); - - /* - * clear out tuple table slots - */ - if (node->ss.ps.ps_ResultTupleSlot) - ExecClearTuple(node->ss.ps.ps_ResultTupleSlot); - ExecClearTuple(node->ss.ss_ScanTupleSlot); } /* ---------------------------------------------------------------- diff --git a/src/backend/executor/nodeUnique.c b/src/backend/executor/nodeUnique.c index 45035d74fa719..01f951197c16d 100644 --- a/src/backend/executor/nodeUnique.c +++ b/src/backend/executor/nodeUnique.c @@ -168,11 +168,6 @@ ExecInitUnique(Unique *node, EState *estate, int eflags) void ExecEndUnique(UniqueState *node) { - /* clean up tuple table */ - ExecClearTuple(node->ps.ps_ResultTupleSlot); - - ExecFreeExprContext(&node->ps); - ExecEndNode(outerPlanState(node)); } diff --git a/src/backend/executor/nodeValuesscan.c b/src/backend/executor/nodeValuesscan.c index 32ace6301754c..fbfb067f3beba 100644 --- a/src/backend/executor/nodeValuesscan.c +++ b/src/backend/executor/nodeValuesscan.c @@ -319,30 +319,6 @@ ExecInitValuesScan(ValuesScan *node, EState *estate, int eflags) return scanstate; } -/* ---------------------------------------------------------------- - * ExecEndValuesScan - * - * frees any storage allocated through C routines. - * ---------------------------------------------------------------- - */ -void -ExecEndValuesScan(ValuesScanState *node) -{ - /* - * Free both exprcontexts - */ - ExecFreeExprContext(&node->ss.ps); - node->ss.ps.ps_ExprContext = node->rowcontext; - ExecFreeExprContext(&node->ss.ps); - - /* - * clean out the tuple table - */ - if (node->ss.ps.ps_ResultTupleSlot) - ExecClearTuple(node->ss.ps.ps_ResultTupleSlot); - ExecClearTuple(node->ss.ss_ScanTupleSlot); -} - /* ---------------------------------------------------------------- * ExecReScanValuesScan * diff --git a/src/backend/executor/nodeWindowAgg.c b/src/backend/executor/nodeWindowAgg.c index 310ac23e3a134..77724a6daaffe 100644 --- a/src/backend/executor/nodeWindowAgg.c +++ b/src/backend/executor/nodeWindowAgg.c @@ -2686,23 +2686,6 @@ ExecEndWindowAgg(WindowAggState *node) release_partition(node); - ExecClearTuple(node->ss.ss_ScanTupleSlot); - ExecClearTuple(node->first_part_slot); - ExecClearTuple(node->agg_row_slot); - ExecClearTuple(node->temp_slot_1); - ExecClearTuple(node->temp_slot_2); - if (node->framehead_slot) - ExecClearTuple(node->framehead_slot); - if (node->frametail_slot) - ExecClearTuple(node->frametail_slot); - - /* - * Free both the expr contexts. - */ - ExecFreeExprContext(&node->ss.ps); - node->ss.ps.ps_ExprContext = node->tmpcontext; - ExecFreeExprContext(&node->ss.ps); - for (i = 0; i < node->numaggs; i++) { if (node->peragg[i].aggcontext != node->aggcontext) diff --git a/src/backend/executor/nodeWorktablescan.c b/src/backend/executor/nodeWorktablescan.c index 0c13448236a80..17a548865ed65 100644 --- a/src/backend/executor/nodeWorktablescan.c +++ b/src/backend/executor/nodeWorktablescan.c @@ -181,28 +181,6 @@ ExecInitWorkTableScan(WorkTableScan *node, EState *estate, int eflags) return scanstate; } -/* ---------------------------------------------------------------- - * ExecEndWorkTableScan - * - * frees any storage allocated through C routines. - * ---------------------------------------------------------------- - */ -void -ExecEndWorkTableScan(WorkTableScanState *node) -{ - /* - * Free exprcontext - */ - ExecFreeExprContext(&node->ss.ps); - - /* - * clean out the tuple table - */ - if (node->ss.ps.ps_ResultTupleSlot) - ExecClearTuple(node->ss.ps.ps_ResultTupleSlot); - ExecClearTuple(node->ss.ss_ScanTupleSlot); -} - /* ---------------------------------------------------------------- * ExecReScanWorkTableScan * diff --git a/src/include/executor/executor.h b/src/include/executor/executor.h index c677e490d7622..aeebe0e0ff98b 100644 --- a/src/include/executor/executor.h +++ b/src/include/executor/executor.h @@ -569,7 +569,6 @@ extern void ExecAssignProjectionInfo(PlanState *planstate, TupleDesc inputDesc); extern void ExecConditionalAssignProjectionInfo(PlanState *planstate, TupleDesc inputDesc, int varno); -extern void ExecFreeExprContext(PlanState *planstate); extern void ExecAssignScanType(ScanState *scanstate, TupleDesc tupDesc); extern void ExecCreateScanSlotFromOuterPlan(EState *estate, ScanState *scanstate, diff --git a/src/include/executor/nodeNamedtuplestorescan.h b/src/include/executor/nodeNamedtuplestorescan.h index 3ff687023afa2..9d80236fe5f0a 100644 --- a/src/include/executor/nodeNamedtuplestorescan.h +++ b/src/include/executor/nodeNamedtuplestorescan.h @@ -17,7 +17,6 @@ #include "nodes/execnodes.h" extern NamedTuplestoreScanState *ExecInitNamedTuplestoreScan(NamedTuplestoreScan *node, EState *estate, int eflags); -extern void ExecEndNamedTuplestoreScan(NamedTuplestoreScanState *node); extern void ExecReScanNamedTuplestoreScan(NamedTuplestoreScanState *node); #endif /* NODENAMEDTUPLESTORESCAN_H */ diff --git a/src/include/executor/nodeValuesscan.h b/src/include/executor/nodeValuesscan.h index a52fa678dfe12..fe3f043951bca 100644 --- a/src/include/executor/nodeValuesscan.h +++ b/src/include/executor/nodeValuesscan.h @@ -17,7 +17,6 @@ #include "nodes/execnodes.h" extern ValuesScanState *ExecInitValuesScan(ValuesScan *node, EState *estate, int eflags); -extern void ExecEndValuesScan(ValuesScanState *node); extern void ExecReScanValuesScan(ValuesScanState *node); #endif /* NODEVALUESSCAN_H */ diff --git a/src/include/executor/nodeWorktablescan.h b/src/include/executor/nodeWorktablescan.h index e553a453f3488..f31b22cec4a07 100644 --- a/src/include/executor/nodeWorktablescan.h +++ b/src/include/executor/nodeWorktablescan.h @@ -17,7 +17,6 @@ #include "nodes/execnodes.h" extern WorkTableScanState *ExecInitWorkTableScan(WorkTableScan *node, EState *estate, int eflags); -extern void ExecEndWorkTableScan(WorkTableScanState *node); extern void ExecReScanWorkTableScan(WorkTableScanState *node); #endif /* NODEWORKTABLESCAN_H */