mirror of
https://github.com/postgres/postgres.git
synced 2025-08-28 18:48:04 +03:00
Expose an API for calculating catcache hash values.
Now that cache invalidation callbacks get only a hash value, and not a tuple TID (per commits632ae6829f
andb5282aa893
), the only way they can restrict what they invalidate is to know what the hash values mean. setrefs.c was doing this via a hard-wired assumption but that seems pretty grotty, and it'll only get worse as more cases come up. So let's expose a calculation function that takes the same parameters as SearchSysCache. Per complaint from Marko Kreen.
This commit is contained in:
@@ -113,6 +113,9 @@ extern bool SearchSysCacheExistsAttName(Oid relid, const char *attname);
|
||||
extern Datum SysCacheGetAttr(int cacheId, HeapTuple tup,
|
||||
AttrNumber attributeNumber, bool *isNull);
|
||||
|
||||
extern uint32 GetSysCacheHashValue(int cacheId,
|
||||
Datum key1, Datum key2, Datum key3, Datum key4);
|
||||
|
||||
/* list-search interface. Users of this must import catcache.h too */
|
||||
extern struct catclist *SearchSysCacheList(int cacheId, int nkeys,
|
||||
Datum key1, Datum key2, Datum key3, Datum key4);
|
||||
@@ -158,6 +161,15 @@ extern struct catclist *SearchSysCacheList(int cacheId, int nkeys,
|
||||
#define GetSysCacheOid4(cacheId, key1, key2, key3, key4) \
|
||||
GetSysCacheOid(cacheId, key1, key2, key3, key4)
|
||||
|
||||
#define GetSysCacheHashValue1(cacheId, key1) \
|
||||
GetSysCacheHashValue(cacheId, key1, 0, 0, 0)
|
||||
#define GetSysCacheHashValue2(cacheId, key1, key2) \
|
||||
GetSysCacheHashValue(cacheId, key1, key2, 0, 0)
|
||||
#define GetSysCacheHashValue3(cacheId, key1, key2, key3) \
|
||||
GetSysCacheHashValue(cacheId, key1, key2, key3, 0)
|
||||
#define GetSysCacheHashValue4(cacheId, key1, key2, key3, key4) \
|
||||
GetSysCacheHashValue(cacheId, key1, key2, key3, key4)
|
||||
|
||||
#define SearchSysCacheList1(cacheId, key1) \
|
||||
SearchSysCacheList(cacheId, 1, key1, 0, 0, 0)
|
||||
#define SearchSysCacheList2(cacheId, key1, key2) \
|
||||
|
Reference in New Issue
Block a user