mirror of
https://github.com/postgres/postgres.git
synced 2025-10-21 02:52:47 +03:00
Move hash_any prototype from access/hash.h to utils/hashutils.h
... as well as its implementation from backend/access/hash/hashfunc.c to backend/utils/hash/hashfn.c. access/hash is the place for the hash index AM, not really appropriate for generic facilities, which is what hash_any is; having things the old way meant that anything using hash_any had to include the AM's include file, pointlessly polluting its namespace with unrelated, unnecessary cruft. Also move the HTEqual strategy number to access/stratnum.h from access/hash.h. To avoid breaking third-party extension code, add an #include "utils/hashutils.h" to access/hash.h. (An easily removed line by committers who enjoy their asbestos suits to protect them from angry extension authors.) Discussion: https://postgr.es/m/201901251935.ser5e4h6djt2@alvherre.pgsql
This commit is contained in:
@@ -24,6 +24,7 @@
|
||||
#include "lib/stringinfo.h"
|
||||
#include "storage/bufmgr.h"
|
||||
#include "storage/lockdefs.h"
|
||||
#include "utils/hashutils.h"
|
||||
#include "utils/hsearch.h"
|
||||
#include "utils/relcache.h"
|
||||
|
||||
@@ -38,17 +39,6 @@ typedef uint32 Bucket;
|
||||
#define BUCKET_TO_BLKNO(metap,B) \
|
||||
((BlockNumber) ((B) + ((B) ? (metap)->hashm_spares[_hash_spareindex((B)+1)-1] : 0)) + 1)
|
||||
|
||||
/*
|
||||
* Rotate the high 32 bits and the low 32 bits separately. The standard
|
||||
* hash function sometimes rotates the low 32 bits by one bit when
|
||||
* combining elements. We want extended hash functions to be compatible with
|
||||
* that algorithm when the seed is 0, so we can't just do a normal rotation.
|
||||
* This works, though.
|
||||
*/
|
||||
#define ROTATE_HIGH_AND_LOW_32BITS(v) \
|
||||
((((v) << 1) & UINT64CONST(0xfffffffefffffffe)) | \
|
||||
(((v) >> 31) & UINT64CONST(0x100000001)))
|
||||
|
||||
/*
|
||||
* Special space for hash index pages.
|
||||
*
|
||||
@@ -333,12 +323,6 @@ typedef HashMetaPageData *HashMetaPage;
|
||||
#define HASH_WRITE BUFFER_LOCK_EXCLUSIVE
|
||||
#define HASH_NOLOCK (-1)
|
||||
|
||||
/*
|
||||
* Strategy number. There's only one valid strategy for hashing: equality.
|
||||
*/
|
||||
#define HTEqualStrategyNumber 1
|
||||
#define HTMaxStrategyNumber 1
|
||||
|
||||
/*
|
||||
* When a new operator class is declared, we require that the user supply
|
||||
* us with an amproc function for hashing a key of the new type, returning
|
||||
@@ -380,12 +364,6 @@ extern IndexBulkDeleteResult *hashvacuumcleanup(IndexVacuumInfo *info,
|
||||
extern bytea *hashoptions(Datum reloptions, bool validate);
|
||||
extern bool hashvalidate(Oid opclassoid);
|
||||
|
||||
extern Datum hash_any(register const unsigned char *k, register int keylen);
|
||||
extern Datum hash_any_extended(register const unsigned char *k,
|
||||
register int keylen, uint64 seed);
|
||||
extern Datum hash_uint32(uint32 k);
|
||||
extern Datum hash_uint32_extended(uint32 k, uint64 seed);
|
||||
|
||||
/* private routines */
|
||||
|
||||
/* hashinsert.c */
|
||||
|
@@ -34,6 +34,13 @@ typedef uint16 StrategyNumber;
|
||||
|
||||
#define BTMaxStrategyNumber 5
|
||||
|
||||
/*
|
||||
* Strategy numbers for hash indexes. There's only one valid strategy for
|
||||
* hashing: equality.
|
||||
*/
|
||||
#define HTEqualStrategyNumber 1
|
||||
|
||||
#define HTMaxStrategyNumber 1
|
||||
|
||||
/*
|
||||
* Strategy numbers common to (some) GiST, SP-GiST and BRIN opclasses.
|
||||
|
Reference in New Issue
Block a user