29 #include "utils/fmgroids.h" 94 max_slots =
Min(nreferenced,
102 slot_stored_count = 0;
105 for (i = 0; i < nreferenced; i++, referenced++)
107 bool ignore_systempin =
false;
112 if (referenced->
classId == CollationRelationId)
115 if (referenced->
objectId == C_COLLATION_OID ||
116 referenced->
objectId == POSIX_COLLATION_OID)
126 if (referenced->
objectId == DEFAULT_COLLATION_OID)
127 ignore_systempin =
true;
142 if (slot_init_count < max_slots)
155 memset(slot[slot_stored_count]->tts_isnull,
false,
156 slot[slot_stored_count]->tts_tupleDescriptor->natts *
sizeof(
bool));
168 slot[slot_stored_count]->
tts_isnull[Anum_pg_depend_refobjversion - 1] =
true;
174 if (slot_stored_count == max_slots)
177 if (indstate == NULL)
182 slot_stored_count = 0;
187 if (slot_stored_count > 0)
190 if (indstate == NULL)
197 if (indstate != NULL)
203 for (i = 0; i < slot_init_count; i++)
244 (
errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),
245 errmsg(
"%s is already a member of extension \"%s\"",
252 extension.
classId = ExtensionRelationId;
274 bool skipExtensionDeps)
285 Anum_pg_depend_classid,
289 Anum_pg_depend_objid,
298 if (skipExtensionDeps &&
324 Oid refclassId,
char deptype)
335 Anum_pg_depend_classid,
339 Anum_pg_depend_objid,
350 if (depform->refclassid == refclassId && depform->deptype == deptype)
371 Oid refclassId,
Oid refobjectId)
382 Anum_pg_depend_classid,
386 Anum_pg_depend_objid,
397 if (depform->refclassid == refclassId &&
398 depform->refobjid == refobjectId &&
399 depform->deptype == deptype)
430 Oid refClassId,
Oid oldRefObjectId,
486 Anum_pg_depend_classid,
490 Anum_pg_depend_objid,
501 if (depform->refclassid == refClassId &&
502 depform->refobjid == oldRefObjectId)
512 depform->refobjid = newRefObjectId;
551 Anum_pg_depend_classid,
555 Anum_pg_depend_objid,
570 depform->objid = newObjectId;
620 (
errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
621 errmsg(
"cannot remove dependency on %s because it is a system object",
634 Anum_pg_depend_refclassid,
638 Anum_pg_depend_refobjid,
657 depform->refobjid = newRefObjectId;
692 Anum_pg_depend_refclassid,
697 Anum_pg_depend_refobjid,
753 Anum_pg_depend_classid,
757 Anum_pg_depend_objid,
768 if (depform->refclassid == ExtensionRelationId &&
771 result = depform->refobjid;
799 Anum_pg_depend_classid,
803 Anum_pg_depend_objid,
814 if (depform->refclassid == ExtensionRelationId &&
849 Anum_pg_depend_classid,
853 Anum_pg_depend_objid,
864 if (depform->refclassid == RelationRelationId &&
865 depform->deptype == deptype)
867 *tableId = depform->refobjid;
868 *colId = depform->refobjsubid;
898 Anum_pg_depend_refclassid,
902 Anum_pg_depend_refobjid,
907 Anum_pg_depend_refobjsubid,
912 NULL, attnum ? 3 : 2, key);
923 if (deprec->classid == RelationRelationId &&
924 deprec->objsubid == 0 &&
925 deprec->refobjsubid != 0 &&
929 if (!deptype || deprec->deptype == deptype)
960 elog(
ERROR,
"more than one owned sequence found");
991 Anum_pg_depend_classid,
995 Anum_pg_depend_objid,
999 Anum_pg_depend_objsubid,
1014 if (deprec->refclassid == ConstraintRelationId &&
1015 deprec->refobjsubid == 0 &&
1018 constraintId = deprec->refobjid;
1026 return constraintId;
1047 Anum_pg_depend_refclassid,
1051 Anum_pg_depend_refobjid,
1055 Anum_pg_depend_refobjsubid,
1070 if (deprec->classid == ConstraintRelationId &&
1071 deprec->objsubid == 0 &&
HeapTuple heap_copytuple(HeapTuple tuple)
Oid CurrentExtensionObject
char * getObjectDescription(const ObjectAddress *object, bool missing_ok)
Oid getExtensionOfObject(Oid classId, Oid objectId)
void table_close(Relation relation, LOCKMODE lockmode)
void systable_endscan(SysScanDesc sysscan)
bool sequenceIsOwned(Oid seqId, char deptype, Oid *tableId, int32 *colId)
static TupleTableSlot * ExecClearTuple(TupleTableSlot *slot)
#define RelationGetDescr(relation)
TupleTableSlot * MakeSingleTupleTableSlot(TupleDesc tupdesc, const TupleTableSlotOps *tts_ops)
#define MAX_CATALOG_MULTI_INSERT_BYTES
char get_rel_relkind(Oid relid)
char * get_extension_name(Oid ext_oid)
static List * getOwnedSequences_internal(Oid relid, AttrNumber attnum, char deptype)
long deleteDependencyRecordsFor(Oid classId, Oid objectId, bool skipExtensionDeps)
int errcode(int sqlerrcode)
void CatalogTupleDelete(Relation heapRel, ItemPointer tid)
void recordDependencyOn(const ObjectAddress *depender, const ObjectAddress *referenced, DependencyType behavior)
void heap_freetuple(HeapTuple htup)
Oid getIdentitySequence(Oid relid, AttrNumber attnum, bool missing_ok)
List * lappend_oid(List *list, Oid datum)
#define OidIsValid(objectId)
long deleteDependencyRecordsForSpecific(Oid classId, Oid objectId, char deptype, Oid refclassId, Oid refobjectId)
SysScanDesc systable_beginscan(Relation heapRelation, Oid indexId, bool indexOK, Snapshot snapshot, int nkeys, ScanKey key)
char * get_collation_version_for_oid(Oid oid, bool missing_ok)
HeapTuple systable_getnext(SysScanDesc sysscan)
static bool isObjectPinned(const ObjectAddress *object, Relation rel)
void pfree(void *pointer)
#define ObjectIdGetDatum(X)
void CatalogTuplesMultiInsertWithInfo(Relation heapRel, TupleTableSlot **slot, int ntuples, CatalogIndexState indstate)
void ExecDropSingleTupleTableSlot(TupleTableSlot *slot)
Oid get_index_constraint(Oid indexId)
FormData_pg_depend * Form_pg_depend
#define DependDependerIndexId
void recordMultipleDependencies(const ObjectAddress *depender, const ObjectAddress *referenced, int nreferenced, DependencyType behavior, bool record_version)
#define DependReferenceIndexId
List * getOwnedSequences(Oid relid)
long deleteDependencyRecordsForClass(Oid classId, Oid objectId, Oid refclassId, char deptype)
long changeDependenciesOf(Oid classId, Oid oldObjectId, Oid newObjectId)
#define ereport(elevel,...)
#define HeapTupleIsValid(tuple)
#define Assert(condition)
void recordDependencyOnCurrentExtension(const ObjectAddress *object, bool isReplace)
CatalogIndexState CatalogOpenIndexes(Relation heapRel)
void CatalogTupleUpdate(Relation heapRel, ItemPointer otid, HeapTuple tup)
static int list_length(const List *l)
List * get_index_ref_constraints(Oid indexId)
#define IsBootstrapProcessingMode()
int errmsg(const char *fmt,...)
long changeDependencyFor(Oid classId, Oid objectId, Oid refClassId, Oid oldRefObjectId, Oid newRefObjectId)
const TupleTableSlotOps TTSOpsHeapTuple
void ScanKeyInit(ScanKey entry, AttrNumber attributeNumber, StrategyNumber strategy, RegProcedure procedure, Datum argument)
#define CStringGetTextDatum(s)
void CatalogCloseIndexes(CatalogIndexState indstate)
Relation table_open(Oid relationId, LOCKMODE lockmode)
long changeDependenciesOn(Oid refClassId, Oid oldRefObjectId, Oid newRefObjectId)
List * getAutoExtensionsOfObject(Oid classId, Oid objectId)
#define BTEqualStrategyNumber
TupleTableSlot * ExecStoreVirtualTuple(TupleTableSlot *slot)