1/*-------------------------------------------------------------------------
2 *
3 * objectaddress.h
4 * functions for working with object addresses
5 *
6 * Portions Copyright (c) 1996-2019, 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 */
24typedef 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
31extern 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
43extern ObjectAddress get_object_address(ObjectType objtype, Node *object,
44 Relation *relp,
45 LOCKMODE lockmode, bool missing_ok);
46
47extern ObjectAddress get_object_address_rv(ObjectType objtype, RangeVar *rel,
48 List *object, Relation *relp,
49 LOCKMODE lockmode, bool missing_ok);
50
51extern void check_object_ownership(Oid roleid,
52 ObjectType objtype, ObjectAddress address,
53 Node *object, Relation relation);
54
55extern Oid get_object_namespace(const ObjectAddress *address);
56
57extern bool is_objectclass_supported(Oid class_id);
58extern Oid get_object_oid_index(Oid class_id);
59extern int get_object_catcache_oid(Oid class_id);
60extern int get_object_catcache_name(Oid class_id);
61extern AttrNumber get_object_attnum_oid(Oid class_id);
62extern AttrNumber get_object_attnum_name(Oid class_id);
63extern AttrNumber get_object_attnum_namespace(Oid class_id);
64extern AttrNumber get_object_attnum_owner(Oid class_id);
65extern AttrNumber get_object_attnum_acl(Oid class_id);
66extern ObjectType get_object_type(Oid class_id, Oid object_id);
67extern bool get_object_namensp_unique(Oid class_id);
68
69extern HeapTuple get_catalog_object_by_oid(Relation catalog,
70 AttrNumber oidcol, Oid objectId);
71
72extern char *getObjectDescription(const ObjectAddress *object);
73extern char *getObjectDescriptionOids(Oid classid, Oid objid);
74
75extern int read_objtype_from_string(const char *objtype);
76extern char *getObjectTypeDescription(const ObjectAddress *object);
77extern char *getObjectIdentity(const ObjectAddress *address);
78extern char *getObjectIdentityParts(const ObjectAddress *address,
79 List **objname, List **objargs);
80extern ArrayType *strlist_to_textarray(List *list);
81
82extern ObjectType get_relkind_objtype(char relkind);
83
84#endif /* OBJECTADDRESS_H */
85