]> granicus.if.org Git - postgresql/blobdiff - src/include/catalog/dependency.h
Basic foreign table support.
[postgresql] / src / include / catalog / dependency.h
index 6a00f2c4fb959daa2c64ec0424f7d0e0dd7297a5..c6ab313edf8c57691a6dce4eb2ceecbab39968c9 100644 (file)
@@ -4,10 +4,10 @@
  *       Routines to support inter-object dependencies.
  *
  *
- * Portions Copyright (c) 1996-2007, 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.30 2007/08/21 01:11:25 tgl 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,6 @@ 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;
 
@@ -129,6 +118,7 @@ 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 */
@@ -144,6 +134,11 @@ typedef enum ObjectClass
        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;
 
@@ -171,6 +166,7 @@ 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);
 
@@ -178,11 +174,11 @@ extern void add_exact_object_address(const ObjectAddress *object,
                                                 ObjectAddresses *addrs);
 
 extern bool object_address_present(const ObjectAddress *object,
-                                          ObjectAddresses *addrs);
+                                          const ObjectAddresses *addrs);
 
 extern void record_object_address_dependencies(const ObjectAddress *depender,
-                                                                                          ObjectAddresses *referenced,
-                                                                                          DependencyType behavior);
+                                                                  ObjectAddresses *referenced,
+                                                                  DependencyType behavior);
 
 extern void free_object_addresses(ObjectAddresses *addrs);
 
@@ -207,25 +203,35 @@ 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 */
 
 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);