]> git.ipfire.org Git - thirdparty/postgresql.git/commitdiff
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)));