summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Haas2010-08-03 19:53:20 +0000
committerRobert Haas2010-08-03 19:53:20 +0000
commit90a391c645774c2606ae4b82f4a07130afdd0a42 (patch)
treee16ddbe3de23b951e0e7305139d9382737624bdc
parent349152098654b9b3b2a01d1e207296d888fb5e6e (diff)
Regression tests for new btree_gist "not equals" support.
Jeff Davis, with minor adjustments by me.
-rw-r--r--contrib/btree_gist/Makefile4
-rw-r--r--contrib/btree_gist/expected/not_equal.out40
-rw-r--r--contrib/btree_gist/sql/not_equal.sql32
3 files changed, 74 insertions, 2 deletions
diff --git a/contrib/btree_gist/Makefile b/contrib/btree_gist/Makefile
index 8c779c4d061..3889d947c12 100644
--- a/contrib/btree_gist/Makefile
+++ b/contrib/btree_gist/Makefile
@@ -1,4 +1,4 @@
-# $PostgreSQL: pgsql/contrib/btree_gist/Makefile,v 1.12 2007/11/10 23:59:50 momjian Exp $
+# $PostgreSQL: pgsql/contrib/btree_gist/Makefile,v 1.13 2010/08/03 19:53:19 rhaas Exp $
MODULE_big = btree_gist
@@ -11,7 +11,7 @@ DATA_built = btree_gist.sql
DATA = uninstall_btree_gist.sql
REGRESS = init int2 int4 int8 float4 float8 cash oid timestamp timestamptz time timetz \
- date interval macaddr inet cidr text varchar char bytea bit varbit numeric
+ date interval macaddr inet cidr text varchar char bytea bit varbit numeric not_equal
ifdef USE_PGXS
PG_CONFIG = pg_config
diff --git a/contrib/btree_gist/expected/not_equal.out b/contrib/btree_gist/expected/not_equal.out
new file mode 100644
index 00000000000..d9b91e2d569
--- /dev/null
+++ b/contrib/btree_gist/expected/not_equal.out
@@ -0,0 +1,40 @@
+SET enable_seqscan to false;
+-- test search for "not equals"
+CREATE TABLE test_ne (
+ a TIMESTAMP,
+ b NUMERIC
+);
+CREATE INDEX test_ne_idx ON test_ne USING gist (a, b);
+INSERT INTO test_ne SELECT '2009-01-01', 10.7 FROM generate_series(1,1000);
+INSERT INTO test_ne VALUES('2007-02-03', -91.3);
+INSERT INTO test_ne VALUES('2011-09-01', 43.7);
+INSERT INTO test_ne SELECT '2009-01-01', 10.7 FROM generate_series(1,1000);
+EXPLAIN (COSTS OFF) SELECT * FROM test_ne WHERE a <> '2009-01-01' AND b <> 10.7;
+ QUERY PLAN
+------------------------------------------------------------------------------------------------------
+ Bitmap Heap Scan on test_ne
+ Recheck Cond: ((a <> 'Thu Jan 01 00:00:00 2009'::timestamp without time zone) AND (b <> 10.7))
+ -> Bitmap Index Scan on test_ne_idx
+ Index Cond: ((a <> 'Thu Jan 01 00:00:00 2009'::timestamp without time zone) AND (b <> 10.7))
+(4 rows)
+
+SELECT * FROM test_ne WHERE a <> '2009-01-01' AND b <> 10.7;
+ a | b
+--------------------------+-------
+ Sat Feb 03 00:00:00 2007 | -91.3
+ Thu Sep 01 00:00:00 2011 | 43.7
+(2 rows)
+
+-- test search for "not equals" using an exclusion constraint
+CREATE TABLE zoo (
+ cage INTEGER,
+ animal TEXT,
+ EXCLUDE USING gist (cage WITH =, animal WITH <>)
+);
+NOTICE: CREATE TABLE / EXCLUDE will create implicit index "zoo_cage_animal_excl" for table "zoo"
+INSERT INTO zoo VALUES(123, 'zebra');
+INSERT INTO zoo VALUES(123, 'zebra');
+INSERT INTO zoo VALUES(123, 'lion');
+ERROR: conflicting key value violates exclusion constraint "zoo_cage_animal_excl"
+DETAIL: Key (cage, animal)=(123, lion) conflicts with existing key (cage, animal)=(123, zebra).
+INSERT INTO zoo VALUES(124, 'lion');
diff --git a/contrib/btree_gist/sql/not_equal.sql b/contrib/btree_gist/sql/not_equal.sql
new file mode 100644
index 00000000000..b1940ef4fe7
--- /dev/null
+++ b/contrib/btree_gist/sql/not_equal.sql
@@ -0,0 +1,32 @@
+
+SET enable_seqscan to false;
+
+-- test search for "not equals"
+
+CREATE TABLE test_ne (
+ a TIMESTAMP,
+ b NUMERIC
+);
+CREATE INDEX test_ne_idx ON test_ne USING gist (a, b);
+
+INSERT INTO test_ne SELECT '2009-01-01', 10.7 FROM generate_series(1,1000);
+INSERT INTO test_ne VALUES('2007-02-03', -91.3);
+INSERT INTO test_ne VALUES('2011-09-01', 43.7);
+INSERT INTO test_ne SELECT '2009-01-01', 10.7 FROM generate_series(1,1000);
+
+EXPLAIN (COSTS OFF) SELECT * FROM test_ne WHERE a <> '2009-01-01' AND b <> 10.7;
+
+SELECT * FROM test_ne WHERE a <> '2009-01-01' AND b <> 10.7;
+
+-- test search for "not equals" using an exclusion constraint
+
+CREATE TABLE zoo (
+ cage INTEGER,
+ animal TEXT,
+ EXCLUDE USING gist (cage WITH =, animal WITH <>)
+);
+
+INSERT INTO zoo VALUES(123, 'zebra');
+INSERT INTO zoo VALUES(123, 'zebra');
+INSERT INTO zoo VALUES(123, 'lion');
+INSERT INTO zoo VALUES(124, 'lion');