1 | /*------------------------------------------------------------------------- |
2 | * |
3 | * heap.h |
4 | * prototypes for functions in backend/catalog/heap.c |
5 | * |
6 | * |
7 | * Portions Copyright (c) 1996-2019, PostgreSQL Global Development Group |
8 | * Portions Copyright (c) 1994, Regents of the University of California |
9 | * |
10 | * src/include/catalog/heap.h |
11 | * |
12 | *------------------------------------------------------------------------- |
13 | */ |
14 | #ifndef HEAP_H |
15 | #define HEAP_H |
16 | |
17 | #include "catalog/indexing.h" |
18 | #include "catalog/objectaddress.h" |
19 | #include "parser/parse_node.h" |
20 | |
21 | |
22 | /* flag bits for CheckAttributeType/CheckAttributeNamesTypes */ |
23 | #define CHKATYPE_ANYARRAY 0x01 /* allow ANYARRAY */ |
24 | #define CHKATYPE_ANYRECORD 0x02 /* allow RECORD and RECORD[] */ |
25 | |
26 | typedef struct RawColumnDefault |
27 | { |
28 | AttrNumber attnum; /* attribute to attach default to */ |
29 | Node *raw_default; /* default value (untransformed parse tree) */ |
30 | bool missingMode; /* true if part of add column processing */ |
31 | char generated; /* attgenerated setting */ |
32 | } RawColumnDefault; |
33 | |
34 | typedef struct CookedConstraint |
35 | { |
36 | ConstrType contype; /* CONSTR_DEFAULT or CONSTR_CHECK */ |
37 | Oid conoid; /* constr OID if created, otherwise Invalid */ |
38 | char *name; /* name, or NULL if none */ |
39 | AttrNumber attnum; /* which attr (only for DEFAULT) */ |
40 | Node *expr; /* transformed default or check expr */ |
41 | bool skip_validation; /* skip validation? (only for CHECK) */ |
42 | bool is_local; /* constraint has local (non-inherited) def */ |
43 | int inhcount; /* number of times constraint is inherited */ |
44 | bool is_no_inherit; /* constraint has local def and cannot be |
45 | * inherited */ |
46 | } CookedConstraint; |
47 | |
48 | extern Relation heap_create(const char *relname, |
49 | Oid relnamespace, |
50 | Oid reltablespace, |
51 | Oid relid, |
52 | Oid relfilenode, |
53 | Oid accessmtd, |
54 | TupleDesc tupDesc, |
55 | char relkind, |
56 | char relpersistence, |
57 | bool shared_relation, |
58 | bool mapped_relation, |
59 | bool allow_system_table_mods, |
60 | TransactionId *relfrozenxid, |
61 | MultiXactId *relminmxid); |
62 | |
63 | extern Oid heap_create_with_catalog(const char *relname, |
64 | Oid relnamespace, |
65 | Oid reltablespace, |
66 | Oid relid, |
67 | Oid reltypeid, |
68 | Oid reloftypeid, |
69 | Oid ownerid, |
70 | Oid accessmtd, |
71 | TupleDesc tupdesc, |
72 | List *cooked_constraints, |
73 | char relkind, |
74 | char relpersistence, |
75 | bool shared_relation, |
76 | bool mapped_relation, |
77 | OnCommitAction oncommit, |
78 | Datum reloptions, |
79 | bool use_user_acl, |
80 | bool allow_system_table_mods, |
81 | bool is_internal, |
82 | Oid relrewrite, |
83 | ObjectAddress *typaddress); |
84 | |
85 | extern void heap_drop_with_catalog(Oid relid); |
86 | |
87 | extern void heap_truncate(List *relids); |
88 | |
89 | extern void heap_truncate_one_rel(Relation rel); |
90 | |
91 | extern void heap_truncate_check_FKs(List *relations, bool tempTables); |
92 | |
93 | extern List *heap_truncate_find_FKs(List *relationIds); |
94 | |
95 | extern void InsertPgAttributeTuple(Relation pg_attribute_rel, |
96 | Form_pg_attribute new_attribute, |
97 | CatalogIndexState indstate); |
98 | |
99 | extern void InsertPgClassTuple(Relation pg_class_desc, |
100 | Relation new_rel_desc, |
101 | Oid new_rel_oid, |
102 | Datum relacl, |
103 | Datum reloptions); |
104 | |
105 | extern List *AddRelationNewConstraints(Relation rel, |
106 | List *newColDefaults, |
107 | List *newConstraints, |
108 | bool allow_merge, |
109 | bool is_local, |
110 | bool is_internal, |
111 | const char *queryString); |
112 | |
113 | extern void RelationClearMissing(Relation rel); |
114 | extern void SetAttrMissing(Oid relid, char *attname, char *value); |
115 | |
116 | extern Oid StoreAttrDefault(Relation rel, AttrNumber attnum, |
117 | Node *expr, bool is_internal, |
118 | bool add_column_mode); |
119 | |
120 | extern Node *cookDefault(ParseState *pstate, |
121 | Node *raw_default, |
122 | Oid atttypid, |
123 | int32 atttypmod, |
124 | const char *attname, |
125 | char attgenerated); |
126 | |
127 | extern void DeleteRelationTuple(Oid relid); |
128 | extern void DeleteAttributeTuples(Oid relid); |
129 | extern void DeleteSystemAttributeTuples(Oid relid); |
130 | extern void RemoveAttributeById(Oid relid, AttrNumber attnum); |
131 | extern void RemoveAttrDefault(Oid relid, AttrNumber attnum, |
132 | DropBehavior behavior, bool complain, bool internal); |
133 | extern void RemoveAttrDefaultById(Oid attrdefId); |
134 | extern void RemoveStatistics(Oid relid, AttrNumber attnum); |
135 | |
136 | extern const FormData_pg_attribute *SystemAttributeDefinition(AttrNumber attno); |
137 | |
138 | extern const FormData_pg_attribute *SystemAttributeByName(const char *attname); |
139 | |
140 | extern void CheckAttributeNamesTypes(TupleDesc tupdesc, char relkind, |
141 | int flags); |
142 | |
143 | extern void CheckAttributeType(const char *attname, |
144 | Oid atttypid, Oid attcollation, |
145 | List *containing_rowtypes, |
146 | int flags); |
147 | |
148 | /* pg_partitioned_table catalog manipulation functions */ |
149 | extern void StorePartitionKey(Relation rel, |
150 | char strategy, |
151 | int16 partnatts, |
152 | AttrNumber *partattrs, |
153 | List *partexprs, |
154 | Oid *partopclass, |
155 | Oid *partcollation); |
156 | extern void RemovePartitionKeyByRelId(Oid relid); |
157 | extern void StorePartitionBound(Relation rel, Relation parent, |
158 | PartitionBoundSpec *bound); |
159 | |
160 | #endif /* HEAP_H */ |
161 | |