mirror of
https://github.com/postgres/postgres.git
synced 2025-10-19 15:49:24 +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:
24
src/backend/utils/cache/syscache.c
vendored
24
src/backend/utils/cache/syscache.c
vendored
@@ -1050,6 +1050,30 @@ SysCacheGetAttr(int cacheId, HeapTuple tup,
|
||||
isNull);
|
||||
}
|
||||
|
||||
/*
|
||||
* GetSysCacheHashValue
|
||||
*
|
||||
* Get the hash value that would be used for a tuple in the specified cache
|
||||
* with the given search keys.
|
||||
*
|
||||
* The reason for exposing this as part of the API is that the hash value is
|
||||
* exposed in cache invalidation operations, so there are places outside the
|
||||
* catcache code that need to be able to compute the hash values.
|
||||
*/
|
||||
uint32
|
||||
GetSysCacheHashValue(int cacheId,
|
||||
Datum key1,
|
||||
Datum key2,
|
||||
Datum key3,
|
||||
Datum key4)
|
||||
{
|
||||
if (cacheId < 0 || cacheId >= SysCacheSize ||
|
||||
!PointerIsValid(SysCache[cacheId]))
|
||||
elog(ERROR, "invalid cache ID: %d", cacheId);
|
||||
|
||||
return GetCatCacheHashValue(SysCache[cacheId], key1, key2, key3, key4);
|
||||
}
|
||||
|
||||
/*
|
||||
* List-search interface
|
||||
*/
|
||||
|
Reference in New Issue
Block a user