Update some more ObjectType switch statements to not have default
authorPeter Eisentraut <peter@eisentraut.org>
Thu, 17 Nov 2022 06:08:44 +0000 (07:08 +0100)
committerPeter Eisentraut <peter@eisentraut.org>
Thu, 17 Nov 2022 06:12:37 +0000 (07:12 +0100)
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
src/backend/commands/dropcmds.c

index 9dad77c28ac6abbdbb47c9e6c6075454ba22c317..fe97fbf79dcdda2b49839a829357bb035172c54c 100644 (file)
@@ -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;
    }
 }
 
index 389fc6a102cf6ce103bbf9945943a56be5d87ae7..db906f530ec04c6b9375d7fa4eac0a5ff68e121b 100644 (file)
@@ -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)));