]> granicus.if.org Git - postgresql/commit
Fix pull_up_sublinks' failure to handle nested pull-up opportunities.
authorTom Lane <tgl@sss.pgh.pa.us>
Mon, 2 May 2011 19:56:43 +0000 (15:56 -0400)
committerTom Lane <tgl@sss.pgh.pa.us>
Mon, 2 May 2011 19:56:43 +0000 (15:56 -0400)
commit65a7cd0e9ced21ec7ad67c11cd9a263640fe22e9
tree8fc4dde16cca1d10aaf9a38f2260625467cf4dd7
parente79518e93744a547ff874832dd40638b9531105e
Fix pull_up_sublinks' failure to handle nested pull-up opportunities.

After finding an EXISTS or ANY sub-select that can be converted to a
semi-join or anti-join, we should recurse into the body of the sub-select.
This allows cases such as EXISTS-within-EXISTS to be optimized properly.
The original coding would leave the lower sub-select as a SubLink, which
is no better and often worse than what we can do with a join.  Per example
from Wayne Conrad.

Back-patch to 8.4.  There is a related issue in older versions' handling
of pull_up_IN_clauses, but they're lame enough anyway about the whole area
that it seems not worth the extra work to try to fix.
src/backend/optimizer/plan/subselect.c
src/backend/optimizer/prep/prepjointree.c