• Tom Lane's avatar
    Get rid of the planner's LateralJoinInfo data structure. · 4fcf4845
    Tom Lane authored
    I originally modeled this data structure on SpecialJoinInfo, but after
    commit acfcd45c that looks like a pretty poor decision.
    All we really need is relid sets identifying laterally-referenced rels;
    and most of the time, what we want to know about includes indirect lateral
    references, a case the LateralJoinInfo data was unsuited to compute with
    any efficiency.  The previous commit redefined RelOptInfo.lateral_relids
    as the transitive closure of lateral references, so that it easily supports
    checking indirect references.  For the places where we really do want just
    direct references, add a new RelOptInfo field direct_lateral_relids, which
    is easily set up as a copy of lateral_relids before we perform the
    transitive closure calculation.  Then we can just drop lateral_info_list
    and LateralJoinInfo and the supporting code.  This makes the planner's
    handling of lateral references noticeably more efficient, and shorter too.
    
    Such a change can't be back-patched into stable branches for fear of
    breaking extensions that might be looking at the planner's data structures;
    but it seems not too late to push it into 9.5, so I've done so.
    4fcf4845
var.c 23 KB