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",