Fix another semijoin-ordering bug. We already knew that we couldn't
authorTom Lane <[email protected]>
Tue, 21 Jul 2009 02:02:44 +0000 (02:02 +0000)
committerTom Lane <[email protected]>
Tue, 21 Jul 2009 02:02:44 +0000 (02:02 +0000)
commit1c61073e53caad8f6276ff3d66d90996fe5f8b81
treed86bef4add8fc85e80ac43dcde68d6fc7a2b8ff1
parent6c803e77e0c27bc31222e2cee90a119a18066993
Fix another semijoin-ordering bug.  We already knew that we couldn't
reorder a semijoin into or out of the righthand side of another semijoin,
but actually it doesn't work to reorder it into or out of the righthand
side of a left or antijoin, either.  Per bug #4906 from Mathieu Fenniak.

This was sloppy thinking on my part.  This identity does work:

( A left join B on (Pab) ) semijoin C on (Pac)
==
( A semijoin C on (Pac) ) left join B on (Pab)

but I failed to see that that doesn't mean this does:

( A left join B on (Pab) ) semijoin C on (Pbc)
!=
A left join ( B semijoin C on (Pbc) ) on (Pab)
src/backend/optimizer/README
src/backend/optimizer/plan/initsplan.c