]> 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)
commit950f80dd54a49f052919b45ffddbcea3deefe6a2
treeb22375a0b12b84d1a593d94406d6c3e27d0e8207
parent5eab0f1383f0864fe038c2ab13282c9c356f291d
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