-
- Downloads
Restructure planning code so that preprocessing of targetlist and quals
to simplify constant expressions and expand SubLink nodes into SubPlans is done in a separate routine subquery_planner() that calls union_planner(). We formerly did most of this work in query_planner(), but that's the wrong place because it may never see the real targetlist. Splitting union_planner into two routines also allows us to avoid redundant work when union_planner is invoked recursively for UNION and inheritance cases. Upshot is that it is now possible to do something like select float8(count(*)) / (select count(*) from int4_tbl) from int4_tbl group by f1; which has never worked before.
Showing
- src/backend/optimizer/README 14 additions, 7 deletionssrc/backend/optimizer/README
- src/backend/optimizer/plan/planmain.c 13 additions, 65 deletionssrc/backend/optimizer/plan/planmain.c
- src/backend/optimizer/plan/planner.c 130 additions, 55 deletionssrc/backend/optimizer/plan/planner.c
- src/backend/optimizer/plan/subselect.c 2 additions, 2 deletionssrc/backend/optimizer/plan/subselect.c
- src/backend/optimizer/prep/prepunion.c 10 additions, 3 deletionssrc/backend/optimizer/prep/prepunion.c
- src/backend/optimizer/util/clauses.c 13 additions, 24 deletionssrc/backend/optimizer/util/clauses.c
- src/include/optimizer/clauses.h 2 additions, 4 deletionssrc/include/optimizer/clauses.h
- src/include/optimizer/planner.h 2 additions, 1 deletionsrc/include/optimizer/planner.h
Loading
Please register or sign in to comment