From 148740118b24096dd18e606a34ff2895e4c1ac82 Mon Sep 17 00:00:00 2001 From: Junwang Zhao Date: Thu, 21 Jul 2022 16:22:17 +0800 Subject: [PATCH v2] Eliminate duplicate code in table.c Author: Junwang Zhao --- src/backend/access/table/table.c | 74 ++++++++++++-------------------- 1 file changed, 28 insertions(+), 46 deletions(-) diff --git a/src/backend/access/table/table.c b/src/backend/access/table/table.c index 744d3b550b..9140a824d7 100644 --- a/src/backend/access/table/table.c +++ b/src/backend/access/table/table.c @@ -25,6 +25,7 @@ #include "access/table.h" #include "storage/lmgr.h" +static inline void validate_object_type(Relation r); /* ---------------- * table_open - open a table relation by relation OID @@ -42,22 +43,11 @@ table_open(Oid relationId, LOCKMODE lockmode) r = relation_open(relationId, lockmode); - if (r->rd_rel->relkind == RELKIND_INDEX || - r->rd_rel->relkind == RELKIND_PARTITIONED_INDEX) - ereport(ERROR, - (errcode(ERRCODE_WRONG_OBJECT_TYPE), - errmsg("\"%s\" is an index", - RelationGetRelationName(r)))); - else if (r->rd_rel->relkind == RELKIND_COMPOSITE_TYPE) - ereport(ERROR, - (errcode(ERRCODE_WRONG_OBJECT_TYPE), - errmsg("\"%s\" is a composite type", - RelationGetRelationName(r)))); + validate_object_type(r); return r; } - /* ---------------- * try_table_open - open a table relation by relation OID * @@ -76,17 +66,7 @@ try_table_open(Oid relationId, LOCKMODE lockmode) if (!r) return NULL; - if (r->rd_rel->relkind == RELKIND_INDEX || - r->rd_rel->relkind == RELKIND_PARTITIONED_INDEX) - ereport(ERROR, - (errcode(ERRCODE_WRONG_OBJECT_TYPE), - errmsg("\"%s\" is an index", - RelationGetRelationName(r)))); - else if (r->rd_rel->relkind == RELKIND_COMPOSITE_TYPE) - ereport(ERROR, - (errcode(ERRCODE_WRONG_OBJECT_TYPE), - errmsg("\"%s\" is a composite type", - RelationGetRelationName(r)))); + validate_object_type(r); return r; } @@ -105,17 +85,7 @@ table_openrv(const RangeVar *relation, LOCKMODE lockmode) r = relation_openrv(relation, lockmode); - if (r->rd_rel->relkind == RELKIND_INDEX || - r->rd_rel->relkind == RELKIND_PARTITIONED_INDEX) - ereport(ERROR, - (errcode(ERRCODE_WRONG_OBJECT_TYPE), - errmsg("\"%s\" is an index", - RelationGetRelationName(r)))); - else if (r->rd_rel->relkind == RELKIND_COMPOSITE_TYPE) - ereport(ERROR, - (errcode(ERRCODE_WRONG_OBJECT_TYPE), - errmsg("\"%s\" is a composite type", - RelationGetRelationName(r)))); + validate_object_type(r); return r; } @@ -138,17 +108,7 @@ table_openrv_extended(const RangeVar *relation, LOCKMODE lockmode, if (r) { - if (r->rd_rel->relkind == RELKIND_INDEX || - r->rd_rel->relkind == RELKIND_PARTITIONED_INDEX) - ereport(ERROR, - (errcode(ERRCODE_WRONG_OBJECT_TYPE), - errmsg("\"%s\" is an index", - RelationGetRelationName(r)))); - else if (r->rd_rel->relkind == RELKIND_COMPOSITE_TYPE) - ereport(ERROR, - (errcode(ERRCODE_WRONG_OBJECT_TYPE), - errmsg("\"%s\" is a composite type", - RelationGetRelationName(r)))); + validate_object_type(r); } return r; @@ -161,10 +121,32 @@ table_openrv_extended(const RangeVar *relation, LOCKMODE lockmode, * * Note that it is often sensible to hold a lock beyond relation_close; * in that case, the lock is released automatically at xact end. - * ---------------- + * ---------------- */ void table_close(Relation relation, LOCKMODE lockmode) { relation_close(relation, lockmode); } + +/* ---------------- + * validate_object_type - check the relation's kind + * + * Make sure relkind is not index or composite type + * ---------------- + */ +static inline void +validate_object_type(Relation r) +{ + if (r->rd_rel->relkind == RELKIND_INDEX || + r->rd_rel->relkind == RELKIND_PARTITIONED_INDEX) + ereport(ERROR, + (errcode(ERRCODE_WRONG_OBJECT_TYPE), + errmsg("\"%s\" is an index", + RelationGetRelationName(r)))); + else if (r->rd_rel->relkind == RELKIND_COMPOSITE_TYPE) + ereport(ERROR, + (errcode(ERRCODE_WRONG_OBJECT_TYPE), + errmsg("\"%s\" is a composite type", + RelationGetRelationName(r)))); +} -- 2.36.1