Rework DefineIndex relkind check
authorAlvaro Herrera <alvherre@alvh.no-ip.org>
Mon, 16 Oct 2017 10:22:18 +0000 (12:22 +0200)
committerAlvaro Herrera <alvherre@alvh.no-ip.org>
Mon, 16 Oct 2017 10:22:18 +0000 (12:22 +0200)
Simplify coding using a switch rather than nested if tests.

Author: Álvaro
Reviewed-by: Robert Haas, Amit Langote, Michaël Paquier
Discussion: https://postgr.es/m/20171013163820.pai7djcaxrntaxtn@alvherre.pgsql

src/backend/commands/indexcmds.c

index b61aaac28427c933c251444c647a16ab3137c317..3f615b62606ba222d036914cc71b444da0344061 100644 (file)
@@ -375,25 +375,24 @@ DefineIndex(Oid relationId,
    relationId = RelationGetRelid(rel);
    namespaceId = RelationGetNamespace(rel);
 
-   if (rel->rd_rel->relkind != RELKIND_RELATION &&
-       rel->rd_rel->relkind != RELKIND_MATVIEW)
+   /* Ensure that it makes sense to index this kind of relation */
+   switch (rel->rd_rel->relkind)
    {
-       if (rel->rd_rel->relkind == RELKIND_FOREIGN_TABLE)
-
-           /*
-            * Custom error message for FOREIGN TABLE since the term is close
-            * to a regular table and can confuse the user.
-            */
+       case RELKIND_RELATION:
+       case RELKIND_MATVIEW:
+           /* OK */
+           break;
+       case RELKIND_FOREIGN_TABLE:
            ereport(ERROR,
                    (errcode(ERRCODE_WRONG_OBJECT_TYPE),
                     errmsg("cannot create index on foreign table \"%s\"",
                            RelationGetRelationName(rel))));
-       else if (rel->rd_rel->relkind == RELKIND_PARTITIONED_TABLE)
+       case RELKIND_PARTITIONED_TABLE:
            ereport(ERROR,
                    (errcode(ERRCODE_WRONG_OBJECT_TYPE),
                     errmsg("cannot create index on partitioned table \"%s\"",
                            RelationGetRelationName(rel))));
-       else
+       default:
            ereport(ERROR,
                    (errcode(ERRCODE_WRONG_OBJECT_TYPE),
                     errmsg("\"%s\" is not a table or materialized view",