summaryrefslogtreecommitdiff
path: root/src/include/executor
diff options
context:
space:
mode:
Diffstat (limited to 'src/include/executor')
-rw-r--r--src/include/executor/execExpr.h24
-rw-r--r--src/include/executor/executor.h7
-rw-r--r--src/include/executor/hashjoin.h12
-rw-r--r--src/include/executor/nodeHash.h9
4 files changed, 32 insertions, 20 deletions
diff --git a/src/include/executor/execExpr.h b/src/include/executor/execExpr.h
index 845f3422dea..eec0aa699e5 100644
--- a/src/include/executor/execExpr.h
+++ b/src/include/executor/execExpr.h
@@ -235,6 +235,13 @@ typedef enum ExprEvalOp
/* evaluate a single domain CHECK constraint */
EEOP_DOMAIN_CHECK,
+ /* evaluation steps for hashing */
+ EEOP_HASHDATUM_SET_INITVAL,
+ EEOP_HASHDATUM_FIRST,
+ EEOP_HASHDATUM_FIRST_STRICT,
+ EEOP_HASHDATUM_NEXT32,
+ EEOP_HASHDATUM_NEXT32_STRICT,
+
/* evaluate assorted special-purpose expression types */
EEOP_CONVERT_ROWTYPE,
EEOP_SCALARARRAYOP,
@@ -558,6 +565,23 @@ typedef struct ExprEvalStep
ErrorSaveContext *escontext;
} domaincheck;
+ /* for EEOP_HASH_SET_INITVAL */
+ struct
+ {
+ Datum init_value;
+
+ } hashdatum_initvalue;
+
+ /* for EEOP_HASHDATUM_(FIRST|NEXT32)[_STRICT] */
+ struct
+ {
+ FmgrInfo *finfo; /* function's lookup data */
+ FunctionCallInfo fcinfo_data; /* arguments etc */
+ /* faster to access without additional indirection: */
+ PGFunction fn_addr; /* actual call address */
+ int jumpdone; /* jump here on null */
+ } hashdatum;
+
/* for EEOP_CONVERT_ROWTYPE */
struct
{
diff --git a/src/include/executor/executor.h b/src/include/executor/executor.h
index 9770752ea3c..046a7fb69b0 100644
--- a/src/include/executor/executor.h
+++ b/src/include/executor/executor.h
@@ -285,6 +285,13 @@ extern ExprState *ExecInitCheck(List *qual, PlanState *parent);
extern List *ExecInitExprList(List *nodes, PlanState *parent);
extern ExprState *ExecBuildAggTrans(AggState *aggstate, struct AggStatePerPhaseData *phase,
bool doSort, bool doHash, bool nullcheck);
+extern ExprState *ExecBuildHash32Expr(TupleDesc desc,
+ const TupleTableSlotOps *ops,
+ const Oid *hashfunc_oids,
+ const List *collations,
+ const List *hash_exprs,
+ const bool *opstrict, PlanState *parent,
+ uint32 init_value, bool keep_nulls);
extern ExprState *ExecBuildGroupingEqual(TupleDesc ldesc, TupleDesc rdesc,
const TupleTableSlotOps *lops, const TupleTableSlotOps *rops,
int numCols,
diff --git a/src/include/executor/hashjoin.h b/src/include/executor/hashjoin.h
index 9197846cda7..2d8ed8688cd 100644
--- a/src/include/executor/hashjoin.h
+++ b/src/include/executor/hashjoin.h
@@ -313,8 +313,6 @@ typedef struct HashJoinTableData
dsa_pointer_atomic *shared;
} buckets;
- bool keepNulls; /* true to store unmatchable NULL tuples */
-
bool skewEnabled; /* are we using skew optimization? */
HashSkewBucket **skewBucket; /* hashtable of skew buckets */
int skewBucketLen; /* size of skewBucket array (a power of 2!) */
@@ -343,16 +341,6 @@ typedef struct HashJoinTableData
BufFile **innerBatchFile; /* buffered virtual temp file per batch */
BufFile **outerBatchFile; /* buffered virtual temp file per batch */
- /*
- * Info about the datatype-specific hash functions for the datatypes being
- * hashed. These are arrays of the same length as the number of hash join
- * clauses (hash keys).
- */
- FmgrInfo *outer_hashfunctions; /* lookup data for hash functions */
- FmgrInfo *inner_hashfunctions; /* lookup data for hash functions */
- bool *hashStrict; /* is each hash join operator strict? */
- Oid *collations;
-
Size spaceUsed; /* memory space currently used by tuples */
Size spaceAllowed; /* upper limit for space used */
Size spacePeak; /* peak space used */
diff --git a/src/include/executor/nodeHash.h b/src/include/executor/nodeHash.h
index a95911c2fee..e4eb7bc6359 100644
--- a/src/include/executor/nodeHash.h
+++ b/src/include/executor/nodeHash.h
@@ -24,8 +24,7 @@ extern Node *MultiExecHash(HashState *node);
extern void ExecEndHash(HashState *node);
extern void ExecReScanHash(HashState *node);
-extern HashJoinTable ExecHashTableCreate(HashState *state, List *hashOperators, List *hashCollations,
- bool keepNulls);
+extern HashJoinTable ExecHashTableCreate(HashState *state);
extern void ExecParallelHashTableAlloc(HashJoinTable hashtable,
int batchno);
extern void ExecHashTableDestroy(HashJoinTable hashtable);
@@ -43,12 +42,6 @@ extern void ExecParallelHashTableInsert(HashJoinTable hashtable,
extern void ExecParallelHashTableInsertCurrentBatch(HashJoinTable hashtable,
TupleTableSlot *slot,
uint32 hashvalue);
-extern bool ExecHashGetHashValue(HashJoinTable hashtable,
- ExprContext *econtext,
- List *hashkeys,
- bool outer_tuple,
- bool keep_nulls,
- uint32 *hashvalue);
extern void ExecHashGetBucketAndBatch(HashJoinTable hashtable,
uint32 hashvalue,
int *bucketno,