Get rid of the rather fuzzily defined FlattenedSubLink node type in favor of
Tom Lane <tgl@sss.pgh.pa.us>
Get rid of the rather fuzzily defined FlattenedSubLink node type in favor of making pull_up_sublinks() construct a full-blown JoinExpr tree representation of IN/EXISTS SubLinks that it is able to convert to semi or anti joins. This makes pull_up_sublinks() a shade more complex, but the gain in semantic clarity is worth it. I still have more to do in this area to address the previously-discussed problems, but this commit in itself fixes at least one bug in HEAD, as shown by added regression test case.
Files
| Path | Change | +/− |
|---|---|---|
| src/backend/nodes/copyfuncs.c | modified | +1 −20 |
| src/backend/nodes/equalfuncs.c | modified | +1 −15 |
| src/backend/nodes/nodeFuncs.c | modified | +1 −20 |
| src/backend/nodes/outfuncs.c | modified | +1 −15 |
| src/backend/optimizer/plan/initsplan.c | modified | +28 −82 |
| src/backend/optimizer/plan/subselect.c | modified | +75 −93 |
| src/backend/optimizer/prep/prepjointree.c | modified | +119 −107 |
| src/backend/optimizer/prep/prepunion.c | modified | +1 −18 |
| src/backend/optimizer/util/clauses.c | modified | +1 −37 |
| src/backend/optimizer/util/var.c | modified | +1 −19 |
| src/backend/rewrite/rewriteManip.c | modified | +2 −31 |
| src/include/nodes/nodes.h | modified | +1 −2 |
| src/include/nodes/primnodes.h | modified | +5 −3 |
| src/include/nodes/relation.h | modified | +6 −27 |
| src/include/optimizer/subselect.h | modified | +8 −8 |
| src/test/regress/expected/join_1.out | modified | +19 −0 |
| src/test/regress/expected/join.out | modified | +19 −0 |
| src/test/regress/sql/join.sql | modified | +10 −0 |