Fix set_append_rel_pathlist() to deal intelligently with cases where
Tom Lane <tgl@sss.pgh.pa.us>
Fix set_append_rel_pathlist() to deal intelligently with cases where substituting a child rel's output expressions into the appendrel's restriction clauses yields a pseudoconstant restriction. We might be able to skip scanning that child rel entirely (if we get constant FALSE), or generate a one-time filter. 8.3 more or less accidentally generated plans that weren't completely stupid in these cases, but that was only because an extra recursive level of subquery_planner() always occurred and allowed const-simplification to happen. 8.4's ability to pull up appendrel members with non-Var outputs exposes the fact that we need to work harder here. Per gripe from Sergey Burladyan.
Files
| Path | Change | +/− |
|---|---|---|
| src/backend/optimizer/path/allpaths.c | modified | +31 −4 |
| src/backend/optimizer/prep/prepunion.c | modified | +2 −52 |
| src/backend/optimizer/util/restrictinfo.c | modified | +77 −1 |
| src/include/optimizer/restrictinfo.h | modified | +4 −1 |