From 1215ad6ed96501130fb650141de69ed3fb339c94 Mon Sep 17 00:00:00 2001
From: Masahiro Ikeda <ikedamsh@oss.nttdata.com>
Date: Thu, 29 May 2025 10:59:04 +0900
Subject: [PATCH v4 3/3] Improve index_checkable() in amcheck

Refactor the function and use more appropriate error codes.
---
 contrib/amcheck/verify_common.c | 18 ++++++------------
 1 file changed, 6 insertions(+), 12 deletions(-)

diff --git a/contrib/amcheck/verify_common.c b/contrib/amcheck/verify_common.c
index cbbc8420f96..22dda9afddd 100644
--- a/contrib/amcheck/verify_common.c
+++ b/contrib/amcheck/verify_common.c
@@ -18,6 +18,7 @@
 #include "verify_common.h"
 #include "catalog/index.h"
 #include "catalog/pg_am.h"
+#include "commands/defrem.h"
 #include "commands/tablecmds.h"
 #include "utils/guc.h"
 #include "utils/syscache.h"
@@ -160,23 +161,16 @@ index_checkable(Relation rel, Oid am_id)
 {
 	if (rel->rd_rel->relkind != RELKIND_INDEX)
 		ereport(ERROR,
-				(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
+				(errcode(ERRCODE_WRONG_OBJECT_TYPE),
 				 errmsg("expected index as targets for verification"),
 				 errdetail_relkind_not_supported(rel->rd_rel->relkind)));
 
 	if (rel->rd_rel->relam != am_id)
-	{
-		HeapTuple	amtup;
-		HeapTuple	amtuprel;
-
-		amtup = SearchSysCache1(AMOID, ObjectIdGetDatum(am_id));
-		amtuprel = SearchSysCache1(AMOID, ObjectIdGetDatum(rel->rd_rel->relam));
 		ereport(ERROR,
-				(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
-				 errmsg("expected \"%s\" index as targets for verification", NameStr(((Form_pg_am) GETSTRUCT(amtup))->amname)),
+				(errcode(ERRCODE_WRONG_OBJECT_TYPE),
+				 errmsg("expected \"%s\" index as targets for verification", get_am_name(am_id)),
 				 errdetail("Relation \"%s\" is a %s index.",
-						   RelationGetRelationName(rel), NameStr(((Form_pg_am) GETSTRUCT(amtuprel))->amname))));
-	}
+						   RelationGetRelationName(rel), get_am_name(rel->rd_rel->relam))));
 
 	if (RELATION_IS_OTHER_TEMP(rel))
 		ereport(ERROR,
@@ -187,7 +181,7 @@ index_checkable(Relation rel, Oid am_id)
 
 	if (!rel->rd_index->indisvalid)
 		ereport(ERROR,
-				(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
+				(errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),
 				 errmsg("cannot check index \"%s\"",
 						RelationGetRelationName(rel)),
 				 errdetail("Index is not valid.")));
-- 
2.34.1

