From 41ce96eefde3baa2427404ab42fe19406ff38e7a Mon Sep 17 00:00:00 2001
From: Andrey Borodin <amborodin@acm.org>
Date: Wed, 28 Mar 2018 13:49:51 +0500
Subject: [PATCH 1/3] Tests of covering indexes in amcheck

---
 contrib/amcheck/expected/check_btree.out | 17 +++++++++++++++++
 contrib/amcheck/sql/check_btree.sql      |  8 ++++++++
 2 files changed, 25 insertions(+)

diff --git a/contrib/amcheck/expected/check_btree.out b/contrib/amcheck/expected/check_btree.out
index df3741e2c9..247a082d48 100644
--- a/contrib/amcheck/expected/check_btree.out
+++ b/contrib/amcheck/expected/check_btree.out
@@ -1,10 +1,13 @@
 -- minimal test, basically just verifying that amcheck
 CREATE TABLE bttest_a(id int8);
 CREATE TABLE bttest_b(id int8);
+CREATE TABLE bttest_c(id int8, payload1 text, payload2 int8);
 INSERT INTO bttest_a SELECT * FROM generate_series(1, 100000);
 INSERT INTO bttest_b SELECT * FROM generate_series(100000, 1, -1);
+INSERT INTO bttest_c SELECT id, id::text payload1,id payload2 FROM generate_series(1, 100000) id;
 CREATE INDEX bttest_a_idx ON bttest_a USING btree (id);
 CREATE INDEX bttest_b_idx ON bttest_b USING btree (id);
+CREATE INDEX bttest_c_idx ON bttest_c (id) INCLUDE (payload1, payload2);
 CREATE ROLE bttest_role;
 -- verify permissions are checked (error due to function not callable)
 SET ROLE bttest_role;
@@ -85,8 +88,22 @@ WHERE relation = ANY(ARRAY['bttest_a', 'bttest_a_idx', 'bttest_b', 'bttest_b_idx
 (0 rows)
 
 COMMIT;
+--check covering index
+SELECT bt_index_check('bttest_c_idx');
+ bt_index_check 
+----------------
+ 
+(1 row)
+
+SELECT bt_index_parent_check('bttest_c_idx');
+ bt_index_parent_check 
+-----------------------
+ 
+(1 row)
+
 -- cleanup
 DROP TABLE bttest_a;
 DROP TABLE bttest_b;
+DROP TABLE bttest_c;
 DROP OWNED BY bttest_role; -- permissions
 DROP ROLE bttest_role;
diff --git a/contrib/amcheck/sql/check_btree.sql b/contrib/amcheck/sql/check_btree.sql
index fd90531027..e8fdd7e805 100644
--- a/contrib/amcheck/sql/check_btree.sql
+++ b/contrib/amcheck/sql/check_btree.sql
@@ -1,12 +1,15 @@
 -- minimal test, basically just verifying that amcheck
 CREATE TABLE bttest_a(id int8);
 CREATE TABLE bttest_b(id int8);
+CREATE TABLE bttest_c(id int8, payload1 text, payload2 int8);
 
 INSERT INTO bttest_a SELECT * FROM generate_series(1, 100000);
 INSERT INTO bttest_b SELECT * FROM generate_series(100000, 1, -1);
+INSERT INTO bttest_c SELECT id, id::text payload1,id payload2 FROM generate_series(1, 100000) id;
 
 CREATE INDEX bttest_a_idx ON bttest_a USING btree (id);
 CREATE INDEX bttest_b_idx ON bttest_b USING btree (id);
+CREATE INDEX bttest_c_idx ON bttest_c (id) INCLUDE (payload1, payload2);
 
 CREATE ROLE bttest_role;
 
@@ -54,8 +57,13 @@ WHERE relation = ANY(ARRAY['bttest_a', 'bttest_a_idx', 'bttest_b', 'bttest_b_idx
     AND pid = pg_backend_pid();
 COMMIT;
 
+--check covering index
+SELECT bt_index_check('bttest_c_idx');
+SELECT bt_index_parent_check('bttest_c_idx');
+
 -- cleanup
 DROP TABLE bttest_a;
 DROP TABLE bttest_b;
+DROP TABLE bttest_c;
 DROP OWNED BY bttest_role; -- permissions
 DROP ROLE bttest_role;
-- 
2.14.3 (Apple Git-98)

