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

Commit89e5ef7

Browse files
committed
Remove ObjectClass type
ObjectClass is an enum whose values correspond to catalog OIDs. Butthe extra layer of redirection, which is used only in small parts ofthe code, and the similarity to ObjectType, are confusing andcumbersome.One advantage has been that some switches processing the OCLASS enumdon't have "default:" cases. This is so that the compiler tells uswhen we fail to add support for some new object class. But you canalso handle that with some assertions and proper test coverage. It'snot even clear how strong this benefit is. For example, inAlterObjectNamespace_oid(), you could still put a new OCLASS into the"ignore object types that don't have schema-qualified names" case, andit might or might not be wrong. Also, there are already variousOCLASS switches that do have a default case, so it's not even clearwhat the preferred coding style should be.Reviewed-by: jian he <jian.universality@gmail.com>Reviewed-by: Michael Paquier <michael@paquier.xyz>Discussion:https://www.postgresql.org/message-id/flat/CAGECzQT3caUbcCcszNewCCmMbCuyP7XNAm60J3ybd6PN5kH2Dw%40mail.gmail.com
1 parent8c4f2d5 commit89e5ef7

File tree

8 files changed

+233
-641
lines changed

8 files changed

+233
-641
lines changed

‎src/backend/catalog/dependency.c

Lines changed: 45 additions & 194 deletions
Original file line numberDiff line numberDiff line change
@@ -206,7 +206,7 @@ deleteObjectsInList(ObjectAddresses *targetObjects, Relation *depRel,
206206
if (extra->flags&DEPFLAG_REVERSE)
207207
normal= true;
208208

209-
if (EventTriggerSupportsObjectClass(getObjectClass(thisobj)))
209+
if (EventTriggerSupportsObject(thisobj))
210210
{
211211
EventTriggerSQLDropAddObject(thisobj,original,normal);
212212
}
@@ -1349,9 +1349,9 @@ deleteOneObject(const ObjectAddress *object, Relation *depRel, int flags)
13491349
staticvoid
13501350
doDeletion(constObjectAddress*object,intflags)
13511351
{
1352-
switch (getObjectClass(object))
1352+
switch (object->classId)
13531353
{
1354-
caseOCLASS_CLASS:
1354+
caseRelationRelationId:
13551355
{
13561356
charrelKind=get_rel_relkind(object->objectId);
13571357

@@ -1382,104 +1382,102 @@ doDeletion(const ObjectAddress *object, int flags)
13821382
break;
13831383
}
13841384

1385-
caseOCLASS_PROC:
1385+
caseProcedureRelationId:
13861386
RemoveFunctionById(object->objectId);
13871387
break;
13881388

1389-
caseOCLASS_TYPE:
1389+
caseTypeRelationId:
13901390
RemoveTypeById(object->objectId);
13911391
break;
13921392

1393-
caseOCLASS_CONSTRAINT:
1393+
caseConstraintRelationId:
13941394
RemoveConstraintById(object->objectId);
13951395
break;
13961396

1397-
caseOCLASS_DEFAULT:
1397+
caseAttrDefaultRelationId:
13981398
RemoveAttrDefaultById(object->objectId);
13991399
break;
14001400

1401-
caseOCLASS_LARGEOBJECT:
1401+
caseLargeObjectRelationId:
14021402
LargeObjectDrop(object->objectId);
14031403
break;
14041404

1405-
caseOCLASS_OPERATOR:
1405+
caseOperatorRelationId:
14061406
RemoveOperatorById(object->objectId);
14071407
break;
14081408

1409-
caseOCLASS_REWRITE:
1409+
caseRewriteRelationId:
14101410
RemoveRewriteRuleById(object->objectId);
14111411
break;
14121412

1413-
caseOCLASS_TRIGGER:
1413+
caseTriggerRelationId:
14141414
RemoveTriggerById(object->objectId);
14151415
break;
14161416

1417-
caseOCLASS_STATISTIC_EXT:
1417+
caseStatisticExtRelationId:
14181418
RemoveStatisticsById(object->objectId);
14191419
break;
14201420

1421-
caseOCLASS_TSCONFIG:
1421+
caseTSConfigRelationId:
14221422
RemoveTSConfigurationById(object->objectId);
14231423
break;
14241424

1425-
caseOCLASS_EXTENSION:
1425+
caseExtensionRelationId:
14261426
RemoveExtensionById(object->objectId);
14271427
break;
14281428

1429-
caseOCLASS_POLICY:
1429+
casePolicyRelationId:
14301430
RemovePolicyById(object->objectId);
14311431
break;
14321432

1433-
caseOCLASS_PUBLICATION_NAMESPACE:
1433+
casePublicationNamespaceRelationId:
14341434
RemovePublicationSchemaById(object->objectId);
14351435
break;
14361436

1437-
caseOCLASS_PUBLICATION_REL:
1437+
casePublicationRelRelationId:
14381438
RemovePublicationRelById(object->objectId);
14391439
break;
14401440

1441-
caseOCLASS_PUBLICATION:
1441+
casePublicationRelationId:
14421442
RemovePublicationById(object->objectId);
14431443
break;
14441444

1445-
caseOCLASS_CAST:
1446-
caseOCLASS_COLLATION:
1447-
caseOCLASS_CONVERSION:
1448-
caseOCLASS_LANGUAGE:
1449-
caseOCLASS_OPCLASS:
1450-
caseOCLASS_OPFAMILY:
1451-
caseOCLASS_AM:
1452-
caseOCLASS_AMOP:
1453-
caseOCLASS_AMPROC:
1454-
caseOCLASS_SCHEMA:
1455-
caseOCLASS_TSPARSER:
1456-
caseOCLASS_TSDICT:
1457-
caseOCLASS_TSTEMPLATE:
1458-
caseOCLASS_FDW:
1459-
caseOCLASS_FOREIGN_SERVER:
1460-
caseOCLASS_USER_MAPPING:
1461-
caseOCLASS_DEFACL:
1462-
caseOCLASS_EVENT_TRIGGER:
1463-
caseOCLASS_TRANSFORM:
1464-
caseOCLASS_ROLE_MEMBERSHIP:
1445+
caseCastRelationId:
1446+
caseCollationRelationId:
1447+
caseConversionRelationId:
1448+
caseLanguageRelationId:
1449+
caseOperatorClassRelationId:
1450+
caseOperatorFamilyRelationId:
1451+
caseAccessMethodRelationId:
1452+
caseAccessMethodOperatorRelationId:
1453+
caseAccessMethodProcedureRelationId:
1454+
caseNamespaceRelationId:
1455+
caseTSParserRelationId:
1456+
caseTSDictionaryRelationId:
1457+
caseTSTemplateRelationId:
1458+
caseForeignDataWrapperRelationId:
1459+
caseForeignServerRelationId:
1460+
caseUserMappingRelationId:
1461+
caseDefaultAclRelationId:
1462+
caseEventTriggerRelationId:
1463+
caseTransformRelationId:
1464+
caseAuthMemRelationId:
14651465
DropObjectById(object);
14661466
break;
14671467

14681468
/*
14691469
* These global object types are not supported here.
14701470
*/
1471-
caseOCLASS_ROLE:
1472-
caseOCLASS_DATABASE:
1473-
caseOCLASS_TBLSPACE:
1474-
caseOCLASS_SUBSCRIPTION:
1475-
caseOCLASS_PARAMETER_ACL:
1471+
caseAuthIdRelationId:
1472+
caseDatabaseRelationId:
1473+
caseTableSpaceRelationId:
1474+
caseSubscriptionRelationId:
1475+
caseParameterAclRelationId:
14761476
elog(ERROR,"global objects cannot be deleted by doDeletion");
14771477
break;
14781478

1479-
/*
1480-
* There's intentionally no default: case here; we want the
1481-
* compiler to warn if a new OCLASS hasn't been handled above.
1482-
*/
1479+
default:
1480+
elog(ERROR,"unsupported object class: %u",object->classId);
14831481
}
14841482
}
14851483

@@ -2774,153 +2772,6 @@ free_object_addresses(ObjectAddresses *addrs)
27742772
pfree(addrs);
27752773
}
27762774

2777-
/*
2778-
* Determine the class of a given object identified by objectAddress.
2779-
*
2780-
* We implement it as a function instead of an array because the OIDs aren't
2781-
* consecutive.
2782-
*/
2783-
ObjectClass
2784-
getObjectClass(constObjectAddress*object)
2785-
{
2786-
/* only pg_class entries can have nonzero objectSubId */
2787-
if (object->classId!=RelationRelationId&&
2788-
object->objectSubId!=0)
2789-
elog(ERROR,"invalid non-zero objectSubId for object class %u",
2790-
object->classId);
2791-
2792-
switch (object->classId)
2793-
{
2794-
caseRelationRelationId:
2795-
/* caller must check objectSubId */
2796-
returnOCLASS_CLASS;
2797-
2798-
caseProcedureRelationId:
2799-
returnOCLASS_PROC;
2800-
2801-
caseTypeRelationId:
2802-
returnOCLASS_TYPE;
2803-
2804-
caseCastRelationId:
2805-
returnOCLASS_CAST;
2806-
2807-
caseCollationRelationId:
2808-
returnOCLASS_COLLATION;
2809-
2810-
caseConstraintRelationId:
2811-
returnOCLASS_CONSTRAINT;
2812-
2813-
caseConversionRelationId:
2814-
returnOCLASS_CONVERSION;
2815-
2816-
caseAttrDefaultRelationId:
2817-
returnOCLASS_DEFAULT;
2818-
2819-
caseLanguageRelationId:
2820-
returnOCLASS_LANGUAGE;
2821-
2822-
caseLargeObjectRelationId:
2823-
returnOCLASS_LARGEOBJECT;
2824-
2825-
caseOperatorRelationId:
2826-
returnOCLASS_OPERATOR;
2827-
2828-
caseOperatorClassRelationId:
2829-
returnOCLASS_OPCLASS;
2830-
2831-
caseOperatorFamilyRelationId:
2832-
returnOCLASS_OPFAMILY;
2833-
2834-
caseAccessMethodRelationId:
2835-
returnOCLASS_AM;
2836-
2837-
caseAccessMethodOperatorRelationId:
2838-
returnOCLASS_AMOP;
2839-
2840-
caseAccessMethodProcedureRelationId:
2841-
returnOCLASS_AMPROC;
2842-
2843-
caseRewriteRelationId:
2844-
returnOCLASS_REWRITE;
2845-
2846-
caseTriggerRelationId:
2847-
returnOCLASS_TRIGGER;
2848-
2849-
caseNamespaceRelationId:
2850-
returnOCLASS_SCHEMA;
2851-
2852-
caseStatisticExtRelationId:
2853-
returnOCLASS_STATISTIC_EXT;
2854-
2855-
caseTSParserRelationId:
2856-
returnOCLASS_TSPARSER;
2857-
2858-
caseTSDictionaryRelationId:
2859-
returnOCLASS_TSDICT;
2860-
2861-
caseTSTemplateRelationId:
2862-
returnOCLASS_TSTEMPLATE;
2863-
2864-
caseTSConfigRelationId:
2865-
returnOCLASS_TSCONFIG;
2866-
2867-
caseAuthIdRelationId:
2868-
returnOCLASS_ROLE;
2869-
2870-
caseAuthMemRelationId:
2871-
returnOCLASS_ROLE_MEMBERSHIP;
2872-
2873-
caseDatabaseRelationId:
2874-
returnOCLASS_DATABASE;
2875-
2876-
caseTableSpaceRelationId:
2877-
returnOCLASS_TBLSPACE;
2878-
2879-
caseForeignDataWrapperRelationId:
2880-
returnOCLASS_FDW;
2881-
2882-
caseForeignServerRelationId:
2883-
returnOCLASS_FOREIGN_SERVER;
2884-
2885-
caseUserMappingRelationId:
2886-
returnOCLASS_USER_MAPPING;
2887-
2888-
caseDefaultAclRelationId:
2889-
returnOCLASS_DEFACL;
2890-
2891-
caseExtensionRelationId:
2892-
returnOCLASS_EXTENSION;
2893-
2894-
caseEventTriggerRelationId:
2895-
returnOCLASS_EVENT_TRIGGER;
2896-
2897-
caseParameterAclRelationId:
2898-
returnOCLASS_PARAMETER_ACL;
2899-
2900-
casePolicyRelationId:
2901-
returnOCLASS_POLICY;
2902-
2903-
casePublicationNamespaceRelationId:
2904-
returnOCLASS_PUBLICATION_NAMESPACE;
2905-
2906-
casePublicationRelationId:
2907-
returnOCLASS_PUBLICATION;
2908-
2909-
casePublicationRelRelationId:
2910-
returnOCLASS_PUBLICATION_REL;
2911-
2912-
caseSubscriptionRelationId:
2913-
returnOCLASS_SUBSCRIPTION;
2914-
2915-
caseTransformRelationId:
2916-
returnOCLASS_TRANSFORM;
2917-
}
2918-
2919-
/* shouldn't get here */
2920-
elog(ERROR,"unrecognized object class: %u",object->classId);
2921-
returnOCLASS_CLASS;/* keep compiler quiet */
2922-
}
2923-
29242775
/*
29252776
* delete initial ACL for extension objects
29262777
*/

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp