diff options
author | Tom Lane | 2017-04-07 16:54:17 +0000 |
---|---|---|
committer | Tom Lane | 2017-04-07 16:54:23 +0000 |
commit | dbb2a931478a397a2b655eb77e8be8c1ca136f63 (patch) | |
tree | 485a1b3502d1c272405a4e120f45457f72b7dae0 | |
parent | 0c732850d22a2dddb8a2ef64aed3c23731488caa (diff) |
Ensure that ExecPrepareExprList's result is all in one memory context.
Noted by Amit Langote.
Discussion: https://postgr.es/m/[email protected]
-rw-r--r-- | src/backend/executor/execExpr.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/src/backend/executor/execExpr.c b/src/backend/executor/execExpr.c index cd0dce150d..97ec8fb033 100644 --- a/src/backend/executor/execExpr.c +++ b/src/backend/executor/execExpr.c @@ -511,8 +511,12 @@ List * ExecPrepareExprList(List *nodes, EState *estate) { List *result = NIL; + MemoryContext oldcontext; ListCell *lc; + /* Ensure that the list cell nodes are in the right context too */ + oldcontext = MemoryContextSwitchTo(estate->es_query_cxt); + foreach(lc, nodes) { Expr *e = (Expr *) lfirst(lc); @@ -520,6 +524,8 @@ ExecPrepareExprList(List *nodes, EState *estate) result = lappend(result, ExecPrepareExpr(e, estate)); } + MemoryContextSwitchTo(oldcontext); + return result; } |