- Downloads
Fix up planner infrastructure to support LATERAL properly.
This patch takes care of a number of problems having to do with failure to choose valid join orders and incorrect handling of lateral references pulled up from subqueries. Notable changes: * Add a LateralJoinInfo data structure similar to SpecialJoinInfo, to represent join ordering constraints created by lateral references. (I first considered extending the SpecialJoinInfo structure, but the semantics are different enough that a separate data structure seems better.) Extend join_is_legal() and related functions to prevent trying to form unworkable joins, and to ensure that we will consider joins that satisfy lateral references even if the joins would be clauseless. * Fill in the infrastructure needed for the last few types of relation scan paths to support parameterization. We'd have wanted this eventually anyway, but it is necessary now because a relation that gets pulled up out of a UNION ALL subquery may acquire a reltargetlist containing lateral references, meaning that its paths *have* to be parameterized whether or not we have any code that can push join quals down into the scan. * Compute data about lateral references early in query_planner(), and save in RelOptInfo nodes, to avoid repetitive calculations later. * Assorted corner-case bug fixes. There's probably still some bugs left, but this is a lot closer to being real than it was before.
Showing
- src/backend/nodes/copyfuncs.c 17 additions, 0 deletionssrc/backend/nodes/copyfuncs.c
- src/backend/nodes/equalfuncs.c 12 additions, 0 deletionssrc/backend/nodes/equalfuncs.c
- src/backend/nodes/outfuncs.c 16 additions, 0 deletionssrc/backend/nodes/outfuncs.c
- src/backend/optimizer/path/allpaths.c 55 additions, 52 deletionssrc/backend/optimizer/path/allpaths.c
- src/backend/optimizer/path/costsize.c 38 additions, 14 deletionssrc/backend/optimizer/path/costsize.c
- src/backend/optimizer/path/indxpath.c 14 additions, 3 deletionssrc/backend/optimizer/path/indxpath.c
- src/backend/optimizer/path/joinpath.c 11 additions, 19 deletionssrc/backend/optimizer/path/joinpath.c
- src/backend/optimizer/path/joinrels.c 80 additions, 6 deletionssrc/backend/optimizer/path/joinrels.c
- src/backend/optimizer/path/tidpath.c 11 additions, 1 deletionsrc/backend/optimizer/path/tidpath.c
- src/backend/optimizer/plan/analyzejoins.c 21 additions, 0 deletionssrc/backend/optimizer/plan/analyzejoins.c
- src/backend/optimizer/plan/createplan.c 37 additions, 2 deletionssrc/backend/optimizer/plan/createplan.c
- src/backend/optimizer/plan/initsplan.c 240 additions, 27 deletionssrc/backend/optimizer/plan/initsplan.c
- src/backend/optimizer/plan/planagg.c 2 additions, 1 deletionsrc/backend/optimizer/plan/planagg.c
- src/backend/optimizer/plan/planmain.c 9 additions, 0 deletionssrc/backend/optimizer/plan/planmain.c
- src/backend/optimizer/plan/planner.c 27 additions, 8 deletionssrc/backend/optimizer/plan/planner.c
- src/backend/optimizer/prep/prepjointree.c 6 additions, 2 deletionssrc/backend/optimizer/prep/prepjointree.c
- src/backend/optimizer/prep/prepunion.c 1 addition, 0 deletionssrc/backend/optimizer/prep/prepunion.c
- src/backend/optimizer/util/pathnode.c 16 additions, 10 deletionssrc/backend/optimizer/util/pathnode.c
- src/backend/optimizer/util/placeholder.c 4 additions, 4 deletionssrc/backend/optimizer/util/placeholder.c
- src/backend/optimizer/util/relnode.c 13 additions, 15 deletionssrc/backend/optimizer/util/relnode.c
Loading
Please register or sign in to comment