aboutsummaryrefslogtreecommitdiff
path: root/src/include/executor
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2006-08-04 21:33:36 +0000
committerTom Lane <tgl@sss.pgh.pa.us>2006-08-04 21:33:36 +0000
commitc68489863c91a23821c4fcbfd9cfb5bce3220e8f (patch)
tree89fa9cd063fc5d1927e78c3c78d81d4cfb352a94 /src/include/executor
parentbf7b205e161a8f11bb3cea39a03d63f79decfc20 (diff)
downloadpostgresql-c68489863c91a23821c4fcbfd9cfb5bce3220e8f.tar.gz
postgresql-c68489863c91a23821c4fcbfd9cfb5bce3220e8f.zip
Fix domain_in() bug exhibited by Darcy Buskermolen. The idea of an EState
that's shorter-lived than the expression state being evaluated in it really doesn't work :-( --- we end up with fn_extra caches getting deleted while still in use. Rather than abandon the notion of caching expression state across domain_in calls altogether, I chose to make domain_in a bit cozier with ExprContext. All we really need for evaluating variable-free expressions is an ExprContext, not an EState, so I invented the notion of a "standalone" ExprContext. domain_in can prevent resource leakages by doing a ReScanExprContext on this rather than having to free it entirely; so we can make the ExprContext have the same lifespan (and particularly the same per_query memory context) as the expression state structs.
Diffstat (limited to 'src/include/executor')
-rw-r--r--src/include/executor/executor.h3
1 files changed, 2 insertions, 1 deletions
diff --git a/src/include/executor/executor.h b/src/include/executor/executor.h
index d926d8b5c5c..b2baec841bc 100644
--- a/src/include/executor/executor.h
+++ b/src/include/executor/executor.h
@@ -7,7 +7,7 @@
* Portions Copyright (c) 1996-2006, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California
*
- * $PostgreSQL: pgsql/src/include/executor/executor.h,v 1.127 2006/06/16 18:42:23 tgl Exp $
+ * $PostgreSQL: pgsql/src/include/executor/executor.h,v 1.128 2006/08/04 21:33:36 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -224,6 +224,7 @@ extern void end_tup_output(TupOutputState *tstate);
extern EState *CreateExecutorState(void);
extern void FreeExecutorState(EState *estate);
extern ExprContext *CreateExprContext(EState *estate);
+extern ExprContext *CreateStandaloneExprContext(void);
extern void FreeExprContext(ExprContext *econtext);
extern void ReScanExprContext(ExprContext *econtext);