]> granicus.if.org Git - postgresql/commit
Fix bogus handling of JOIN_UNIQUE_OUTER/INNER cases for parallel joins.
authorTom Lane <tgl@sss.pgh.pa.us>
Wed, 30 Nov 2016 00:32:35 +0000 (19:32 -0500)
committerTom Lane <tgl@sss.pgh.pa.us>
Wed, 30 Nov 2016 00:32:35 +0000 (19:32 -0500)
commite5b8aa636a63a9446e244fcc8d3a262e3e14049a
treed70a91631bc8fd1bf4b98573179c668f0a820e71
parent0c65061de26470f2b17e3856fd2afd6c266195b7
Fix bogus handling of JOIN_UNIQUE_OUTER/INNER cases for parallel joins.

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
src/backend/optimizer/path/joinpath.c