• Robert Haas's avatar
    Defer creation of partially-grouped relation until it's needed. · 4f15e5d0
    Robert Haas authored
    This avoids unnecessarily creating a RelOptInfo for which we have no
    actual need.  This idea is from Ashutosh Bapat, who wrote a very
    different patch to accomplish a similar goal.  It will be more
    important if and when we get partition-wise aggregate, since then
    there could be many partially grouped relations all of which could
    potentially be unnecessary.  In passing, this sets the grouping
    relation's reltarget, which wasn't done previously but makes things
    simpler for this refactoring.
    
    Along the way, adjust things so that add_paths_to_partial_grouping_rel,
    now renamed create_partial_grouping_paths, does not perform the Gather
    or Gather Merge steps to generate non-partial paths from partial
    paths; have the caller do it instead.  This is again for the
    convenience of partition-wise aggregate, which wants to inject
    additional partial paths are created and before we decide which ones
    to Gather/Gather Merge.  This might seem like a separate change, but
    it's actually pretty closely entangled; I couldn't really see much
    value in separating it and having to change some things twice.
    
    Patch by me, reviewed by Ashutosh Bapat.
    
    Discussion: http://postgr.es/m/CA+TgmoZ+ZJTVad-=vEq393N99KTooxv9k7M+z73qnTAqkb49BQ@mail.gmail.com
    4f15e5d0
planner.c 204 KB