mirror of
https://github.com/postgres/postgres.git
synced 2025-11-28 11:44:57 +03:00
Fix breakage in hashjoin from recent backpatch of left-join bug fix.
(That's what I get for not testing the back branches *before* committing.)
This commit is contained in:
@@ -8,7 +8,7 @@
|
|||||||
*
|
*
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* IDENTIFICATION
|
||||||
* $Header: /cvsroot/pgsql/src/backend/executor/nodeHashjoin.c,v 1.41.2.1 2004/09/17 18:29:24 tgl Exp $
|
* $Header: /cvsroot/pgsql/src/backend/executor/nodeHashjoin.c,v 1.41.2.2 2004/10/13 21:56:06 tgl Exp $
|
||||||
*
|
*
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
@@ -22,13 +22,13 @@
|
|||||||
#include "utils/memutils.h"
|
#include "utils/memutils.h"
|
||||||
|
|
||||||
|
|
||||||
static TupleTableSlot *ExecHashJoinOuterGetTuple(Plan *node, Plan *parent,
|
static TupleTableSlot *ExecHashJoinOuterGetTuple(Plan *node, HashJoin *parent,
|
||||||
HashJoinState *hjstate);
|
HashJoinState *hjstate);
|
||||||
static TupleTableSlot *ExecHashJoinGetSavedTuple(HashJoinState *hjstate,
|
static TupleTableSlot *ExecHashJoinGetSavedTuple(HashJoinState *hjstate,
|
||||||
BufFile *file,
|
BufFile *file,
|
||||||
TupleTableSlot *tupleSlot);
|
TupleTableSlot *tupleSlot);
|
||||||
static int ExecHashJoinGetBatch(int bucketno, HashJoinTable hashtable);
|
static int ExecHashJoinGetBatch(int bucketno, HashJoinTable hashtable);
|
||||||
static int ExecHashJoinNewBatch(HashJoinState *hjstate);
|
static int ExecHashJoinNewBatch(HashJoinState *hjstate, HashJoin *node);
|
||||||
|
|
||||||
|
|
||||||
/* ----------------------------------------------------------------
|
/* ----------------------------------------------------------------
|
||||||
@@ -153,7 +153,7 @@ ExecHashJoin(HashJoin *node)
|
|||||||
if (hjstate->hj_NeedNewOuter)
|
if (hjstate->hj_NeedNewOuter)
|
||||||
{
|
{
|
||||||
outerTupleSlot = ExecHashJoinOuterGetTuple(outerNode,
|
outerTupleSlot = ExecHashJoinOuterGetTuple(outerNode,
|
||||||
(Plan *) node,
|
node,
|
||||||
hjstate);
|
hjstate);
|
||||||
if (TupIsNull(outerTupleSlot))
|
if (TupIsNull(outerTupleSlot))
|
||||||
{
|
{
|
||||||
@@ -469,7 +469,7 @@ ExecEndHashJoin(HashJoin *node)
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
static TupleTableSlot *
|
static TupleTableSlot *
|
||||||
ExecHashJoinOuterGetTuple(Plan *node, Plan *parent, HashJoinState *hjstate)
|
ExecHashJoinOuterGetTuple(Plan *node, HashJoin *parent, HashJoinState *hjstate)
|
||||||
{
|
{
|
||||||
HashJoinTable hashtable = hjstate->hj_HashTable;
|
HashJoinTable hashtable = hjstate->hj_HashTable;
|
||||||
int curbatch = hashtable->curbatch;
|
int curbatch = hashtable->curbatch;
|
||||||
@@ -477,7 +477,7 @@ ExecHashJoinOuterGetTuple(Plan *node, Plan *parent, HashJoinState *hjstate)
|
|||||||
|
|
||||||
if (curbatch == 0)
|
if (curbatch == 0)
|
||||||
{ /* if it is the first pass */
|
{ /* if it is the first pass */
|
||||||
slot = ExecProcNode(node, parent);
|
slot = ExecProcNode(node, (Plan *) parent);
|
||||||
if (!TupIsNull(slot))
|
if (!TupIsNull(slot))
|
||||||
return slot;
|
return slot;
|
||||||
|
|
||||||
@@ -485,7 +485,7 @@ ExecHashJoinOuterGetTuple(Plan *node, Plan *parent, HashJoinState *hjstate)
|
|||||||
* We have just reached the end of the first pass. Try to switch
|
* We have just reached the end of the first pass. Try to switch
|
||||||
* to a saved batch.
|
* to a saved batch.
|
||||||
*/
|
*/
|
||||||
curbatch = ExecHashJoinNewBatch(hjstate);
|
curbatch = ExecHashJoinNewBatch(hjstate, parent);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -499,7 +499,7 @@ ExecHashJoinOuterGetTuple(Plan *node, Plan *parent, HashJoinState *hjstate)
|
|||||||
hjstate->hj_OuterTupleSlot);
|
hjstate->hj_OuterTupleSlot);
|
||||||
if (!TupIsNull(slot))
|
if (!TupIsNull(slot))
|
||||||
return slot;
|
return slot;
|
||||||
curbatch = ExecHashJoinNewBatch(hjstate);
|
curbatch = ExecHashJoinNewBatch(hjstate, parent);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Out of batches... */
|
/* Out of batches... */
|
||||||
@@ -545,7 +545,7 @@ ExecHashJoinGetSavedTuple(HashJoinState *hjstate,
|
|||||||
* ----------------------------------------------------------------
|
* ----------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
static int
|
static int
|
||||||
ExecHashJoinNewBatch(HashJoinState *hjstate)
|
ExecHashJoinNewBatch(HashJoinState *hjstate, HashJoin *node)
|
||||||
{
|
{
|
||||||
HashJoinTable hashtable = hjstate->hj_HashTable;
|
HashJoinTable hashtable = hjstate->hj_HashTable;
|
||||||
int nbatch = hashtable->nbatch;
|
int nbatch = hashtable->nbatch;
|
||||||
@@ -575,7 +575,7 @@ ExecHashJoinNewBatch(HashJoinState *hjstate)
|
|||||||
while (newbatch <= nbatch &&
|
while (newbatch <= nbatch &&
|
||||||
(outerBatchSize[newbatch - 1] == 0L ||
|
(outerBatchSize[newbatch - 1] == 0L ||
|
||||||
(innerBatchSize[newbatch - 1] == 0L &&
|
(innerBatchSize[newbatch - 1] == 0L &&
|
||||||
hjstate->js.jointype != JOIN_LEFT)))
|
node->join.jointype != JOIN_LEFT)))
|
||||||
{
|
{
|
||||||
BufFileClose(hashtable->innerBatchFile[newbatch - 1]);
|
BufFileClose(hashtable->innerBatchFile[newbatch - 1]);
|
||||||
hashtable->innerBatchFile[newbatch - 1] = NULL;
|
hashtable->innerBatchFile[newbatch - 1] = NULL;
|
||||||
|
|||||||
Reference in New Issue
Block a user