]> granicus.if.org Git - postgresql/commit
Prevent improper reordering of antijoins vs. outer joins.
authorTom Lane <tgl@sss.pgh.pa.us>
Sat, 25 Apr 2015 20:44:27 +0000 (16:44 -0400)
committerTom Lane <tgl@sss.pgh.pa.us>
Sat, 25 Apr 2015 20:44:27 +0000 (16:44 -0400)
commit2e38198f605f39e96544c81a43f1984147e0890c
treee8977f501d69b25a4e9d19bc3ce1694e229065d8
parentf221c44cda52c324ced27e3b1fbec3458a2683d4
Prevent improper reordering of antijoins vs. outer joins.

An outer join appearing within the RHS of an antijoin can't commute with
the antijoin, but somehow I missed teaching make_outerjoininfo() about
that.  In Teodor Sigaev's recent trouble report, this manifests as a
"could not find RelOptInfo for given relids" error within eqjoinsel();
but I think silently wrong query results are possible too, if the planner
misorders the joins and doesn't happen to trigger any internal consistency
checks.  It's broken as far back as we had antijoins, so back-patch to all
supported branches.
src/backend/optimizer/plan/initsplan.c
src/test/regress/expected/join.out
src/test/regress/sql/join.sql