Repair two constraint-exclusion corner cases triggered by proving that an
Tom Lane <tgl@sss.pgh.pa.us>
Repair two constraint-exclusion corner cases triggered by proving that an inheritance child of an UPDATE/DELETE target relation can be excluded by constraints. I had rearranged some code in set_append_rel_pathlist() to avoid "useless" work when a child is excluded, but overdid it and left the child with no cheapest_path entry, causing possible failure later if the appendrel was involved in a join. Also, it seems that the dummy plan generated by inheritance_planner() when all branches are excluded has to be a bit less dummy now than was required in 8.2. Per report from Jan Wieck. Add his test case to the regression tests.
Files
| Path | Change | +/− |
|---|---|---|
| src/backend/optimizer/path/allpaths.c | modified | +32 −15 |
| src/backend/optimizer/plan/planner.c | modified | +6 −1 |
| src/test/regress/expected/rules.out | modified | +58 −0 |
| src/test/regress/sql/rules.sql | modified | +38 −0 |