]> granicus.if.org Git - postgresql/blobdiff - src/include/catalog/dependency.h
Basic foreign table support.
[postgresql] / src / include / catalog / dependency.h
index 4915c8dfd72eebca696c902b064418d0ecbea03f..c6ab313edf8c57691a6dce4eb2ceecbab39968c9 100644 (file)
@@ -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
  *
  *-------------------------------------------------------------------------
  */
 #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 */