postgresql/contrib/isn/expected/isn.out
Tom Lane ade49c605f 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
2016-11-29 15:05:22 -05:00

267 lines
9.5 KiB
Plaintext

--
-- 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
--
SELECT '9780123456786'::EAN13, -- old book
'9790123456785'::EAN13, -- music
'9791234567896'::EAN13, -- new book
'9771234567898'::EAN13, -- serial
'0123456789012'::EAN13, -- upc
'1234567890128'::EAN13;
ean13 | ean13 | ean13 | ean13 | ean13 | ean13
-------------------+-------------------+-----------------+-------------------+-----------------+-----------------
978-0-12-345678-6 | 979-0-1234-5678-5 | 979-123456789-6 | 977-1234-567-89-8 | 012-345678901-2 | 123-456789012-8
(1 row)
SELECT '9780123456786'::ISBN,
'123456789X'::ISBN,
'9780123456786'::ISBN13::ISBN,
'9780123456786'::EAN13::ISBN;
isbn | isbn | isbn | isbn
---------------+---------------+---------------+---------------
0-12-345678-9 | 1-234-56789-X | 0-12-345678-9 | 0-12-345678-9
(1 row)
SELECT -- new books, shown as ISBN13 even for ISBN...
'9791234567896'::ISBN,
'9791234567896'::ISBN13::ISBN,
'9791234567896'::EAN13::ISBN;
isbn | isbn | isbn
-----------------+-----------------+-----------------
979-123456789-6 | 979-123456789-6 | 979-123456789-6
(1 row)
SELECT '9780123456786'::ISBN13,
'123456789X'::ISBN13,
'9791234567896'::ISBN13,
'9791234567896'::EAN13::ISBN13;
isbn13 | isbn13 | isbn13 | isbn13
-------------------+-------------------+-----------------+-----------------
978-0-12-345678-6 | 978-1-234-56789-7 | 979-123456789-6 | 979-123456789-6
(1 row)
SELECT '9790123456785'::ISMN,
'9790123456785'::EAN13::ISMN,
'M123456785'::ISMN,
'M-1234-5678-5'::ISMN;
ismn | ismn | ismn | ismn
---------------+---------------+---------------+---------------
M-1234-5678-5 | M-1234-5678-5 | M-1234-5678-5 | M-1234-5678-5
(1 row)
SELECT '9790123456785'::ISMN13,
'M123456785'::ISMN13,
'M-1234-5678-5'::ISMN13;
ismn13 | ismn13 | ismn13
-------------------+-------------------+-------------------
979-0-1234-5678-5 | 979-0-1234-5678-5 | 979-0-1234-5678-5
(1 row)
SELECT '9771234567003'::ISSN,
'12345679'::ISSN;
issn | issn
-----------+-----------
1234-5679 | 1234-5679
(1 row)
SELECT '9771234567003'::ISSN13,
'12345679'::ISSN13,
'9771234567898'::ISSN13,
'9771234567898'::EAN13::ISSN13;
issn13 | issn13 | issn13 | issn13
-------------------+-------------------+-------------------+-------------------
977-1234-567-00-3 | 977-1234-567-00-3 | 977-1234-567-89-8 | 977-1234-567-89-8
(1 row)
SELECT '0123456789012'::UPC,
'0123456789012'::EAN13::UPC;
upc | upc
--------------+--------------
123456789012 | 123456789012
(1 row)
--
-- test invalid checksums
--
SELECT '1234567890'::ISBN;
ERROR: invalid check digit for ISBN number: "1234567890", should be X
LINE 1: SELECT '1234567890'::ISBN;
^
SELECT 'M123456780'::ISMN;
ERROR: invalid check digit for ISMN number: "M123456780", should be 5
LINE 1: SELECT 'M123456780'::ISMN;
^
SELECT '12345670'::ISSN;
ERROR: invalid check digit for ISSN number: "12345670", should be 9
LINE 1: SELECT '12345670'::ISSN;
^
SELECT '9780123456780'::ISBN;
ERROR: invalid check digit for ISBN number: "9780123456780", should be 6
LINE 1: SELECT '9780123456780'::ISBN;
^
SELECT '9791234567890'::ISBN13;
ERROR: invalid check digit for ISBN number: "9791234567890", should be 6
LINE 1: SELECT '9791234567890'::ISBN13;
^
SELECT '0123456789010'::UPC;
ERROR: invalid check digit for UPC number: "0123456789010", should be 2
LINE 1: SELECT '0123456789010'::UPC;
^
SELECT '1234567890120'::EAN13;
ERROR: invalid check digit for EAN13 number: "1234567890120", should be 8
LINE 1: SELECT '1234567890120'::EAN13;
^
--
-- test invalid conversions
--
SELECT '9790123456785'::ISBN; -- not a book
ERROR: cannot cast ISMN to ISBN for number: "9790123456785"
LINE 1: SELECT '9790123456785'::ISBN;
^
SELECT '9771234567898'::ISBN; -- not a book
ERROR: cannot cast ISSN to ISBN for number: "9771234567898"
LINE 1: SELECT '9771234567898'::ISBN;
^
SELECT '0123456789012'::ISBN; -- not a book
ERROR: cannot cast UPC to ISBN for number: "0123456789012"
LINE 1: SELECT '0123456789012'::ISBN;
^
SELECT '9790123456785'::ISBN13; -- not a book
ERROR: cannot cast ISMN to ISBN for number: "9790123456785"
LINE 1: SELECT '9790123456785'::ISBN13;
^
SELECT '9771234567898'::ISBN13; -- not a book
ERROR: cannot cast ISSN to ISBN for number: "9771234567898"
LINE 1: SELECT '9771234567898'::ISBN13;
^
SELECT '0123456789012'::ISBN13; -- not a book
ERROR: cannot cast UPC to ISBN for number: "0123456789012"
LINE 1: SELECT '0123456789012'::ISBN13;
^
SELECT '9780123456786'::ISMN; -- not music
ERROR: cannot cast ISBN to ISMN for number: "9780123456786"
LINE 1: SELECT '9780123456786'::ISMN;
^
SELECT '9771234567898'::ISMN; -- not music
ERROR: cannot cast ISSN to ISMN for number: "9771234567898"
LINE 1: SELECT '9771234567898'::ISMN;
^
SELECT '9791234567896'::ISMN; -- not music
ERROR: cannot cast ISBN to ISMN for number: "9791234567896"
LINE 1: SELECT '9791234567896'::ISMN;
^
SELECT '0123456789012'::ISMN; -- not music
ERROR: cannot cast UPC to ISMN for number: "0123456789012"
LINE 1: SELECT '0123456789012'::ISMN;
^
SELECT '9780123456786'::ISSN; -- not serial
ERROR: cannot cast ISBN to ISSN for number: "9780123456786"
LINE 1: SELECT '9780123456786'::ISSN;
^
SELECT '9790123456785'::ISSN; -- not serial
ERROR: cannot cast ISMN to ISSN for number: "9790123456785"
LINE 1: SELECT '9790123456785'::ISSN;
^
SELECT '9791234567896'::ISSN; -- not serial
ERROR: cannot cast ISBN to ISSN for number: "9791234567896"
LINE 1: SELECT '9791234567896'::ISSN;
^
SELECT '0123456789012'::ISSN; -- not serial
ERROR: cannot cast UPC to ISSN for number: "0123456789012"
LINE 1: SELECT '0123456789012'::ISSN;
^
SELECT '9780123456786'::UPC; -- not a product
ERROR: cannot cast ISBN to UPC for number: "9780123456786"
LINE 1: SELECT '9780123456786'::UPC;
^
SELECT '9771234567898'::UPC; -- not a product
ERROR: cannot cast ISSN to UPC for number: "9771234567898"
LINE 1: SELECT '9771234567898'::UPC;
^
SELECT '9790123456785'::UPC; -- not a product
ERROR: cannot cast ISMN to UPC for number: "9790123456785"
LINE 1: SELECT '9790123456785'::UPC;
^
SELECT '9791234567896'::UPC; -- not a product
ERROR: cannot cast ISBN to UPC for number: "9791234567896"
LINE 1: SELECT '9791234567896'::UPC;
^
SELECT 'postgresql...'::EAN13;
ERROR: invalid input syntax for EAN13 number: "postgresql..."
LINE 1: SELECT 'postgresql...'::EAN13;
^
SELECT 'postgresql...'::ISBN;
ERROR: invalid input syntax for ISBN number: "postgresql..."
LINE 1: SELECT 'postgresql...'::ISBN;
^
SELECT 9780123456786::EAN13;
ERROR: cannot cast type bigint to ean13
LINE 1: SELECT 9780123456786::EAN13;
^
SELECT 9780123456786::ISBN;
ERROR: cannot cast type bigint to isbn
LINE 1: SELECT 9780123456786::ISBN;
^
--
-- test some comparisons, must yield true
--
SELECT '12345679'::ISSN = '9771234567003'::EAN13 AS "ok",
'M-1234-5678-5'::ISMN = '9790123456785'::EAN13 AS "ok",
'9791234567896'::EAN13 != '123456789X'::ISBN AS "nope";
ok | ok | nope
----+----+------
t | t | t
(1 row)
--
-- cleanup
--
DROP EXTENSION isn;