• Tom Lane's avatar
    Fix an oversight in checking whether a join with LATERAL refs is legal. · a6492ff8
    Tom Lane authored
    In many cases, we can implement a semijoin as a plain innerjoin by first
    passing the righthand-side relation through a unique-ification step.
    However, one of the cases where this does NOT work is where the RHS has
    a LATERAL reference to the LHS; that makes the RHS dependent on the LHS
    so that unique-ification is meaningless.  joinpath.c understood this,
    and so would not generate any join paths of this kind ... but join_is_legal
    neglected to check for the case, so it would think that we could do it.
    The upshot would be a "could not devise a query plan for the given query"
    failure once we had failed to generate any join paths at all for the bogus
    join pair.
    
    Back-patch to 9.3 where LATERAL was added.
    a6492ff8
joinrels.c 35.5 KB