Team Ai
Datasetpublic

codekingpro/portable-devtools

sourceHugging Faceupdated 5mo agoView on Hugging Face
1likes15kdownloads
dependency.h271 linesDownload Raw Back to catalog
1/*-------------------------------------------------------------------------2 *3 * dependency.h4 *	  Routines to support inter-object dependencies.5 *6 *7 * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group8 * Portions Copyright (c) 1994, Regents of the University of California9 *10 * src/include/catalog/dependency.h11 *12 *-------------------------------------------------------------------------13 */14#ifndef DEPENDENCY_H15#define DEPENDENCY_H16 17#include "catalog/objectaddress.h"18 19 20/*21 * Precise semantics of a dependency relationship are specified by the22 * DependencyType code (which is stored in a "char" field in pg_depend,23 * so we assign ASCII-code values to the enumeration members).24 *25 * In all cases, a dependency relationship indicates that the referenced26 * object may not be dropped without also dropping the dependent object.27 * However, there are several subflavors; see the description of pg_depend28 * in catalogs.sgml for details.29 */30 31typedef enum DependencyType32{33	DEPENDENCY_NORMAL = 'n',34	DEPENDENCY_AUTO = 'a',35	DEPENDENCY_INTERNAL = 'i',36	DEPENDENCY_PARTITION_PRI = 'P',37	DEPENDENCY_PARTITION_SEC = 'S',38	DEPENDENCY_EXTENSION = 'e',39	DEPENDENCY_AUTO_EXTENSION = 'x'40} DependencyType;41 42/*43 * There is also a SharedDependencyType enum type that determines the exact44 * semantics of an entry in pg_shdepend.  Just like regular dependency entries,45 * any pg_shdepend entry means that the referenced object cannot be dropped46 * unless the dependent object is dropped at the same time.  There are some47 * additional rules however:48 *49 * (a) a SHARED_DEPENDENCY_OWNER entry means that the referenced object is50 * the role owning the dependent object.  The referenced object must be51 * a pg_authid entry.52 *53 * (b) a SHARED_DEPENDENCY_ACL entry means that the referenced object is54 * a role mentioned in the ACL field of the dependent object.  The referenced55 * object must be a pg_authid entry.  (SHARED_DEPENDENCY_ACL entries are not56 * created for the owner of an object; hence two objects may be linked by57 * one or the other, but not both, of these dependency types.)58 *59 * (c) a SHARED_DEPENDENCY_POLICY entry means that the referenced object is60 * a role mentioned in a policy object.  The referenced object must be a61 * pg_authid entry.62 *63 * (d) a SHARED_DEPENDENCY_TABLESPACE entry means that the referenced64 * object is a tablespace mentioned in a relation without storage.  The65 * referenced object must be a pg_tablespace entry.  (Relations that have66 * storage don't need this: they are protected by the existence of a physical67 * file in the tablespace.)68 *69 * SHARED_DEPENDENCY_INVALID is a value used as a parameter in internal70 * routines, and is not valid in the catalog itself.71 */72typedef enum SharedDependencyType73{74	SHARED_DEPENDENCY_OWNER = 'o',75	SHARED_DEPENDENCY_ACL = 'a',76	SHARED_DEPENDENCY_POLICY = 'r',77	SHARED_DEPENDENCY_TABLESPACE = 't',78	SHARED_DEPENDENCY_INVALID = 079} SharedDependencyType;80 81/* expansible list of ObjectAddresses (private in dependency.c) */82typedef struct ObjectAddresses ObjectAddresses;83 84/*85 * This enum covers all system catalogs whose OIDs can appear in86 * pg_depend.classId or pg_shdepend.classId.  Keep object_classes[] in sync.87 */88typedef enum ObjectClass89{90	OCLASS_CLASS,				/* pg_class */91	OCLASS_PROC,				/* pg_proc */92	OCLASS_TYPE,				/* pg_type */93	OCLASS_CAST,				/* pg_cast */94	OCLASS_COLLATION,			/* pg_collation */95	OCLASS_CONSTRAINT,			/* pg_constraint */96	OCLASS_CONVERSION,			/* pg_conversion */97	OCLASS_DEFAULT,				/* pg_attrdef */98	OCLASS_LANGUAGE,			/* pg_language */99	OCLASS_LARGEOBJECT,			/* pg_largeobject */100	OCLASS_OPERATOR,			/* pg_operator */101	OCLASS_OPCLASS,				/* pg_opclass */102	OCLASS_OPFAMILY,			/* pg_opfamily */103	OCLASS_AM,					/* pg_am */104	OCLASS_AMOP,				/* pg_amop */105	OCLASS_AMPROC,				/* pg_amproc */106	OCLASS_REWRITE,				/* pg_rewrite */107	OCLASS_TRIGGER,				/* pg_trigger */108	OCLASS_SCHEMA,				/* pg_namespace */109	OCLASS_STATISTIC_EXT,		/* pg_statistic_ext */110	OCLASS_TSPARSER,			/* pg_ts_parser */111	OCLASS_TSDICT,				/* pg_ts_dict */112	OCLASS_TSTEMPLATE,			/* pg_ts_template */113	OCLASS_TSCONFIG,			/* pg_ts_config */114	OCLASS_ROLE,				/* pg_authid */115	OCLASS_ROLE_MEMBERSHIP,		/* pg_auth_members */116	OCLASS_DATABASE,			/* pg_database */117	OCLASS_TBLSPACE,			/* pg_tablespace */118	OCLASS_FDW,					/* pg_foreign_data_wrapper */119	OCLASS_FOREIGN_SERVER,		/* pg_foreign_server */120	OCLASS_USER_MAPPING,		/* pg_user_mapping */121	OCLASS_DEFACL,				/* pg_default_acl */122	OCLASS_EXTENSION,			/* pg_extension */123	OCLASS_EVENT_TRIGGER,		/* pg_event_trigger */124	OCLASS_PARAMETER_ACL,		/* pg_parameter_acl */125	OCLASS_POLICY,				/* pg_policy */126	OCLASS_PUBLICATION,			/* pg_publication */127	OCLASS_PUBLICATION_NAMESPACE,	/* pg_publication_namespace */128	OCLASS_PUBLICATION_REL,		/* pg_publication_rel */129	OCLASS_SUBSCRIPTION,		/* pg_subscription */130	OCLASS_TRANSFORM			/* pg_transform */131} ObjectClass;132 133#define LAST_OCLASS		OCLASS_TRANSFORM134 135/* flag bits for performDeletion/performMultipleDeletions: */136#define PERFORM_DELETION_INTERNAL			0x0001	/* internal action */137#define PERFORM_DELETION_CONCURRENTLY		0x0002	/* concurrent drop */138#define PERFORM_DELETION_QUIETLY			0x0004	/* suppress notices */139#define PERFORM_DELETION_SKIP_ORIGINAL		0x0008	/* keep original obj */140#define PERFORM_DELETION_SKIP_EXTENSIONS	0x0010	/* keep extensions */141#define PERFORM_DELETION_CONCURRENT_LOCK	0x0020	/* normal drop with142													 * concurrent lock mode */143 144 145/* in dependency.c */146 147extern void AcquireDeletionLock(const ObjectAddress *object, int flags);148 149extern void ReleaseDeletionLock(const ObjectAddress *object);150 151extern void performDeletion(const ObjectAddress *object,152							DropBehavior behavior, int flags);153 154extern void performMultipleDeletions(const ObjectAddresses *objects,155									 DropBehavior behavior, int flags);156 157extern void recordDependencyOnExpr(const ObjectAddress *depender,158								   Node *expr, List *rtable,159								   DependencyType behavior);160 161extern void recordDependencyOnSingleRelExpr(const ObjectAddress *depender,162											Node *expr, Oid relId,163											DependencyType behavior,164											DependencyType self_behavior,165											bool reverse_self);166 167extern ObjectClass getObjectClass(const ObjectAddress *object);168 169extern ObjectAddresses *new_object_addresses(void);170 171extern void add_exact_object_address(const ObjectAddress *object,172									 ObjectAddresses *addrs);173 174extern bool object_address_present(const ObjectAddress *object,175								   const ObjectAddresses *addrs);176 177extern void record_object_address_dependencies(const ObjectAddress *depender,178											   ObjectAddresses *referenced,179											   DependencyType behavior);180 181extern void sort_object_addresses(ObjectAddresses *addrs);182 183extern void free_object_addresses(ObjectAddresses *addrs);184 185/* in pg_depend.c */186 187extern void recordDependencyOn(const ObjectAddress *depender,188							   const ObjectAddress *referenced,189							   DependencyType behavior);190 191extern void recordMultipleDependencies(const ObjectAddress *depender,192									   const ObjectAddress *referenced,193									   int nreferenced,194									   DependencyType behavior);195 196extern void recordDependencyOnCurrentExtension(const ObjectAddress *object,197											   bool isReplace);198 199extern void checkMembershipInCurrentExtension(const ObjectAddress *object);200 201extern long deleteDependencyRecordsFor(Oid classId, Oid objectId,202									   bool skipExtensionDeps);203 204extern long deleteDependencyRecordsForClass(Oid classId, Oid objectId,205											Oid refclassId, char deptype);206 207extern long deleteDependencyRecordsForSpecific(Oid classId, Oid objectId,208											   char deptype,209											   Oid refclassId, Oid refobjectId);210 211extern long changeDependencyFor(Oid classId, Oid objectId,212								Oid refClassId, Oid oldRefObjectId,213								Oid newRefObjectId);214 215extern long changeDependenciesOf(Oid classId, Oid oldObjectId,216								 Oid newObjectId);217 218extern long changeDependenciesOn(Oid refClassId, Oid oldRefObjectId,219								 Oid newRefObjectId);220 221extern Oid	getExtensionOfObject(Oid classId, Oid objectId);222extern List *getAutoExtensionsOfObject(Oid classId, Oid objectId);223 224extern bool sequenceIsOwned(Oid seqId, char deptype, Oid *tableId, int32 *colId);225extern List *getOwnedSequences(Oid relid);226extern Oid	getIdentitySequence(Oid relid, AttrNumber attnum, bool missing_ok);227 228extern Oid	get_index_constraint(Oid indexId);229 230extern List *get_index_ref_constraints(Oid indexId);231 232/* in pg_shdepend.c */233 234extern void recordSharedDependencyOn(ObjectAddress *depender,235									 ObjectAddress *referenced,236									 SharedDependencyType deptype);237 238extern void deleteSharedDependencyRecordsFor(Oid classId, Oid objectId,239											 int32 objectSubId);240 241extern void recordDependencyOnOwner(Oid classId, Oid objectId, Oid owner);242 243extern void changeDependencyOnOwner(Oid classId, Oid objectId,244									Oid newOwnerId);245 246extern void recordDependencyOnTablespace(Oid classId, Oid objectId,247										 Oid tablespace);248 249extern void changeDependencyOnTablespace(Oid classId, Oid objectId,250										 Oid newTablespaceId);251 252extern void updateAclDependencies(Oid classId, Oid objectId, int32 objsubId,253								  Oid ownerId,254								  int noldmembers, Oid *oldmembers,255								  int nnewmembers, Oid *newmembers);256 257extern bool checkSharedDependencies(Oid classId, Oid objectId,258									char **detail_msg, char **detail_log_msg);259 260extern void shdepLockAndCheckObject(Oid classId, Oid objectId);261 262extern void copyTemplateDependencies(Oid templateDbId, Oid newDbId);263 264extern void dropDatabaseDependencies(Oid databaseId);265 266extern void shdepDropOwned(List *roleids, DropBehavior behavior);267 268extern void shdepReassignOwned(List *roleids, Oid newrole);269 270#endif							/* DEPENDENCY_H */271 
codekingpro/portable-devtools · Team Ai