• Tom Lane's avatar
    Postpone extParam/allParam calculations until the very end of planning. · 68fa28f7
    Tom Lane authored
    Until now we computed these Param ID sets at the end of subquery_planner,
    but that approach depends on subquery_planner returning a concrete Plan
    tree.  We would like to switch over to returning one or more Paths for a
    subquery, and in that representation the necessary details aren't fully
    fleshed out (not to mention that we don't really want to do this work for
    Paths that end up getting discarded).  Hence, refactor so that we can
    compute the param ID sets at the end of planning, just before
    set_plan_references is run.
    
    The main change necessary to make this work is that we need to capture
    the set of outer-level Param IDs available to the current query level
    before exiting subquery_planner, since the outer levels' plan_params lists
    are transient.  (That's not going to pose a problem for returning Paths,
    since all the work involved in producing that data is part of expression
    preprocessing, which will continue to happen before Paths are produced.)
    On the plus side, this change gets rid of several existing kluges.
    
    Eventually I'd like to get rid of SS_finalize_plan altogether in favor of
    doing this work during set_plan_references, but that will require some
    complex rejiggering because SS_finalize_plan needs to visit subplans and
    initplans before the main plan.  So leave that idea for another day.
    68fa28f7
subselect.h 1.5 KB