aboutsummaryrefslogtreecommitdiff
path: root/src/backend/executor/nodeHash.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend/executor/nodeHash.c')
-rw-r--r--src/backend/executor/nodeHash.c44
1 files changed, 3 insertions, 41 deletions
diff --git a/src/backend/executor/nodeHash.c b/src/backend/executor/nodeHash.c
index 0d3c6e84d9f..b36a2ba4051 100644
--- a/src/backend/executor/nodeHash.c
+++ b/src/backend/executor/nodeHash.c
@@ -6,7 +6,7 @@
* Copyright (c) 1994, Regents of the University of California
*
*
- * $Id: nodeHash.c,v 1.33 1999/05/06 00:30:46 tgl Exp $
+ * $Id: nodeHash.c,v 1.34 1999/05/09 00:53:20 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -39,9 +39,6 @@
extern int NBuffers;
-#define HJ_TEMP_NAMELEN 16 /* max length for mk_hj_temp file names */
-
-static void mk_hj_temp(char *tempname);
static int hashFunc(Datum key, int len, bool byVal);
static RelativeAddr hashTableAlloc(int size, HashJoinTable hashtable);
static void * absHashTableAlloc(int size, HashJoinTable hashtable);
@@ -72,7 +69,6 @@ ExecHash(Hash *node)
RelativeAddr *batchPos;
int *batchSizes;
int i;
- RelativeAddr *innerbatchNames;
/* ----------------
* get state info from node
@@ -91,8 +87,6 @@ ExecHash(Hash *node)
if (nbatch > 0)
{ /* if needs hash partition */
- innerbatchNames = (RelativeAddr *) ABSADDR(hashtable->innerbatchNames);
-
/* --------------
* allocate space for the file descriptors of batch files
* then open the batch files in the current processes.
@@ -101,13 +95,7 @@ ExecHash(Hash *node)
batches = (File *) palloc(nbatch * sizeof(File));
for (i = 0; i < nbatch; i++)
{
-#ifndef __CYGWIN32__
- batches[i] = FileNameOpenFile(ABSADDR(innerbatchNames[i]),
- O_CREAT | O_RDWR, 0600);
-#else
- batches[i] = FileNameOpenFile(ABSADDR(innerbatchNames[i]),
- O_CREAT | O_RDWR | O_BINARY, 0600);
-#endif
+ batches[i] = OpenTemporaryFile();
}
hashstate->hashBatches = batches;
batchPos = (RelativeAddr *) ABSADDR(hashtable->innerbatchPos);
@@ -291,7 +279,7 @@ absHashTableAlloc(int size, HashJoinTable hashtable)
* ----------------------------------------------------------------
*/
#define NTUP_PER_BUCKET 10
-#define FUDGE_FAC 1.5
+#define FUDGE_FAC 2.0
HashJoinTable
ExecHashTableCreate(Hash *node)
@@ -310,12 +298,9 @@ ExecHashTableCreate(Hash *node)
int totalbuckets;
int bucketsize;
int i;
- RelativeAddr *outerbatchNames;
RelativeAddr *outerbatchPos;
- RelativeAddr *innerbatchNames;
RelativeAddr *innerbatchPos;
int *innerbatchSizes;
- RelativeAddr tempname;
/* ----------------
* Get information about the size of the relation to be hashed
@@ -425,46 +410,32 @@ ExecHashTableCreate(Hash *node)
* allocate and initialize the outer batches
* ---------------
*/
- outerbatchNames = (RelativeAddr *)
- absHashTableAlloc(nbatch * sizeof(RelativeAddr), hashtable);
outerbatchPos = (RelativeAddr *)
absHashTableAlloc(nbatch * sizeof(RelativeAddr), hashtable);
for (i = 0; i < nbatch; i++)
{
- tempname = hashTableAlloc(HJ_TEMP_NAMELEN, hashtable);
- mk_hj_temp(ABSADDR(tempname));
- outerbatchNames[i] = tempname;
outerbatchPos[i] = -1;
}
- hashtable->outerbatchNames = RELADDR(outerbatchNames);
hashtable->outerbatchPos = RELADDR(outerbatchPos);
/* ---------------
* allocate and initialize the inner batches
* ---------------
*/
- innerbatchNames = (RelativeAddr *)
- absHashTableAlloc(nbatch * sizeof(RelativeAddr), hashtable);
innerbatchPos = (RelativeAddr *)
absHashTableAlloc(nbatch * sizeof(RelativeAddr), hashtable);
innerbatchSizes = (int *)
absHashTableAlloc(nbatch * sizeof(int), hashtable);
for (i = 0; i < nbatch; i++)
{
- tempname = hashTableAlloc(HJ_TEMP_NAMELEN, hashtable);
- mk_hj_temp(ABSADDR(tempname));
- innerbatchNames[i] = tempname;
innerbatchPos[i] = -1;
innerbatchSizes[i] = 0;
}
- hashtable->innerbatchNames = RELADDR(innerbatchNames);
hashtable->innerbatchPos = RELADDR(innerbatchPos);
hashtable->innerbatchSizes = RELADDR(innerbatchSizes);
}
else
{
- hashtable->outerbatchNames = (RelativeAddr) NULL;
hashtable->outerbatchPos = (RelativeAddr) NULL;
- hashtable->innerbatchNames = (RelativeAddr) NULL;
hashtable->innerbatchPos = (RelativeAddr) NULL;
hashtable->innerbatchSizes = (RelativeAddr) NULL;
}
@@ -886,15 +857,6 @@ ExecHashTableReset(HashJoinTable hashtable, int ntuples)
hashtable->pcount = hashtable->nprocess;
}
-static void
-mk_hj_temp(char *tempname)
-{
- static int hjtmpcnt = 0;
-
- snprintf(tempname, HJ_TEMP_NAMELEN, "HJ%d.%d", (int) MyProcPid, hjtmpcnt);
- hjtmpcnt = (hjtmpcnt + 1) % 1000;
-}
-
void
ExecReScanHash(Hash *node, ExprContext *exprCtxt, Plan *parent)
{