Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitb1d32d3

Browse files
committed
Unify drop-by-OID functions
There are a number of Remove${Something}ById() functions that areessentially identical in structure and only different in which catalogthey are working on. Refactor this to be one generic function. Theinformation about which oid column, index, etc. to use was alreadyavailable in ObjectProperty for most catalogs, in a few cases it waseasily added.Reviewed-by: Pavel Stehule <pavel.stehule@gmail.com>Reviewed-by: Robert Haas <robertmhaas@gmail.com>Discussion:https://www.postgresql.org/message-id/flat/331d9661-1743-857f-1cbb-d5728bcd62cb%402ndquadrant.com
1 parentb27c90b commitb1d32d3

23 files changed

+175
-619
lines changed

‎src/backend/catalog/aclchk.c

Lines changed: 0 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1498,39 +1498,6 @@ RemoveRoleFromObjectACL(Oid roleid, Oid classid, Oid objid)
14981498
}
14991499

15001500

1501-
/*
1502-
* Remove a pg_default_acl entry
1503-
*/
1504-
void
1505-
RemoveDefaultACLById(OiddefaclOid)
1506-
{
1507-
Relationrel;
1508-
ScanKeyDataskey[1];
1509-
SysScanDescscan;
1510-
HeapTupletuple;
1511-
1512-
rel=table_open(DefaultAclRelationId,RowExclusiveLock);
1513-
1514-
ScanKeyInit(&skey[0],
1515-
Anum_pg_default_acl_oid,
1516-
BTEqualStrategyNumber,F_OIDEQ,
1517-
ObjectIdGetDatum(defaclOid));
1518-
1519-
scan=systable_beginscan(rel,DefaultAclOidIndexId, true,
1520-
NULL,1,skey);
1521-
1522-
tuple=systable_getnext(scan);
1523-
1524-
if (!HeapTupleIsValid(tuple))
1525-
elog(ERROR,"could not find tuple for default ACL %u",defaclOid);
1526-
1527-
CatalogTupleDelete(rel,&tuple->t_self);
1528-
1529-
systable_endscan(scan);
1530-
table_close(rel,RowExclusiveLock);
1531-
}
1532-
1533-
15341501
/*
15351502
* expand_col_privileges
15361503
*

‎src/backend/catalog/dependency.c

Lines changed: 76 additions & 84 deletions
Original file line numberDiff line numberDiff line change
@@ -66,9 +66,7 @@
6666
#include"commands/event_trigger.h"
6767
#include"commands/extension.h"
6868
#include"commands/policy.h"
69-
#include"commands/proclang.h"
7069
#include"commands/publicationcmds.h"
71-
#include"commands/schemacmds.h"
7270
#include"commands/seclabel.h"
7371
#include"commands/sequence.h"
7472
#include"commands/trigger.h"
@@ -1223,6 +1221,62 @@ reportDependentObjects(const ObjectAddresses *targetObjects,
12231221
pfree(logdetail.data);
12241222
}
12251223

1224+
/*
1225+
* Drop an object by OID. Works for most catalogs, if no special processing
1226+
* is needed.
1227+
*/
1228+
staticvoid
1229+
DropObjectById(constObjectAddress*object)
1230+
{
1231+
intcacheId;
1232+
Relationrel;
1233+
HeapTupletup;
1234+
1235+
cacheId=get_object_catcache_oid(object->classId);
1236+
1237+
rel=table_open(object->classId,RowExclusiveLock);
1238+
1239+
/*
1240+
* Use the system cache for the oid column, if one exists.
1241+
*/
1242+
if (cacheId >=0)
1243+
{
1244+
tup=SearchSysCache1(cacheId,ObjectIdGetDatum(object->objectId));
1245+
if (!HeapTupleIsValid(tup))
1246+
elog(ERROR,"cache lookup failed for %s %u",
1247+
get_object_class_descr(object->classId),object->objectId);
1248+
1249+
CatalogTupleDelete(rel,&tup->t_self);
1250+
1251+
ReleaseSysCache(tup);
1252+
}
1253+
else
1254+
{
1255+
ScanKeyDataskey[1];
1256+
SysScanDescscan;
1257+
1258+
ScanKeyInit(&skey[0],
1259+
get_object_attnum_oid(object->classId),
1260+
BTEqualStrategyNumber,F_OIDEQ,
1261+
ObjectIdGetDatum(object->objectId));
1262+
1263+
scan=systable_beginscan(rel,get_object_oid_index(object->classId), true,
1264+
NULL,1,skey);
1265+
1266+
/* we expect exactly one match */
1267+
tup=systable_getnext(scan);
1268+
if (!HeapTupleIsValid(tup))
1269+
elog(ERROR,"could not find tuple for %s %u",
1270+
get_object_class_descr(object->classId),object->objectId);
1271+
1272+
CatalogTupleDelete(rel,&tup->t_self);
1273+
1274+
systable_endscan(scan);
1275+
}
1276+
1277+
table_close(rel,RowExclusiveLock);
1278+
}
1279+
12261280
/*
12271281
* deleteOneObject: delete a single object for performDeletion.
12281282
*
@@ -1376,30 +1430,14 @@ doDeletion(const ObjectAddress *object, int flags)
13761430
RemoveTypeById(object->objectId);
13771431
break;
13781432

1379-
caseOCLASS_CAST:
1380-
DropCastById(object->objectId);
1381-
break;
1382-
1383-
caseOCLASS_COLLATION:
1384-
RemoveCollationById(object->objectId);
1385-
break;
1386-
13871433
caseOCLASS_CONSTRAINT:
13881434
RemoveConstraintById(object->objectId);
13891435
break;
13901436

1391-
caseOCLASS_CONVERSION:
1392-
RemoveConversionById(object->objectId);
1393-
break;
1394-
13951437
caseOCLASS_DEFAULT:
13961438
RemoveAttrDefaultById(object->objectId);
13971439
break;
13981440

1399-
caseOCLASS_LANGUAGE:
1400-
DropProceduralLanguageById(object->objectId);
1401-
break;
1402-
14031441
caseOCLASS_LARGEOBJECT:
14041442
LargeObjectDrop(object->objectId);
14051443
break;
@@ -1408,26 +1446,6 @@ doDeletion(const ObjectAddress *object, int flags)
14081446
RemoveOperatorById(object->objectId);
14091447
break;
14101448

1411-
caseOCLASS_OPCLASS:
1412-
RemoveOpClassById(object->objectId);
1413-
break;
1414-
1415-
caseOCLASS_OPFAMILY:
1416-
RemoveOpFamilyById(object->objectId);
1417-
break;
1418-
1419-
caseOCLASS_AM:
1420-
RemoveAccessMethodById(object->objectId);
1421-
break;
1422-
1423-
caseOCLASS_AMOP:
1424-
RemoveAmOpEntryById(object->objectId);
1425-
break;
1426-
1427-
caseOCLASS_AMPROC:
1428-
RemoveAmProcEntryById(object->objectId);
1429-
break;
1430-
14311449
caseOCLASS_REWRITE:
14321450
RemoveRewriteRuleById(object->objectId);
14331451
break;
@@ -1436,73 +1454,47 @@ doDeletion(const ObjectAddress *object, int flags)
14361454
RemoveTriggerById(object->objectId);
14371455
break;
14381456

1439-
caseOCLASS_SCHEMA:
1440-
RemoveSchemaById(object->objectId);
1441-
break;
1442-
14431457
caseOCLASS_STATISTIC_EXT:
14441458
RemoveStatisticsById(object->objectId);
14451459
break;
14461460

1447-
caseOCLASS_TSPARSER:
1448-
RemoveTSParserById(object->objectId);
1449-
break;
1450-
1451-
caseOCLASS_TSDICT:
1452-
RemoveTSDictionaryById(object->objectId);
1453-
break;
1454-
1455-
caseOCLASS_TSTEMPLATE:
1456-
RemoveTSTemplateById(object->objectId);
1457-
break;
1458-
14591461
caseOCLASS_TSCONFIG:
14601462
RemoveTSConfigurationById(object->objectId);
14611463
break;
14621464

1463-
/*
1464-
* OCLASS_ROLE, OCLASS_DATABASE, OCLASS_TBLSPACE intentionally not
1465-
* handled here
1466-
*/
1467-
1468-
caseOCLASS_FDW:
1469-
RemoveForeignDataWrapperById(object->objectId);
1470-
break;
1471-
1472-
caseOCLASS_FOREIGN_SERVER:
1473-
RemoveForeignServerById(object->objectId);
1474-
break;
1475-
1476-
caseOCLASS_USER_MAPPING:
1477-
RemoveUserMappingById(object->objectId);
1478-
break;
1479-
1480-
caseOCLASS_DEFACL:
1481-
RemoveDefaultACLById(object->objectId);
1482-
break;
1483-
14841465
caseOCLASS_EXTENSION:
14851466
RemoveExtensionById(object->objectId);
14861467
break;
14871468

1488-
caseOCLASS_EVENT_TRIGGER:
1489-
RemoveEventTriggerById(object->objectId);
1490-
break;
1491-
14921469
caseOCLASS_POLICY:
14931470
RemovePolicyById(object->objectId);
14941471
break;
14951472

1496-
caseOCLASS_PUBLICATION:
1497-
RemovePublicationById(object->objectId);
1498-
break;
1499-
15001473
caseOCLASS_PUBLICATION_REL:
15011474
RemovePublicationRelById(object->objectId);
15021475
break;
15031476

1477+
caseOCLASS_CAST:
1478+
caseOCLASS_COLLATION:
1479+
caseOCLASS_CONVERSION:
1480+
caseOCLASS_LANGUAGE:
1481+
caseOCLASS_OPCLASS:
1482+
caseOCLASS_OPFAMILY:
1483+
caseOCLASS_AM:
1484+
caseOCLASS_AMOP:
1485+
caseOCLASS_AMPROC:
1486+
caseOCLASS_SCHEMA:
1487+
caseOCLASS_TSPARSER:
1488+
caseOCLASS_TSDICT:
1489+
caseOCLASS_TSTEMPLATE:
1490+
caseOCLASS_FDW:
1491+
caseOCLASS_FOREIGN_SERVER:
1492+
caseOCLASS_USER_MAPPING:
1493+
caseOCLASS_DEFACL:
1494+
caseOCLASS_EVENT_TRIGGER:
1495+
caseOCLASS_PUBLICATION:
15041496
caseOCLASS_TRANSFORM:
1505-
DropTransformById(object->objectId);
1497+
DropObjectById(object);
15061498
break;
15071499

15081500
/*

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp