Skip to content

Commit 21428e4

Browse files
author
Nikita Glukhov
committed
Add objectSubId parameter to deleteDependencyRecordsForClass()
1 parent ea7c205 commit 21428e4

File tree

7 files changed

+21
-8
lines changed

7 files changed

+21
-8
lines changed

src/backend/catalog/index.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1191,7 +1191,7 @@ index_constraint_create(Relation heapRelation,
11911191
* index into a UNIQUE or PRIMARY KEY constraint.
11921192
*/
11931193
if (remove_old_dependencies)
1194-
deleteDependencyRecordsForClass(RelationRelationId, indexRelationId,
1194+
deleteDependencyRecordsForClass(RelationRelationId, indexRelationId, 0,
11951195
RelationRelationId, DEPENDENCY_AUTO);
11961196

11971197
/*

src/backend/catalog/pg_depend.c

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -238,14 +238,15 @@ deleteDependencyRecordsFor(Oid classId, Oid objectId,
238238
* extension membership).
239239
*/
240240
long
241-
deleteDependencyRecordsForClass(Oid classId, Oid objectId,
241+
deleteDependencyRecordsForClass(Oid classId, Oid objectId, int32 objectSubId,
242242
Oid refclassId, char deptype)
243243
{
244244
long count = 0;
245245
Relation depRel;
246-
ScanKeyData key[2];
246+
ScanKeyData key[3];
247247
SysScanDesc scan;
248248
HeapTuple tup;
249+
int nkeys;
249250

250251
depRel = heap_open(DependRelationId, RowExclusiveLock);
251252

@@ -257,9 +258,19 @@ deleteDependencyRecordsForClass(Oid classId, Oid objectId,
257258
Anum_pg_depend_objid,
258259
BTEqualStrategyNumber, F_OIDEQ,
259260
ObjectIdGetDatum(objectId));
261+
if (objectSubId != 0)
262+
{
263+
ScanKeyInit(&key[2],
264+
Anum_pg_depend_objsubid,
265+
BTEqualStrategyNumber, F_INT4EQ,
266+
Int32GetDatum(objectSubId));
267+
nkeys = 3;
268+
}
269+
else
270+
nkeys = 2;
260271

261272
scan = systable_beginscan(depRel, DependDependerIndexId, true,
262-
NULL, 2, key);
273+
NULL, nkeys, key);
263274

264275
while (HeapTupleIsValid(tup = systable_getnext(scan)))
265276
{

src/backend/commands/extension.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3115,7 +3115,7 @@ ApplyExtensionUpdates(Oid extensionOid,
31153115
/*
31163116
* Remove and recreate dependencies on prerequisite extensions
31173117
*/
3118-
deleteDependencyRecordsForClass(ExtensionRelationId, extensionOid,
3118+
deleteDependencyRecordsForClass(ExtensionRelationId, extensionOid, 0,
31193119
ExtensionRelationId,
31203120
DEPENDENCY_NORMAL);
31213121

@@ -3257,7 +3257,7 @@ ExecAlterExtensionContentsStmt(AlterExtensionContentsStmt *stmt,
32573257
/*
32583258
* OK, drop the dependency.
32593259
*/
3260-
if (deleteDependencyRecordsForClass(object.classId, object.objectId,
3260+
if (deleteDependencyRecordsForClass(object.classId, object.objectId, 0,
32613261
ExtensionRelationId,
32623262
DEPENDENCY_EXTENSION) != 1)
32633263
elog(ERROR, "unexpected number of extension dependency records");

src/backend/commands/foreigncmds.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -800,6 +800,7 @@ AlterForeignDataWrapper(AlterFdwStmt *stmt)
800800
*/
801801
deleteDependencyRecordsForClass(ForeignDataWrapperRelationId,
802802
fdwId,
803+
0,
803804
ProcedureRelationId,
804805
DEPENDENCY_NORMAL);
805806

src/backend/commands/sequence.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1727,7 +1727,7 @@ process_owned_by(Relation seqrel, List *owned_by, bool for_identity)
17271727
* dependencies for the sequence, then optionally add a new one.
17281728
*/
17291729
deleteDependencyRecordsForClass(RelationRelationId, RelationGetRelid(seqrel),
1730-
RelationRelationId, deptype);
1730+
0, RelationRelationId, deptype);
17311731

17321732
if (tablerel)
17331733
{

src/backend/commands/tablecmds.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6129,7 +6129,7 @@ ATExecDropIdentity(Relation rel, const char *colName, bool missing_ok, LOCKMODE
61296129

61306130
/* drop the internal sequence */
61316131
seqid = getOwnedSequence(RelationGetRelid(rel), attnum);
6132-
deleteDependencyRecordsForClass(RelationRelationId, seqid,
6132+
deleteDependencyRecordsForClass(RelationRelationId, seqid, 0,
61336133
RelationRelationId, DEPENDENCY_INTERNAL);
61346134
CommandCounterIncrement();
61356135
seqaddress.classId = RelationRelationId;

src/include/catalog/dependency.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -231,6 +231,7 @@ extern long deleteDependencyRecordsFor(Oid classId, Oid objectId,
231231
bool skipExtensionDeps);
232232

233233
extern long deleteDependencyRecordsForClass(Oid classId, Oid objectId,
234+
int32 objectSubId,
234235
Oid refclassId, char deptype);
235236

236237
extern long changeDependencyFor(Oid classId, Oid objectId,

0 commit comments

Comments
 (0)