]> granicus.if.org Git - postgresql/commit
Fix handling of init_plans list in inheritance_planner().
authorTom Lane <tgl@sss.pgh.pa.us>
Sun, 29 Jan 2012 01:24:42 +0000 (20:24 -0500)
committerTom Lane <tgl@sss.pgh.pa.us>
Sun, 29 Jan 2012 01:24:42 +0000 (20:24 -0500)
commit4ec6581c0cdddfda767641f535116ee9a0412149
tree8ad9f64f2f8f918d746717b517810023224cd800
parent759d9d67695783f6d04a85aba383a41c5382548c
Fix handling of init_plans list in inheritance_planner().

Formerly we passed an empty list to each per-child-table invocation of
grouping_planner, and then merged the results into the global list.
However, that fails if there's a CTE attached to the statement, because
create_ctescan_plan uses the list to find the plan referenced by a CTE
reference; so it was unable to find any CTEs attached to the outer UPDATE
or DELETE.  But there's no real reason not to use the same list throughout
the process, and doing so is simpler and faster anyway.

Per report from Josh Berkus of "could not find plan for CTE" failures.
Back-patch to 9.1 where we added support for WITH attached to UPDATE or
DELETE.  Add some regression test cases, too.
src/backend/optimizer/plan/planner.c
src/test/regress/expected/with.out
src/test/regress/sql/with.sql