• Tom Lane's avatar
    Cope with lateral references in the quals of a subquery RTE. · a742ecf9
    Tom Lane authored
    The qual pushdown logic assumed that all Vars in a restriction clause
    must be Vars referencing subquery outputs; but since we introduced
    LATERAL, it's possible for such a Var to be a lateral reference instead.
    This led to an assertion failure in debug builds.  In a non-debug
    build, there might be no ill effects (if qual_is_pushdown_safe decided
    the qual was unsafe anyway), or we could get failures later due to
    construction of an invalid plan.  I've not gone to much length to
    characterize the possible failures, but at least segfaults in the
    executor have been observed.
    
    Given that this has been busted since 9.3 and it took this long for
    anybody to notice, I judge that the case isn't worth going to great
    lengths to optimize.  Hence, fix by just teaching qual_is_pushdown_safe
    that such quals are unsafe to push down, matching the previous behavior
    when it accidentally didn't fail.
    
    Per report from Tom Ellis.  Back-patch to all supported branches.
    
    Discussion: https://postgr.es/m/20200713175124.GQ8220@cloudinit-builder
    a742ecf9
allpaths.c 131 KB