commit 5df7e726d1b78ac4f5be3bcc0a6e25cd05a3d26e
Author: mithun <mithun@localhost.localdomain>
Date:   Mon Sep 19 14:03:26 2016 +0530

    commit-1

diff --git a/src/test/regress/expected/hash_index_split.out b/src/test/regress/expected/hash_index_split.out
new file mode 100644
index 0000000..f3d25d1
--- /dev/null
+++ b/src/test/regress/expected/hash_index_split.out
@@ -0,0 +1,79 @@
+-- 
+-- Cause some overflow insert and splits.
+--
+CREATE TABLE hash_split_heap (keycol INT);
+CREATE INDEX hash_split_index on hash_split_heap USING HASH (keycol);
+WARNING:  hash indexes are not WAL-logged and their use is discouraged
+INSERT INTO hash_split_heap VALUES (1);
+INSERT INTO hash_split_heap SELECT * from hash_split_heap;
+INSERT INTO hash_split_heap SELECT * from hash_split_heap;
+INSERT INTO hash_split_heap SELECT * from hash_split_heap;
+INSERT INTO hash_split_heap SELECT * from hash_split_heap;
+INSERT INTO hash_split_heap SELECT * from hash_split_heap;
+INSERT INTO hash_split_heap SELECT * from hash_split_heap;
+INSERT INTO hash_split_heap SELECT * from hash_split_heap;
+INSERT INTO hash_split_heap SELECT * from hash_split_heap;
+INSERT INTO hash_split_heap SELECT * from hash_split_heap;
+INSERT INTO hash_split_heap SELECT * from hash_split_heap;
+INSERT INTO hash_split_heap SELECT * from hash_split_heap;
+INSERT INTO hash_split_heap SELECT * from hash_split_heap;
+INSERT INTO hash_split_heap SELECT * from hash_split_heap;
+INSERT INTO hash_split_heap SELECT * from hash_split_heap;
+INSERT INTO hash_split_heap SELECT * from hash_split_heap;
+INSERT INTO hash_split_heap SELECT * from hash_split_heap;
+INSERT INTO hash_split_heap SELECT * from hash_split_heap LIMIT 32000;
+VACUUM FULL hash_split_heap;
+--
+-- Lets do a backward scan.
+--
+BEGIN;
+SET enable_seqscan = OFF;
+SET enable_bitmapscan = OFF;
+CREATE FUNCTION declares_cursor(int)
+   RETURNS void
+   AS 'DECLARE c CURSOR FOR SELECT * from hash_split_heap WHERE keycol = $1;'
+LANGUAGE SQL;
+SELECT declares_cursor(1);
+ declares_cursor 
+-----------------
+ 
+(1 row)
+
+MOVE FORWARD ALL FROM c;
+MOVE BACKWARD 10000 FROM c;
+MOVE BACKWARD ALL FROM c;
+ROLLBACK;
+--
+-- DELETE, INSERT, REBUILD INDEX.
+--
+DELETE FROM hash_split_heap WHERE keycol = 1;
+INSERT INTO hash_split_heap VALUES (1), (2);
+INSERT INTO hash_split_heap SELECT * from hash_split_heap;
+INSERT INTO hash_split_heap SELECT * from hash_split_heap;
+INSERT INTO hash_split_heap SELECT * from hash_split_heap;
+INSERT INTO hash_split_heap SELECT * from hash_split_heap;
+INSERT INTO hash_split_heap SELECT * from hash_split_heap;
+INSERT INTO hash_split_heap SELECT * from hash_split_heap;
+INSERT INTO hash_split_heap SELECT * from hash_split_heap;
+INSERT INTO hash_split_heap SELECT * from hash_split_heap;
+VACUUM  hash_split_heap;
+REINDEX INDEX hash_split_index;
+--
+-- Clean Up.
+--
+DROP TABLE hash_split_heap;
+--
+-- INDEX ON TEMP TABLE.
+--
+CREATE TEMP TABLE hash_temp_heap (x int, y int);
+INSERT INTO hash_temp_heap VALUES (1,1);
+CREATE INDEX hash_idx ON hash_temp_heap USING hash (x);
+DROP TABLE hash_temp_heap CASCADE;
+--
+-- Float4 type.
+--
+CREATE TABLE hash_heap_float4 (x float4, y int);
+INSERT INTO hash_heap_float4 VALUES (1.1,1);
+CREATE INDEX hash_idx ON hash_heap_float4 USING hash (x);
+WARNING:  hash indexes are not WAL-logged and their use is discouraged
+DROP TABLE hash_heap_float4 CASCADE;
diff --git a/src/test/regress/parallel_schedule b/src/test/regress/parallel_schedule
index 1cb5dfc..ada6d12 100644
--- a/src/test/regress/parallel_schedule
+++ b/src/test/regress/parallel_schedule
@@ -79,7 +79,7 @@ ignore: random
 # ----------
 # Another group of parallel tests
 # ----------
-test: select_into select_distinct select_distinct_on select_implicit select_having subselect union case join aggregates transactions random portals arrays btree_index hash_index update namespace prepared_xacts delete
+test: select_into select_distinct select_distinct_on select_implicit select_having subselect union case join aggregates transactions random portals arrays btree_index hash_index hash_index_split update namespace prepared_xacts delete
 
 # ----------
 # Another group of parallel tests
diff --git a/src/test/regress/serial_schedule b/src/test/regress/serial_schedule
index 8958d8c..37add6b 100644
--- a/src/test/regress/serial_schedule
+++ b/src/test/regress/serial_schedule
@@ -96,6 +96,7 @@ test: portals
 test: arrays
 test: btree_index
 test: hash_index
+test: hash_index_split
 test: update
 test: delete
 test: namespace
diff --git a/src/test/regress/sql/hash_index_split.sql b/src/test/regress/sql/hash_index_split.sql
new file mode 100644
index 0000000..af36df0
--- /dev/null
+++ b/src/test/regress/sql/hash_index_split.sql
@@ -0,0 +1,80 @@
+--
+-- Cause some overflow insert and splits.
+--
+CREATE TABLE hash_split_heap (keycol INT);
+CREATE INDEX hash_split_index on hash_split_heap USING HASH (keycol);
+INSERT INTO hash_split_heap VALUES (1);
+INSERT INTO hash_split_heap SELECT * from hash_split_heap;
+INSERT INTO hash_split_heap SELECT * from hash_split_heap;
+INSERT INTO hash_split_heap SELECT * from hash_split_heap;
+INSERT INTO hash_split_heap SELECT * from hash_split_heap;
+INSERT INTO hash_split_heap SELECT * from hash_split_heap;
+INSERT INTO hash_split_heap SELECT * from hash_split_heap;
+INSERT INTO hash_split_heap SELECT * from hash_split_heap;
+INSERT INTO hash_split_heap SELECT * from hash_split_heap;
+INSERT INTO hash_split_heap SELECT * from hash_split_heap;
+INSERT INTO hash_split_heap SELECT * from hash_split_heap;
+INSERT INTO hash_split_heap SELECT * from hash_split_heap;
+INSERT INTO hash_split_heap SELECT * from hash_split_heap;
+INSERT INTO hash_split_heap SELECT * from hash_split_heap;
+INSERT INTO hash_split_heap SELECT * from hash_split_heap;
+INSERT INTO hash_split_heap SELECT * from hash_split_heap;
+INSERT INTO hash_split_heap SELECT * from hash_split_heap;
+INSERT INTO hash_split_heap SELECT * from hash_split_heap LIMIT 32000;
+
+VACUUM FULL hash_split_heap;
+
+--
+-- Lets do a backward scan.
+--
+BEGIN;
+SET enable_seqscan = OFF;
+SET enable_bitmapscan = OFF;
+CREATE FUNCTION declares_cursor(int)
+   RETURNS void
+   AS 'DECLARE c CURSOR FOR SELECT * from hash_split_heap WHERE keycol = $1;'
+LANGUAGE SQL;
+
+SELECT declares_cursor(1);
+MOVE FORWARD ALL FROM c;
+MOVE BACKWARD 10000 FROM c;
+MOVE BACKWARD ALL FROM c;
+ROLLBACK;
+
+--
+-- DELETE, INSERT, REBUILD INDEX.
+--
+DELETE FROM hash_split_heap WHERE keycol = 1;
+INSERT INTO hash_split_heap VALUES (1), (2);
+INSERT INTO hash_split_heap SELECT * from hash_split_heap;
+INSERT INTO hash_split_heap SELECT * from hash_split_heap;
+INSERT INTO hash_split_heap SELECT * from hash_split_heap;
+INSERT INTO hash_split_heap SELECT * from hash_split_heap;
+INSERT INTO hash_split_heap SELECT * from hash_split_heap;
+INSERT INTO hash_split_heap SELECT * from hash_split_heap;
+INSERT INTO hash_split_heap SELECT * from hash_split_heap;
+INSERT INTO hash_split_heap SELECT * from hash_split_heap;
+
+VACUUM  hash_split_heap;
+REINDEX INDEX hash_split_index;
+
+--
+-- Clean Up.
+--
+DROP TABLE hash_split_heap;
+
+--
+-- INDEX ON TEMP TABLE.
+--
+CREATE TEMP TABLE hash_temp_heap (x int, y int);
+INSERT INTO hash_temp_heap VALUES (1,1);
+CREATE INDEX hash_idx ON hash_temp_heap USING hash (x);
+DROP TABLE hash_temp_heap CASCADE;
+
+--
+-- Float4 type.
+--
+CREATE TABLE hash_heap_float4 (x float4, y int);
+INSERT INTO hash_heap_float4 VALUES (1.1,1);
+CREATE INDEX hash_idx ON hash_heap_float4 USING hash (x);
+DROP TABLE hash_heap_float4 CASCADE;
