mirror of
https://git.postgresql.org/git/postgresql.git
synced 2024-12-15 08:20:16 +08:00
Hashed LEFT JOIN would miss outer tuples with no inner match if the join
was large enough to be batched and the tuples fell into a batch where there were no inner tuples at all. Thanks to Xiaoyu Wang for finding a test case that exposed this long-standing bug.
This commit is contained in:
parent
a59084fe5e
commit
44ed69c8f3
@ -8,7 +8,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/backend/executor/nodeHashjoin.c,v 1.39 2001/10/25 05:49:28 momjian Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/executor/nodeHashjoin.c,v 1.39.2.1 2004/09/17 18:29:40 tgl Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@ -569,12 +569,14 @@ ExecHashJoinNewBatch(HashJoinState *hjstate)
|
||||
}
|
||||
|
||||
/*
|
||||
* We can skip over any batches that are empty on either side. Release
|
||||
* associated temp files right away.
|
||||
* Normally we can skip over any batches that are empty on either side
|
||||
* --- but for JOIN_LEFT, can only skip when left side is empty.
|
||||
* Release associated temp files right away.
|
||||
*/
|
||||
while (newbatch <= nbatch &&
|
||||
(innerBatchSize[newbatch - 1] == 0L ||
|
||||
outerBatchSize[newbatch - 1] == 0L))
|
||||
(outerBatchSize[newbatch - 1] == 0L ||
|
||||
(innerBatchSize[newbatch - 1] == 0L &&
|
||||
hjstate->js.jointype != JOIN_LEFT)))
|
||||
{
|
||||
BufFileClose(hashtable->innerBatchFile[newbatch - 1]);
|
||||
hashtable->innerBatchFile[newbatch - 1] = NULL;
|
||||
|
Loading…
Reference in New Issue
Block a user