Fix domain_in() bug exhibited by Darcy Buskermolen. The idea of an EState
authorTom Lane <tgl@sss.pgh.pa.us>
Fri, 4 Aug 2006 21:33:36 +0000 (21:33 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Fri, 4 Aug 2006 21:33:36 +0000 (21:33 +0000)
commitc68489863c91a23821c4fcbfd9cfb5bce3220e8f
tree89fa9cd063fc5d1927e78c3c78d81d4cfb352a94
parentbf7b205e161a8f11bb3cea39a03d63f79decfc20
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.
src/backend/executor/execUtils.c
src/backend/utils/adt/domains.c
src/include/executor/executor.h
src/include/nodes/execnodes.h