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
This commit is contained in:
Peter Eisentraut 2022-11-17 07:08:44 +01:00
parent adaf34241a
commit aca9920409
2 changed files with 53 additions and 12 deletions

View File

@ -960,7 +960,7 @@ ObjectAddress
get_object_address(ObjectType objtype, Node *object, get_object_address(ObjectType objtype, Node *object,
Relation *relp, LOCKMODE lockmode, bool missing_ok) Relation *relp, LOCKMODE lockmode, bool missing_ok)
{ {
ObjectAddress address; ObjectAddress address = {InvalidOid, InvalidOid, 0};
ObjectAddress old_address = {InvalidOid, InvalidOid, 0}; ObjectAddress old_address = {InvalidOid, InvalidOid, 0};
Relation relation = NULL; Relation relation = NULL;
uint64 inval_count; uint64 inval_count;
@ -991,6 +991,7 @@ get_object_address(ObjectType objtype, Node *object,
&relation, lockmode, &relation, lockmode,
missing_ok); missing_ok);
break; break;
case OBJECT_ATTRIBUTE:
case OBJECT_COLUMN: case OBJECT_COLUMN:
address = address =
get_object_address_attribute(objtype, castNode(List, object), get_object_address_attribute(objtype, castNode(List, object),
@ -1163,14 +1164,12 @@ get_object_address(ObjectType objtype, Node *object,
missing_ok); missing_ok);
address.objectSubId = 0; address.objectSubId = 0;
break; break;
default: /* no default, to let compiler warn about missing case */
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;
} }
if (!address.classId)
elog(ERROR, "unrecognized object type: %d", (int) objtype);
/* /*
* If we could not find the supplied object, return without locking. * 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), (errcode(ERRCODE_INSUFFICIENT_PRIVILEGE),
errmsg("must be superuser"))); errmsg("must be superuser")));
break; break;
default: case OBJECT_AMOP:
elog(ERROR, "unrecognized object type: %d", case OBJECT_AMPROC:
(int) objtype); 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;
} }
} }

View File

@ -481,10 +481,45 @@ does_not_exist_skipping(ObjectType objtype, Node *object)
msg = gettext_noop("publication \"%s\" does not exist, skipping"); msg = gettext_noop("publication \"%s\" does not exist, skipping");
name = strVal(object); name = strVal(object);
break; 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; 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) if (!args)
ereport(NOTICE, (errmsg(msg, name))); ereport(NOTICE, (errmsg(msg, name)));