]> granicus.if.org Git - postgresql/commit
Restructure planning code so that preprocessing of targetlist and quals
authorTom Lane <tgl@sss.pgh.pa.us>
Tue, 21 Mar 2000 05:12:12 +0000 (05:12 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Tue, 21 Mar 2000 05:12:12 +0000 (05:12 +0000)
commit3ee8f7e207b3459372e13603023a9d84bb800e0b
tree74c0afa6e70d62f8df75b90900c19645356f3895
parentaafe86d9959f1c5adfc1d0c6f8ab54609017f182
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.
src/backend/optimizer/README
src/backend/optimizer/plan/planmain.c
src/backend/optimizer/plan/planner.c
src/backend/optimizer/plan/subselect.c
src/backend/optimizer/prep/prepunion.c
src/backend/optimizer/util/clauses.c
src/include/optimizer/clauses.h
src/include/optimizer/planner.h