Test all contrib-created operator classes with amvalidate.

I'd supposed that people would do this manually when creating new operator
classes, but the folly of that was exposed today.  The tests seem fast
enough that we can just apply them during the normal regression tests.

contrib/isn fails the checks for lack of complete sets of cross-type
operators.  That's a nice-to-have policy rather than a functional
requirement, so leave it as-is, but insert ORDER BY in the query to
ensure consistent cross-platform output.

Discussion: https://postgr.es/m/7076.1480446837@sss.pgh.pa.us
pull/18/head
Tom Lane 9 years ago
parent 11da83a0e7
commit ade49c605f
  1. 8
      contrib/btree_gin/expected/install_btree_gin.out
  2. 5
      contrib/btree_gin/sql/install_btree_gin.sql
  3. 8
      contrib/btree_gist/expected/init.out
  4. 5
      contrib/btree_gist/sql/init.sql
  5. 8
      contrib/citext/expected/citext.out
  6. 8
      contrib/citext/expected/citext_1.out
  7. 5
      contrib/citext/sql/citext.sql
  8. 8
      contrib/cube/expected/cube.out
  9. 8
      contrib/cube/expected/cube_2.out
  10. 5
      contrib/cube/sql/cube.sql
  11. 8
      contrib/hstore/expected/hstore.out
  12. 5
      contrib/hstore/sql/hstore.sql
  13. 8
      contrib/intarray/expected/_int.out
  14. 5
      contrib/intarray/sql/_int.sql
  15. 44
      contrib/isn/expected/isn.out
  16. 9
      contrib/isn/sql/isn.sql
  17. 8
      contrib/ltree/expected/ltree.out
  18. 5
      contrib/ltree/sql/ltree.sql
  19. 8
      contrib/pg_trgm/expected/pg_trgm.out
  20. 5
      contrib/pg_trgm/sql/pg_trgm.sql
  21. 8
      contrib/seg/expected/seg.out
  22. 8
      contrib/seg/expected/seg_1.out
  23. 5
      contrib/seg/sql/seg.sql
  24. 8
      contrib/tsearch2/expected/tsearch2.out
  25. 5
      contrib/tsearch2/sql/tsearch2.sql

@ -1 +1,9 @@
CREATE EXTENSION btree_gin;
-- Check whether any of our opclasses fail amvalidate
SELECT amname, opcname
FROM pg_opclass opc LEFT JOIN pg_am am ON am.oid = opcmethod
WHERE opc.oid >= 16384 AND NOT amvalidate(opc.oid);
amname | opcname
--------+---------
(0 rows)

@ -1 +1,6 @@
CREATE EXTENSION btree_gin;
-- Check whether any of our opclasses fail amvalidate
SELECT amname, opcname
FROM pg_opclass opc LEFT JOIN pg_am am ON am.oid = opcmethod
WHERE opc.oid >= 16384 AND NOT amvalidate(opc.oid);

@ -1 +1,9 @@
CREATE EXTENSION btree_gist;
-- Check whether any of our opclasses fail amvalidate
SELECT amname, opcname
FROM pg_opclass opc LEFT JOIN pg_am am ON am.oid = opcmethod
WHERE opc.oid >= 16384 AND NOT amvalidate(opc.oid);
amname | opcname
--------+---------
(0 rows)

@ -1 +1,6 @@
CREATE EXTENSION btree_gist;
-- Check whether any of our opclasses fail amvalidate
SELECT amname, opcname
FROM pg_opclass opc LEFT JOIN pg_am am ON am.oid = opcmethod
WHERE opc.oid >= 16384 AND NOT amvalidate(opc.oid);

@ -2,6 +2,14 @@
-- Test citext datatype
--
CREATE EXTENSION citext;
-- Check whether any of our opclasses fail amvalidate
SELECT amname, opcname
FROM pg_opclass opc LEFT JOIN pg_am am ON am.oid = opcmethod
WHERE opc.oid >= 16384 AND NOT amvalidate(opc.oid);
amname | opcname
--------+---------
(0 rows)
-- Test the operators and indexing functions
-- Test = and <>.
SELECT 'a'::citext = 'a'::citext AS t;

@ -2,6 +2,14 @@
-- Test citext datatype
--
CREATE EXTENSION citext;
-- Check whether any of our opclasses fail amvalidate
SELECT amname, opcname
FROM pg_opclass opc LEFT JOIN pg_am am ON am.oid = opcmethod
WHERE opc.oid >= 16384 AND NOT amvalidate(opc.oid);
amname | opcname
--------+---------
(0 rows)
-- Test the operators and indexing functions
-- Test = and <>.
SELECT 'a'::citext = 'a'::citext AS t;

@ -4,6 +4,11 @@
CREATE EXTENSION citext;
-- Check whether any of our opclasses fail amvalidate
SELECT amname, opcname
FROM pg_opclass opc LEFT JOIN pg_am am ON am.oid = opcmethod
WHERE opc.oid >= 16384 AND NOT amvalidate(opc.oid);
-- Test the operators and indexing functions
-- Test = and <>.

@ -2,6 +2,14 @@
-- Test cube datatype
--
CREATE EXTENSION cube;
-- Check whether any of our opclasses fail amvalidate
SELECT amname, opcname
FROM pg_opclass opc LEFT JOIN pg_am am ON am.oid = opcmethod
WHERE opc.oid >= 16384 AND NOT amvalidate(opc.oid);
amname | opcname
--------+---------
(0 rows)
--
-- testing the input and output functions
--

@ -2,6 +2,14 @@
-- Test cube datatype
--
CREATE EXTENSION cube;
-- Check whether any of our opclasses fail amvalidate
SELECT amname, opcname
FROM pg_opclass opc LEFT JOIN pg_am am ON am.oid = opcmethod
WHERE opc.oid >= 16384 AND NOT amvalidate(opc.oid);
amname | opcname
--------+---------
(0 rows)
--
-- testing the input and output functions
--

@ -4,6 +4,11 @@
CREATE EXTENSION cube;
-- Check whether any of our opclasses fail amvalidate
SELECT amname, opcname
FROM pg_opclass opc LEFT JOIN pg_am am ON am.oid = opcmethod
WHERE opc.oid >= 16384 AND NOT amvalidate(opc.oid);
--
-- testing the input and output functions
--

@ -1,4 +1,12 @@
CREATE EXTENSION hstore;
-- Check whether any of our opclasses fail amvalidate
SELECT amname, opcname
FROM pg_opclass opc LEFT JOIN pg_am am ON am.oid = opcmethod
WHERE opc.oid >= 16384 AND NOT amvalidate(opc.oid);
amname | opcname
--------+---------
(0 rows)
set escape_string_warning=off;
--hstore;
select ''::hstore;

@ -1,5 +1,10 @@
CREATE EXTENSION hstore;
-- Check whether any of our opclasses fail amvalidate
SELECT amname, opcname
FROM pg_opclass opc LEFT JOIN pg_am am ON am.oid = opcmethod
WHERE opc.oid >= 16384 AND NOT amvalidate(opc.oid);
set escape_string_warning=off;
--hstore;

@ -1,4 +1,12 @@
CREATE EXTENSION intarray;
-- Check whether any of our opclasses fail amvalidate
SELECT amname, opcname
FROM pg_opclass opc LEFT JOIN pg_am am ON am.oid = opcmethod
WHERE opc.oid >= 16384 AND NOT amvalidate(opc.oid);
amname | opcname
--------+---------
(0 rows)
SELECT intset(1234);
intset
--------

@ -1,5 +1,10 @@
CREATE EXTENSION intarray;
-- Check whether any of our opclasses fail amvalidate
SELECT amname, opcname
FROM pg_opclass opc LEFT JOIN pg_am am ON am.oid = opcmethod
WHERE opc.oid >= 16384 AND NOT amvalidate(opc.oid);
SELECT intset(1234);
SELECT icount('{1234234,234234}');
SELECT sort('{1234234,-30,234234}');

@ -2,6 +2,50 @@
-- Test ISN extension
--
CREATE EXTENSION isn;
-- Check whether any of our opclasses fail amvalidate
-- ... they will, because of missing cross-type operators
SELECT amname, opcname
FROM (SELECT amname, opcname, opc.oid
FROM pg_opclass opc LEFT JOIN pg_am am ON am.oid = opcmethod
WHERE opc.oid >= 16384
ORDER BY 1, 2 OFFSET 0) ss
WHERE NOT amvalidate(oid);
INFO: btree operator family "isn_ops" is missing cross-type operator(s)
INFO: btree operator family "isn_ops" is missing cross-type operator(s)
INFO: btree operator family "isn_ops" is missing cross-type operator(s)
INFO: btree operator family "isn_ops" is missing cross-type operator(s)
INFO: btree operator family "isn_ops" is missing cross-type operator(s)
INFO: btree operator family "isn_ops" is missing cross-type operator(s)
INFO: btree operator family "isn_ops" is missing cross-type operator(s)
INFO: btree operator family "isn_ops" is missing cross-type operator(s)
INFO: hash operator family "isn_ops" is missing cross-type operator(s)
INFO: hash operator family "isn_ops" is missing cross-type operator(s)
INFO: hash operator family "isn_ops" is missing cross-type operator(s)
INFO: hash operator family "isn_ops" is missing cross-type operator(s)
INFO: hash operator family "isn_ops" is missing cross-type operator(s)
INFO: hash operator family "isn_ops" is missing cross-type operator(s)
INFO: hash operator family "isn_ops" is missing cross-type operator(s)
INFO: hash operator family "isn_ops" is missing cross-type operator(s)
amname | opcname
--------+------------
btree | ean13_ops
btree | isbn13_ops
btree | isbn_ops
btree | ismn13_ops
btree | ismn_ops
btree | issn13_ops
btree | issn_ops
btree | upc_ops
hash | ean13_ops
hash | isbn13_ops
hash | isbn_ops
hash | ismn13_ops
hash | ismn_ops
hash | issn13_ops
hash | issn_ops
hash | upc_ops
(16 rows)
--
-- test valid conversions
--

@ -4,6 +4,15 @@
CREATE EXTENSION isn;
-- Check whether any of our opclasses fail amvalidate
-- ... they will, because of missing cross-type operators
SELECT amname, opcname
FROM (SELECT amname, opcname, opc.oid
FROM pg_opclass opc LEFT JOIN pg_am am ON am.oid = opcmethod
WHERE opc.oid >= 16384
ORDER BY 1, 2 OFFSET 0) ss
WHERE NOT amvalidate(oid);
--
-- test valid conversions
--

@ -1,4 +1,12 @@
CREATE EXTENSION ltree;
-- Check whether any of our opclasses fail amvalidate
SELECT amname, opcname
FROM pg_opclass opc LEFT JOIN pg_am am ON am.oid = opcmethod
WHERE opc.oid >= 16384 AND NOT amvalidate(opc.oid);
amname | opcname
--------+---------
(0 rows)
SELECT ''::ltree;
ltree
-------

@ -1,5 +1,10 @@
CREATE EXTENSION ltree;
-- Check whether any of our opclasses fail amvalidate
SELECT amname, opcname
FROM pg_opclass opc LEFT JOIN pg_am am ON am.oid = opcmethod
WHERE opc.oid >= 16384 AND NOT amvalidate(opc.oid);
SELECT ''::ltree;
SELECT '1'::ltree;
SELECT '1.2'::ltree;

@ -1,4 +1,12 @@
CREATE EXTENSION pg_trgm;
-- Check whether any of our opclasses fail amvalidate
SELECT amname, opcname
FROM pg_opclass opc LEFT JOIN pg_am am ON am.oid = opcmethod
WHERE opc.oid >= 16384 AND NOT amvalidate(opc.oid);
amname | opcname
--------+---------
(0 rows)
select show_trgm('');
show_trgm
-----------

@ -1,5 +1,10 @@
CREATE EXTENSION pg_trgm;
-- Check whether any of our opclasses fail amvalidate
SELECT amname, opcname
FROM pg_opclass opc LEFT JOIN pg_am am ON am.oid = opcmethod
WHERE opc.oid >= 16384 AND NOT amvalidate(opc.oid);
select show_trgm('');
select show_trgm('(*&^$@%@');
select show_trgm('a b c');

@ -2,6 +2,14 @@
-- Test seg datatype
--
CREATE EXTENSION seg;
-- Check whether any of our opclasses fail amvalidate
SELECT amname, opcname
FROM pg_opclass opc LEFT JOIN pg_am am ON am.oid = opcmethod
WHERE opc.oid >= 16384 AND NOT amvalidate(opc.oid);
amname | opcname
--------+---------
(0 rows)
--
-- testing the input and output functions
--

@ -2,6 +2,14 @@
-- Test seg datatype
--
CREATE EXTENSION seg;
-- Check whether any of our opclasses fail amvalidate
SELECT amname, opcname
FROM pg_opclass opc LEFT JOIN pg_am am ON am.oid = opcmethod
WHERE opc.oid >= 16384 AND NOT amvalidate(opc.oid);
amname | opcname
--------+---------
(0 rows)
--
-- testing the input and output functions
--

@ -4,6 +4,11 @@
CREATE EXTENSION seg;
-- Check whether any of our opclasses fail amvalidate
SELECT amname, opcname
FROM pg_opclass opc LEFT JOIN pg_am am ON am.oid = opcmethod
WHERE opc.oid >= 16384 AND NOT amvalidate(opc.oid);
--
-- testing the input and output functions
--

@ -1,4 +1,12 @@
CREATE EXTENSION tsearch2;
-- Check whether any of our opclasses fail amvalidate
SELECT amname, opcname
FROM pg_opclass opc LEFT JOIN pg_am am ON am.oid = opcmethod
WHERE opc.oid >= 16384 AND NOT amvalidate(opc.oid);
amname | opcname
--------+---------
(0 rows)
--tsvector
SELECT '1'::tsvector;
tsvector

@ -1,5 +1,10 @@
CREATE EXTENSION tsearch2;
-- Check whether any of our opclasses fail amvalidate
SELECT amname, opcname
FROM pg_opclass opc LEFT JOIN pg_am am ON am.oid = opcmethod
WHERE opc.oid >= 16384 AND NOT amvalidate(opc.oid);
--tsvector
SELECT '1'::tsvector;
SELECT '1 '::tsvector;

Loading…
Cancel
Save