mirror of
https://github.com/postgres/postgres.git
synced 2025-06-29 10:41:53 +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:
@ -15,7 +15,6 @@
|
||||
*/
|
||||
#include "postgres.h"
|
||||
|
||||
#include "access/hash.h"
|
||||
#include "access/transam.h"
|
||||
#include "catalog/pg_type.h"
|
||||
#include "nodes/makefuncs.h"
|
||||
@ -1830,14 +1829,11 @@ record_plan_function_dependency(PlannerInfo *root, Oid funcid)
|
||||
/*
|
||||
* It would work to use any syscache on pg_proc, but the easiest is
|
||||
* PROCOID since we already have the function's OID at hand. Note
|
||||
* that plancache.c knows we use PROCOID. Also, we're perhaps
|
||||
* assuming more than we should about how CatalogCacheComputeHashValue
|
||||
* computes hash values...
|
||||
* that plancache.c knows we use PROCOID.
|
||||
*/
|
||||
inval_item->cacheId = PROCOID;
|
||||
inval_item->hashValue =
|
||||
DatumGetUInt32(DirectFunctionCall1(hashoid,
|
||||
ObjectIdGetDatum(funcid)));
|
||||
inval_item->hashValue = GetSysCacheHashValue1(PROCOID,
|
||||
ObjectIdGetDatum(funcid));
|
||||
|
||||
root->glob->invalItems = lappend(root->glob->invalItems, inval_item);
|
||||
}
|
||||
|
Reference in New Issue
Block a user