The relkind check in DefineIndex has grown into an ugly rats nest of
'if' statements. I propose to change it into a switch, as per the
attached.
--
Álvaro Herrerahttps://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services
>From 1a7420321f7f48bbc87dfdd38ba10fa57c6513da Mon Sep 17 00:00:00 2001
From: Alvaro Herrera
Date: Fri, 13 Oct 2017 17:56:44 +0200
Subject: [PATCH] reword kind check using switch
---
src/backend/commands/indexcmds.c | 19 +--
1 file changed, 9 insertions(+), 10 deletions(-)
diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c
index b61aaac284..3f615b6260 100644
--- a/src/backend/commands/indexcmds.c
+++ b/src/backend/commands/indexcmds.c
@@ -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",
--
2.11.0
--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers