summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Lane2009-05-06 20:31:18 +0000
committerTom Lane2009-05-06 20:31:18 +0000
commit86a4abb3a187bf2cc548aedd58125274ac724b1c (patch)
tree2d8fd1593311209856b5186db690c2cdaddd47ef
parenta9abcfb5193f34d2bc75c938d7ac11b3fc0d2e31 (diff)
Tweak distribute_qual_to_rels so that when we decide a pseudoconstant qual
can be pushed to the top of the join tree, we update both the relids and qualscope variables to keep them in sync. This prevents a possible later failure of an Assert clause, and affects nothing else since qualscope isn't used later except for that Assert. At the moment the Assert shouldn't be reachable when we've pushed the qual up; but this is cheap insurance, and it's more sensible anyway in terms of the overall logic of the routine. Per analysis of a bug report from Stefan Huehner. I'm not back-patching this since it's just future-proofing; but if anyone gets tempted to change check_outerjoin_delay again in the back branches, this might be needed.
-rw-r--r--src/backend/optimizer/plan/initsplan.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/src/backend/optimizer/plan/initsplan.c b/src/backend/optimizer/plan/initsplan.c
index 6725c0f24e..c211ff00a7 100644
--- a/src/backend/optimizer/plan/initsplan.c
+++ b/src/backend/optimizer/plan/initsplan.c
@@ -818,9 +818,12 @@ distribute_qual_to_rels(PlannerInfo *root, Node *clause,
root->hasPseudoConstantQuals = true;
/* if not below outer join, push it to top of tree */
if (!below_outer_join)
+ {
relids =
get_relids_in_jointree((Node *) root->parse->jointree,
false);
+ qualscope = bms_copy(relids);
+ }
}
}
}