diff options
author | Amit Kapila <akapila@postgresql.org> | 2022-07-26 08:22:53 +0530 |
---|---|---|
committer | Amit Kapila <akapila@postgresql.org> | 2022-07-26 08:22:53 +0530 |
commit | 857dd353480d98f920099ee0b73da178c197c13d (patch) | |
tree | 50495415c64d16337e6e310edf3e8b291a53b531 /src | |
parent | 0a5f06b84de76939cf9805e4266d47c2e8bf66df (diff) | |
download | postgresql-857dd353480d98f920099ee0b73da178c197c13d.tar.gz postgresql-857dd353480d98f920099ee0b73da178c197c13d.zip |
Eliminate duplicate code in table.c.
Additionally improve the error message similar to how it was done in
2ed532ee8c.
Author: Junwang Zhao, Aleksander Alekseev
Reviewed-by: Amit Kapila, Alvaro Herrera, Kyotaro Horiguchi
Discussion: https://postgr.es/m/CAEG8a3KbVtBm_BYf5tGsKHvmMieQVsq_jBPOg75VViQB7ACL8Q%40mail.gmail.com
Diffstat (limited to 'src')
-rw-r--r-- | src/backend/access/table/table.c | 70 | ||||
-rw-r--r-- | src/test/regress/expected/tid.out | 3 |
2 files changed, 26 insertions, 47 deletions
diff --git a/src/backend/access/table/table.c b/src/backend/access/table/table.c index 744d3b550b3..7e94232f011 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_relation_kind(Relation r); /* ---------------- * table_open - open a table relation by relation OID @@ -42,17 +43,7 @@ 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_relation_kind(r); return r; } @@ -76,17 +67,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_relation_kind(r); return r; } @@ -105,17 +86,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_relation_kind(r); return r; } @@ -137,19 +108,7 @@ table_openrv_extended(const RangeVar *relation, LOCKMODE lockmode, r = relation_openrv_extended(relation, lockmode, missing_ok); 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_relation_kind(r); return r; } @@ -168,3 +127,22 @@ table_close(Relation relation, LOCKMODE lockmode) { relation_close(relation, lockmode); } + +/* ---------------- + * validate_relation_kind - check the relation's kind + * + * Make sure relkind is not index or composite type + * ---------------- + */ +static inline void +validate_relation_kind(Relation r) +{ + if (r->rd_rel->relkind == RELKIND_INDEX || + r->rd_rel->relkind == RELKIND_PARTITIONED_INDEX || + r->rd_rel->relkind == RELKIND_COMPOSITE_TYPE) + ereport(ERROR, + (errcode(ERRCODE_WRONG_OBJECT_TYPE), + errmsg("cannot open relation \"%s\"", + RelationGetRelationName(r)), + errdetail_relkind_not_supported(r->rd_rel->relkind))); +} diff --git a/src/test/regress/expected/tid.out b/src/test/regress/expected/tid.out index 7d8957bd6f7..8cd6d605952 100644 --- a/src/test/regress/expected/tid.out +++ b/src/test/regress/expected/tid.out @@ -61,7 +61,8 @@ DROP SEQUENCE tid_seq; -- Index, fails with incorrect relation type CREATE INDEX tid_ind ON tid_tab(a); SELECT currtid2('tid_ind'::text, '(0,1)'::tid); -- fails -ERROR: "tid_ind" is an index +ERROR: cannot open relation "tid_ind" +DETAIL: This operation is not supported for indexes. DROP INDEX tid_ind; -- Partitioned table, no storage CREATE TABLE tid_part (a int) PARTITION BY RANGE (a); |