mirror of
https://git.postgresql.org/git/postgresql.git
synced 2024-08-24 02:47:19 +02:00
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
114 lines
2.9 KiB
SQL
114 lines
2.9 KiB
SQL
--
|
|
-- 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);
|
|
|
|
--
|
|
-- test valid conversions
|
|
--
|
|
SELECT '9780123456786'::EAN13, -- old book
|
|
'9790123456785'::EAN13, -- music
|
|
'9791234567896'::EAN13, -- new book
|
|
'9771234567898'::EAN13, -- serial
|
|
'0123456789012'::EAN13, -- upc
|
|
'1234567890128'::EAN13;
|
|
|
|
SELECT '9780123456786'::ISBN,
|
|
'123456789X'::ISBN,
|
|
'9780123456786'::ISBN13::ISBN,
|
|
'9780123456786'::EAN13::ISBN;
|
|
|
|
SELECT -- new books, shown as ISBN13 even for ISBN...
|
|
'9791234567896'::ISBN,
|
|
'9791234567896'::ISBN13::ISBN,
|
|
'9791234567896'::EAN13::ISBN;
|
|
|
|
SELECT '9780123456786'::ISBN13,
|
|
'123456789X'::ISBN13,
|
|
'9791234567896'::ISBN13,
|
|
'9791234567896'::EAN13::ISBN13;
|
|
|
|
SELECT '9790123456785'::ISMN,
|
|
'9790123456785'::EAN13::ISMN,
|
|
'M123456785'::ISMN,
|
|
'M-1234-5678-5'::ISMN;
|
|
|
|
SELECT '9790123456785'::ISMN13,
|
|
'M123456785'::ISMN13,
|
|
'M-1234-5678-5'::ISMN13;
|
|
|
|
SELECT '9771234567003'::ISSN,
|
|
'12345679'::ISSN;
|
|
|
|
SELECT '9771234567003'::ISSN13,
|
|
'12345679'::ISSN13,
|
|
'9771234567898'::ISSN13,
|
|
'9771234567898'::EAN13::ISSN13;
|
|
|
|
SELECT '0123456789012'::UPC,
|
|
'0123456789012'::EAN13::UPC;
|
|
|
|
--
|
|
-- test invalid checksums
|
|
--
|
|
SELECT '1234567890'::ISBN;
|
|
SELECT 'M123456780'::ISMN;
|
|
SELECT '12345670'::ISSN;
|
|
SELECT '9780123456780'::ISBN;
|
|
SELECT '9791234567890'::ISBN13;
|
|
SELECT '0123456789010'::UPC;
|
|
SELECT '1234567890120'::EAN13;
|
|
|
|
--
|
|
-- test invalid conversions
|
|
--
|
|
SELECT '9790123456785'::ISBN; -- not a book
|
|
SELECT '9771234567898'::ISBN; -- not a book
|
|
SELECT '0123456789012'::ISBN; -- not a book
|
|
|
|
SELECT '9790123456785'::ISBN13; -- not a book
|
|
SELECT '9771234567898'::ISBN13; -- not a book
|
|
SELECT '0123456789012'::ISBN13; -- not a book
|
|
|
|
SELECT '9780123456786'::ISMN; -- not music
|
|
SELECT '9771234567898'::ISMN; -- not music
|
|
SELECT '9791234567896'::ISMN; -- not music
|
|
SELECT '0123456789012'::ISMN; -- not music
|
|
|
|
SELECT '9780123456786'::ISSN; -- not serial
|
|
SELECT '9790123456785'::ISSN; -- not serial
|
|
SELECT '9791234567896'::ISSN; -- not serial
|
|
SELECT '0123456789012'::ISSN; -- not serial
|
|
|
|
SELECT '9780123456786'::UPC; -- not a product
|
|
SELECT '9771234567898'::UPC; -- not a product
|
|
SELECT '9790123456785'::UPC; -- not a product
|
|
SELECT '9791234567896'::UPC; -- not a product
|
|
|
|
SELECT 'postgresql...'::EAN13;
|
|
SELECT 'postgresql...'::ISBN;
|
|
SELECT 9780123456786::EAN13;
|
|
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";
|
|
|
|
--
|
|
-- cleanup
|
|
--
|
|
DROP EXTENSION isn;
|