• Tom Lane's avatar
    Delay creation of subplan tlist until after create_plan(). · c44d0138
    Tom Lane authored
    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.
    c44d0138
initsplan.c 78.5 KB