diff options
| author | Jeff Davis | 2025-01-11 01:14:37 +0000 |
|---|---|---|
| committer | Jeff Davis | 2025-01-11 01:14:37 +0000 |
| commit | e0ece2a981ee9068f50c4423e303836c2585eb02 (patch) | |
| tree | b5a61a16ff16405c3c3bcbb4f44089648e166d12 /src/include/nodes | |
| parent | 34c6e652425fde42c2746f749e31d196fc0d5538 (diff) | |
TupleHashTable: store additional data along with tuple.
Previously, the caller needed to allocate the memory and the
TupleHashTable would store a pointer to it. That wastes space for the
palloc overhead as well as the size of the pointer itself.
Now, the TupleHashTable relies on the caller to correctly specify the
additionalsize, and allocates that amount of space. The caller can
then request a pointer into that space.
Discussion: https://postgr.es/m/b9cbf0219a9859dc8d240311643ff4362fd9602c.camel@j-davis.com
Reviewed-by: Heikki Linnakangas
Diffstat (limited to 'src/include/nodes')
| -rw-r--r-- | src/include/nodes/execnodes.h | 10 |
1 files changed, 2 insertions, 8 deletions
diff --git a/src/include/nodes/execnodes.h b/src/include/nodes/execnodes.h index b3f7aa299f5..7d5871d6fac 100644 --- a/src/include/nodes/execnodes.h +++ b/src/include/nodes/execnodes.h @@ -806,17 +806,10 @@ typedef struct ExecAuxRowMark * point to tab_hash_expr and tab_eq_func respectively. * ---------------------------------------------------------------- */ +typedef struct TupleHashEntryData TupleHashEntryData; typedef struct TupleHashEntryData *TupleHashEntry; typedef struct TupleHashTableData *TupleHashTable; -typedef struct TupleHashEntryData -{ - MinimalTuple firstTuple; /* copy of first tuple in this group */ - void *additional; /* user data */ - uint32 status; /* hash status */ - uint32 hash; /* hash value (cached) */ -} TupleHashEntryData; - /* define parameters necessary to generate the tuple hash table interface */ #define SH_PREFIX tuplehash #define SH_ELEMENT_TYPE TupleHashEntryData @@ -835,6 +828,7 @@ typedef struct TupleHashTableData Oid *tab_collations; /* collations for hash and comparison */ MemoryContext tablecxt; /* memory context containing table */ MemoryContext tempcxt; /* context for function evaluations */ + Size additionalsize; /* size of additional data */ TupleTableSlot *tableslot; /* slot for referencing table entries */ /* The following fields are set transiently for each table search: */ TupleTableSlot *inputslot; /* current input tuple's slot */ |
