mirror of
				https://github.com/postgres/postgres.git
				synced 2025-11-03 09:13:20 +03:00 
			
		
		
		
	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:
		@@ -15,7 +15,7 @@
 | 
				
			|||||||
#include <sys/stat.h>
 | 
					#include <sys/stat.h>
 | 
				
			||||||
#include <unistd.h>
 | 
					#include <unistd.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "common/hashfn.h"
 | 
					#include "common/hashfn_unstable.h"
 | 
				
			||||||
#include "common/logging.h"
 | 
					#include "common/logging.h"
 | 
				
			||||||
#include "common/parse_manifest.h"
 | 
					#include "common/parse_manifest.h"
 | 
				
			||||||
#include "load_manifest.h"
 | 
					#include "load_manifest.h"
 | 
				
			||||||
@@ -44,12 +44,11 @@
 | 
				
			|||||||
 * Define a hash table which we can use to store information about the files
 | 
					 * Define a hash table which we can use to store information about the files
 | 
				
			||||||
 * mentioned in the backup manifest.
 | 
					 * mentioned in the backup manifest.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
static uint32 hash_string_pointer(char *s);
 | 
					 | 
				
			||||||
#define SH_PREFIX		manifest_files
 | 
					#define SH_PREFIX		manifest_files
 | 
				
			||||||
#define SH_ELEMENT_TYPE	manifest_file
 | 
					#define SH_ELEMENT_TYPE	manifest_file
 | 
				
			||||||
#define SH_KEY_TYPE		char *
 | 
					#define SH_KEY_TYPE		char *
 | 
				
			||||||
#define	SH_KEY			pathname
 | 
					#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_EQUAL(tb, a, b)		(strcmp(a, b) == 0)
 | 
				
			||||||
#define	SH_SCOPE		extern
 | 
					#define	SH_SCOPE		extern
 | 
				
			||||||
#define SH_RAW_ALLOCATOR	pg_malloc0
 | 
					#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->next = range;
 | 
				
			||||||
	manifest->last_wal_range = 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 "catalog/pg_authid_d.h"
 | 
				
			||||||
#include "common/connect.h"
 | 
					#include "common/connect.h"
 | 
				
			||||||
#include "common/file_utils.h"
 | 
					#include "common/file_utils.h"
 | 
				
			||||||
#include "common/hashfn.h"
 | 
					#include "common/hashfn_unstable.h"
 | 
				
			||||||
#include "common/logging.h"
 | 
					#include "common/logging.h"
 | 
				
			||||||
#include "common/string.h"
 | 
					#include "common/string.h"
 | 
				
			||||||
#include "dumputils.h"
 | 
					#include "dumputils.h"
 | 
				
			||||||
@@ -33,8 +33,6 @@
 | 
				
			|||||||
/* version string we expect back from pg_dump */
 | 
					/* version string we expect back from pg_dump */
 | 
				
			||||||
#define PGDUMP_VERSIONSTR "pg_dump (PostgreSQL) " PG_VERSION "\n"
 | 
					#define PGDUMP_VERSIONSTR "pg_dump (PostgreSQL) " PG_VERSION "\n"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static uint32 hash_string_pointer(char *s);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
typedef struct
 | 
					typedef struct
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	uint32		status;
 | 
						uint32		status;
 | 
				
			||||||
@@ -46,7 +44,7 @@ typedef struct
 | 
				
			|||||||
#define SH_ELEMENT_TYPE	RoleNameEntry
 | 
					#define SH_ELEMENT_TYPE	RoleNameEntry
 | 
				
			||||||
#define SH_KEY_TYPE	char *
 | 
					#define SH_KEY_TYPE	char *
 | 
				
			||||||
#define SH_KEY		rolename
 | 
					#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_EQUAL(tb, a, b)		(strcmp(a, b) == 0)
 | 
				
			||||||
#define SH_STORE_HASH
 | 
					#define SH_STORE_HASH
 | 
				
			||||||
#define SH_GET_HASH(tb, a)		(a)->hashval
 | 
					#define SH_GET_HASH(tb, a)		(a)->hashval
 | 
				
			||||||
@@ -1938,17 +1936,6 @@ dumpTimestamp(const char *msg)
 | 
				
			|||||||
		fprintf(OPF, "-- %s %s\n\n", msg, buf);
 | 
							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
 | 
					 * read_dumpall_filters - retrieve database identifier patterns from file
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -28,7 +28,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
#include "catalog/pg_tablespace_d.h"
 | 
					#include "catalog/pg_tablespace_d.h"
 | 
				
			||||||
#include "common/file_utils.h"
 | 
					#include "common/file_utils.h"
 | 
				
			||||||
#include "common/hashfn.h"
 | 
					#include "common/hashfn_unstable.h"
 | 
				
			||||||
#include "common/string.h"
 | 
					#include "common/string.h"
 | 
				
			||||||
#include "datapagemap.h"
 | 
					#include "datapagemap.h"
 | 
				
			||||||
#include "filemap.h"
 | 
					#include "filemap.h"
 | 
				
			||||||
@@ -38,12 +38,11 @@
 | 
				
			|||||||
 * Define a hash table which we can use to store information about the files
 | 
					 * Define a hash table which we can use to store information about the files
 | 
				
			||||||
 * appearing in source and target systems.
 | 
					 * appearing in source and target systems.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
static uint32 hash_string_pointer(const char *s);
 | 
					 | 
				
			||||||
#define SH_PREFIX		filehash
 | 
					#define SH_PREFIX		filehash
 | 
				
			||||||
#define SH_ELEMENT_TYPE	file_entry_t
 | 
					#define SH_ELEMENT_TYPE	file_entry_t
 | 
				
			||||||
#define SH_KEY_TYPE		const char *
 | 
					#define SH_KEY_TYPE		const char *
 | 
				
			||||||
#define	SH_KEY			path
 | 
					#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_EQUAL(tb, a, b)		(strcmp(a, b) == 0)
 | 
				
			||||||
#define	SH_SCOPE		static inline
 | 
					#define	SH_SCOPE		static inline
 | 
				
			||||||
#define SH_RAW_ALLOCATOR	pg_malloc0
 | 
					#define SH_RAW_ALLOCATOR	pg_malloc0
 | 
				
			||||||
@@ -821,15 +820,3 @@ decide_file_actions(void)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	return filemap;
 | 
						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 <time.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "common/controldata_utils.h"
 | 
					#include "common/controldata_utils.h"
 | 
				
			||||||
#include "common/hashfn.h"
 | 
					#include "common/hashfn_unstable.h"
 | 
				
			||||||
#include "common/logging.h"
 | 
					#include "common/logging.h"
 | 
				
			||||||
#include "common/parse_manifest.h"
 | 
					#include "common/parse_manifest.h"
 | 
				
			||||||
#include "fe_utils/simple_list.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
 | 
					 * Define a hash table which we can use to store information about the files
 | 
				
			||||||
 * mentioned in the backup manifest.
 | 
					 * mentioned in the backup manifest.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
static uint32 hash_string_pointer(char *s);
 | 
					 | 
				
			||||||
#define SH_PREFIX		manifest_files
 | 
					#define SH_PREFIX		manifest_files
 | 
				
			||||||
#define SH_ELEMENT_TYPE	manifest_file
 | 
					#define SH_ELEMENT_TYPE	manifest_file
 | 
				
			||||||
#define SH_KEY_TYPE		char *
 | 
					#define SH_KEY_TYPE		char *
 | 
				
			||||||
#define	SH_KEY			pathname
 | 
					#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_EQUAL(tb, a, b)		(strcmp(a, b) == 0)
 | 
				
			||||||
#define	SH_SCOPE		static inline
 | 
					#define	SH_SCOPE		static inline
 | 
				
			||||||
#define SH_RAW_ALLOCATOR	pg_malloc0
 | 
					#define SH_RAW_ALLOCATOR	pg_malloc0
 | 
				
			||||||
@@ -1028,17 +1027,6 @@ should_ignore_relpath(verifier_context *context, char *relpath)
 | 
				
			|||||||
	return false;
 | 
						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.
 | 
					 * 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));
 | 
						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 */
 | 
					#endif							/* HASHFN_UNSTABLE_H */
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user