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