• Tom Lane's avatar
    Fix another thinko in join_is_legal's handling of semijoins: we have to test · 1ca695db
    Tom Lane authored
    for the case that the semijoin was implemented within either input by
    unique-ifying its RHS before we test to see if it appears to match the current
    join situation.  The previous coding would select semijoin logic in situations
    where we'd already unique-ified the RHS and joined it to some unrelated
    relation(s), and then came to join it to the semijoin's LHS.  That still gave
    the right answer as far as the semijoin itself was concerned, but would lead
    to incorrectly examining only an arbitrary one of the matchable rows from the
    unrelated relation(s).  The cause of this thinko was incorrect unification of
    the pre-8.4 logic for IN joins and OUTER joins --- the comparable case for
    outer joins can be handled after making the match test, but that's because
    there is nothing like the unique-ification escape hatch for outer joins.
    Per bug #4934 from Benjamin Reed.
    1ca695db
joinrels.c 30.7 KB