101#define HJTUPLE_OVERHEAD MAXALIGN(sizeof(HashJoinTupleData))
102#define HJTUPLE_MINTUPLE(hjtup) \
103 ((MinimalTuple) ((char *) (hjtup) + HJTUPLE_OVERHEAD))
130#define SKEW_BUCKET_OVERHEAD MAXALIGN(sizeof(HashSkewBucket))
131#define INVALID_SKEW_BUCKET_NO (-1)
132#define SKEW_HASH_MEM_PERCENT 2
133#define SKEW_MIN_OUTER_FRACTION 0.01
161#define HASH_CHUNK_SIZE ((Size) (32 * 1024))
162#define HASH_CHUNK_HEADER_SIZE MAXALIGN(sizeof(HashMemoryChunkData))
163#define HASH_CHUNK_DATA(hc) (((char *) (hc)) + HASH_CHUNK_HEADER_SIZE)
165#define HASH_CHUNK_THRESHOLD (HASH_CHUNK_SIZE / 4)
193#define ParallelHashJoinBatchInner(batch) \
194 ((SharedTuplestore *) \
195 ((char *) (batch) + MAXALIGN(sizeof(ParallelHashJoinBatch))))
198#define ParallelHashJoinBatchOuter(batch, nparticipants) \
199 ((SharedTuplestore *) \
200 ((char *) ParallelHashJoinBatchInner(batch) + \
201 MAXALIGN(sts_estimate(nparticipants))))
204#define EstimateParallelHashJoinBatch(hashtable) \
205 (MAXALIGN(sizeof(ParallelHashJoinBatch)) + \
206 MAXALIGN(sts_estimate((hashtable)->parallel_state->nparticipants)) * 2)
209#define NthParallelHashJoinBatch(base, n) \
210 ((ParallelHashJoinBatch *) \
212 EstimateParallelHashJoinBatch(hashtable) * (n)))
280#define PHJ_BUILD_ELECT 0
281#define PHJ_BUILD_ALLOCATE 1
282#define PHJ_BUILD_HASH_INNER 2
283#define PHJ_BUILD_HASH_OUTER 3
284#define PHJ_BUILD_RUN 4
285#define PHJ_BUILD_FREE 5
288#define PHJ_BATCH_ELECT 0
289#define PHJ_BATCH_ALLOCATE 1
290#define PHJ_BATCH_LOAD 2
291#define PHJ_BATCH_PROBE 3
292#define PHJ_BATCH_SCAN 4
293#define PHJ_BATCH_FREE 5
296#define PHJ_GROW_BATCHES_ELECT 0
297#define PHJ_GROW_BATCHES_REALLOCATE 1
298#define PHJ_GROW_BATCHES_REPARTITION 2
299#define PHJ_GROW_BATCHES_DECIDE 3
300#define PHJ_GROW_BATCHES_FINISH 4
301#define PHJ_GROW_BATCHES_PHASE(n) ((n) % 5)
304#define PHJ_GROW_BUCKETS_ELECT 0
305#define PHJ_GROW_BUCKETS_REALLOCATE 1
306#define PHJ_GROW_BUCKETS_REINSERT 2
307#define PHJ_GROW_BUCKETS_PHASE(n) ((n) % 3)
struct HashMemoryChunkData * HashMemoryChunk
@ PHJ_GROWTH_NEED_MORE_BUCKETS
@ PHJ_GROWTH_NEED_MORE_BATCHES
struct HashJoinTupleData ** unshared
ParallelHashJoinBatchAccessor * batches
ParallelHashJoinState * parallel_state
union HashJoinTableData::@113 buckets
HashMemoryChunk current_chunk
BufFile ** innerBatchFile
int log2_nbuckets_optimal
dsa_pointer_atomic * shared
BufFile ** outerBatchFile
dsa_pointer current_chunk_shared
HashSkewBucket ** skewBucket
union HashJoinTupleData::@111 next
struct HashJoinTupleData * unshared
struct HashMemoryChunkData * unshared
union HashMemoryChunkData::@112 next
SharedTuplestoreAccessor * outer_tuples
ParallelHashJoinBatch * shared
SharedTuplestoreAccessor * inner_tuples
Barrier grow_batches_barrier
dsa_pointer chunk_work_queue
Barrier grow_buckets_barrier
ParallelHashGrowth growth
pg_atomic_uint32 distributor