Fix two separate bugs in setrefs.c. set_subqueryscan_references needs
authorTom Lane <tgl@sss.pgh.pa.us>
Sat, 27 Aug 2005 18:04:49 +0000 (18:04 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Sat, 27 Aug 2005 18:04:49 +0000 (18:04 +0000)
commit8b73bd26c0c0fbb6af939409ae07c53845e28849
treec7c657d0b22a7c6b3cd92487791915dfd14d22a6
parenta7aa46c703e77423212fc72b80248fc892729e10
Fix two separate bugs in setrefs.c.  set_subqueryscan_references needs
to copy the whole plan tree before invoking adjust_plan_varnos(); else
if there is any multiply-linked substructure, the latter might increment
some Var's varno twice.  Previously there were some retail copyObject
calls inside adjust_plan_varnos, but it seems a lot safer to just dup the
whole tree first.  Also, set_inner_join_references was trying to avoid
work by not recursing if a BitmapHeapScan's bitmapqualorig contained no
outer references; which was OK at the time the code was written, I think,
but now that create_bitmap_scan_plan removes duplicate clauses from
bitmapqualorig it is possible for that field to be NULL while outer
references still remain in the qpqual and/or contained indexscan nodes.
For safety, always recurse even if the BitmapHeapScan looks to be outer
reference free.  Per reports from Michael Fuhr and Oleg Bartunov.
src/backend/optimizer/plan/setrefs.c