pgsql: Delay creation of subplan tlist until after create_plan(). - Mailing list pgsql-committers

From Tom Lane
Subject pgsql: Delay creation of subplan tlist until after create_plan().
Date
Msg-id E1aHLv1-0006fG-29@gemulon.postgresql.org
Whole thread Raw
List pgsql-committers
Delay creation of subplan tlist until after create_plan().

Once upon a time it was necessary for grouping_planner() to determine
the tlist it wanted from the scan/join plan subtree before it called
query_planner(), because query_planner() would actually make a Plan using
that.  But we refactored things a long time ago to delay construction of
the Plan tree till later, so there's no need to build that tlist until
(and indeed unless) we're ready to plaster it onto the Plan.  The only
thing query_planner() cares about is what Vars are going to be needed for
the tlist, and it can perfectly well get that by looking at the real tlist
rather than some masticated version.

Well, actually, there is one minor glitch in that argument, which is that
make_subplanTargetList also adds Vars appearing only in HAVING to the
tlist it produces.  So now we have to account for HAVING explicitly in
build_base_rel_tlists.  But that just adds a few lines of code, and
I doubt it moves the needle much on processing time; we might be doing
pull_var_clause() twice on the havingQual, but before we had it scanning
dummy tlist entries instead.

This is a very small down payment on rationalizing grouping_planner
enough so it can be refactored.

Branch
------
master

Details
-------
http://git.postgresql.org/pg/commitdiff/c44d013835049053d19bc1795f0d169f3d1d6ff0

Modified Files
--------------
src/backend/optimizer/plan/initsplan.c |   19 ++++++++++++++++-
src/backend/optimizer/plan/planner.c   |   35 +++++++++++++++-----------------
2 files changed, 34 insertions(+), 20 deletions(-)


pgsql-committers by date:

Previous
From: Alvaro Herrera
Date:
Subject: pgsql: Fix order of arguments to va_start()
Next
From: Tom Lane
Date:
Subject: pgsql: Marginal cleanup of GROUPING SETS code in grouping_planner().