]> granicus.if.org Git - postgresql/blob - src/include/catalog/objectaddress.h
Update copyright for 2016
[postgresql] / src / include / catalog / objectaddress.h
1 /*-------------------------------------------------------------------------
2  *
3  * objectaddress.h
4  *        functions for working with object addresses
5  *
6  * Portions Copyright (c) 1996-2016, PostgreSQL Global Development Group
7  * Portions Copyright (c) 1994, Regents of the University of California
8  *
9  * src/include/catalog/objectaddress.h
10  *
11  *-------------------------------------------------------------------------
12  */
13 #ifndef OBJECTADDRESS_H
14 #define OBJECTADDRESS_H
15
16 #include "nodes/pg_list.h"
17 #include "storage/lockdefs.h"
18 #include "utils/acl.h"
19 #include "utils/relcache.h"
20
21 /*
22  * An ObjectAddress represents a database object of any type.
23  */
24 typedef struct ObjectAddress
25 {
26         Oid                     classId;                /* Class Id from pg_class */
27         Oid                     objectId;               /* OID of the object */
28         int32           objectSubId;    /* Subitem within object (eg column), or 0 */
29 } ObjectAddress;
30
31 extern const ObjectAddress InvalidObjectAddress;
32
33 #define ObjectAddressSubSet(addr, class_id, object_id, object_sub_id) \
34         do { \
35                 (addr).classId = (class_id); \
36                 (addr).objectId = (object_id); \
37                 (addr).objectSubId = (object_sub_id); \
38         } while (0)
39
40 #define ObjectAddressSet(addr, class_id, object_id) \
41         ObjectAddressSubSet(addr, class_id, object_id, 0)
42
43 extern ObjectAddress get_object_address(ObjectType objtype, List *objname,
44                                    List *objargs, Relation *relp,
45                                    LOCKMODE lockmode, bool missing_ok);
46
47 extern void check_object_ownership(Oid roleid,
48                                            ObjectType objtype, ObjectAddress address,
49                                            List *objname, List *objargs, Relation relation);
50
51 extern Oid      get_object_namespace(const ObjectAddress *address);
52
53 extern bool is_objectclass_supported(Oid class_id);
54 extern Oid      get_object_oid_index(Oid class_id);
55 extern int      get_object_catcache_oid(Oid class_id);
56 extern int      get_object_catcache_name(Oid class_id);
57 extern AttrNumber get_object_attnum_name(Oid class_id);
58 extern AttrNumber get_object_attnum_namespace(Oid class_id);
59 extern AttrNumber get_object_attnum_owner(Oid class_id);
60 extern AttrNumber get_object_attnum_acl(Oid class_id);
61 extern AclObjectKind get_object_aclkind(Oid class_id);
62 extern bool get_object_namensp_unique(Oid class_id);
63
64 extern HeapTuple get_catalog_object_by_oid(Relation catalog,
65                                                   Oid objectId);
66
67 extern char *getObjectDescription(const ObjectAddress *object);
68 extern char *getObjectDescriptionOids(Oid classid, Oid objid);
69
70 extern int      read_objtype_from_string(const char *objtype);
71 extern char *getObjectTypeDescription(const ObjectAddress *object);
72 extern char *getObjectIdentity(const ObjectAddress *address);
73 extern char *getObjectIdentityParts(const ObjectAddress *address,
74                                            List **objname, List **objargs);
75 extern ArrayType *strlist_to_textarray(List *list);
76
77 #endif   /* OBJECTADDRESS_H */