mirror of https://github.com/postgres/postgres
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
This commit is contained in:
parent
11da83a0e7
commit
ade49c605f
|
@ -1 +1,9 @@
|
||||||
CREATE EXTENSION btree_gin;
|
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;
|
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;
|
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;
|
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
|
-- Test citext datatype
|
||||||
--
|
--
|
||||||
CREATE EXTENSION citext;
|
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 the operators and indexing functions
|
||||||
-- Test = and <>.
|
-- Test = and <>.
|
||||||
SELECT 'a'::citext = 'a'::citext AS t;
|
SELECT 'a'::citext = 'a'::citext AS t;
|
||||||
|
|
|
@ -2,6 +2,14 @@
|
||||||
-- Test citext datatype
|
-- Test citext datatype
|
||||||
--
|
--
|
||||||
CREATE EXTENSION citext;
|
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 the operators and indexing functions
|
||||||
-- Test = and <>.
|
-- Test = and <>.
|
||||||
SELECT 'a'::citext = 'a'::citext AS t;
|
SELECT 'a'::citext = 'a'::citext AS t;
|
||||||
|
|
|
@ -4,6 +4,11 @@
|
||||||
|
|
||||||
CREATE EXTENSION citext;
|
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 the operators and indexing functions
|
||||||
|
|
||||||
-- Test = and <>.
|
-- Test = and <>.
|
||||||
|
|
|
@ -2,6 +2,14 @@
|
||||||
-- Test cube datatype
|
-- Test cube datatype
|
||||||
--
|
--
|
||||||
CREATE EXTENSION cube;
|
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
|
-- testing the input and output functions
|
||||||
--
|
--
|
||||||
|
|
|
@ -2,6 +2,14 @@
|
||||||
-- Test cube datatype
|
-- Test cube datatype
|
||||||
--
|
--
|
||||||
CREATE EXTENSION cube;
|
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
|
-- testing the input and output functions
|
||||||
--
|
--
|
||||||
|
|
|
@ -4,6 +4,11 @@
|
||||||
|
|
||||||
CREATE EXTENSION cube;
|
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
|
-- testing the input and output functions
|
||||||
--
|
--
|
||||||
|
|
|
@ -1,4 +1,12 @@
|
||||||
CREATE EXTENSION hstore;
|
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;
|
set escape_string_warning=off;
|
||||||
--hstore;
|
--hstore;
|
||||||
select ''::hstore;
|
select ''::hstore;
|
||||||
|
|
|
@ -1,5 +1,10 @@
|
||||||
CREATE EXTENSION hstore;
|
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;
|
set escape_string_warning=off;
|
||||||
|
|
||||||
--hstore;
|
--hstore;
|
||||||
|
|
|
@ -1,4 +1,12 @@
|
||||||
CREATE EXTENSION intarray;
|
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);
|
SELECT intset(1234);
|
||||||
intset
|
intset
|
||||||
--------
|
--------
|
||||||
|
|
|
@ -1,5 +1,10 @@
|
||||||
CREATE EXTENSION intarray;
|
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 intset(1234);
|
||||||
SELECT icount('{1234234,234234}');
|
SELECT icount('{1234234,234234}');
|
||||||
SELECT sort('{1234234,-30,234234}');
|
SELECT sort('{1234234,-30,234234}');
|
||||||
|
|
|
@ -2,6 +2,50 @@
|
||||||
-- Test ISN extension
|
-- Test ISN extension
|
||||||
--
|
--
|
||||||
CREATE EXTENSION isn;
|
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
|
-- test valid conversions
|
||||||
--
|
--
|
||||||
|
|
|
@ -4,6 +4,15 @@
|
||||||
|
|
||||||
CREATE EXTENSION isn;
|
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
|
-- test valid conversions
|
||||||
--
|
--
|
||||||
|
|
|
@ -1,4 +1,12 @@
|
||||||
CREATE EXTENSION ltree;
|
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;
|
SELECT ''::ltree;
|
||||||
ltree
|
ltree
|
||||||
-------
|
-------
|
||||||
|
|
|
@ -1,5 +1,10 @@
|
||||||
CREATE EXTENSION ltree;
|
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 ''::ltree;
|
||||||
SELECT '1'::ltree;
|
SELECT '1'::ltree;
|
||||||
SELECT '1.2'::ltree;
|
SELECT '1.2'::ltree;
|
||||||
|
|
|
@ -1,4 +1,12 @@
|
||||||
CREATE EXTENSION pg_trgm;
|
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('');
|
select show_trgm('');
|
||||||
show_trgm
|
show_trgm
|
||||||
-----------
|
-----------
|
||||||
|
|
|
@ -1,5 +1,10 @@
|
||||||
CREATE EXTENSION pg_trgm;
|
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('(*&^$@%@');
|
select show_trgm('(*&^$@%@');
|
||||||
select show_trgm('a b c');
|
select show_trgm('a b c');
|
||||||
|
|
|
@ -2,6 +2,14 @@
|
||||||
-- Test seg datatype
|
-- Test seg datatype
|
||||||
--
|
--
|
||||||
CREATE EXTENSION seg;
|
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
|
-- testing the input and output functions
|
||||||
--
|
--
|
||||||
|
|
|
@ -2,6 +2,14 @@
|
||||||
-- Test seg datatype
|
-- Test seg datatype
|
||||||
--
|
--
|
||||||
CREATE EXTENSION seg;
|
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
|
-- testing the input and output functions
|
||||||
--
|
--
|
||||||
|
|
|
@ -4,6 +4,11 @@
|
||||||
|
|
||||||
CREATE EXTENSION seg;
|
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
|
-- testing the input and output functions
|
||||||
--
|
--
|
||||||
|
|
|
@ -1,4 +1,12 @@
|
||||||
CREATE EXTENSION tsearch2;
|
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
|
--tsvector
|
||||||
SELECT '1'::tsvector;
|
SELECT '1'::tsvector;
|
||||||
tsvector
|
tsvector
|
||||||
|
|
|
@ -1,5 +1,10 @@
|
||||||
CREATE EXTENSION tsearch2;
|
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
|
--tsvector
|
||||||
SELECT '1'::tsvector;
|
SELECT '1'::tsvector;
|
||||||
SELECT '1 '::tsvector;
|
SELECT '1 '::tsvector;
|
||||||
|
|
Loading…
Reference in New Issue