mirror of
https://git.postgresql.org/git/postgresql.git
synced 2024-08-28 04:27:19 +02:00
223 lines
7.7 KiB
Plaintext
223 lines
7.7 KiB
Plaintext
|
--
|
||
|
-- Test ISN extension
|
||
|
--
|
||
|
CREATE EXTENSION isn;
|
||
|
--
|
||
|
-- 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;
|