OSDN Git Service

Regression tests for new btree_gist "not equals" support.
authorRobert Haas <rhaas@postgresql.org>
Tue, 3 Aug 2010 19:53:20 +0000 (19:53 +0000)
committerRobert Haas <rhaas@postgresql.org>
Tue, 3 Aug 2010 19:53:20 +0000 (19:53 +0000)
Jeff Davis, with minor adjustments by me.

contrib/btree_gist/Makefile
contrib/btree_gist/expected/not_equal.out [new file with mode: 0644]
contrib/btree_gist/sql/not_equal.sql [new file with mode: 0644]

index 8c779c4..3889d94 100644 (file)
@@ -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 (file)
index 0000000..d9b91e2
--- /dev/null
@@ -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 (file)
index 0000000..b1940ef
--- /dev/null
@@ -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');