mirror of
https://github.com/postgres/postgres.git
synced 2026-02-18 18:25:17 -05:00
Switch SysCacheIdentifier to a typedef enum
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
This commit is contained in:
parent
c06b5b99bb
commit
ee642cccc4
29 changed files with 128 additions and 98 deletions
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -1238,7 +1238,7 @@ reportDependentObjects(const ObjectAddresses *targetObjects,
|
|||
static void
|
||||
DropObjectById(const ObjectAddress *object)
|
||||
{
|
||||
int cacheId;
|
||||
SysCacheIdentifier cacheId;
|
||||
Relation rel;
|
||||
HeapTuple tup;
|
||||
|
||||
|
|
|
|||
|
|
@ -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";
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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 &&
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
||||
|
|
|
|||
3
src/backend/utils/cache/attoptcache.c
vendored
3
src/backend/utils/cache/attoptcache.c
vendored
|
|
@ -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;
|
||||
|
|
|
|||
6
src/backend/utils/cache/evtcache.c
vendored
6
src/backend/utils/cache/evtcache.c
vendored
|
|
@ -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
|
||||
|
|
|
|||
4
src/backend/utils/cache/inval.c
vendored
4
src/backend/utils/cache/inval.c
vendored
|
|
@ -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;
|
||||
|
||||
|
|
|
|||
10
src/backend/utils/cache/plancache.c
vendored
10
src/backend/utils/cache/plancache.c
vendored
|
|
@ -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();
|
||||
}
|
||||
|
|
|
|||
3
src/backend/utils/cache/spccache.c
vendored
3
src/backend/utils/cache/spccache.c
vendored
|
|
@ -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;
|
||||
|
|
|
|||
34
src/backend/utils/cache/syscache.c
vendored
34
src/backend/utils/cache/syscache.c
vendored
|
|
@ -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);
|
||||
|
|
|
|||
2
src/backend/utils/cache/ts_cache.c
vendored
2
src/backend/utils/cache/ts_cache.c
vendored
|
|
@ -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;
|
||||
|
|
|
|||
15
src/backend/utils/cache/typcache.c
vendored
15
src/backend/utils/cache/typcache.c
vendored
|
|
@ -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;
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Reference in a new issue