diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2017-05-14 13:32:59 -0400 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2017-05-14 13:32:59 -0400 |
commit | e84c0195980f24b1c7f857b88834c1dcaf20a102 (patch) | |
tree | 7d5e76f461d2d53116851d04f4ba7b9e8510a7e5 /src/backend/commands/event_trigger.c | |
parent | b5b0db19b895f033ada35bc7c337183be7356977 (diff) |
Fix maintenance hazards caused by ill-considered use of default: cases.
Remove default cases from assorted switches over ObjectClass and some
related enum types, so that we'll get compiler warnings when someone
adds a new enum value without accounting for it in all these places.
In passing, re-order some switch cases as needed to match the declaration
of enum ObjectClass. OK, that's just neatnik-ism, but I dislike code
that looks like it was assembled with the help of a dartboard.
Discussion: https://postgr.es/m/20170512221010.nglatgt5azzdxjlj@alvherre.pgsql
Diffstat (limited to 'src/backend/commands/event_trigger.c')
-rw-r--r-- | src/backend/commands/event_trigger.c | 75 |
1 files changed, 54 insertions, 21 deletions
diff --git a/src/backend/commands/event_trigger.c b/src/backend/commands/event_trigger.c index d7c199f3144..d1983257c2f 100644 --- a/src/backend/commands/event_trigger.c +++ b/src/backend/commands/event_trigger.c @@ -1122,8 +1122,15 @@ EventTriggerSupportsObjectType(ObjectType obtype) case OBJECT_USER_MAPPING: case OBJECT_VIEW: return true; + + /* + * There's intentionally no default: case here; we want the + * compiler to warn if a new ObjectType hasn't been handled above. + */ } - return true; + + /* Shouldn't get here, but if we do, say "no support" */ + return false; } /* @@ -1155,12 +1162,13 @@ EventTriggerSupportsObjectClass(ObjectClass objclass) case OCLASS_OPERATOR: case OCLASS_OPCLASS: case OCLASS_OPFAMILY: + case OCLASS_AM: case OCLASS_AMOP: case OCLASS_AMPROC: case OCLASS_REWRITE: case OCLASS_TRIGGER: case OCLASS_SCHEMA: - case OCLASS_TRANSFORM: + case OCLASS_STATISTIC_EXT: case OCLASS_TSPARSER: case OCLASS_TSDICT: case OCLASS_TSTEMPLATE: @@ -1171,15 +1179,20 @@ EventTriggerSupportsObjectClass(ObjectClass objclass) case OCLASS_DEFACL: case OCLASS_EXTENSION: case OCLASS_POLICY: - case OCLASS_AM: case OCLASS_PUBLICATION: case OCLASS_PUBLICATION_REL: case OCLASS_SUBSCRIPTION: - case OCLASS_STATISTIC_EXT: + case OCLASS_TRANSFORM: return true; + + /* + * There's intentionally no default: case here; we want the + * compiler to warn if a new OCLASS hasn't been handled above. + */ } - return true; + /* Shouldn't get here, but if we do, say "no support" */ + return false; } bool @@ -1204,10 +1217,15 @@ EventTriggerSupportsGrantObjectType(GrantObjectType objtype) case ACL_OBJECT_NAMESPACE: case ACL_OBJECT_TYPE: return true; - default: - Assert(false); - return true; + + /* + * There's intentionally no default: case here; we want the + * compiler to warn if a new ACL class hasn't been handled above. + */ } + + /* Shouldn't get here, but if we do, say "no support" */ + return false; } /* @@ -2229,35 +2247,50 @@ stringify_grantobjtype(GrantObjectType objtype) return "TABLESPACE"; case ACL_OBJECT_TYPE: return "TYPE"; - default: - elog(ERROR, "unrecognized type %d", objtype); - return "???"; /* keep compiler quiet */ } + + elog(ERROR, "unrecognized grant object type: %d", (int) objtype); + return "???"; /* keep compiler quiet */ } /* * Return the GrantObjectType as a string; as above, but use the spelling - * in ALTER DEFAULT PRIVILEGES commands instead. + * in ALTER DEFAULT PRIVILEGES commands instead. Generally this is just + * the plural. */ static const char * stringify_adefprivs_objtype(GrantObjectType objtype) { switch (objtype) { + case ACL_OBJECT_COLUMN: + return "COLUMNS"; case ACL_OBJECT_RELATION: return "TABLES"; - break; - case ACL_OBJECT_FUNCTION: - return "FUNCTIONS"; - break; case ACL_OBJECT_SEQUENCE: return "SEQUENCES"; - break; + case ACL_OBJECT_DATABASE: + return "DATABASES"; + case ACL_OBJECT_DOMAIN: + return "DOMAINS"; + case ACL_OBJECT_FDW: + return "FOREIGN DATA WRAPPERS"; + case ACL_OBJECT_FOREIGN_SERVER: + return "FOREIGN SERVERS"; + case ACL_OBJECT_FUNCTION: + return "FUNCTIONS"; + case ACL_OBJECT_LANGUAGE: + return "LANGUAGES"; + case ACL_OBJECT_LARGEOBJECT: + return "LARGE OBJECTS"; + case ACL_OBJECT_NAMESPACE: + return "SCHEMAS"; + case ACL_OBJECT_TABLESPACE: + return "TABLESPACES"; case ACL_OBJECT_TYPE: return "TYPES"; - break; - default: - elog(ERROR, "unrecognized type %d", objtype); - return "???"; /* keep compiler quiet */ } + + elog(ERROR, "unrecognized grant object type: %d", (int) objtype); + return "???"; /* keep compiler quiet */ } |