• David Rowley's avatar
    Cleanup partition pruning step generation · 5ac9c430
    David Rowley authored
    There was some code in gen_prune_steps_from_opexps that needlessly
    checked a list was not empty when it clearly had to contain at least one
    item. This prompted a further cleanup operation in partprune.c.
    
    Additionally, the previous code could end up adding additional needless
    INTERSECT steps. However, those do not appear to be able to cause any
    misbehavior.
    
    gen_prune_steps_from_opexps is now no longer in charge of generating
    combine pruning steps. Instead, gen_partprune_steps_internal, which
    already does some combine step creation has been given the sole
    responsibility of generating all combine steps. This means that when
    we recursively call gen_partprune_steps_internal, since it always now adds
    a combine step when it produces multiple steps, we can just pay attention
    to the final step returned.
    
    In passing, do quite a bit of work on the comments to try to more clearly
    explain the role of both gen_partprune_steps_internal and
    gen_prune_steps_from_opexps. This is fairly complex code so some extra
    effort to give any new readers an overview of how things work seems like
    a good idea.
    
    Author: Amit Langote
    Reported-by: Andy Fan
    Reviewed-by: Kyotaro Horiguchi, Andy Fan, Ryan Lambert, David Rowley
    Discussion: https://postgr.es/m/CAKU4AWqWoVii+bRTeBQmeVW+PznkdO8DfbwqNsu9Gj4ubt9A6w@mail.gmail.com
    5ac9c430
plannodes.h 46.9 KB