28 #include "utils/fmgroids.h"
88 max_slots =
Min(nreferenced,
96 slot_stored_count = 0;
99 for (
i = 0;
i < nreferenced;
i++, referenced++)
109 if (slot_init_count < max_slots)
130 memset(slot[slot_stored_count]->tts_isnull,
false,
131 slot[slot_stored_count]->tts_tupleDescriptor->natts *
sizeof(
bool));
137 if (slot_stored_count == max_slots)
140 if (indstate == NULL)
145 slot_stored_count = 0;
150 if (slot_stored_count > 0)
153 if (indstate == NULL)
160 if (indstate != NULL)
166 for (
i = 0;
i < slot_init_count;
i++)
221 (
errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),
222 errmsg(
"%s is already a member of extension \"%s\"",
228 (
errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),
229 errmsg(
"%s is not a member of extension \"%s\"",
232 errdetail(
"An extension is not allowed to replace an object that it does not own.")));
236 extension.
classId = ExtensionRelationId;
279 (
errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),
280 errmsg(
"%s is not a member of extension \"%s\"",
283 errdetail(
"An extension may only use CREATE ... IF NOT EXISTS to skip object creation if the conflicting object is one that it already owns.")));
301 bool skipExtensionDeps)
312 Anum_pg_depend_classid,
316 Anum_pg_depend_objid,
325 if (skipExtensionDeps &&
351 Oid refclassId,
char deptype)
362 Anum_pg_depend_classid,
366 Anum_pg_depend_objid,
377 if (depform->refclassid == refclassId && depform->deptype == deptype)
398 Oid refclassId,
Oid refobjectId)
409 Anum_pg_depend_classid,
413 Anum_pg_depend_objid,
424 if (depform->refclassid == refclassId &&
425 depform->refobjid == refobjectId &&
426 depform->deptype == deptype)
457 Oid refClassId,
Oid oldRefObjectId,
511 Anum_pg_depend_classid,
515 Anum_pg_depend_objid,
526 if (depform->refclassid == refClassId &&
527 depform->refobjid == oldRefObjectId)
537 depform->refobjid = newRefObjectId;
576 Anum_pg_depend_classid,
580 Anum_pg_depend_objid,
595 depform->objid = newObjectId;
645 (
errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
646 errmsg(
"cannot remove dependency on %s because it is a system object",
659 Anum_pg_depend_refclassid,
663 Anum_pg_depend_refobjid,
682 depform->refobjid = newRefObjectId;
742 Anum_pg_depend_classid,
746 Anum_pg_depend_objid,
757 if (depform->refclassid == ExtensionRelationId &&
760 result = depform->refobjid;
788 Anum_pg_depend_classid,
792 Anum_pg_depend_objid,
803 if (depform->refclassid == ExtensionRelationId &&
838 Anum_pg_depend_classid,
842 Anum_pg_depend_objid,
853 if (depform->refclassid == RelationRelationId &&
854 depform->deptype == deptype)
856 *tableId = depform->refobjid;
857 *colId = depform->refobjsubid;
887 Anum_pg_depend_refclassid,
891 Anum_pg_depend_refobjid,
896 Anum_pg_depend_refobjsubid,
912 if (deprec->classid == RelationRelationId &&
913 deprec->objsubid == 0 &&
914 deprec->refobjsubid != 0 &&
918 if (!deptype || deprec->deptype == deptype)
949 elog(
ERROR,
"more than one owned sequence found");
950 else if (seqlist ==
NIL)
980 Anum_pg_depend_classid,
984 Anum_pg_depend_objid,
988 Anum_pg_depend_objsubid,
1003 if (deprec->refclassid == ConstraintRelationId &&
1004 deprec->refobjsubid == 0 &&
1007 constraintId = deprec->refobjid;
1015 return constraintId;
1036 Anum_pg_depend_refclassid,
1040 Anum_pg_depend_refobjid,
1044 Anum_pg_depend_refobjsubid,
1059 if (deprec->classid == ConstraintRelationId &&
1060 deprec->objsubid == 0 &&
#define OidIsValid(objectId)
bool IsPinnedObject(Oid classId, Oid objectId)
elog(ERROR, "%s: %s", p2, msg)
@ DEPENDENCY_AUTO_EXTENSION
int errdetail(const char *fmt,...)
int errcode(int sqlerrcode)
int errmsg(const char *fmt,...)
#define ereport(elevel,...)
TupleTableSlot * ExecStoreVirtualTuple(TupleTableSlot *slot)
void ExecDropSingleTupleTableSlot(TupleTableSlot *slot)
const TupleTableSlotOps TTSOpsHeapTuple
TupleTableSlot * MakeSingleTupleTableSlot(TupleDesc tupdesc, const TupleTableSlotOps *tts_ops)
Oid CurrentExtensionObject
char * get_extension_name(Oid ext_oid)
void systable_endscan(SysScanDesc sysscan)
HeapTuple systable_getnext(SysScanDesc sysscan)
SysScanDesc systable_beginscan(Relation heapRelation, Oid indexId, bool indexOK, Snapshot snapshot, int nkeys, ScanKey key)
HeapTuple heap_copytuple(HeapTuple tuple)
void heap_freetuple(HeapTuple htup)
#define HeapTupleIsValid(tuple)
void CatalogTupleUpdate(Relation heapRel, ItemPointer otid, HeapTuple tup)
void CatalogTuplesMultiInsertWithInfo(Relation heapRel, TupleTableSlot **slot, int ntuples, CatalogIndexState indstate)
void CatalogCloseIndexes(CatalogIndexState indstate)
CatalogIndexState CatalogOpenIndexes(Relation heapRel)
void CatalogTupleDelete(Relation heapRel, ItemPointer tid)
#define MAX_CATALOG_MULTI_INSERT_BYTES
Assert(fmt[strlen(fmt) - 1] !='\n')
List * lappend_oid(List *list, Oid datum)
char get_rel_relkind(Oid relid)
void pfree(void *pointer)
#define IsBootstrapProcessingMode()
char * getObjectDescription(const ObjectAddress *object, bool missing_ok)
static List * getOwnedSequences_internal(Oid relid, AttrNumber attnum, char deptype)
void checkMembershipInCurrentExtension(const ObjectAddress *object)
void recordMultipleDependencies(const ObjectAddress *depender, const ObjectAddress *referenced, int nreferenced, DependencyType behavior)
void recordDependencyOn(const ObjectAddress *depender, const ObjectAddress *referenced, DependencyType behavior)
long changeDependencyFor(Oid classId, Oid objectId, Oid refClassId, Oid oldRefObjectId, Oid newRefObjectId)
List * getAutoExtensionsOfObject(Oid classId, Oid objectId)
static bool isObjectPinned(const ObjectAddress *object)
long deleteDependencyRecordsForClass(Oid classId, Oid objectId, Oid refclassId, char deptype)
Oid getExtensionOfObject(Oid classId, Oid objectId)
long changeDependenciesOf(Oid classId, Oid oldObjectId, Oid newObjectId)
long deleteDependencyRecordsFor(Oid classId, Oid objectId, bool skipExtensionDeps)
long deleteDependencyRecordsForSpecific(Oid classId, Oid objectId, char deptype, Oid refclassId, Oid refobjectId)
long changeDependenciesOn(Oid refClassId, Oid oldRefObjectId, Oid newRefObjectId)
Oid get_index_constraint(Oid indexId)
List * get_index_ref_constraints(Oid indexId)
Oid getIdentitySequence(Oid relid, AttrNumber attnum, bool missing_ok)
void recordDependencyOnCurrentExtension(const ObjectAddress *object, bool isReplace)
List * getOwnedSequences(Oid relid)
bool sequenceIsOwned(Oid seqId, char deptype, Oid *tableId, int32 *colId)
FormData_pg_depend * Form_pg_depend
static int list_length(const List *l)
static Datum ObjectIdGetDatum(Oid X)
static Datum Int32GetDatum(int32 X)
static Datum CharGetDatum(char X)
#define RelationGetDescr(relation)
void ScanKeyInit(ScanKey entry, AttrNumber attributeNumber, StrategyNumber strategy, RegProcedure procedure, Datum argument)
#define BTEqualStrategyNumber
void table_close(Relation relation, LOCKMODE lockmode)
Relation table_open(Oid relationId, LOCKMODE lockmode)
static TupleTableSlot * ExecClearTuple(TupleTableSlot *slot)