• T
    Simplify query_planner's API by having it return the top-level RelOptInfo. · 3ced8837
    Tom Lane 提交于
    Formerly, query_planner returned one or possibly two Paths for the topmost
    join relation, so that grouping_planner didn't see the join RelOptInfo
    (at least not directly; it didn't have any hesitation about examining
    cheapest_path->parent, though).  However, correct selection of the Paths
    involved a significant amount of coupling between query_planner and
    grouping_planner, a problem which has gotten worse over time.  It seems
    best to give up on this API choice and instead return the topmost
    RelOptInfo explicitly.  Then grouping_planner can pull out the Paths it
    wants from the rel's path list.  In this way we can remove all knowledge
    of grouping behaviors from query_planner.
    
    The only real benefit of the old way is that in the case of an empty
    FROM clause, we never made any RelOptInfos at all, just a Path.  Now
    we have to gin up a dummy RelOptInfo to represent the empty FROM clause.
    That's not a very big deal though.
    
    While at it, simplify query_planner's API a bit more by having the caller
    set up root->tuple_fraction and root->limit_tuples, rather than passing
    those values as separate parameters.  Since query_planner no longer does
    anything with either value, requiring it to fill the PlannerInfo fields
    seemed pretty arbitrary.
    
    This patch just rearranges code; it doesn't (intentionally) change any
    behaviors.  Followup patches will do more interesting things.
    3ced8837
README 41.2 KB