X-Git-Url: https://granicus.if.org/sourcecode?a=blobdiff_plain;f=src%2Finclude%2Fcatalog%2Fdependency.h;h=c6ab313edf8c57691a6dce4eb2ceecbab39968c9;hb=0d692a0dc9f0e532c67c577187fe5d7d323cb95b;hp=4915c8dfd72eebca696c902b064418d0ecbea03f;hpb=a0a0512182cdca33d41485a5399573e6e380c229;p=postgresql diff --git a/src/include/catalog/dependency.h b/src/include/catalog/dependency.h index 4915c8dfd7..c6ab313edf 100644 --- a/src/include/catalog/dependency.h +++ b/src/include/catalog/dependency.h @@ -4,10 +4,10 @@ * Routines to support inter-object dependencies. * * - * Portions Copyright (c) 1996-2006, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2011, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * $PostgreSQL: pgsql/src/include/catalog/dependency.h,v 1.22 2006/04/29 16:43:54 momjian Exp $ + * src/include/catalog/dependency.h * *------------------------------------------------------------------------- */ @@ -15,9 +15,10 @@ #define DEPENDENCY_H #include "nodes/parsenodes.h" /* for DropBehavior */ +#include "catalog/objectaddress.h" -/*---------- +/* * Precise semantics of a dependency relationship are specified by the * DependencyType code (which is stored in a "char" field in pg_depend, * so we assign ASCII-code values to the enumeration members). @@ -56,7 +57,6 @@ * contain zeroes. * * Other dependency flavors may be needed in future. - *---------- */ typedef enum DependencyType @@ -101,17 +101,8 @@ typedef enum SharedDependencyType SHARED_DEPENDENCY_INVALID = 0 } SharedDependencyType; - -/* - * The two objects related by a dependency are identified by ObjectAddresses. - */ -typedef struct ObjectAddress -{ - Oid classId; /* Class Id from pg_class */ - Oid objectId; /* OID of the object */ - int32 objectSubId; /* Subitem within the object (column of table) */ -} ObjectAddress; - +/* expansible list of ObjectAddresses (private in dependency.c) */ +typedef struct ObjectAddresses ObjectAddresses; /* * This enum covers all system catalogs whose OIDs can appear in @@ -127,14 +118,27 @@ typedef enum ObjectClass OCLASS_CONVERSION, /* pg_conversion */ OCLASS_DEFAULT, /* pg_attrdef */ OCLASS_LANGUAGE, /* pg_language */ + OCLASS_LARGEOBJECT, /* pg_largeobject */ OCLASS_OPERATOR, /* pg_operator */ OCLASS_OPCLASS, /* pg_opclass */ + OCLASS_OPFAMILY, /* pg_opfamily */ + OCLASS_AMOP, /* pg_amop */ + OCLASS_AMPROC, /* pg_amproc */ OCLASS_REWRITE, /* pg_rewrite */ OCLASS_TRIGGER, /* pg_trigger */ OCLASS_SCHEMA, /* pg_namespace */ + OCLASS_TSPARSER, /* pg_ts_parser */ + OCLASS_TSDICT, /* pg_ts_dict */ + OCLASS_TSTEMPLATE, /* pg_ts_template */ + OCLASS_TSCONFIG, /* pg_ts_config */ OCLASS_ROLE, /* pg_authid */ OCLASS_DATABASE, /* pg_database */ OCLASS_TBLSPACE, /* pg_tablespace */ + OCLASS_FDW, /* pg_foreign_data_wrapper */ + OCLASS_FOREIGN_SERVER, /* pg_foreign_server */ + OCLASS_USER_MAPPING, /* pg_user_mapping */ + OCLASS_FOREIGN_TABLE, /* pg_foreign_table */ + OCLASS_DEFACL, /* pg_default_acl */ MAX_OCLASS /* MUST BE LAST */ } ObjectClass; @@ -144,6 +148,9 @@ typedef enum ObjectClass extern void performDeletion(const ObjectAddress *object, DropBehavior behavior); +extern void performMultipleDeletions(const ObjectAddresses *objects, + DropBehavior behavior); + extern void deleteWhatDependsOn(const ObjectAddress *object, bool showNotices); @@ -159,6 +166,21 @@ extern void recordDependencyOnSingleRelExpr(const ObjectAddress *depender, extern ObjectClass getObjectClass(const ObjectAddress *object); extern char *getObjectDescription(const ObjectAddress *object); +extern char *getObjectDescriptionOids(Oid classid, Oid objid); + +extern ObjectAddresses *new_object_addresses(void); + +extern void add_exact_object_address(const ObjectAddress *object, + ObjectAddresses *addrs); + +extern bool object_address_present(const ObjectAddress *object, + const ObjectAddresses *addrs); + +extern void record_object_address_dependencies(const ObjectAddress *depender, + ObjectAddresses *referenced, + DependencyType behavior); + +extern void free_object_addresses(ObjectAddresses *addrs); /* in pg_depend.c */ @@ -177,7 +199,15 @@ extern long changeDependencyFor(Oid classId, Oid objectId, Oid refClassId, Oid oldRefObjectId, Oid newRefObjectId); -extern bool objectIsInternalDependency(Oid classId, Oid objectId); +extern bool sequenceIsOwned(Oid seqId, Oid *tableId, int32 *colId); + +extern void markSequenceUnowned(Oid seqId); + +extern List *getOwnedSequences(Oid relid); + +extern Oid get_constraint_index(Oid constraintId); + +extern Oid get_index_constraint(Oid indexId); /* in pg_shdepend.c */ @@ -185,19 +215,23 @@ extern void recordSharedDependencyOn(ObjectAddress *depender, ObjectAddress *referenced, SharedDependencyType deptype); -extern void deleteSharedDependencyRecordsFor(Oid classId, Oid objectId); +extern void deleteSharedDependencyRecordsFor(Oid classId, Oid objectId, + int32 objectSubId); extern void recordDependencyOnOwner(Oid classId, Oid objectId, Oid owner); extern void changeDependencyOnOwner(Oid classId, Oid objectId, Oid newOwnerId); -extern void updateAclDependencies(Oid classId, Oid objectId, - Oid ownerId, bool isGrant, +extern void updateAclDependencies(Oid classId, Oid objectId, int32 objectSubId, + Oid ownerId, int noldmembers, Oid *oldmembers, int nnewmembers, Oid *newmembers); -extern char *checkSharedDependencies(Oid classId, Oid objectId); +extern bool checkSharedDependencies(Oid classId, Oid objectId, + char **detail_msg, char **detail_log_msg); + +extern void shdepLockAndCheckObject(Oid classId, Oid objectId); extern void copyTemplateDependencies(Oid templateDbId, Oid newDbId); @@ -207,7 +241,4 @@ extern void shdepDropOwned(List *relids, DropBehavior behavior); extern void shdepReassignOwned(List *relids, Oid newrole); -extern void performSequenceDefaultDeletion(const ObjectAddress *object, - DropBehavior behavior, int deleteFlag); - #endif /* DEPENDENCY_H */