aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJeff Davis <jdavis@postgresql.org>2020-02-10 10:20:10 -0800
committerJeff Davis <jdavis@postgresql.org>2020-02-10 10:20:10 -0800
commit11de6c903da99a4b2220acfa776fc26c7f384ccc (patch)
treef0b049c693c1111570d6cd158e21f83b2e308611 /src
parent8fa8e011563744f61d29024ab187a189124a6551 (diff)
downloadpostgresql-11de6c903da99a4b2220acfa776fc26c7f384ccc.tar.gz
postgresql-11de6c903da99a4b2220acfa776fc26c7f384ccc.zip
Change signature of TupleHashTableHash().
Commit 4eaea3db introduced TupleHashTableHash(), but the signature didn't match the other exposed functions. Separate it into internal and external versions. The external version hides the details behind an API more consistent with the other external functions, and the internal version is still suitable for simplehash.
Diffstat (limited to 'src')
-rw-r--r--src/backend/executor/execGrouping.c35
-rw-r--r--src/include/executor/executor.h4
2 files changed, 31 insertions, 8 deletions
diff --git a/src/backend/executor/execGrouping.c b/src/backend/executor/execGrouping.c
index f0737fecca8..de0205f4fcd 100644
--- a/src/backend/executor/execGrouping.c
+++ b/src/backend/executor/execGrouping.c
@@ -26,6 +26,8 @@
#include "utils/memutils.h"
static int TupleHashTableMatch(struct tuplehash_hash *tb, const MinimalTuple tuple1, const MinimalTuple tuple2);
+static uint32 TupleHashTableHash_internal(struct tuplehash_hash *tb,
+ const MinimalTuple tuple);
static TupleHashEntry LookupTupleHashEntry_internal(
TupleHashTable hashtable, TupleTableSlot *slot, bool *isnew, uint32 hash);
@@ -38,7 +40,7 @@ static TupleHashEntry LookupTupleHashEntry_internal(
#define SH_ELEMENT_TYPE TupleHashEntryData
#define SH_KEY_TYPE MinimalTuple
#define SH_KEY firstTuple
-#define SH_HASH_KEY(tb, key) TupleHashTableHash(tb, key)
+#define SH_HASH_KEY(tb, key) TupleHashTableHash_internal(tb, key)
#define SH_EQUAL(tb, a, b) TupleHashTableMatch(tb, a, b) == 0
#define SH_SCOPE extern
#define SH_STORE_HASH
@@ -313,7 +315,7 @@ LookupTupleHashEntry(TupleHashTable hashtable, TupleTableSlot *slot,
hashtable->in_hash_funcs = hashtable->tab_hash_funcs;
hashtable->cur_eq_func = hashtable->tab_eq_func;
- hash = TupleHashTableHash(hashtable->hashtab, NULL);
+ hash = TupleHashTableHash_internal(hashtable->hashtab, NULL);
entry = LookupTupleHashEntry_internal(hashtable, slot, isnew, hash);
MemoryContextSwitchTo(oldContext);
@@ -322,6 +324,28 @@ LookupTupleHashEntry(TupleHashTable hashtable, TupleTableSlot *slot,
}
/*
+ * Compute the hash value for a tuple
+ */
+uint32
+TupleHashTableHash(TupleHashTable hashtable, TupleTableSlot *slot)
+{
+ MemoryContext oldContext;
+ uint32 hash;
+
+ hashtable->inputslot = slot;
+ hashtable->in_hash_funcs = hashtable->tab_hash_funcs;
+
+ /* Need to run the hash functions in short-lived context */
+ oldContext = MemoryContextSwitchTo(hashtable->tempcxt);
+
+ hash = TupleHashTableHash_internal(hashtable->hashtab, NULL);
+
+ MemoryContextSwitchTo(oldContext);
+
+ return hash;
+}
+
+/*
* A variant of LookupTupleHashEntry for callers that have already computed
* the hash value.
*/
@@ -382,8 +406,6 @@ FindTupleHashEntry(TupleHashTable hashtable, TupleTableSlot *slot,
}
/*
- * Compute the hash value for a tuple
- *
* If tuple is NULL, use the input slot instead. This convention avoids the
* need to materialize virtual input tuples unless they actually need to get
* copied into the table.
@@ -391,8 +413,9 @@ FindTupleHashEntry(TupleHashTable hashtable, TupleTableSlot *slot,
* Also, the caller must select an appropriate memory context for running
* the hash functions. (dynahash.c doesn't change CurrentMemoryContext.)
*/
-uint32
-TupleHashTableHash(struct tuplehash_hash *tb, const MinimalTuple tuple)
+static uint32
+TupleHashTableHash_internal(struct tuplehash_hash *tb,
+ const MinimalTuple tuple)
{
TupleHashTable hashtable = (TupleHashTable) tb->private_data;
int numCols = hashtable->numCols;
diff --git a/src/include/executor/executor.h b/src/include/executor/executor.h
index e49cb110461..81fdfa4add3 100644
--- a/src/include/executor/executor.h
+++ b/src/include/executor/executor.h
@@ -140,8 +140,8 @@ extern TupleHashTable BuildTupleHashTableExt(PlanState *parent,
extern TupleHashEntry LookupTupleHashEntry(TupleHashTable hashtable,
TupleTableSlot *slot,
bool *isnew);
-extern uint32 TupleHashTableHash(struct tuplehash_hash *tb,
- const MinimalTuple tuple);
+extern uint32 TupleHashTableHash(TupleHashTable hashtable,
+ TupleTableSlot *slot);
extern TupleHashEntry LookupTupleHashEntryHash(TupleHashTable hashtable,
TupleTableSlot *slot,
bool *isnew, uint32 hash);