Convert uses of hash_string_pointer to fasthash equivalent
Remove duplicate hash_string_pointer() function definitions by creating a new inline function hash_string() for this purpose. This has the added advantage of avoiding strlen() calls when doing hash lookup. It's not clear how many of these are perfomance-sensitive enough to benefit from that, but the simplification is worth it on its own. Reviewed by Jeff Davis Discussion: https://postgr.es/m/CANWCAZbg_XeSeY0a_PqWmWqeRATvzTzUNYRLeT%2Bbzs%2BYQdC92g%40mail.gmail.com
This commit is contained in:
parent
db17594ad7
commit
f956ecd035
|
@ -15,7 +15,7 @@
|
|||
#include <sys/stat.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include "common/hashfn.h"
|
||||
#include "common/hashfn_unstable.h"
|
||||
#include "common/logging.h"
|
||||
#include "common/parse_manifest.h"
|
||||
#include "load_manifest.h"
|
||||
|
@ -44,12 +44,11 @@
|
|||
* Define a hash table which we can use to store information about the files
|
||||
* mentioned in the backup manifest.
|
||||
*/
|
||||
static uint32 hash_string_pointer(char *s);
|
||||
#define SH_PREFIX manifest_files
|
||||
#define SH_ELEMENT_TYPE manifest_file
|
||||
#define SH_KEY_TYPE char *
|
||||
#define SH_KEY pathname
|
||||
#define SH_HASH_KEY(tb, key) hash_string_pointer(key)
|
||||
#define SH_HASH_KEY(tb, key) hash_string(key)
|
||||
#define SH_EQUAL(tb, a, b) (strcmp(a, b) == 0)
|
||||
#define SH_SCOPE extern
|
||||
#define SH_RAW_ALLOCATOR pg_malloc0
|
||||
|
@ -311,14 +310,3 @@ combinebackup_per_wal_range_cb(JsonManifestParseContext *context,
|
|||
manifest->last_wal_range->next = range;
|
||||
manifest->last_wal_range = range;
|
||||
}
|
||||
|
||||
/*
|
||||
* Helper function for manifest_files hash table.
|
||||
*/
|
||||
static uint32
|
||||
hash_string_pointer(char *s)
|
||||
{
|
||||
unsigned char *ss = (unsigned char *) s;
|
||||
|
||||
return hash_bytes(ss, strlen(s));
|
||||
}
|
||||
|
|
|
@ -21,7 +21,7 @@
|
|||
#include "catalog/pg_authid_d.h"
|
||||
#include "common/connect.h"
|
||||
#include "common/file_utils.h"
|
||||
#include "common/hashfn.h"
|
||||
#include "common/hashfn_unstable.h"
|
||||
#include "common/logging.h"
|
||||
#include "common/string.h"
|
||||
#include "dumputils.h"
|
||||
|
@ -33,8 +33,6 @@
|
|||
/* version string we expect back from pg_dump */
|
||||
#define PGDUMP_VERSIONSTR "pg_dump (PostgreSQL) " PG_VERSION "\n"
|
||||
|
||||
static uint32 hash_string_pointer(char *s);
|
||||
|
||||
typedef struct
|
||||
{
|
||||
uint32 status;
|
||||
|
@ -46,7 +44,7 @@ typedef struct
|
|||
#define SH_ELEMENT_TYPE RoleNameEntry
|
||||
#define SH_KEY_TYPE char *
|
||||
#define SH_KEY rolename
|
||||
#define SH_HASH_KEY(tb, key) hash_string_pointer(key)
|
||||
#define SH_HASH_KEY(tb, key) hash_string(key)
|
||||
#define SH_EQUAL(tb, a, b) (strcmp(a, b) == 0)
|
||||
#define SH_STORE_HASH
|
||||
#define SH_GET_HASH(tb, a) (a)->hashval
|
||||
|
@ -1938,17 +1936,6 @@ dumpTimestamp(const char *msg)
|
|||
fprintf(OPF, "-- %s %s\n\n", msg, buf);
|
||||
}
|
||||
|
||||
/*
|
||||
* Helper function for rolename_hash hash table.
|
||||
*/
|
||||
static uint32
|
||||
hash_string_pointer(char *s)
|
||||
{
|
||||
unsigned char *ss = (unsigned char *) s;
|
||||
|
||||
return hash_bytes(ss, strlen(s));
|
||||
}
|
||||
|
||||
/*
|
||||
* read_dumpall_filters - retrieve database identifier patterns from file
|
||||
*
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
|
||||
#include "catalog/pg_tablespace_d.h"
|
||||
#include "common/file_utils.h"
|
||||
#include "common/hashfn.h"
|
||||
#include "common/hashfn_unstable.h"
|
||||
#include "common/string.h"
|
||||
#include "datapagemap.h"
|
||||
#include "filemap.h"
|
||||
|
@ -38,12 +38,11 @@
|
|||
* Define a hash table which we can use to store information about the files
|
||||
* appearing in source and target systems.
|
||||
*/
|
||||
static uint32 hash_string_pointer(const char *s);
|
||||
#define SH_PREFIX filehash
|
||||
#define SH_ELEMENT_TYPE file_entry_t
|
||||
#define SH_KEY_TYPE const char *
|
||||
#define SH_KEY path
|
||||
#define SH_HASH_KEY(tb, key) hash_string_pointer(key)
|
||||
#define SH_HASH_KEY(tb, key) hash_string(key)
|
||||
#define SH_EQUAL(tb, a, b) (strcmp(a, b) == 0)
|
||||
#define SH_SCOPE static inline
|
||||
#define SH_RAW_ALLOCATOR pg_malloc0
|
||||
|
@ -821,15 +820,3 @@ decide_file_actions(void)
|
|||
|
||||
return filemap;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Helper function for filemap hash table.
|
||||
*/
|
||||
static uint32
|
||||
hash_string_pointer(const char *s)
|
||||
{
|
||||
unsigned char *ss = (unsigned char *) s;
|
||||
|
||||
return hash_bytes(ss, strlen(s));
|
||||
}
|
||||
|
|
|
@ -19,7 +19,7 @@
|
|||
#include <time.h>
|
||||
|
||||
#include "common/controldata_utils.h"
|
||||
#include "common/hashfn.h"
|
||||
#include "common/hashfn_unstable.h"
|
||||
#include "common/logging.h"
|
||||
#include "common/parse_manifest.h"
|
||||
#include "fe_utils/simple_list.h"
|
||||
|
@ -68,12 +68,11 @@ typedef struct manifest_file
|
|||
* Define a hash table which we can use to store information about the files
|
||||
* mentioned in the backup manifest.
|
||||
*/
|
||||
static uint32 hash_string_pointer(char *s);
|
||||
#define SH_PREFIX manifest_files
|
||||
#define SH_ELEMENT_TYPE manifest_file
|
||||
#define SH_KEY_TYPE char *
|
||||
#define SH_KEY pathname
|
||||
#define SH_HASH_KEY(tb, key) hash_string_pointer(key)
|
||||
#define SH_HASH_KEY(tb, key) hash_string(key)
|
||||
#define SH_EQUAL(tb, a, b) (strcmp(a, b) == 0)
|
||||
#define SH_SCOPE static inline
|
||||
#define SH_RAW_ALLOCATOR pg_malloc0
|
||||
|
@ -1028,17 +1027,6 @@ should_ignore_relpath(verifier_context *context, char *relpath)
|
|||
return false;
|
||||
}
|
||||
|
||||
/*
|
||||
* Helper function for manifest_files hash table.
|
||||
*/
|
||||
static uint32
|
||||
hash_string_pointer(char *s)
|
||||
{
|
||||
unsigned char *ss = (unsigned char *) s;
|
||||
|
||||
return hash_bytes(ss, strlen(s));
|
||||
}
|
||||
|
||||
/*
|
||||
* Print a progress report based on the global variables.
|
||||
*
|
||||
|
|
|
@ -370,4 +370,24 @@ fasthash32(const char *k, size_t len, uint64 seed)
|
|||
return fasthash_reduce32(fasthash64(k, len, seed));
|
||||
}
|
||||
|
||||
/*
|
||||
* Convenience function for hashing NUL-terminated strings
|
||||
*/
|
||||
static inline uint32
|
||||
hash_string(const char *s)
|
||||
{
|
||||
fasthash_state hs;
|
||||
size_t s_len;
|
||||
|
||||
fasthash_init(&hs, 0);
|
||||
|
||||
/*
|
||||
* Combine string into the hash and save the length for tweaking the final
|
||||
* mix.
|
||||
*/
|
||||
s_len = fasthash_accum_cstring(&hs, s);
|
||||
|
||||
return fasthash_final32(&hs, s_len);
|
||||
}
|
||||
|
||||
#endif /* HASHFN_UNSTABLE_H */
|
||||
|
|
Loading…
Reference in a new issue