From fa57dcebf84bdcd16dd057e1515ef380ac3c9058 Mon Sep 17 00:00:00 2001 From: John Naylor Date: Sat, 9 Dec 2023 17:19:10 +0700 Subject: [PATCH v6 07/13] Use bytewise fasthash in guc_name_hash --- src/backend/utils/misc/guc.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/backend/utils/misc/guc.c b/src/backend/utils/misc/guc.c index e76c083003..053be81d14 100644 --- a/src/backend/utils/misc/guc.c +++ b/src/backend/utils/misc/guc.c @@ -33,6 +33,7 @@ #include "catalog/objectaccess.h" #include "catalog/pg_authid.h" #include "catalog/pg_parameter_acl.h" +#include "common/hashfn_unstable.h" #include "guc_internal.h" #include "libpq/pqformat.h" #include "parser/scansup.h" @@ -1324,22 +1325,21 @@ guc_name_compare(const char *namea, const char *nameb) static uint32 guc_name_hash(const void *key, Size keysize) { - uint32 result = 0; const char *name = *(const char *const *) key; + fasthash_state hs; + + fasthash_init(&hs, 0, 0); while (*name) { char ch = *name++; - /* Case-fold in the same way as guc_name_compare */ - if (ch >= 'A' && ch <= 'Z') - ch += 'a' - 'A'; + /* quick and dirty casefolding suitable for hashing */ + ch |= 0x20; - /* Merge into hash ... not very bright, but it needn't be */ - result = pg_rotate_left32(result, 5); - result ^= (uint32) ch; + fasthash_accum_byte(&hs, (unsigned char) ch); } - return result; + return fasthash_final32(&hs); } /* -- 2.43.0