• Tom Lane's avatar
    Fix bogus handling of JOIN_UNIQUE_OUTER/INNER cases for parallel joins. · 41e2b84c
    Tom Lane authored
    consider_parallel_nestloop passed the wrong jointype down to its
    subroutines for JOIN_UNIQUE_INNER cases (it should pass JOIN_INNER), and it
    thought that it could pass paths other than innerrel->cheapest_total_path
    to create_unique_path, which create_unique_path is not on board with.
    These bugs would lead to assertion failures or other errors, suggesting
    that this code path hasn't been tested much.
    
    hash_inner_and_outer's code for parallel join effectively treated both
    JOIN_UNIQUE_OUTER and JOIN_UNIQUE_INNER the same as JOIN_INNER (for
    different reasons :-(), leading to incorrect plans that treated a semijoin
    as if it were a plain join.
    
    Michael Day submitted a test case demonstrating that hash_inner_and_outer
    failed for JOIN_UNIQUE_OUTER, and I found the other cases through code
    review.
    
    Report: https://postgr.es/m/D0E8A029-D1AC-42E8-979A-5DE4A77E4413@rcmail.com
    41e2b84c
joinpath.c 51.9 KB