aboutsummaryrefslogtreecommitdiff
path: root/src/backend/executor/nodeHash.c
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2004-09-22 19:13:52 +0000
committerTom Lane <tgl@sss.pgh.pa.us>2004-09-22 19:13:52 +0000
commit9fcbe2af11fb966b30117d8ac3c2971d1be14207 (patch)
tree456b8fcfc82600ec866e153a8f06a0f77a614831 /src/backend/executor/nodeHash.c
parent5d9f5c20dd29ac9dde19c283a821709839fae102 (diff)
downloadpostgresql-9fcbe2af11fb966b30117d8ac3c2971d1be14207.tar.gz
postgresql-9fcbe2af11fb966b30117d8ac3c2971d1be14207.zip
Arrange for hash join to skip scanning the outer relation if it detects
that the inner one is completely empty. Per recent discussion. Also some cosmetic cleanups in nearby code.
Diffstat (limited to 'src/backend/executor/nodeHash.c')
-rw-r--r--src/backend/executor/nodeHash.c12
1 files changed, 7 insertions, 5 deletions
diff --git a/src/backend/executor/nodeHash.c b/src/backend/executor/nodeHash.c
index c4236f5fcc4..5beb6359a83 100644
--- a/src/backend/executor/nodeHash.c
+++ b/src/backend/executor/nodeHash.c
@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/backend/executor/nodeHash.c,v 1.86 2004/08/29 04:12:31 momjian Exp $
+ * $PostgreSQL: pgsql/src/backend/executor/nodeHash.c,v 1.87 2004/09/22 19:13:49 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -32,8 +32,8 @@
/* ----------------------------------------------------------------
* ExecHash
*
- * build hash table for hashjoin, all do partitioning if more
- * than one batches are required.
+ * build hash table for hashjoin, doing partitioning if more
+ * than one batch is required.
* ----------------------------------------------------------------
*/
TupleTableSlot *
@@ -81,6 +81,7 @@ ExecHash(HashState *node)
slot = ExecProcNode(outerNode);
if (TupIsNull(slot))
break;
+ hashtable->hashNonEmpty = true;
econtext->ecxt_innertuple = slot;
ExecHashTableInsert(hashtable, econtext, hashkeys);
ExecClearTuple(slot);
@@ -189,7 +190,7 @@ ExecEndHash(HashState *node)
/* ----------------------------------------------------------------
* ExecHashTableCreate
*
- * create a hashtable in shared memory for hashjoin.
+ * create an empty hashtable data structure for hashjoin.
* ----------------------------------------------------------------
*/
HashJoinTable
@@ -226,12 +227,13 @@ ExecHashTableCreate(Hash *node, List *hashOperators)
* The hashtable control block is just palloc'd from the executor's
* per-query memory context.
*/
- hashtable = (HashJoinTable) palloc(sizeof(HashTableData));
+ hashtable = (HashJoinTable) palloc(sizeof(HashJoinTableData));
hashtable->nbuckets = nbuckets;
hashtable->totalbuckets = totalbuckets;
hashtable->buckets = NULL;
hashtable->nbatch = nbatch;
hashtable->curbatch = 0;
+ hashtable->hashNonEmpty = false;
hashtable->innerBatchFile = NULL;
hashtable->outerBatchFile = NULL;
hashtable->innerBatchSize = NULL;