mirror of
https://git.postgresql.org/git/postgresql.git
synced 2024-08-26 16:37:19 +02:00
123 lines
3.2 KiB
SQL
123 lines
3.2 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";
|
|
|
|
-- test non-error-throwing input API
|
|
SELECT str as isn, typ as "type",
|
|
pg_input_is_valid(str,typ) as ok,
|
|
pg_input_error_message(str,typ) as errmsg
|
|
FROM (VALUES ('9780123456786', 'UPC'),
|
|
('postgresql...','EAN13'),
|
|
('9771234567003','ISSN'))
|
|
AS a(str,typ);
|
|
|
|
--
|
|
-- cleanup
|
|
--
|
|
DROP EXTENSION isn;
|