diff options
author | Robert Haas <rhaas@postgresql.org> | 2016-10-18 15:55:03 -0400 |
---|---|---|
committer | Robert Haas <rhaas@postgresql.org> | 2016-10-18 15:57:58 -0400 |
commit | b801e120080de836b834c1b756c4c4d81ce841b5 (patch) | |
tree | ffbd50b9d2d30d251d1928eca322f8eca59e38a3 /src | |
parent | 90d3da11c9417218ebd4f86b2003c98421824712 (diff) | |
download | postgresql-b801e120080de836b834c1b756c4c4d81ce841b5.tar.gz postgresql-b801e120080de836b834c1b756c4c4d81ce841b5.zip |
Improve regression test coverage for hash indexes.
On my system, this improves coverage for src/backend/access/hash from
61.3% of lines to 88.2% of lines, and from 83.5% of functions to 97.5%
of functions, which is pretty good for 36 lines of tests.
Mithun Cy, reviewing by Amit Kapila and Álvaro Herrera
Diffstat (limited to 'src')
-rw-r--r-- | src/test/regress/expected/hash_index.out | 36 | ||||
-rw-r--r-- | src/test/regress/sql/hash_index.sql | 43 |
2 files changed, 79 insertions, 0 deletions
diff --git a/src/test/regress/expected/hash_index.out b/src/test/regress/expected/hash_index.out index 22835f8ea4e..f8b9f029b21 100644 --- a/src/test/regress/expected/hash_index.out +++ b/src/test/regress/expected/hash_index.out @@ -196,3 +196,39 @@ SELECT h.seqno AS f20000 -- WHERE x = 90; -- SELECT count(*) AS i988 FROM hash_ovfl_heap -- WHERE x = 1000; +-- +-- 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 SELECT 1 FROM generate_series(1, 70000) a; +VACUUM FULL hash_split_heap; +-- Let's do a backward scan. +BEGIN; +SET enable_seqscan = OFF; +SET enable_bitmapscan = OFF; +DECLARE c CURSOR FOR SELECT * from hash_split_heap WHERE keycol = 1; +MOVE FORWARD ALL FROM c; +MOVE BACKWARD 10000 FROM c; +MOVE BACKWARD ALL FROM c; +CLOSE c; +END; +-- DELETE, INSERT, REBUILD INDEX. +DELETE FROM hash_split_heap WHERE keycol = 1; +INSERT INTO hash_split_heap SELECT a/2 FROM generate_series(1, 50000) a; +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/sql/hash_index.sql b/src/test/regress/sql/hash_index.sql index 411e8aed39f..15a3b06d175 100644 --- a/src/test/regress/sql/hash_index.sql +++ b/src/test/regress/sql/hash_index.sql @@ -151,3 +151,46 @@ SELECT h.seqno AS f20000 -- SELECT count(*) AS i988 FROM hash_ovfl_heap -- WHERE x = 1000; + +-- +-- 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 SELECT 1 FROM generate_series(1, 70000) a; + +VACUUM FULL hash_split_heap; + +-- Let's do a backward scan. +BEGIN; +SET enable_seqscan = OFF; +SET enable_bitmapscan = OFF; + +DECLARE c CURSOR FOR SELECT * from hash_split_heap WHERE keycol = 1; +MOVE FORWARD ALL FROM c; +MOVE BACKWARD 10000 FROM c; +MOVE BACKWARD ALL FROM c; +CLOSE c; +END; + +-- DELETE, INSERT, REBUILD INDEX. +DELETE FROM hash_split_heap WHERE keycol = 1; +INSERT INTO hash_split_heap SELECT a/2 FROM generate_series(1, 50000) a; + +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; |