From 0319da638f337cae66a4649581dc1f33d5079e1a Mon Sep 17 00:00:00 2001 From: Heikki Linnakangas Date: Sat, 21 May 2011 14:30:11 -0400 Subject: [PATCH] Reset per-tuple memory context between every row in a scan node, even when there's no quals or projections. Currently this only matters for foreign scans, as none of the other scan nodes litter the per-tuple memory context when there's no quals or projections. --- src/backend/executor/execScan.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/backend/executor/execScan.c b/src/backend/executor/execScan.c index 5089616f59..e90058847d 100644 --- a/src/backend/executor/execScan.c +++ b/src/backend/executor/execScan.c @@ -120,13 +120,17 @@ ExecScan(ScanState *node, */ qual = node->ps.qual; projInfo = node->ps.ps_ProjInfo; + econtext = node->ps.ps_ExprContext; /* * If we have neither a qual to check nor a projection to do, just skip * all the overhead and return the raw scan tuple. */ if (!qual && !projInfo) + { + ResetExprContext(econtext); return ExecScanFetch(node, accessMtd, recheckMtd); + } /* * Check to see if we're still projecting out tuples from a previous scan @@ -148,7 +152,6 @@ ExecScan(ScanState *node, * storage allocated in the previous tuple cycle. Note this can't happen * until we're done projecting out tuples from a scan tuple. */ - econtext = node->ps.ps_ExprContext; ResetExprContext(econtext); /* -- 2.40.0