On 2/13/26 9:24 AM, Michael Paquier wrote:
I was expecting something a bit more complicated. Nice at quick glance, Andreas.
It is a bit more code churn if I also include inval.c, but I still do not think it would be too bad.
Andreas
From f80783c028ae3e4d1c8a72409e93b7e3c3fa6542 Mon Sep 17 00:00:00 2001 From: Andreas Karlsson <[email protected]> Date: Fri, 13 Feb 2026 06:41:09 +0100 Subject: [PATCH v2] Use SysCacheIdentifier enum instead of int This makes the ABI checker happy plus makes the itnent of the code clearer. --- contrib/postgres_fdw/connection.c | 4 +-- contrib/postgres_fdw/shippable.c | 2 +- src/backend/catalog/aclchk.c | 10 +++--- src/backend/catalog/dependency.c | 2 +- src/backend/catalog/genbki.pl | 4 +-- src/backend/catalog/namespace.c | 4 +-- src/backend/catalog/objectaddress.c | 12 ++++---- src/backend/commands/alter.c | 8 ++--- src/backend/commands/extension.c | 4 +-- src/backend/optimizer/util/predtest.c | 4 +-- src/backend/parser/parse_oper.c | 4 +-- src/backend/replication/logical/syncutils.c | 2 +- src/backend/replication/logical/worker.c | 2 +- src/backend/replication/pgoutput/pgoutput.c | 8 ++--- src/backend/utils/adt/acl.c | 4 +-- src/backend/utils/adt/ri_triggers.c | 4 +-- src/backend/utils/cache/attoptcache.c | 2 +- src/backend/utils/cache/evtcache.c | 4 +-- src/backend/utils/cache/inval.c | 4 +-- src/backend/utils/cache/plancache.c | 8 ++--- src/backend/utils/cache/spccache.c | 2 +- src/backend/utils/cache/syscache.c | 34 ++++++++++----------- src/backend/utils/cache/ts_cache.c | 2 +- src/backend/utils/cache/typcache.c | 12 ++++---- src/backend/utils/misc/superuser.c | 4 +-- src/include/catalog/objectaddress.h | 5 +-- src/include/replication/worker_internal.h | 2 +- src/include/utils/inval.h | 7 +++-- src/include/utils/syscache.h | 30 +++++++++--------- 29 files changed, 98 insertions(+), 96 deletions(-) diff --git a/contrib/postgres_fdw/connection.c b/contrib/postgres_fdw/connection.c index 487a1a23170..16e44071577 100644 --- a/contrib/postgres_fdw/connection.c +++ b/contrib/postgres_fdw/connection.c @@ -150,7 +150,7 @@ static void pgfdw_subxact_callback(SubXactEvent event, SubTransactionId mySubid, SubTransactionId parentSubid, void *arg); -static void pgfdw_inval_callback(Datum arg, int cacheid, uint32 hashvalue); +static void pgfdw_inval_callback(Datum arg, SysCacheIdentifier cacheid, uint32 hashvalue); static void pgfdw_reject_incomplete_xact_state_change(ConnCacheEntry *entry); static void pgfdw_reset_xact_state(ConnCacheEntry *entry, bool toplevel); static bool pgfdw_cancel_query(PGconn *conn); @@ -1309,7 +1309,7 @@ pgfdw_subxact_callback(SubXactEvent event, SubTransactionId mySubid, * individual option values, but it seems too much effort for the gain. */ static void -pgfdw_inval_callback(Datum arg, int cacheid, uint32 hashvalue) +pgfdw_inval_callback(Datum arg, SysCacheIdentifier cacheid, uint32 hashvalue) { HASH_SEQ_STATUS scan; ConnCacheEntry *entry; diff --git a/contrib/postgres_fdw/shippable.c b/contrib/postgres_fdw/shippable.c index d32d3d0e461..e07eadd3630 100644 --- a/contrib/postgres_fdw/shippable.c +++ b/contrib/postgres_fdw/shippable.c @@ -62,7 +62,7 @@ typedef struct * made for them, however. */ static void -InvalidateShippableCacheCallback(Datum arg, int cacheid, uint32 hashvalue) +InvalidateShippableCacheCallback(Datum arg, SysCacheIdentifier cacheid, uint32 hashvalue) { HASH_SEQ_STATUS status; ShippableCacheEntry *entry; diff --git a/src/backend/catalog/aclchk.c b/src/backend/catalog/aclchk.c index a431fc0926f..1dd6df71d14 100644 --- a/src/backend/catalog/aclchk.c +++ b/src/backend/catalog/aclchk.c @@ -2115,7 +2115,7 @@ static void ExecGrant_common(InternalGrant *istmt, Oid classid, AclMode default_privs, void (*object_check) (InternalGrant *istmt, HeapTuple tuple)) { - int cacheid; + SysCacheIdentifier cacheid; Relation relation; ListCell *cell; @@ -3058,7 +3058,7 @@ object_aclmask_ext(Oid classid, Oid objectid, Oid roleid, AclMode mask, AclMaskHow how, bool *is_missing) { - int cacheid; + SysCacheIdentifier cacheid; AclMode result; HeapTuple tuple; Datum aclDatum; @@ -4089,7 +4089,7 @@ pg_largeobject_aclcheck_snapshot(Oid lobj_oid, Oid roleid, AclMode mode, bool object_ownercheck(Oid classid, Oid objectid, Oid roleid) { - int cacheid; + SysCacheIdentifier cacheid; Oid ownerId; /* Superusers bypass all permission checking. */ @@ -4486,7 +4486,7 @@ recordExtObjInitPriv(Oid objoid, Oid classoid) /* This will error on unsupported classoid. */ else if (get_object_attnum_acl(classoid) != InvalidAttrNumber) { - int cacheid; + SysCacheIdentifier cacheid; Datum aclDatum; bool isNull; HeapTuple tuple; @@ -4870,7 +4870,7 @@ RemoveRoleFromInitPriv(Oid roleid, Oid classid, Oid objid, int32 objsubid) ScanKeyData key[3]; SysScanDesc scan; HeapTuple oldtuple; - int cacheid; + SysCacheIdentifier cacheid; HeapTuple objtuple; Oid ownerId; Datum oldAclDatum; diff --git a/src/backend/catalog/dependency.c b/src/backend/catalog/dependency.c index f89267f0342..7564965fa18 100644 --- a/src/backend/catalog/dependency.c +++ b/src/backend/catalog/dependency.c @@ -1238,7 +1238,7 @@ reportDependentObjects(const ObjectAddresses *targetObjects, static void DropObjectById(const ObjectAddress *object) { - int cacheId; + SysCacheIdentifier cacheId; Relation rel; HeapTuple tup; diff --git a/src/backend/catalog/genbki.pl b/src/backend/catalog/genbki.pl index b2c1b1c5733..0ddded783b5 100644 --- a/src/backend/catalog/genbki.pl +++ b/src/backend/catalog/genbki.pl @@ -795,7 +795,7 @@ print $fk_info "};\n\n#endif\t\t\t\t\t\t\t/* SYSTEM_FK_INFO_H */\n"; # Now generate syscache info print_boilerplate($syscache_ids_fh, "syscache_ids.h", "SysCache identifiers"); -print $syscache_ids_fh "enum SysCacheIdentifier +print $syscache_ids_fh "typedef enum SysCacheIdentifier { "; @@ -825,7 +825,7 @@ foreach my $syscache (sort keys %syscaches) print $syscache_info_fh "\t},\n"; } -print $syscache_ids_fh "};\n"; +print $syscache_ids_fh "} SysCacheIdentifier;\n"; print $syscache_ids_fh "#define SysCacheSize ($last_syscache + 1)\n"; print $syscache_info_fh "};\n"; diff --git a/src/backend/catalog/namespace.c b/src/backend/catalog/namespace.c index c3b79a2ba48..cb335afdf89 100644 --- a/src/backend/catalog/namespace.c +++ b/src/backend/catalog/namespace.c @@ -229,7 +229,7 @@ static void AccessTempTableNamespace(bool force); static void InitTempTableNamespace(void); static void RemoveTempRelations(Oid tempNamespaceId); static void RemoveTempRelationsCallback(int code, Datum arg); -static void InvalidationCallback(Datum arg, int cacheid, uint32 hashvalue); +static void InvalidationCallback(Datum arg, SysCacheIdentifier cacheid, uint32 hashvalue); static bool MatchNamedCall(HeapTuple proctup, int nargs, List *argnames, bool include_out_arguments, int pronargs, int **argnumbers, int *fgc_flags); @@ -4863,7 +4863,7 @@ InitializeSearchPath(void) * Syscache inval callback function */ static void -InvalidationCallback(Datum arg, int cacheid, uint32 hashvalue) +InvalidationCallback(Datum arg, SysCacheIdentifier cacheid, uint32 hashvalue) { /* * Force search path to be recomputed on next use, also invalidating the diff --git a/src/backend/catalog/objectaddress.c b/src/backend/catalog/objectaddress.c index 02af64b82c6..0af390d9810 100644 --- a/src/backend/catalog/objectaddress.c +++ b/src/backend/catalog/objectaddress.c @@ -99,8 +99,8 @@ typedef struct * error messages */ Oid class_oid; /* oid of catalog */ Oid oid_index_oid; /* oid of index on system oid column */ - int oid_catcache_id; /* id of catcache on system oid column */ - int name_catcache_id; /* id of catcache on (name,namespace), or + SysCacheIdentifier oid_catcache_id; /* id of catcache on system oid column */ + SysCacheIdentifier name_catcache_id; /* id of catcache on (name,namespace), or * (name) if the object does not live in a * namespace */ AttrNumber attnum_oid; /* attribute number of oid column */ @@ -2571,7 +2571,7 @@ check_object_ownership(Oid roleid, ObjectType objtype, ObjectAddress address, Oid get_object_namespace(const ObjectAddress *address) { - int cache; + SysCacheIdentifier cache; HeapTuple tuple; Oid oid; const ObjectPropertyType *property; @@ -2640,7 +2640,7 @@ get_object_oid_index(Oid class_id) return prop->oid_index_oid; } -int +SysCacheIdentifier get_object_catcache_oid(Oid class_id) { const ObjectPropertyType *prop = get_object_property_data(class_id); @@ -2648,7 +2648,7 @@ get_object_catcache_oid(Oid class_id) return prop->oid_catcache_id; } -int +SysCacheIdentifier get_object_catcache_name(Oid class_id) { const ObjectPropertyType *prop = get_object_property_data(class_id); @@ -2806,7 +2806,7 @@ get_catalog_object_by_oid_extended(Relation catalog, { HeapTuple tuple; Oid classId = RelationGetRelid(catalog); - int oidCacheId = get_object_catcache_oid(classId); + SysCacheIdentifier oidCacheId = get_object_catcache_oid(classId); if (oidCacheId > 0) { diff --git a/src/backend/commands/alter.c b/src/backend/commands/alter.c index 08957104c70..c6f58d47be6 100644 --- a/src/backend/commands/alter.c +++ b/src/backend/commands/alter.c @@ -159,8 +159,8 @@ static void AlterObjectRename_internal(Relation rel, Oid objectId, const char *new_name) { Oid classId = RelationGetRelid(rel); - int oidCacheId = get_object_catcache_oid(classId); - int nameCacheId = get_object_catcache_name(classId); + SysCacheIdentifier oidCacheId = get_object_catcache_oid(classId); + SysCacheIdentifier nameCacheId = get_object_catcache_name(classId); AttrNumber Anum_name = get_object_attnum_name(classId); AttrNumber Anum_namespace = get_object_attnum_namespace(classId); AttrNumber Anum_owner = get_object_attnum_owner(classId); @@ -686,8 +686,8 @@ static Oid AlterObjectNamespace_internal(Relation rel, Oid objid, Oid nspOid) { Oid classId = RelationGetRelid(rel); - int oidCacheId = get_object_catcache_oid(classId); - int nameCacheId = get_object_catcache_name(classId); + SysCacheIdentifier oidCacheId = get_object_catcache_oid(classId); + SysCacheIdentifier nameCacheId = get_object_catcache_name(classId); AttrNumber Anum_name = get_object_attnum_name(classId); AttrNumber Anum_namespace = get_object_attnum_namespace(classId); AttrNumber Anum_owner = get_object_attnum_owner(classId); diff --git a/src/backend/commands/extension.c b/src/backend/commands/extension.c index 81f24615d51..93ce3ebabf8 100644 --- a/src/backend/commands/extension.c +++ b/src/backend/commands/extension.c @@ -162,7 +162,7 @@ typedef struct ExtensionSiblingCache static ExtensionSiblingCache *ext_sibling_list = NULL; /* Local functions */ -static void ext_sibling_callback(Datum arg, int cacheid, uint32 hashvalue); +static void ext_sibling_callback(Datum arg, SysCacheIdentifier cacheid, uint32 hashvalue); static List *find_update_path(List *evi_list, ExtensionVersionInfo *evi_start, ExtensionVersionInfo *evi_target, @@ -379,7 +379,7 @@ get_function_sibling_type(Oid funcoid, const char *typname) * looking for, could change without an extension update or drop/recreate. */ static void -ext_sibling_callback(Datum arg, int cacheid, uint32 hashvalue) +ext_sibling_callback(Datum arg, SysCacheIdentifier cacheid, uint32 hashvalue) { ExtensionSiblingCache *cache_entry; diff --git a/src/backend/optimizer/util/predtest.c b/src/backend/optimizer/util/predtest.c index 26858d1d2b0..61a0ed195aa 100644 --- a/src/backend/optimizer/util/predtest.c +++ b/src/backend/optimizer/util/predtest.c @@ -109,7 +109,7 @@ static bool operator_same_subexprs_proof(Oid pred_op, Oid clause_op, static bool operator_same_subexprs_lookup(Oid pred_op, Oid clause_op, bool refute_it); static Oid get_btree_test_op(Oid pred_op, Oid clause_op, bool refute_it); -static void InvalidateOprProofCacheCallBack(Datum arg, int cacheid, uint32 hashvalue); +static void InvalidateOprProofCacheCallBack(Datum arg, SysCacheIdentifier cacheid, uint32 hashvalue); /* @@ -2343,7 +2343,7 @@ get_btree_test_op(Oid pred_op, Oid clause_op, bool refute_it) * Callback for pg_amop inval events */ static void -InvalidateOprProofCacheCallBack(Datum arg, int cacheid, uint32 hashvalue) +InvalidateOprProofCacheCallBack(Datum arg, SysCacheIdentifier cacheid, uint32 hashvalue) { HASH_SEQ_STATUS status; OprProofCacheEntry *hentry; diff --git a/src/backend/parser/parse_oper.c b/src/backend/parser/parse_oper.c index 768e4cff9c5..76cbdacf933 100644 --- a/src/backend/parser/parse_oper.c +++ b/src/backend/parser/parse_oper.c @@ -79,7 +79,7 @@ static bool make_oper_cache_key(ParseState *pstate, OprCacheKey *key, int location); static Oid find_oper_cache_entry(OprCacheKey *key); static void make_oper_cache_entry(OprCacheKey *key, Oid opr_oid); -static void InvalidateOprCacheCallBack(Datum arg, int cacheid, uint32 hashvalue); +static void InvalidateOprCacheCallBack(Datum arg, SysCacheIdentifier cacheid, uint32 hashvalue); /* @@ -1076,7 +1076,7 @@ make_oper_cache_entry(OprCacheKey *key, Oid opr_oid) * Callback for pg_operator and pg_cast inval events */ static void -InvalidateOprCacheCallBack(Datum arg, int cacheid, uint32 hashvalue) +InvalidateOprCacheCallBack(Datum arg, SysCacheIdentifier cacheid, uint32 hashvalue) { HASH_SEQ_STATUS status; OprCacheEntry *hentry; diff --git a/src/backend/replication/logical/syncutils.c b/src/backend/replication/logical/syncutils.c index 535ffb6f09e..8f0897beec1 100644 --- a/src/backend/replication/logical/syncutils.c +++ b/src/backend/replication/logical/syncutils.c @@ -98,7 +98,7 @@ FinishSyncWorker(void) * Callback from syscache invalidation. */ void -InvalidateSyncingRelStates(Datum arg, int cacheid, uint32 hashvalue) +InvalidateSyncingRelStates(Datum arg, SysCacheIdentifier cacheid, uint32 hashvalue) { relation_states_validity = SYNC_RELATIONS_STATE_NEEDS_REBUILD; } diff --git a/src/backend/replication/logical/worker.c b/src/backend/replication/logical/worker.c index 32725c48623..8b93f48470c 100644 --- a/src/backend/replication/logical/worker.c +++ b/src/backend/replication/logical/worker.c @@ -5164,7 +5164,7 @@ maybe_reread_subscription(void) * Callback from subscription syscache invalidation. */ static void -subscription_change_cb(Datum arg, int cacheid, uint32 hashvalue) +subscription_change_cb(Datum arg, SysCacheIdentifier cacheid, uint32 hashvalue) { MySubscriptionValid = false; } diff --git a/src/backend/replication/pgoutput/pgoutput.c b/src/backend/replication/pgoutput/pgoutput.c index e016f64e0b3..2aea20dca22 100644 --- a/src/backend/replication/pgoutput/pgoutput.c +++ b/src/backend/replication/pgoutput/pgoutput.c @@ -86,7 +86,7 @@ static void pgoutput_stream_prepare_txn(LogicalDecodingContext *ctx, static bool publications_valid; static List *LoadPublications(List *pubnames); -static void publication_invalidation_cb(Datum arg, int cacheid, +static void publication_invalidation_cb(Datum arg, SysCacheIdentifier cacheid, uint32 hashvalue); static void send_repl_origin(LogicalDecodingContext *ctx, ReplOriginId origin_id, XLogRecPtr origin_lsn, @@ -227,7 +227,7 @@ static void send_relation_and_attrs(Relation relation, TransactionId xid, LogicalDecodingContext *ctx, RelationSyncEntry *relentry); static void rel_sync_cache_relation_cb(Datum arg, Oid relid); -static void rel_sync_cache_publication_cb(Datum arg, int cacheid, +static void rel_sync_cache_publication_cb(Datum arg, SysCacheIdentifier cacheid, uint32 hashvalue); static void set_schema_sent_in_streamed_txn(RelationSyncEntry *entry, TransactionId xid); @@ -1828,7 +1828,7 @@ LoadPublications(List *pubnames) * Called for invalidations on pg_publication. */ static void -publication_invalidation_cb(Datum arg, int cacheid, uint32 hashvalue) +publication_invalidation_cb(Datum arg, SysCacheIdentifier cacheid, uint32 hashvalue) { publications_valid = false; } @@ -2431,7 +2431,7 @@ rel_sync_cache_relation_cb(Datum arg, Oid relid) * Called for invalidations on pg_namespace. */ static void -rel_sync_cache_publication_cb(Datum arg, int cacheid, uint32 hashvalue) +rel_sync_cache_publication_cb(Datum arg, SysCacheIdentifier cacheid, uint32 hashvalue) { HASH_SEQ_STATUS status; RelationSyncEntry *entry; diff --git a/src/backend/utils/adt/acl.c b/src/backend/utils/adt/acl.c index 3a6905f9546..332152cfd2a 100644 --- a/src/backend/utils/adt/acl.c +++ b/src/backend/utils/adt/acl.c @@ -130,7 +130,7 @@ static AclMode convert_largeobject_priv_string(text *priv_type_text); static AclMode convert_role_priv_string(text *priv_type_text); static AclResult pg_role_aclcheck(Oid role_oid, Oid roleid, AclMode mode); -static void RoleMembershipCacheCallback(Datum arg, int cacheid, uint32 hashvalue); +static void RoleMembershipCacheCallback(Datum arg, SysCacheIdentifier cacheid, uint32 hashvalue); /* @@ -5067,7 +5067,7 @@ initialize_acl(void) * Syscache inval callback function */ static void -RoleMembershipCacheCallback(Datum arg, int cacheid, uint32 hashvalue) +RoleMembershipCacheCallback(Datum arg, SysCacheIdentifier cacheid, uint32 hashvalue) { if (cacheid == DATABASEOID && hashvalue != cached_db_hash && diff --git a/src/backend/utils/adt/ri_triggers.c b/src/backend/utils/adt/ri_triggers.c index bbadecef5f9..57a511cc9e2 100644 --- a/src/backend/utils/adt/ri_triggers.c +++ b/src/backend/utils/adt/ri_triggers.c @@ -213,7 +213,7 @@ static bool ri_CompareWithCast(Oid eq_opr, Oid typeid, Oid collid, Datum lhs, Datum rhs); static void ri_InitHashTables(void); -static void InvalidateConstraintCacheCallBack(Datum arg, int cacheid, uint32 hashvalue); +static void InvalidateConstraintCacheCallBack(Datum arg, SysCacheIdentifier cacheid, uint32 hashvalue); static SPIPlanPtr ri_FetchPreparedPlan(RI_QueryKey *key); static void ri_HashPreparedPlan(RI_QueryKey *key, SPIPlanPtr plan); static RI_CompareHashEntry *ri_HashCompareOp(Oid eq_opr, Oid typeid); @@ -2397,7 +2397,7 @@ get_ri_constraint_root(Oid constrOid) * data from changing under it --- but we may get cache flushes anyway.) */ static void -InvalidateConstraintCacheCallBack(Datum arg, int cacheid, uint32 hashvalue) +InvalidateConstraintCacheCallBack(Datum arg, SysCacheIdentifier cacheid, uint32 hashvalue) { dlist_mutable_iter iter; diff --git a/src/backend/utils/cache/attoptcache.c b/src/backend/utils/cache/attoptcache.c index 72edc8f665b..4e0fc7f9112 100644 --- a/src/backend/utils/cache/attoptcache.c +++ b/src/backend/utils/cache/attoptcache.c @@ -50,7 +50,7 @@ typedef struct * for that attribute. */ static void -InvalidateAttoptCacheCallback(Datum arg, int cacheid, uint32 hashvalue) +InvalidateAttoptCacheCallback(Datum arg, SysCacheIdentifier cacheid, uint32 hashvalue) { HASH_SEQ_STATUS status; AttoptCacheEntry *attopt; diff --git a/src/backend/utils/cache/evtcache.c b/src/backend/utils/cache/evtcache.c index 2b4453e54a7..ac5c760efa7 100644 --- a/src/backend/utils/cache/evtcache.c +++ b/src/backend/utils/cache/evtcache.c @@ -49,7 +49,7 @@ static EventTriggerCacheStateType EventTriggerCacheState = ETCS_NEEDS_REBUILD; static void BuildEventTriggerCache(void); static void InvalidateEventCacheCallback(Datum arg, - int cacheid, uint32 hashvalue); + SysCacheIdentifier cacheid, uint32 hashvalue); static Bitmapset *DecodeTextArrayToBitmapset(Datum array); /* @@ -254,7 +254,7 @@ DecodeTextArrayToBitmapset(Datum array) * memory leaks. */ static void -InvalidateEventCacheCallback(Datum arg, int cacheid, uint32 hashvalue) +InvalidateEventCacheCallback(Datum arg, SysCacheIdentifier cacheid, uint32 hashvalue) { /* * If the cache isn't valid, then there might be a rebuild in progress, so diff --git a/src/backend/utils/cache/inval.c b/src/backend/utils/cache/inval.c index bf465a295e3..d59216b28f1 100644 --- a/src/backend/utils/cache/inval.c +++ b/src/backend/utils/cache/inval.c @@ -1813,7 +1813,7 @@ CacheInvalidateRelmap(Oid databaseId) * flush all cached state anyway. */ void -CacheRegisterSyscacheCallback(int cacheid, +CacheRegisterSyscacheCallback(SysCacheIdentifier cacheid, SyscacheCallbackFunction func, Datum arg) { @@ -1895,7 +1895,7 @@ CacheRegisterRelSyncCallback(RelSyncCallbackFunction func, * this module from knowing which catcache IDs correspond to which catalogs. */ void -CallSyscacheCallbacks(int cacheid, uint32 hashvalue) +CallSyscacheCallbacks(SysCacheIdentifier cacheid, uint32 hashvalue) { int i; diff --git a/src/backend/utils/cache/plancache.c b/src/backend/utils/cache/plancache.c index 37d5d73b7fb..d93c3b8afe8 100644 --- a/src/backend/utils/cache/plancache.c +++ b/src/backend/utils/cache/plancache.c @@ -106,8 +106,8 @@ static void ScanQueryForLocks(Query *parsetree, bool acquire); static bool ScanQueryWalker(Node *node, bool *acquire); static TupleDesc PlanCacheComputeResultDesc(List *stmt_list); static void PlanCacheRelCallback(Datum arg, Oid relid); -static void PlanCacheObjectCallback(Datum arg, int cacheid, uint32 hashvalue); -static void PlanCacheSysCallback(Datum arg, int cacheid, uint32 hashvalue); +static void PlanCacheObjectCallback(Datum arg, SysCacheIdentifier cacheid, uint32 hashvalue); +static void PlanCacheSysCallback(Datum arg, SysCacheIdentifier cacheid, uint32 hashvalue); /* ResourceOwner callbacks to track plancache references */ static void ResOwnerReleaseCachedPlan(Datum res); @@ -2201,7 +2201,7 @@ PlanCacheRelCallback(Datum arg, Oid relid) * or all plans mentioning any member of this cache if hashvalue == 0. */ static void -PlanCacheObjectCallback(Datum arg, int cacheid, uint32 hashvalue) +PlanCacheObjectCallback(Datum arg, SysCacheIdentifier cacheid, uint32 hashvalue) { dlist_iter iter; @@ -2310,7 +2310,7 @@ PlanCacheObjectCallback(Datum arg, int cacheid, uint32 hashvalue) * Just invalidate everything... */ static void -PlanCacheSysCallback(Datum arg, int cacheid, uint32 hashvalue) +PlanCacheSysCallback(Datum arg, SysCacheIdentifier cacheid, uint32 hashvalue) { ResetPlanCache(); } diff --git a/src/backend/utils/cache/spccache.c b/src/backend/utils/cache/spccache.c index 8f1a5e69595..0d87fb2f4fc 100644 --- a/src/backend/utils/cache/spccache.c +++ b/src/backend/utils/cache/spccache.c @@ -52,7 +52,7 @@ typedef struct * tablespaces, nor do we expect them to be frequently modified. */ static void -InvalidateTableSpaceCacheCallback(Datum arg, int cacheid, uint32 hashvalue) +InvalidateTableSpaceCacheCallback(Datum arg, SysCacheIdentifier cacheid, uint32 hashvalue) { HASH_SEQ_STATUS status; TableSpaceCacheEntry *spc; diff --git a/src/backend/utils/cache/syscache.c b/src/backend/utils/cache/syscache.c index ae3d18e0e74..007a9a15d71 100644 --- a/src/backend/utils/cache/syscache.c +++ b/src/backend/utils/cache/syscache.c @@ -109,7 +109,7 @@ static int oid_compare(const void *a, const void *b); void InitCatalogCache(void) { - int cacheId; + SysCacheIdentifier cacheId; Assert(!CacheInitialized); @@ -179,7 +179,7 @@ InitCatalogCache(void) void InitCatalogCachePhase2(void) { - int cacheId; + SysCacheIdentifier cacheId; Assert(CacheInitialized); @@ -205,7 +205,7 @@ InitCatalogCachePhase2(void) * CAUTION: The tuple that is returned must NOT be freed by the caller! */ HeapTuple -SearchSysCache(int cacheId, +SearchSysCache(SysCacheIdentifier cacheId, Datum key1, Datum key2, Datum key3, @@ -217,7 +217,7 @@ SearchSysCache(int cacheId, } HeapTuple -SearchSysCache1(int cacheId, +SearchSysCache1(SysCacheIdentifier cacheId, Datum key1) { Assert(cacheId >= 0 && cacheId < SysCacheSize && SysCache[cacheId]); @@ -227,7 +227,7 @@ SearchSysCache1(int cacheId, } HeapTuple -SearchSysCache2(int cacheId, +SearchSysCache2(SysCacheIdentifier cacheId, Datum key1, Datum key2) { Assert(cacheId >= 0 && cacheId < SysCacheSize && SysCache[cacheId]); @@ -237,7 +237,7 @@ SearchSysCache2(int cacheId, } HeapTuple -SearchSysCache3(int cacheId, +SearchSysCache3(SysCacheIdentifier cacheId, Datum key1, Datum key2, Datum key3) { Assert(cacheId >= 0 && cacheId < SysCacheSize && SysCache[cacheId]); @@ -247,7 +247,7 @@ SearchSysCache3(int cacheId, } HeapTuple -SearchSysCache4(int cacheId, +SearchSysCache4(SysCacheIdentifier cacheId, Datum key1, Datum key2, Datum key3, Datum key4) { Assert(cacheId >= 0 && cacheId < SysCacheSize && SysCache[cacheId]); @@ -279,7 +279,7 @@ ReleaseSysCache(HeapTuple tuple) * doesn't prevent the "tuple concurrently updated" error. */ HeapTuple -SearchSysCacheLocked1(int cacheId, +SearchSysCacheLocked1(SysCacheIdentifier cacheId, Datum key1) { CatCache *cache = SysCache[cacheId]; @@ -371,7 +371,7 @@ SearchSysCacheLocked1(int cacheId, * heap_freetuple() the result when done with it. */ HeapTuple -SearchSysCacheCopy(int cacheId, +SearchSysCacheCopy(SysCacheIdentifier cacheId, Datum key1, Datum key2, Datum key3, @@ -396,7 +396,7 @@ SearchSysCacheCopy(int cacheId, * heap_freetuple(). */ HeapTuple -SearchSysCacheLockedCopy1(int cacheId, +SearchSysCacheLockedCopy1(SysCacheIdentifier cacheId, Datum key1) { HeapTuple tuple, @@ -417,7 +417,7 @@ SearchSysCacheLockedCopy1(int cacheId, * No lock is retained on the syscache entry. */ bool -SearchSysCacheExists(int cacheId, +SearchSysCacheExists(SysCacheIdentifier cacheId, Datum key1, Datum key2, Datum key3, @@ -440,7 +440,7 @@ SearchSysCacheExists(int cacheId, * No lock is retained on the syscache entry. */ Oid -GetSysCacheOid(int cacheId, +GetSysCacheOid(SysCacheIdentifier cacheId, AttrNumber oidcol, Datum key1, Datum key2, @@ -592,7 +592,7 @@ SearchSysCacheCopyAttNum(Oid relid, int16 attnum) * a different cache for the same catalog the tuple was fetched from. */ Datum -SysCacheGetAttr(int cacheId, HeapTuple tup, +SysCacheGetAttr(SysCacheIdentifier cacheId, HeapTuple tup, AttrNumber attributeNumber, bool *isNull) { @@ -622,7 +622,7 @@ SysCacheGetAttr(int cacheId, HeapTuple tup, * be NULL. */ Datum -SysCacheGetAttrNotNull(int cacheId, HeapTuple tup, +SysCacheGetAttrNotNull(SysCacheIdentifier cacheId, HeapTuple tup, AttrNumber attributeNumber) { bool isnull; @@ -652,7 +652,7 @@ SysCacheGetAttrNotNull(int cacheId, HeapTuple tup, * catcache code that need to be able to compute the hash values. */ uint32 -GetSysCacheHashValue(int cacheId, +GetSysCacheHashValue(SysCacheIdentifier cacheId, Datum key1, Datum key2, Datum key3, @@ -668,7 +668,7 @@ GetSysCacheHashValue(int cacheId, * List-search interface */ struct catclist * -SearchSysCacheList(int cacheId, int nkeys, +SearchSysCacheList(SysCacheIdentifier cacheId, int nkeys, Datum key1, Datum key2, Datum key3) { if (cacheId < 0 || cacheId >= SysCacheSize || !SysCache[cacheId]) @@ -687,7 +687,7 @@ SearchSysCacheList(int cacheId, int nkeys, * This routine is only quasi-public: it should only be used by inval.c. */ void -SysCacheInvalidate(int cacheId, uint32 hashValue) +SysCacheInvalidate(SysCacheIdentifier cacheId, uint32 hashValue) { if (cacheId < 0 || cacheId >= SysCacheSize) elog(ERROR, "invalid cache ID: %d", cacheId); diff --git a/src/backend/utils/cache/ts_cache.c b/src/backend/utils/cache/ts_cache.c index 71e49b2b919..744c8e71d71 100644 --- a/src/backend/utils/cache/ts_cache.c +++ b/src/backend/utils/cache/ts_cache.c @@ -91,7 +91,7 @@ static Oid TSCurrentConfigCache = InvalidOid; * table address as the "arg". */ static void -InvalidateTSCacheCallBack(Datum arg, int cacheid, uint32 hashvalue) +InvalidateTSCacheCallBack(Datum arg, SysCacheIdentifier cacheid, uint32 hashvalue) { HTAB *hash = (HTAB *) DatumGetPointer(arg); HASH_SEQ_STATUS status; diff --git a/src/backend/utils/cache/typcache.c b/src/backend/utils/cache/typcache.c index dc4b1a56414..c721e1c2874 100644 --- a/src/backend/utils/cache/typcache.c +++ b/src/backend/utils/cache/typcache.c @@ -337,9 +337,9 @@ static bool multirange_element_has_hashing(TypeCacheEntry *typentry); static bool multirange_element_has_extended_hashing(TypeCacheEntry *typentry); static void cache_multirange_element_properties(TypeCacheEntry *typentry); static void TypeCacheRelCallback(Datum arg, Oid relid); -static void TypeCacheTypCallback(Datum arg, int cacheid, uint32 hashvalue); -static void TypeCacheOpcCallback(Datum arg, int cacheid, uint32 hashvalue); -static void TypeCacheConstrCallback(Datum arg, int cacheid, uint32 hashvalue); +static void TypeCacheTypCallback(Datum arg, SysCacheIdentifier cacheid, uint32 hashvalue); +static void TypeCacheOpcCallback(Datum arg, SysCacheIdentifier cacheid, uint32 hashvalue); +static void TypeCacheConstrCallback(Datum arg, SysCacheIdentifier cacheid, uint32 hashvalue); static void load_enum_cache_data(TypeCacheEntry *tcache); static EnumItem *find_enumitem(TypeCacheEnumData *enumdata, Oid arg); static int enum_oid_cmp(const void *left, const void *right); @@ -2512,7 +2512,7 @@ TypeCacheRelCallback(Datum arg, Oid relid) * it as needing to be reloaded. */ static void -TypeCacheTypCallback(Datum arg, int cacheid, uint32 hashvalue) +TypeCacheTypCallback(Datum arg, SysCacheIdentifier cacheid, uint32 hashvalue) { HASH_SEQ_STATUS status; TypeCacheEntry *typentry; @@ -2569,7 +2569,7 @@ TypeCacheTypCallback(Datum arg, int cacheid, uint32 hashvalue) * of members are not going to get cached here. */ static void -TypeCacheOpcCallback(Datum arg, int cacheid, uint32 hashvalue) +TypeCacheOpcCallback(Datum arg, SysCacheIdentifier cacheid, uint32 hashvalue) { HASH_SEQ_STATUS status; TypeCacheEntry *typentry; @@ -2607,7 +2607,7 @@ TypeCacheOpcCallback(Datum arg, int cacheid, uint32 hashvalue) * approach to domain constraints. */ static void -TypeCacheConstrCallback(Datum arg, int cacheid, uint32 hashvalue) +TypeCacheConstrCallback(Datum arg, SysCacheIdentifier cacheid, uint32 hashvalue) { TypeCacheEntry *typentry; diff --git a/src/backend/utils/misc/superuser.c b/src/backend/utils/misc/superuser.c index 7821624687a..10759a9a37b 100644 --- a/src/backend/utils/misc/superuser.c +++ b/src/backend/utils/misc/superuser.c @@ -36,7 +36,7 @@ static Oid last_roleid = InvalidOid; /* InvalidOid == cache not valid */ static bool last_roleid_is_super = false; static bool roleid_callback_registered = false; -static void RoleidCallback(Datum arg, int cacheid, uint32 hashvalue); +static void RoleidCallback(Datum arg, SysCacheIdentifier cacheid, uint32 hashvalue); /* @@ -100,7 +100,7 @@ superuser_arg(Oid roleid) * Syscache inval callback function */ static void -RoleidCallback(Datum arg, int cacheid, uint32 hashvalue) +RoleidCallback(Datum arg, SysCacheIdentifier cacheid, uint32 hashvalue) { /* Invalidate our local cache in case role's superuserness changed */ last_roleid = InvalidOid; diff --git a/src/include/catalog/objectaddress.h b/src/include/catalog/objectaddress.h index e2fe9db1161..b549be2d523 100644 --- a/src/include/catalog/objectaddress.h +++ b/src/include/catalog/objectaddress.h @@ -17,6 +17,7 @@ #include "nodes/parsenodes.h" #include "storage/lockdefs.h" #include "utils/relcache.h" +#include "utils/syscache.h" /* * An ObjectAddress represents a database object of any type. @@ -57,8 +58,8 @@ extern Oid get_object_namespace(const ObjectAddress *address); extern bool is_objectclass_supported(Oid class_id); extern const char *get_object_class_descr(Oid class_id); extern Oid get_object_oid_index(Oid class_id); -extern int get_object_catcache_oid(Oid class_id); -extern int get_object_catcache_name(Oid class_id); +extern SysCacheIdentifier get_object_catcache_oid(Oid class_id); +extern SysCacheIdentifier get_object_catcache_name(Oid class_id); extern AttrNumber get_object_attnum_oid(Oid class_id); extern AttrNumber get_object_attnum_name(Oid class_id); extern AttrNumber get_object_attnum_namespace(Oid class_id); diff --git a/src/include/replication/worker_internal.h b/src/include/replication/worker_internal.h index c1285fdd1bc..644c953c940 100644 --- a/src/include/replication/worker_internal.h +++ b/src/include/replication/worker_internal.h @@ -289,7 +289,7 @@ extern void ProcessSyncingTablesForApply(XLogRecPtr current_lsn); extern void ProcessSequencesForSync(void); pg_noreturn extern void FinishSyncWorker(void); -extern void InvalidateSyncingRelStates(Datum arg, int cacheid, uint32 hashvalue); +extern void InvalidateSyncingRelStates(Datum arg, SysCacheIdentifier cacheid, uint32 hashvalue); extern void launch_sync_worker(LogicalRepWorkerType wtype, int nsyncworkers, Oid relid, TimestampTz *last_start_time); extern void ProcessSyncingRelations(XLogRecPtr current_lsn); diff --git a/src/include/utils/inval.h b/src/include/utils/inval.h index 0e937fec9e9..e9d8cdb75ff 100644 --- a/src/include/utils/inval.h +++ b/src/include/utils/inval.h @@ -17,6 +17,7 @@ #include "access/htup.h" #include "storage/relfilelocator.h" #include "utils/relcache.h" +#include "utils/syscache.h" extern PGDLLIMPORT int debug_discard_caches; @@ -38,7 +39,7 @@ extern PGDLLIMPORT int debug_discard_caches; #endif /* not DISCARD_CACHES_ENABLED */ -typedef void (*SyscacheCallbackFunction) (Datum arg, int cacheid, uint32 hashvalue); +typedef void (*SyscacheCallbackFunction) (Datum arg, SysCacheIdentifier cacheid, uint32 hashvalue); typedef void (*RelcacheCallbackFunction) (Datum arg, Oid relid); typedef void (*RelSyncCallbackFunction) (Datum arg, Oid relid); @@ -81,7 +82,7 @@ extern void CacheInvalidateSmgr(RelFileLocatorBackend rlocator); extern void CacheInvalidateRelmap(Oid databaseId); -extern void CacheRegisterSyscacheCallback(int cacheid, +extern void CacheRegisterSyscacheCallback(SysCacheIdentifier cacheid, SyscacheCallbackFunction func, Datum arg); @@ -91,7 +92,7 @@ extern void CacheRegisterRelcacheCallback(RelcacheCallbackFunction func, extern void CacheRegisterRelSyncCallback(RelSyncCallbackFunction func, Datum arg); -extern void CallSyscacheCallbacks(int cacheid, uint32 hashvalue); +extern void CallSyscacheCallbacks(SysCacheIdentifier cacheid, uint32 hashvalue); extern void CallRelSyncCallbacks(Oid relid); diff --git a/src/include/utils/syscache.h b/src/include/utils/syscache.h index 13f49af9ed4..81e5933708e 100644 --- a/src/include/utils/syscache.h +++ b/src/include/utils/syscache.h @@ -25,35 +25,35 @@ extern void InitCatalogCache(void); extern void InitCatalogCachePhase2(void); -extern HeapTuple SearchSysCache(int cacheId, +extern HeapTuple SearchSysCache(SysCacheIdentifier cacheId, Datum key1, Datum key2, Datum key3, Datum key4); /* * The use of argument specific numbers is encouraged. They're faster, and * insulates the caller from changes in the maximum number of keys. */ -extern HeapTuple SearchSysCache1(int cacheId, +extern HeapTuple SearchSysCache1(SysCacheIdentifier cacheId, Datum key1); -extern HeapTuple SearchSysCache2(int cacheId, +extern HeapTuple SearchSysCache2(SysCacheIdentifier cacheId, Datum key1, Datum key2); -extern HeapTuple SearchSysCache3(int cacheId, +extern HeapTuple SearchSysCache3(SysCacheIdentifier cacheId, Datum key1, Datum key2, Datum key3); -extern HeapTuple SearchSysCache4(int cacheId, +extern HeapTuple SearchSysCache4(SysCacheIdentifier cacheId, Datum key1, Datum key2, Datum key3, Datum key4); extern void ReleaseSysCache(HeapTuple tuple); -extern HeapTuple SearchSysCacheLocked1(int cacheId, +extern HeapTuple SearchSysCacheLocked1(SysCacheIdentifier cacheId, Datum key1); /* convenience routines */ -extern HeapTuple SearchSysCacheCopy(int cacheId, +extern HeapTuple SearchSysCacheCopy(SysCacheIdentifier cacheId, Datum key1, Datum key2, Datum key3, Datum key4); -extern HeapTuple SearchSysCacheLockedCopy1(int cacheId, +extern HeapTuple SearchSysCacheLockedCopy1(SysCacheIdentifier cacheId, Datum key1); -extern bool SearchSysCacheExists(int cacheId, +extern bool SearchSysCacheExists(SysCacheIdentifier cacheId, Datum key1, Datum key2, Datum key3, Datum key4); -extern Oid GetSysCacheOid(int cacheId, AttrNumber oidcol, +extern Oid GetSysCacheOid(SysCacheIdentifier cacheId, AttrNumber oidcol, Datum key1, Datum key2, Datum key3, Datum key4); extern HeapTuple SearchSysCacheAttName(Oid relid, const char *attname); @@ -63,21 +63,21 @@ extern bool SearchSysCacheExistsAttName(Oid relid, const char *attname); extern HeapTuple SearchSysCacheAttNum(Oid relid, int16 attnum); extern HeapTuple SearchSysCacheCopyAttNum(Oid relid, int16 attnum); -extern Datum SysCacheGetAttr(int cacheId, HeapTuple tup, +extern Datum SysCacheGetAttr(SysCacheIdentifier cacheId, HeapTuple tup, AttrNumber attributeNumber, bool *isNull); -extern Datum SysCacheGetAttrNotNull(int cacheId, HeapTuple tup, +extern Datum SysCacheGetAttrNotNull(SysCacheIdentifier cacheId, HeapTuple tup, AttrNumber attributeNumber); -extern uint32 GetSysCacheHashValue(int cacheId, +extern uint32 GetSysCacheHashValue(SysCacheIdentifier cacheId, Datum key1, Datum key2, Datum key3, Datum key4); /* list-search interface. Users of this must import catcache.h too */ struct catclist; -extern struct catclist *SearchSysCacheList(int cacheId, int nkeys, +extern struct catclist *SearchSysCacheList(SysCacheIdentifier cacheId, int nkeys, Datum key1, Datum key2, Datum key3); -extern void SysCacheInvalidate(int cacheId, uint32 hashValue); +extern void SysCacheInvalidate(SysCacheIdentifier cacheId, uint32 hashValue); extern bool RelationInvalidatesSnapshotsOnly(Oid relid); extern bool RelationHasSysCache(Oid relid); -- 2.47.3
