aboutsummaryrefslogtreecommitdiff
path: root/src/backend/executor
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2011-11-03 00:51:06 -0400
committerTom Lane <tgl@sss.pgh.pa.us>2011-11-03 00:51:06 -0400
commite4e60e7b6125e77f679861ebf43cc6b9f9dbf16d (patch)
treeab7bcfc64e6e78e81617bc93df631fbdbcd15c59 /src/backend/executor
parent5cd7b682427d0e912b3ddf7f4910d52089e0df71 (diff)
downloadpostgresql-e4e60e7b6125e77f679861ebf43cc6b9f9dbf16d.tar.gz
postgresql-e4e60e7b6125e77f679861ebf43cc6b9f9dbf16d.zip
Fix handling of PlaceHolderVars in nestloop parameter management.
If we use a PlaceHolderVar from the outer relation in an inner indexscan, we need to reference the PlaceHolderVar as such as the value to be passed in from the outer relation. The previous code effectively tried to reconstruct the PHV from its component expression, which doesn't work since (a) the Vars therein aren't necessarily bubbled up far enough, and (b) it would be the wrong semantics anyway because of the possibility that the PHV is supposed to have gone to null at some point before the current join. Point (a) led to "variable not found in subplan target list" planner errors, but point (b) would have led to silently wrong answers. Per report from Roger Niederland.
Diffstat (limited to 'src/backend/executor')
-rw-r--r--src/backend/executor/nodeNestloop.c1
1 files changed, 1 insertions, 0 deletions
diff --git a/src/backend/executor/nodeNestloop.c b/src/backend/executor/nodeNestloop.c
index e98bc0f5a30..b4793583587 100644
--- a/src/backend/executor/nodeNestloop.c
+++ b/src/backend/executor/nodeNestloop.c
@@ -148,6 +148,7 @@ ExecNestLoop(NestLoopState *node)
prm = &(econtext->ecxt_param_exec_vals[paramno]);
/* Param value should be an OUTER var */
+ Assert(IsA(nlp->paramval, Var));
Assert(nlp->paramval->varno == OUTER);
Assert(nlp->paramval->varattno > 0);
prm->value = slot_getattr(outerTupleSlot,