From aca992040951c7665f1701cd25d48808eda7a809 Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Thu, 17 Nov 2022 07:08:44 +0100 Subject: [PATCH] Update some more ObjectType switch statements to not have default This allows the compiler to complain if a case has been missed. In these instances, the tradeoff of having to list a few unneeded cases to silence the compiler seems better than the risk of actually missing one. Discussion: https://www.postgresql.org/message-id/flat/fce5c98a-45da-19e7-dad0-21096bccd66e%40enterprisedb.com --- src/backend/catalog/objectaddress.c | 26 +++++++++++-------- src/backend/commands/dropcmds.c | 39 +++++++++++++++++++++++++++-- 2 files changed, 53 insertions(+), 12 deletions(-) diff --git a/src/backend/catalog/objectaddress.c b/src/backend/catalog/objectaddress.c index 9dad77c28a..fe97fbf79d 100644 --- a/src/backend/catalog/objectaddress.c +++ b/src/backend/catalog/objectaddress.c @@ -960,7 +960,7 @@ ObjectAddress get_object_address(ObjectType objtype, Node *object, Relation *relp, LOCKMODE lockmode, bool missing_ok) { - ObjectAddress address; + ObjectAddress address = {InvalidOid, InvalidOid, 0}; ObjectAddress old_address = {InvalidOid, InvalidOid, 0}; Relation relation = NULL; uint64 inval_count; @@ -991,6 +991,7 @@ get_object_address(ObjectType objtype, Node *object, &relation, lockmode, missing_ok); break; + case OBJECT_ATTRIBUTE: case OBJECT_COLUMN: address = get_object_address_attribute(objtype, castNode(List, object), @@ -1163,14 +1164,12 @@ get_object_address(ObjectType objtype, Node *object, missing_ok); address.objectSubId = 0; break; - default: - elog(ERROR, "unrecognized object type: %d", (int) objtype); - /* placate compiler, in case it thinks elog might return */ - address.classId = InvalidOid; - address.objectId = InvalidOid; - address.objectSubId = 0; + /* no default, to let compiler warn about missing case */ } + if (!address.classId) + elog(ERROR, "unrecognized object type: %d", (int) objtype); + /* * If we could not find the supplied object, return without locking. */ @@ -2571,9 +2570,16 @@ check_object_ownership(Oid roleid, ObjectType objtype, ObjectAddress address, (errcode(ERRCODE_INSUFFICIENT_PRIVILEGE), errmsg("must be superuser"))); break; - default: - elog(ERROR, "unrecognized object type: %d", - (int) objtype); + case OBJECT_AMOP: + case OBJECT_AMPROC: + case OBJECT_DEFAULT: + case OBJECT_DEFACL: + case OBJECT_PUBLICATION_NAMESPACE: + case OBJECT_PUBLICATION_REL: + case OBJECT_USER_MAPPING: + /* These are currently not supported or don't make sense here. */ + elog(ERROR, "unsupported object type: %d", (int) objtype); + break; } } diff --git a/src/backend/commands/dropcmds.c b/src/backend/commands/dropcmds.c index 389fc6a102..db906f530e 100644 --- a/src/backend/commands/dropcmds.c +++ b/src/backend/commands/dropcmds.c @@ -481,10 +481,45 @@ does_not_exist_skipping(ObjectType objtype, Node *object) msg = gettext_noop("publication \"%s\" does not exist, skipping"); name = strVal(object); break; - default: - elog(ERROR, "unrecognized object type: %d", (int) objtype); + + case OBJECT_COLUMN: + case OBJECT_DATABASE: + case OBJECT_FOREIGN_TABLE: + case OBJECT_INDEX: + case OBJECT_MATVIEW: + case OBJECT_ROLE: + case OBJECT_SEQUENCE: + case OBJECT_SUBSCRIPTION: + case OBJECT_TABLE: + case OBJECT_TABLESPACE: + case OBJECT_VIEW: + /* + * These are handled elsewhere, so if someone gets here the code + * is probably wrong or should be revisited. + */ + elog(ERROR, "unsupported object type: %d", (int) objtype); break; + + case OBJECT_AMOP: + case OBJECT_AMPROC: + case OBJECT_ATTRIBUTE: + case OBJECT_DEFAULT: + case OBJECT_DEFACL: + case OBJECT_DOMCONSTRAINT: + case OBJECT_LARGEOBJECT: + case OBJECT_PARAMETER_ACL: + case OBJECT_PUBLICATION_NAMESPACE: + case OBJECT_PUBLICATION_REL: + case OBJECT_TABCONSTRAINT: + case OBJECT_USER_MAPPING: + /* These are currently not used or needed. */ + elog(ERROR, "unsupported object type: %d", (int) objtype); + break; + + /* no default, to let compiler warn about missing case */ } + if (!msg) + elog(ERROR, "unrecognized object type: %d", (int) objtype); if (!args) ereport(NOTICE, (errmsg(msg, name)));