]> git.ipfire.org Git - thirdparty/postgresql.git/commitdiff
Switch SysCacheIdentifier to a typedef enum
authorMichael Paquier <michael@paquier.xyz>
Wed, 18 Feb 2026 00:58:38 +0000 (09:58 +0900)
committerMichael Paquier <michael@paquier.xyz>
Wed, 18 Feb 2026 00:58:38 +0000 (09:58 +0900)
The main purpose of this change is to allow an ABI checker to understand
when the list of SysCacheIdentifier changes, by switching all the
routine declarations that relied on a signed integer for a syscache ID
to this new type.  This is going to be useful in the long-term for
versions newer than v19 so as we will be able to check when the list of
values in SysCacheIdentifier is updated in a non-ABI compliant fashion.

Most of the changes of this commit are due to the new definition of
SyscacheCallbackFunction, where a SysCacheIdentifier is now required for
the syscache ID.  It is a mechanical change, still slightly invasive.

There are more areas in the tree that could be improved with an ABI
checker in mind; this takes care of only one area.

Reported-by: Tom Lane <tgl@sss.pgh.pa.us>
Author: Andreas Karlsson <andreas@proxel.se>
Reviewed-by: Michael Paquier <michael@paquier.xyz>
Discussion: https://postgr.es/m/289125.1770913057@sss.pgh.pa.us

29 files changed:
contrib/postgres_fdw/connection.c
contrib/postgres_fdw/shippable.c
src/backend/catalog/aclchk.c
src/backend/catalog/dependency.c
src/backend/catalog/genbki.pl
src/backend/catalog/namespace.c
src/backend/catalog/objectaddress.c
src/backend/commands/alter.c
src/backend/commands/extension.c
src/backend/optimizer/util/predtest.c
src/backend/parser/parse_oper.c
src/backend/replication/logical/syncutils.c
src/backend/replication/logical/worker.c
src/backend/replication/pgoutput/pgoutput.c
src/backend/utils/adt/acl.c
src/backend/utils/adt/ri_triggers.c
src/backend/utils/cache/attoptcache.c
src/backend/utils/cache/evtcache.c
src/backend/utils/cache/inval.c
src/backend/utils/cache/plancache.c
src/backend/utils/cache/spccache.c
src/backend/utils/cache/syscache.c
src/backend/utils/cache/ts_cache.c
src/backend/utils/cache/typcache.c
src/backend/utils/misc/superuser.c
src/include/catalog/objectaddress.h
src/include/replication/worker_internal.h
src/include/utils/inval.h
src/include/utils/syscache.h

index 487a1a231707034475544e0e20b3c6102e709532..add673a47769a40afb33a98a7a75b1c03de6a3cb 100644 (file)
@@ -150,7 +150,8 @@ 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 +1310,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;
index d32d3d0e4616e4f44cf6ee0915729dbed4b16f52..250f54fea32b7351f837db612bedcabca4d50c48 100644 (file)
@@ -62,7 +62,8 @@ 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;
index 56060ca544e11eaebc7be8818f575a43ef2ac3cb..aef855abccc136dba9466124097c52444183cc0e 100644 (file)
@@ -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;
index f89267f03428a2afdd1ae6dd5795b1b45bed7881..7564965fa18d872f1a72da1e46aadec099edadb0 100644 (file)
@@ -1238,7 +1238,7 @@ reportDependentObjects(const ObjectAddresses *targetObjects,
 static void
 DropObjectById(const ObjectAddress *object)
 {
-       int                     cacheId;
+       SysCacheIdentifier cacheId;
        Relation        rel;
        HeapTuple       tup;
 
index 975cc53435f2c0d8f1eb60ad8c09f58a7a8f8814..48c6805f75279614a13dbf0046de9cbf9efeee34 100644 (file)
@@ -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
 {
 \tSYSCACHEID_INVALID = -1,\n";
 
@@ -832,7 +832,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";
index c3b79a2ba48f9361027181c256ca9ce8b36fe3db..4b0f4ba115d63b62d52787482c14fce60bb32a9e 100644 (file)
@@ -229,7 +229,8 @@ 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 +4864,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
index 33be619090980760e5d7c9ca6a67b4646d8f50d4..13d73f8909cacd33338da9ccab4de46e8c2b9473 100644 (file)
@@ -99,10 +99,11 @@ 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
-                                                                        * (name) if the object does not live in a
-                                                                        * namespace */
+       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 */
        AttrNumber      attnum_name;    /* attnum of name field */
        AttrNumber      attnum_namespace;       /* attnum of namespace field */
@@ -2571,7 +2572,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 +2641,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 +2649,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 +2807,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)
        {
index 08957104c70a2144936bfa7d243f6a47c67662de..c6f58d47be62b39b572618fce4e25d98fc9a585f 100644 (file)
@@ -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);
index 81f24615d51c731160ac82b287e745b2abc7dc57..574858bfecab7f336a462e8378e4f07c21644b9d 100644 (file)
@@ -162,7 +162,8 @@ 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 +380,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;
 
index 26858d1d2b077230d2698400e5e74aff95fb6ac2..fe15881af4e16f686ce1115d000443d5b4b7ee94 100644 (file)
@@ -109,7 +109,8 @@ 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 +2344,8 @@ 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;
index 768e4cff9c507db614adb856a3a6b11925702cbf..a6b402f2d7b742eebfd30ad3f68603d9a7b9e119 100644 (file)
@@ -79,7 +79,8 @@ 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 +1077,8 @@ 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;
index 535ffb6f09e3b84a4381997876ae85de9e886e14..ef61ca0437de5a8090b86b949e33e2c418295f05 100644 (file)
@@ -98,7 +98,8 @@ 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;
 }
index 32725c48623b30ed2073d237e5ee4448b67864a6..8b93f48470c3300d06a66a419106c02308c558ea 100644 (file)
@@ -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;
 }
index e016f64e0b37c55890963b487e77d4d31b6fc4b1..7a49185d29daee44edd5e0a5ccfb307cff817298 100644 (file)
@@ -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,8 @@ 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 +2432,8 @@ 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;
index 3a6905f9546e87da39ef742af3cea76b52226973..641673f0b0e0d362c04b9175f5fc644b16a1fdf1 100644 (file)
@@ -130,7 +130,8 @@ 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 +5068,8 @@ 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 &&
index bbadecef5f921db840cd9d37aedd0584d6e9e0ff..d22b8ef7f3c10ebb5511ea5e5c0b5aed8c67be51 100644 (file)
@@ -213,7 +213,8 @@ 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 +2398,8 @@ 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;
 
index 72edc8f665b8483d9a13fdd11397326dbdf3b3a9..9244a23013e23e01aa1f412a93a67126cb368303 100644 (file)
@@ -50,7 +50,8 @@ 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;
index 2b4453e54a76011c2af7ca49b1596e3f4ef0221d..3fe89c9c98fc95a9daf73afaf4c003017dbb002a 100644 (file)
@@ -49,7 +49,8 @@ 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 +255,8 @@ 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
index bf465a295e3f73cb3cc03163bd166a9ff7d89e1a..d59216b28f16baa3a200c7d1ae3ed07558e0dc2a 100644 (file)
@@ -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;
 
index 37d5d73b7fb9f2bfcaa871d881beb6ac92164fe6..812e2265734c0a153d572f9b4cc757664b394c10 100644 (file)
@@ -106,8 +106,10 @@ 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 +2203,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 +2312,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();
 }
index 8f1a5e695956a2c85340b03389271daca944931f..362169b7d97a2d52674de6e63c407e4f2cb89be8 100644 (file)
@@ -52,7 +52,8 @@ 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;
index ae3d18e0e74aa79c1199d7d01a8a6021dc81d104..007a9a15d71bd78c2f29c2fed85727979ec1970b 100644 (file)
@@ -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);
index 71e49b2b91930843d358a060adacdbce85a7f9f3..744c8e71d7159cfea38233abb10031d78eeff101 100644 (file)
@@ -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;
index dc4b1a56414cbb1732578e12e9a0e75751e68519..627e534609ab2097455bbc1f08e279869ffbfabd 100644 (file)
@@ -337,9 +337,12 @@ 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 +2515,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 +2572,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 +2610,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;
 
index 7821624687afbfeb0a7ba5ed242c5f968a8380a4..b9c3a0ceaa8671e82759361557a365b522c698f8 100644 (file)
@@ -36,7 +36,8 @@ 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 +101,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;
index e2fe9db11617e8e79c20e23522a32873c633717a..b549be2d523e4d90ee0d0e4300e9f6d6f1b7116a 100644 (file)
@@ -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);
index c1285fdd1bc15666820488ba5c49fb95226af202..33fb7f552b4107c31d854cac5f03ca02a9563c09 100644 (file)
@@ -289,7 +289,8 @@ 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);
index 0e937fec9e9c3e17763a587996a6e361457b6c38..5f64fb20477628586f39c84e6b3d943d40928361 100644 (file)
@@ -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,8 @@ 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 +83,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 +93,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);
 
index 13f49af9ed4e8f3885ef98eafb9549a9b50f3394..81e5933708e1fdadd178eb507ee68ee3bd9c39e1 100644 (file)
 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);