From 2822c7c0fce20db579c0ae7042529a418ff41d48 Mon Sep 17 00:00:00 2001
From: Tom Lane <tgl@sss.pgh.pa.us>
Date: Fri, 24 Nov 2006 18:44:37 +0000
Subject: [PATCH] Make contrib/isn pass the opr_sanity sanity checks: add
 missing commutator operators, and mark hash-opclass members as oprcanhash.
 This is a pretty ugly, brute-force solution, but it seems that getting rid of
 all these redundant-looking operators would require some tweaks in the core
 operator-resolution code to behave nicely, and I'm not willing to risk that
 just before RC1.

---
 contrib/isn/isn.sql.in | 1215 +++++++++++++++++++++++++++++++++-------
 1 file changed, 1010 insertions(+), 205 deletions(-)

diff --git a/contrib/isn/isn.sql.in b/contrib/isn/isn.sql.in
index 7268f642678..1bae4b01d0b 100644
--- a/contrib/isn/isn.sql.in
+++ b/contrib/isn/isn.sql.in
@@ -2,7 +2,7 @@
 --	PostgreSQL code for ISNs (ISBN, ISMN, ISSN, EAN13, UPC)
 --  Copyright (c) 2004-2006, German Mendez Bravo (Kronuz)
 --
---	$PostgreSQL: pgsql/contrib/isn/isn.sql.in,v 1.3 2006/10/01 18:37:53 tgl Exp $
+--	$PostgreSQL: pgsql/contrib/isn/isn.sql.in,v 1.4 2006/11/24 18:44:37 tgl Exp $
 --
 -- Example:
 --   create table test ( id isbn );
@@ -500,6 +500,37 @@ CREATE FUNCTION isnne(isbn13, isbn)
 	LANGUAGE 'internal' 
 	IMMUTABLE STRICT;
 
+CREATE FUNCTION isnlt(isbn13, ean13)
+	RETURNS boolean
+	AS 'int8lt'
+	LANGUAGE 'internal' 
+	IMMUTABLE STRICT;
+CREATE FUNCTION isnle(isbn13, ean13)
+	RETURNS boolean
+	AS 'int8le'
+	LANGUAGE 'internal' 
+	IMMUTABLE STRICT;
+CREATE FUNCTION isneq(isbn13, ean13)
+	RETURNS boolean
+	AS 'int8eq'
+	LANGUAGE 'internal' 
+	IMMUTABLE STRICT;
+CREATE FUNCTION isnge(isbn13, ean13)
+	RETURNS boolean
+	AS 'int8ge'
+	LANGUAGE 'internal' 
+	IMMUTABLE STRICT;
+CREATE FUNCTION isngt(isbn13, ean13)
+	RETURNS boolean
+	AS 'int8gt'
+	LANGUAGE 'internal' 
+	IMMUTABLE STRICT;
+CREATE FUNCTION isnne(isbn13, ean13)
+	RETURNS boolean
+	AS 'int8ne'
+	LANGUAGE 'internal' 
+	IMMUTABLE STRICT;
+
 ---------------------------------------------------
 -- ISBN:
 CREATE FUNCTION isnlt(isbn, isbn)
@@ -533,6 +564,68 @@ CREATE FUNCTION isnne(isbn, isbn)
 	LANGUAGE 'internal' 
 	IMMUTABLE STRICT;
 
+CREATE FUNCTION isnlt(isbn, isbn13)
+	RETURNS boolean
+	AS 'int8lt'
+	LANGUAGE 'internal' 
+	IMMUTABLE STRICT;
+CREATE FUNCTION isnle(isbn, isbn13)
+	RETURNS boolean
+	AS 'int8le'
+	LANGUAGE 'internal' 
+	IMMUTABLE STRICT;
+CREATE FUNCTION isneq(isbn, isbn13)
+	RETURNS boolean
+	AS 'int8eq'
+	LANGUAGE 'internal' 
+	IMMUTABLE STRICT;
+CREATE FUNCTION isnge(isbn, isbn13)
+	RETURNS boolean
+	AS 'int8ge'
+	LANGUAGE 'internal' 
+	IMMUTABLE STRICT;
+CREATE FUNCTION isngt(isbn, isbn13)
+	RETURNS boolean
+	AS 'int8gt'
+	LANGUAGE 'internal' 
+	IMMUTABLE STRICT;
+CREATE FUNCTION isnne(isbn, isbn13)
+	RETURNS boolean
+	AS 'int8ne'
+	LANGUAGE 'internal' 
+	IMMUTABLE STRICT;
+
+CREATE FUNCTION isnlt(isbn, ean13)
+	RETURNS boolean
+	AS 'int8lt'
+	LANGUAGE 'internal' 
+	IMMUTABLE STRICT;
+CREATE FUNCTION isnle(isbn, ean13)
+	RETURNS boolean
+	AS 'int8le'
+	LANGUAGE 'internal' 
+	IMMUTABLE STRICT;
+CREATE FUNCTION isneq(isbn, ean13)
+	RETURNS boolean
+	AS 'int8eq'
+	LANGUAGE 'internal' 
+	IMMUTABLE STRICT;
+CREATE FUNCTION isnge(isbn, ean13)
+	RETURNS boolean
+	AS 'int8ge'
+	LANGUAGE 'internal' 
+	IMMUTABLE STRICT;
+CREATE FUNCTION isngt(isbn, ean13)
+	RETURNS boolean
+	AS 'int8gt'
+	LANGUAGE 'internal' 
+	IMMUTABLE STRICT;
+CREATE FUNCTION isnne(isbn, ean13)
+	RETURNS boolean
+	AS 'int8ne'
+	LANGUAGE 'internal' 
+	IMMUTABLE STRICT;
+
 ---------------------------------------------------
 -- ISMN13:
 CREATE FUNCTION isnlt(ismn13, ismn13)
@@ -597,6 +690,37 @@ CREATE FUNCTION isnne(ismn13, ismn)
 	LANGUAGE 'internal' 
 	IMMUTABLE STRICT;
 
+CREATE FUNCTION isnlt(ismn13, ean13)
+	RETURNS boolean
+	AS 'int8lt'
+	LANGUAGE 'internal' 
+	IMMUTABLE STRICT;
+CREATE FUNCTION isnle(ismn13, ean13)
+	RETURNS boolean
+	AS 'int8le'
+	LANGUAGE 'internal' 
+	IMMUTABLE STRICT;
+CREATE FUNCTION isneq(ismn13, ean13)
+	RETURNS boolean
+	AS 'int8eq'
+	LANGUAGE 'internal' 
+	IMMUTABLE STRICT;
+CREATE FUNCTION isnge(ismn13, ean13)
+	RETURNS boolean
+	AS 'int8ge'
+	LANGUAGE 'internal' 
+	IMMUTABLE STRICT;
+CREATE FUNCTION isngt(ismn13, ean13)
+	RETURNS boolean
+	AS 'int8gt'
+	LANGUAGE 'internal' 
+	IMMUTABLE STRICT;
+CREATE FUNCTION isnne(ismn13, ean13)
+	RETURNS boolean
+	AS 'int8ne'
+	LANGUAGE 'internal' 
+	IMMUTABLE STRICT;
+
 ---------------------------------------------------
 -- ISMN:
 CREATE FUNCTION isnlt(ismn, ismn)
@@ -630,6 +754,68 @@ CREATE FUNCTION isnne(ismn, ismn)
 	LANGUAGE 'internal' 
 	IMMUTABLE STRICT;
 
+CREATE FUNCTION isnlt(ismn, ismn13)
+	RETURNS boolean
+	AS 'int8lt'
+	LANGUAGE 'internal' 
+	IMMUTABLE STRICT;
+CREATE FUNCTION isnle(ismn, ismn13)
+	RETURNS boolean
+	AS 'int8le'
+	LANGUAGE 'internal' 
+	IMMUTABLE STRICT;
+CREATE FUNCTION isneq(ismn, ismn13)
+	RETURNS boolean
+	AS 'int8eq'
+	LANGUAGE 'internal' 
+	IMMUTABLE STRICT;
+CREATE FUNCTION isnge(ismn, ismn13)
+	RETURNS boolean
+	AS 'int8ge'
+	LANGUAGE 'internal' 
+	IMMUTABLE STRICT;
+CREATE FUNCTION isngt(ismn, ismn13)
+	RETURNS boolean
+	AS 'int8gt'
+	LANGUAGE 'internal' 
+	IMMUTABLE STRICT;
+CREATE FUNCTION isnne(ismn, ismn13)
+	RETURNS boolean
+	AS 'int8ne'
+	LANGUAGE 'internal' 
+	IMMUTABLE STRICT;
+
+CREATE FUNCTION isnlt(ismn, ean13)
+	RETURNS boolean
+	AS 'int8lt'
+	LANGUAGE 'internal' 
+	IMMUTABLE STRICT;
+CREATE FUNCTION isnle(ismn, ean13)
+	RETURNS boolean
+	AS 'int8le'
+	LANGUAGE 'internal' 
+	IMMUTABLE STRICT;
+CREATE FUNCTION isneq(ismn, ean13)
+	RETURNS boolean
+	AS 'int8eq'
+	LANGUAGE 'internal' 
+	IMMUTABLE STRICT;
+CREATE FUNCTION isnge(ismn, ean13)
+	RETURNS boolean
+	AS 'int8ge'
+	LANGUAGE 'internal' 
+	IMMUTABLE STRICT;
+CREATE FUNCTION isngt(ismn, ean13)
+	RETURNS boolean
+	AS 'int8gt'
+	LANGUAGE 'internal' 
+	IMMUTABLE STRICT;
+CREATE FUNCTION isnne(ismn, ean13)
+	RETURNS boolean
+	AS 'int8ne'
+	LANGUAGE 'internal' 
+	IMMUTABLE STRICT;
+
 ---------------------------------------------------
 -- ISSN13:
 CREATE FUNCTION isnlt(issn13, issn13)
@@ -694,6 +880,37 @@ CREATE FUNCTION isnne(issn13, issn)
 	LANGUAGE 'internal' 
 	IMMUTABLE STRICT;
 
+CREATE FUNCTION isnlt(issn13, ean13)
+	RETURNS boolean
+	AS 'int8lt'
+	LANGUAGE 'internal' 
+	IMMUTABLE STRICT;
+CREATE FUNCTION isnle(issn13, ean13)
+	RETURNS boolean
+	AS 'int8le'
+	LANGUAGE 'internal' 
+	IMMUTABLE STRICT;
+CREATE FUNCTION isneq(issn13, ean13)
+	RETURNS boolean
+	AS 'int8eq'
+	LANGUAGE 'internal' 
+	IMMUTABLE STRICT;
+CREATE FUNCTION isnge(issn13, ean13)
+	RETURNS boolean
+	AS 'int8ge'
+	LANGUAGE 'internal' 
+	IMMUTABLE STRICT;
+CREATE FUNCTION isngt(issn13, ean13)
+	RETURNS boolean
+	AS 'int8gt'
+	LANGUAGE 'internal' 
+	IMMUTABLE STRICT;
+CREATE FUNCTION isnne(issn13, ean13)
+	RETURNS boolean
+	AS 'int8ne'
+	LANGUAGE 'internal' 
+	IMMUTABLE STRICT;
+
 ---------------------------------------------------
 -- ISSN:
 CREATE FUNCTION isnlt(issn, issn)
@@ -727,6 +944,68 @@ CREATE FUNCTION isnne(issn, issn)
 	LANGUAGE 'internal' 
 	IMMUTABLE STRICT;
 
+CREATE FUNCTION isnlt(issn, issn13)
+	RETURNS boolean
+	AS 'int8lt'
+	LANGUAGE 'internal' 
+	IMMUTABLE STRICT;
+CREATE FUNCTION isnle(issn, issn13)
+	RETURNS boolean
+	AS 'int8le'
+	LANGUAGE 'internal' 
+	IMMUTABLE STRICT;
+CREATE FUNCTION isneq(issn, issn13)
+	RETURNS boolean
+	AS 'int8eq'
+	LANGUAGE 'internal' 
+	IMMUTABLE STRICT;
+CREATE FUNCTION isnge(issn, issn13)
+	RETURNS boolean
+	AS 'int8ge'
+	LANGUAGE 'internal' 
+	IMMUTABLE STRICT;
+CREATE FUNCTION isngt(issn, issn13)
+	RETURNS boolean
+	AS 'int8gt'
+	LANGUAGE 'internal' 
+	IMMUTABLE STRICT;
+CREATE FUNCTION isnne(issn, issn13)
+	RETURNS boolean
+	AS 'int8ne'
+	LANGUAGE 'internal' 
+	IMMUTABLE STRICT;
+
+CREATE FUNCTION isnlt(issn, ean13)
+	RETURNS boolean
+	AS 'int8lt'
+	LANGUAGE 'internal' 
+	IMMUTABLE STRICT;
+CREATE FUNCTION isnle(issn, ean13)
+	RETURNS boolean
+	AS 'int8le'
+	LANGUAGE 'internal' 
+	IMMUTABLE STRICT;
+CREATE FUNCTION isneq(issn, ean13)
+	RETURNS boolean
+	AS 'int8eq'
+	LANGUAGE 'internal' 
+	IMMUTABLE STRICT;
+CREATE FUNCTION isnge(issn, ean13)
+	RETURNS boolean
+	AS 'int8ge'
+	LANGUAGE 'internal' 
+	IMMUTABLE STRICT;
+CREATE FUNCTION isngt(issn, ean13)
+	RETURNS boolean
+	AS 'int8gt'
+	LANGUAGE 'internal' 
+	IMMUTABLE STRICT;
+CREATE FUNCTION isnne(issn, ean13)
+	RETURNS boolean
+	AS 'int8ne'
+	LANGUAGE 'internal' 
+	IMMUTABLE STRICT;
+
 ---------------------------------------------------
 -- UPC:
 CREATE FUNCTION isnlt(upc, upc)
@@ -760,11 +1039,39 @@ CREATE FUNCTION isnne(upc, upc)
 	LANGUAGE 'internal' 
 	IMMUTABLE STRICT;
 
+CREATE FUNCTION isnlt(upc, ean13)
+	RETURNS boolean
+	AS 'int8lt'
+	LANGUAGE 'internal' 
+	IMMUTABLE STRICT;
+CREATE FUNCTION isnle(upc, ean13)
+	RETURNS boolean
+	AS 'int8le'
+	LANGUAGE 'internal' 
+	IMMUTABLE STRICT;
+CREATE FUNCTION isneq(upc, ean13)
+	RETURNS boolean
+	AS 'int8eq'
+	LANGUAGE 'internal' 
+	IMMUTABLE STRICT;
+CREATE FUNCTION isnge(upc, ean13)
+	RETURNS boolean
+	AS 'int8ge'
+	LANGUAGE 'internal' 
+	IMMUTABLE STRICT;
+CREATE FUNCTION isngt(upc, ean13)
+	RETURNS boolean
+	AS 'int8gt'
+	LANGUAGE 'internal' 
+	IMMUTABLE STRICT;
+CREATE FUNCTION isnne(upc, ean13)
+	RETURNS boolean
+	AS 'int8ne'
+	LANGUAGE 'internal' 
+	IMMUTABLE STRICT;
+
 --
---	Now the operators.  Note how some of the parameters to some
---	of the 'CREATE OPERATOR' commands are commented out.  This
---	is because they reference as yet undefined operators, and
---	will be implicitly defined when those are, further down.
+-- Now the operators:
 --
 
 --
@@ -794,7 +1101,8 @@ CREATE OPERATOR = (
 	COMMUTATOR = =,
 	NEGATOR = <>,
 	RESTRICT = eqsel,
-	JOIN = eqjoinsel);
+	JOIN = eqjoinsel,
+	HASHES);
 CREATE OPERATOR >= (
 	PROCEDURE = isnge,
 	LEFTARG = ean13,
@@ -871,15 +1179,64 @@ CREATE OPERATOR <> (
 
 CREATE OPERATOR < (
 	PROCEDURE = isnlt,
-	LEFTARG = ean13,
-	RIGHTARG = ismn13,
+	LEFTARG = isbn13,
+	RIGHTARG = ean13,
 	COMMUTATOR = >,
 	NEGATOR = >=,
 	RESTRICT = scalarltsel,
 	JOIN = scalarltjoinsel);
 CREATE OPERATOR <= (
 	PROCEDURE = isnle,
-	LEFTARG = ean13,
+	LEFTARG = isbn13,
+	RIGHTARG = ean13,
+	COMMUTATOR = >=,
+	NEGATOR = >,
+	RESTRICT = scalarltsel,
+	JOIN = scalarltjoinsel);
+CREATE OPERATOR = (
+	PROCEDURE = isneq,
+	LEFTARG = isbn13,
+	RIGHTARG = ean13,
+	COMMUTATOR = =,
+	NEGATOR = <>,
+	RESTRICT = eqsel,
+	JOIN = eqjoinsel);
+CREATE OPERATOR >= (
+	PROCEDURE = isnge,
+	LEFTARG = isbn13,
+	RIGHTARG = ean13,
+	COMMUTATOR = <=,
+	NEGATOR = <,
+	RESTRICT = scalargtsel,
+	JOIN = scalargtjoinsel );
+CREATE OPERATOR > (
+	PROCEDURE = isngt,
+	LEFTARG = isbn13,
+	RIGHTARG = ean13,
+	COMMUTATOR = <,
+	NEGATOR = <=,
+	RESTRICT = scalargtsel,
+	JOIN = scalargtjoinsel );
+CREATE OPERATOR <> (
+	PROCEDURE = isnne,
+	LEFTARG = isbn13,
+	RIGHTARG = ean13,
+	COMMUTATOR = <>,
+	NEGATOR = =,
+	RESTRICT = neqsel,
+	JOIN = neqjoinsel);
+
+CREATE OPERATOR < (
+	PROCEDURE = isnlt,
+	LEFTARG = ean13,
+	RIGHTARG = ismn13,
+	COMMUTATOR = >,
+	NEGATOR = >=,
+	RESTRICT = scalarltsel,
+	JOIN = scalarltjoinsel);
+CREATE OPERATOR <= (
+	PROCEDURE = isnle,
+	LEFTARG = ean13,
 	RIGHTARG = ismn13,
 	COMMUTATOR = >=,
 	NEGATOR = >,
@@ -918,6 +1275,55 @@ CREATE OPERATOR <> (
 	RESTRICT = neqsel,
 	JOIN = neqjoinsel);
 
+CREATE OPERATOR < (
+	PROCEDURE = isnlt,
+	LEFTARG = ismn13,
+	RIGHTARG = ean13,
+	COMMUTATOR = >,
+	NEGATOR = >=,
+	RESTRICT = scalarltsel,
+	JOIN = scalarltjoinsel);
+CREATE OPERATOR <= (
+	PROCEDURE = isnle,
+	LEFTARG = ismn13,
+	RIGHTARG = ean13,
+	COMMUTATOR = >=,
+	NEGATOR = >,
+	RESTRICT = scalarltsel,
+	JOIN = scalarltjoinsel);
+CREATE OPERATOR = (
+	PROCEDURE = isneq,
+	LEFTARG = ismn13,
+	RIGHTARG = ean13,
+	COMMUTATOR = =,
+	NEGATOR = <>,
+	RESTRICT = eqsel,
+	JOIN = eqjoinsel);
+CREATE OPERATOR >= (
+	PROCEDURE = isnge,
+	LEFTARG = ismn13,
+	RIGHTARG = ean13,
+	COMMUTATOR = <=,
+	NEGATOR = <,
+	RESTRICT = scalargtsel,
+	JOIN = scalargtjoinsel );
+CREATE OPERATOR > (
+	PROCEDURE = isngt,
+	LEFTARG = ismn13,
+	RIGHTARG = ean13,
+	COMMUTATOR = <,
+	NEGATOR = <=,
+	RESTRICT = scalargtsel,
+	JOIN = scalargtjoinsel );
+CREATE OPERATOR <> (
+	PROCEDURE = isnne,
+	LEFTARG = ismn13,
+	RIGHTARG = ean13,
+	COMMUTATOR = <>,
+	NEGATOR = =,
+	RESTRICT = neqsel,
+	JOIN = neqjoinsel);
+
 CREATE OPERATOR < (
 	PROCEDURE = isnlt,
 	LEFTARG = ean13,
@@ -1145,72 +1551,480 @@ CREATE OPERATOR >= (
 	COMMUTATOR = <=,
 	NEGATOR = <,
 	RESTRICT = scalargtsel,
-	JOIN = scalargtjoinsel);
+	JOIN = scalargtjoinsel);
+CREATE OPERATOR > (
+	PROCEDURE = isngt,
+	LEFTARG = ean13,
+	RIGHTARG = upc,
+	COMMUTATOR = <,
+	NEGATOR = <=,
+	RESTRICT = scalargtsel,
+	JOIN = scalargtjoinsel);
+CREATE OPERATOR <> (
+	PROCEDURE = isnne,
+	LEFTARG = ean13,
+	RIGHTARG = upc,
+	COMMUTATOR = <>,
+	NEGATOR = =,
+	RESTRICT = neqsel,
+	JOIN = neqjoinsel);
+
+--
+-- ISBN13 operators:
+--
+---------------------------------------------------
+CREATE OPERATOR < (
+	PROCEDURE = isnlt,
+	LEFTARG = isbn13,
+	RIGHTARG = isbn13,
+	COMMUTATOR = >,
+	NEGATOR = >=,
+	RESTRICT = scalarltsel,
+	JOIN = scalarltjoinsel);
+CREATE OPERATOR <= (
+	PROCEDURE = isnle,
+	LEFTARG = isbn13,
+	RIGHTARG = isbn13,
+	COMMUTATOR = >=,
+	NEGATOR = >,
+	RESTRICT = scalarltsel,
+	JOIN = scalarltjoinsel);
+CREATE OPERATOR = (
+	PROCEDURE = isneq,
+	LEFTARG = isbn13,
+	RIGHTARG = isbn13,
+	COMMUTATOR = =,
+	NEGATOR = <>,
+	RESTRICT = eqsel,
+	JOIN = eqjoinsel,
+	HASHES);
+CREATE OPERATOR >= (
+	PROCEDURE = isnge,
+	LEFTARG = isbn13,
+	RIGHTARG = isbn13,
+	COMMUTATOR = <=,
+	NEGATOR = <,
+	RESTRICT = scalargtsel,
+	JOIN = scalargtjoinsel );
+CREATE OPERATOR > (
+	PROCEDURE = isngt,
+	LEFTARG = isbn13,
+	RIGHTARG = isbn13,
+	COMMUTATOR = <,
+	NEGATOR = <=,
+	RESTRICT = scalargtsel,
+	JOIN = scalargtjoinsel );
+CREATE OPERATOR <> (
+	PROCEDURE = isnne,
+	LEFTARG = isbn13,
+	RIGHTARG = isbn13,
+	COMMUTATOR = <>,
+	NEGATOR = =,
+	RESTRICT = neqsel,
+	JOIN = neqjoinsel);
+
+CREATE OPERATOR < (
+	PROCEDURE = isnlt,
+	LEFTARG = isbn13,
+	RIGHTARG = isbn,
+	COMMUTATOR = >,
+	NEGATOR = >=,
+	RESTRICT = scalarltsel,
+	JOIN = scalarltjoinsel);
+CREATE OPERATOR <= (
+	PROCEDURE = isnle,
+	LEFTARG = isbn13,
+	RIGHTARG = isbn,
+	COMMUTATOR = >=,
+	NEGATOR = >,
+	RESTRICT = scalarltsel,
+	JOIN = scalarltjoinsel);
+CREATE OPERATOR = (
+	PROCEDURE = isneq,
+	LEFTARG = isbn13,
+	RIGHTARG = isbn,
+	COMMUTATOR = =,
+	NEGATOR = <>,
+	RESTRICT = eqsel,
+	JOIN = eqjoinsel);
+CREATE OPERATOR >= (
+	PROCEDURE = isnge,
+	LEFTARG = isbn13,
+	RIGHTARG = isbn,
+	COMMUTATOR = <=,
+	NEGATOR = <,
+	RESTRICT = scalargtsel,
+	JOIN = scalargtjoinsel );
+CREATE OPERATOR > (
+	PROCEDURE = isngt,
+	LEFTARG = isbn13,
+	RIGHTARG = isbn,
+	COMMUTATOR = <,
+	NEGATOR = <=,
+	RESTRICT = scalargtsel,
+	JOIN = scalargtjoinsel );
+CREATE OPERATOR <> (
+	PROCEDURE = isnne,
+	LEFTARG = isbn13,
+	RIGHTARG = isbn,
+	COMMUTATOR = <>,
+	NEGATOR = =,
+	RESTRICT = neqsel,
+	JOIN = neqjoinsel);
+
+--
+-- ISBN operators:
+--
+---------------------------------------------------
+CREATE OPERATOR < (
+	PROCEDURE = isnlt,
+	LEFTARG = isbn,
+	RIGHTARG = isbn,
+	COMMUTATOR = >,
+	NEGATOR = >=,
+	RESTRICT = scalarltsel,
+	JOIN = scalarltjoinsel);
+CREATE OPERATOR <= (
+	PROCEDURE = isnle,
+	LEFTARG = isbn,
+	RIGHTARG = isbn,
+	COMMUTATOR = >=,
+	NEGATOR = >,
+	RESTRICT = scalarltsel,
+	JOIN = scalarltjoinsel);
+CREATE OPERATOR = (
+	PROCEDURE = isneq,
+	LEFTARG = isbn,
+	RIGHTARG = isbn,
+	COMMUTATOR = =,
+	NEGATOR = <>,
+	RESTRICT = eqsel,
+	JOIN = eqjoinsel,
+	HASHES);
+CREATE OPERATOR >= (
+	PROCEDURE = isnge,
+	LEFTARG = isbn,
+	RIGHTARG = isbn,
+	COMMUTATOR = <=,
+	NEGATOR = <,
+	RESTRICT = scalargtsel,
+	JOIN = scalargtjoinsel );
+CREATE OPERATOR > (
+	PROCEDURE = isngt,
+	LEFTARG = isbn,
+	RIGHTARG = isbn,
+	COMMUTATOR = <,
+	NEGATOR = <=,
+	RESTRICT = scalargtsel,
+	JOIN = scalargtjoinsel );
+CREATE OPERATOR <> (
+	PROCEDURE = isnne,
+	LEFTARG = isbn,
+	RIGHTARG = isbn,
+	COMMUTATOR = <>,
+	NEGATOR = =,
+	RESTRICT = neqsel,
+	JOIN = neqjoinsel);
+
+CREATE OPERATOR < (
+	PROCEDURE = isnlt,
+	LEFTARG = isbn,
+	RIGHTARG = isbn13,
+	COMMUTATOR = >,
+	NEGATOR = >=,
+	RESTRICT = scalarltsel,
+	JOIN = scalarltjoinsel);
+CREATE OPERATOR <= (
+	PROCEDURE = isnle,
+	LEFTARG = isbn,
+	RIGHTARG = isbn13,
+	COMMUTATOR = >=,
+	NEGATOR = >,
+	RESTRICT = scalarltsel,
+	JOIN = scalarltjoinsel);
+CREATE OPERATOR = (
+	PROCEDURE = isneq,
+	LEFTARG = isbn,
+	RIGHTARG = isbn13,
+	COMMUTATOR = =,
+	NEGATOR = <>,
+	RESTRICT = eqsel,
+	JOIN = eqjoinsel);
+CREATE OPERATOR >= (
+	PROCEDURE = isnge,
+	LEFTARG = isbn,
+	RIGHTARG = isbn13,
+	COMMUTATOR = <=,
+	NEGATOR = <,
+	RESTRICT = scalargtsel,
+	JOIN = scalargtjoinsel );
+CREATE OPERATOR > (
+	PROCEDURE = isngt,
+	LEFTARG = isbn,
+	RIGHTARG = isbn13,
+	COMMUTATOR = <,
+	NEGATOR = <=,
+	RESTRICT = scalargtsel,
+	JOIN = scalargtjoinsel );
+CREATE OPERATOR <> (
+	PROCEDURE = isnne,
+	LEFTARG = isbn,
+	RIGHTARG = isbn13,
+	COMMUTATOR = <>,
+	NEGATOR = =,
+	RESTRICT = neqsel,
+	JOIN = neqjoinsel);
+
+CREATE OPERATOR < (
+	PROCEDURE = isnlt,
+	LEFTARG = isbn,
+	RIGHTARG = ean13,
+	COMMUTATOR = >,
+	NEGATOR = >=,
+	RESTRICT = scalarltsel,
+	JOIN = scalarltjoinsel);
+CREATE OPERATOR <= (
+	PROCEDURE = isnle,
+	LEFTARG = isbn,
+	RIGHTARG = ean13,
+	COMMUTATOR = >=,
+	NEGATOR = >,
+	RESTRICT = scalarltsel,
+	JOIN = scalarltjoinsel);
+CREATE OPERATOR = (
+	PROCEDURE = isneq,
+	LEFTARG = isbn,
+	RIGHTARG = ean13,
+	COMMUTATOR = =,
+	NEGATOR = <>,
+	RESTRICT = eqsel,
+	JOIN = eqjoinsel);
+CREATE OPERATOR >= (
+	PROCEDURE = isnge,
+	LEFTARG = isbn,
+	RIGHTARG = ean13,
+	COMMUTATOR = <=,
+	NEGATOR = <,
+	RESTRICT = scalargtsel,
+	JOIN = scalargtjoinsel );
+CREATE OPERATOR > (
+	PROCEDURE = isngt,
+	LEFTARG = isbn,
+	RIGHTARG = ean13,
+	COMMUTATOR = <,
+	NEGATOR = <=,
+	RESTRICT = scalargtsel,
+	JOIN = scalargtjoinsel );
+CREATE OPERATOR <> (
+	PROCEDURE = isnne,
+	LEFTARG = isbn,
+	RIGHTARG = ean13,
+	COMMUTATOR = <>,
+	NEGATOR = =,
+	RESTRICT = neqsel,
+	JOIN = neqjoinsel);
+
+--
+-- ISMN13 operators:
+--
+---------------------------------------------------
+CREATE OPERATOR < (
+	PROCEDURE = isnlt,
+	LEFTARG = ismn13,
+	RIGHTARG = ismn13,
+	COMMUTATOR = >,
+	NEGATOR = >=,
+	RESTRICT = scalarltsel,
+	JOIN = scalarltjoinsel);
+CREATE OPERATOR <= (
+	PROCEDURE = isnle,
+	LEFTARG = ismn13,
+	RIGHTARG = ismn13,
+	COMMUTATOR = >=,
+	NEGATOR = >,
+	RESTRICT = scalarltsel,
+	JOIN = scalarltjoinsel);
+CREATE OPERATOR = (
+	PROCEDURE = isneq,
+	LEFTARG = ismn13,
+	RIGHTARG = ismn13,
+	COMMUTATOR = =,
+	NEGATOR = <>,
+	RESTRICT = eqsel,
+	JOIN = eqjoinsel,
+	HASHES);
+CREATE OPERATOR >= (
+	PROCEDURE = isnge,
+	LEFTARG = ismn13,
+	RIGHTARG = ismn13,
+	COMMUTATOR = <=,
+	NEGATOR = <,
+	RESTRICT = scalargtsel,
+	JOIN = scalargtjoinsel );
+CREATE OPERATOR > (
+	PROCEDURE = isngt,
+	LEFTARG = ismn13,
+	RIGHTARG = ismn13,
+	COMMUTATOR = <,
+	NEGATOR = <=,
+	RESTRICT = scalargtsel,
+	JOIN = scalargtjoinsel );
+CREATE OPERATOR <> (
+	PROCEDURE = isnne,
+	LEFTARG = ismn13,
+	RIGHTARG = ismn13,
+	COMMUTATOR = <>,
+	NEGATOR = =,
+	RESTRICT = neqsel,
+	JOIN = neqjoinsel);
+
+CREATE OPERATOR < (
+	PROCEDURE = isnlt,
+	LEFTARG = ismn13,
+	RIGHTARG = ismn,
+	COMMUTATOR = >,
+	NEGATOR = >=,
+	RESTRICT = scalarltsel,
+	JOIN = scalarltjoinsel);
+CREATE OPERATOR <= (
+	PROCEDURE = isnle,
+	LEFTARG = ismn13,
+	RIGHTARG = ismn,
+	COMMUTATOR = >=,
+	NEGATOR = >,
+	RESTRICT = scalarltsel,
+	JOIN = scalarltjoinsel);
+CREATE OPERATOR = (
+	PROCEDURE = isneq,
+	LEFTARG = ismn13,
+	RIGHTARG = ismn,
+	COMMUTATOR = =,
+	NEGATOR = <>,
+	RESTRICT = eqsel,
+	JOIN = eqjoinsel);
+CREATE OPERATOR >= (
+	PROCEDURE = isnge,
+	LEFTARG = ismn13,
+	RIGHTARG = ismn,
+	COMMUTATOR = <=,
+	NEGATOR = <,
+	RESTRICT = scalargtsel,
+	JOIN = scalargtjoinsel );
+CREATE OPERATOR > (
+	PROCEDURE = isngt,
+	LEFTARG = ismn13,
+	RIGHTARG = ismn,
+	COMMUTATOR = <,
+	NEGATOR = <=,
+	RESTRICT = scalargtsel,
+	JOIN = scalargtjoinsel );
+CREATE OPERATOR <> (
+	PROCEDURE = isnne,
+	LEFTARG = ismn13,
+	RIGHTARG = ismn,
+	COMMUTATOR = <>,
+	NEGATOR = =,
+	RESTRICT = neqsel,
+	JOIN = neqjoinsel);
+
+--
+-- ISMN operators:
+--
+---------------------------------------------------
+CREATE OPERATOR < (
+	PROCEDURE = isnlt,
+	LEFTARG = ismn,
+	RIGHTARG = ismn,
+	COMMUTATOR = >,
+	NEGATOR = >=,
+	RESTRICT = scalarltsel,
+	JOIN = scalarltjoinsel);
+CREATE OPERATOR <= (
+	PROCEDURE = isnle,
+	LEFTARG = ismn,
+	RIGHTARG = ismn,
+	COMMUTATOR = >=,
+	NEGATOR = >,
+	RESTRICT = scalarltsel,
+	JOIN = scalarltjoinsel);
+CREATE OPERATOR = (
+	PROCEDURE = isneq,
+	LEFTARG = ismn,
+	RIGHTARG = ismn,
+	COMMUTATOR = =,
+	NEGATOR = <>,
+	RESTRICT = eqsel,
+	JOIN = eqjoinsel,
+	HASHES);
+CREATE OPERATOR >= (
+	PROCEDURE = isnge,
+	LEFTARG = ismn,
+	RIGHTARG = ismn,
+	COMMUTATOR = <=,
+	NEGATOR = <,
+	RESTRICT = scalargtsel,
+	JOIN = scalargtjoinsel );
 CREATE OPERATOR > (
 	PROCEDURE = isngt,
-	LEFTARG = ean13,
-	RIGHTARG = upc,
+	LEFTARG = ismn,
+	RIGHTARG = ismn,
 	COMMUTATOR = <,
 	NEGATOR = <=,
 	RESTRICT = scalargtsel,
-	JOIN = scalargtjoinsel);
+	JOIN = scalargtjoinsel );
 CREATE OPERATOR <> (
 	PROCEDURE = isnne,
-	LEFTARG = ean13,
-	RIGHTARG = upc,
+	LEFTARG = ismn,
+	RIGHTARG = ismn,
 	COMMUTATOR = <>,
 	NEGATOR = =,
 	RESTRICT = neqsel,
 	JOIN = neqjoinsel);
 
---
--- ISBN13 operators:
---
----------------------------------------------------
 CREATE OPERATOR < (
 	PROCEDURE = isnlt,
-	LEFTARG = isbn13,
-	RIGHTARG = isbn13,
+	LEFTARG = ismn,
+	RIGHTARG = ismn13,
 	COMMUTATOR = >,
 	NEGATOR = >=,
 	RESTRICT = scalarltsel,
 	JOIN = scalarltjoinsel);
 CREATE OPERATOR <= (
 	PROCEDURE = isnle,
-	LEFTARG = isbn13,
-	RIGHTARG = isbn13,
+	LEFTARG = ismn,
+	RIGHTARG = ismn13,
 	COMMUTATOR = >=,
 	NEGATOR = >,
 	RESTRICT = scalarltsel,
 	JOIN = scalarltjoinsel);
 CREATE OPERATOR = (
 	PROCEDURE = isneq,
-	LEFTARG = isbn13,
-	RIGHTARG = isbn13,
+	LEFTARG = ismn,
+	RIGHTARG = ismn13,
 	COMMUTATOR = =,
 	NEGATOR = <>,
 	RESTRICT = eqsel,
 	JOIN = eqjoinsel);
 CREATE OPERATOR >= (
 	PROCEDURE = isnge,
-	LEFTARG = isbn13,
-	RIGHTARG = isbn13,
+	LEFTARG = ismn,
+	RIGHTARG = ismn13,
 	COMMUTATOR = <=,
 	NEGATOR = <,
 	RESTRICT = scalargtsel,
 	JOIN = scalargtjoinsel );
 CREATE OPERATOR > (
 	PROCEDURE = isngt,
-	LEFTARG = isbn13,
-	RIGHTARG = isbn13,
+	LEFTARG = ismn,
+	RIGHTARG = ismn13,
 	COMMUTATOR = <,
 	NEGATOR = <=,
 	RESTRICT = scalargtsel,
 	JOIN = scalargtjoinsel );
 CREATE OPERATOR <> (
 	PROCEDURE = isnne,
-	LEFTARG = isbn13,
-	RIGHTARG = isbn13,
+	LEFTARG = ismn,
+	RIGHTARG = ismn13,
 	COMMUTATOR = <>,
 	NEGATOR = =,
 	RESTRICT = neqsel,
@@ -1218,154 +2032,151 @@ CREATE OPERATOR <> (
 
 CREATE OPERATOR < (
 	PROCEDURE = isnlt,
-	LEFTARG = isbn13,
-	RIGHTARG = isbn,
+	LEFTARG = ismn,
+	RIGHTARG = ean13,
 	COMMUTATOR = >,
 	NEGATOR = >=,
 	RESTRICT = scalarltsel,
 	JOIN = scalarltjoinsel);
 CREATE OPERATOR <= (
 	PROCEDURE = isnle,
-	LEFTARG = isbn13,
-	RIGHTARG = isbn,
+	LEFTARG = ismn,
+	RIGHTARG = ean13,
 	COMMUTATOR = >=,
 	NEGATOR = >,
 	RESTRICT = scalarltsel,
 	JOIN = scalarltjoinsel);
 CREATE OPERATOR = (
 	PROCEDURE = isneq,
-	LEFTARG = isbn13,
-	RIGHTARG = isbn,
+	LEFTARG = ismn,
+	RIGHTARG = ean13,
 	COMMUTATOR = =,
 	NEGATOR = <>,
 	RESTRICT = eqsel,
 	JOIN = eqjoinsel);
 CREATE OPERATOR >= (
 	PROCEDURE = isnge,
-	LEFTARG = isbn13,
-	RIGHTARG = isbn,
+	LEFTARG = ismn,
+	RIGHTARG = ean13,
 	COMMUTATOR = <=,
 	NEGATOR = <,
 	RESTRICT = scalargtsel,
 	JOIN = scalargtjoinsel );
 CREATE OPERATOR > (
 	PROCEDURE = isngt,
-	LEFTARG = isbn13,
-	RIGHTARG = isbn,
+	LEFTARG = ismn,
+	RIGHTARG = ean13,
 	COMMUTATOR = <,
 	NEGATOR = <=,
 	RESTRICT = scalargtsel,
 	JOIN = scalargtjoinsel );
 CREATE OPERATOR <> (
 	PROCEDURE = isnne,
-	LEFTARG = isbn13,
-	RIGHTARG = isbn,
+	LEFTARG = ismn,
+	RIGHTARG = ean13,
 	COMMUTATOR = <>,
 	NEGATOR = =,
 	RESTRICT = neqsel,
 	JOIN = neqjoinsel);
 
 --
--- ISBN operators:
+-- ISSN13 operators:
 --
 ---------------------------------------------------
 CREATE OPERATOR < (
 	PROCEDURE = isnlt,
-	LEFTARG = isbn,
-	RIGHTARG = isbn,
+	LEFTARG = issn13,
+	RIGHTARG = issn13,
 	COMMUTATOR = >,
 	NEGATOR = >=,
 	RESTRICT = scalarltsel,
 	JOIN = scalarltjoinsel);
 CREATE OPERATOR <= (
 	PROCEDURE = isnle,
-	LEFTARG = isbn,
-	RIGHTARG = isbn,
+	LEFTARG = issn13,
+	RIGHTARG = issn13,
 	COMMUTATOR = >=,
 	NEGATOR = >,
 	RESTRICT = scalarltsel,
 	JOIN = scalarltjoinsel);
 CREATE OPERATOR = (
 	PROCEDURE = isneq,
-	LEFTARG = isbn,
-	RIGHTARG = isbn,
+	LEFTARG = issn13,
+	RIGHTARG = issn13,
 	COMMUTATOR = =,
 	NEGATOR = <>,
 	RESTRICT = eqsel,
-	JOIN = eqjoinsel);
+	JOIN = eqjoinsel,
+	HASHES);
 CREATE OPERATOR >= (
 	PROCEDURE = isnge,
-	LEFTARG = isbn,
-	RIGHTARG = isbn,
+	LEFTARG = issn13,
+	RIGHTARG = issn13,
 	COMMUTATOR = <=,
 	NEGATOR = <,
 	RESTRICT = scalargtsel,
 	JOIN = scalargtjoinsel );
 CREATE OPERATOR > (
 	PROCEDURE = isngt,
-	LEFTARG = isbn,
-	RIGHTARG = isbn,
+	LEFTARG = issn13,
+	RIGHTARG = issn13,
 	COMMUTATOR = <,
 	NEGATOR = <=,
 	RESTRICT = scalargtsel,
 	JOIN = scalargtjoinsel );
 CREATE OPERATOR <> (
 	PROCEDURE = isnne,
-	LEFTARG = isbn,
-	RIGHTARG = isbn,
+	LEFTARG = issn13,
+	RIGHTARG = issn13,
 	COMMUTATOR = <>,
 	NEGATOR = =,
 	RESTRICT = neqsel,
 	JOIN = neqjoinsel);
 
---
--- ISMN13 operators:
---
----------------------------------------------------
 CREATE OPERATOR < (
 	PROCEDURE = isnlt,
-	LEFTARG = ismn13,
-	RIGHTARG = ismn13,
+	LEFTARG = issn13,
+	RIGHTARG = issn,
 	COMMUTATOR = >,
 	NEGATOR = >=,
 	RESTRICT = scalarltsel,
 	JOIN = scalarltjoinsel);
 CREATE OPERATOR <= (
 	PROCEDURE = isnle,
-	LEFTARG = ismn13,
-	RIGHTARG = ismn13,
+	LEFTARG = issn13,
+	RIGHTARG = issn,
 	COMMUTATOR = >=,
 	NEGATOR = >,
 	RESTRICT = scalarltsel,
 	JOIN = scalarltjoinsel);
 CREATE OPERATOR = (
 	PROCEDURE = isneq,
-	LEFTARG = ismn13,
-	RIGHTARG = ismn13,
+	LEFTARG = issn13,
+	RIGHTARG = issn,
 	COMMUTATOR = =,
 	NEGATOR = <>,
 	RESTRICT = eqsel,
 	JOIN = eqjoinsel);
 CREATE OPERATOR >= (
 	PROCEDURE = isnge,
-	LEFTARG = ismn13,
-	RIGHTARG = ismn13,
+	LEFTARG = issn13,
+	RIGHTARG = issn,
 	COMMUTATOR = <=,
 	NEGATOR = <,
 	RESTRICT = scalargtsel,
 	JOIN = scalargtjoinsel );
 CREATE OPERATOR > (
 	PROCEDURE = isngt,
-	LEFTARG = ismn13,
-	RIGHTARG = ismn13,
+	LEFTARG = issn13,
+	RIGHTARG = issn,
 	COMMUTATOR = <,
 	NEGATOR = <=,
 	RESTRICT = scalargtsel,
 	JOIN = scalargtjoinsel );
 CREATE OPERATOR <> (
 	PROCEDURE = isnne,
-	LEFTARG = ismn13,
-	RIGHTARG = ismn13,
+	LEFTARG = issn13,
+	RIGHTARG = issn,
 	COMMUTATOR = <>,
 	NEGATOR = =,
 	RESTRICT = neqsel,
@@ -1373,113 +2184,110 @@ CREATE OPERATOR <> (
 
 CREATE OPERATOR < (
 	PROCEDURE = isnlt,
-	LEFTARG = ismn13,
-	RIGHTARG = ismn,
+	LEFTARG = issn13,
+	RIGHTARG = ean13,
 	COMMUTATOR = >,
 	NEGATOR = >=,
 	RESTRICT = scalarltsel,
 	JOIN = scalarltjoinsel);
 CREATE OPERATOR <= (
 	PROCEDURE = isnle,
-	LEFTARG = ismn13,
-	RIGHTARG = ismn,
+	LEFTARG = issn13,
+	RIGHTARG = ean13,
 	COMMUTATOR = >=,
 	NEGATOR = >,
 	RESTRICT = scalarltsel,
 	JOIN = scalarltjoinsel);
 CREATE OPERATOR = (
 	PROCEDURE = isneq,
-	LEFTARG = ismn13,
-	RIGHTARG = ismn,
+	LEFTARG = issn13,
+	RIGHTARG = ean13,
 	COMMUTATOR = =,
 	NEGATOR = <>,
 	RESTRICT = eqsel,
 	JOIN = eqjoinsel);
 CREATE OPERATOR >= (
 	PROCEDURE = isnge,
-	LEFTARG = ismn13,
-	RIGHTARG = ismn,
+	LEFTARG = issn13,
+	RIGHTARG = ean13,
 	COMMUTATOR = <=,
 	NEGATOR = <,
 	RESTRICT = scalargtsel,
 	JOIN = scalargtjoinsel );
 CREATE OPERATOR > (
 	PROCEDURE = isngt,
-	LEFTARG = ismn13,
-	RIGHTARG = ismn,
+	LEFTARG = issn13,
+	RIGHTARG = ean13,
 	COMMUTATOR = <,
 	NEGATOR = <=,
 	RESTRICT = scalargtsel,
 	JOIN = scalargtjoinsel );
 CREATE OPERATOR <> (
 	PROCEDURE = isnne,
-	LEFTARG = ismn13,
-	RIGHTARG = ismn,
+	LEFTARG = issn13,
+	RIGHTARG = ean13,
 	COMMUTATOR = <>,
 	NEGATOR = =,
 	RESTRICT = neqsel,
 	JOIN = neqjoinsel);
 
 --
--- ISMN operators:
+-- ISSN operators:
 --
 ---------------------------------------------------
 CREATE OPERATOR < (
 	PROCEDURE = isnlt,
-	LEFTARG = ismn,
-	RIGHTARG = ismn,
+	LEFTARG = issn,
+	RIGHTARG = issn,
 	COMMUTATOR = >,
 	NEGATOR = >=,
 	RESTRICT = scalarltsel,
 	JOIN = scalarltjoinsel);
 CREATE OPERATOR <= (
 	PROCEDURE = isnle,
-	LEFTARG = ismn,
-	RIGHTARG = ismn,
+	LEFTARG = issn,
+	RIGHTARG = issn,
 	COMMUTATOR = >=,
 	NEGATOR = >,
 	RESTRICT = scalarltsel,
 	JOIN = scalarltjoinsel);
 CREATE OPERATOR = (
 	PROCEDURE = isneq,
-	LEFTARG = ismn,
-	RIGHTARG = ismn,
+	LEFTARG = issn,
+	RIGHTARG = issn,
 	COMMUTATOR = =,
 	NEGATOR = <>,
 	RESTRICT = eqsel,
-	JOIN = eqjoinsel);
+	JOIN = eqjoinsel,
+	HASHES);
 CREATE OPERATOR >= (
 	PROCEDURE = isnge,
-	LEFTARG = ismn,
-	RIGHTARG = ismn,
+	LEFTARG = issn,
+	RIGHTARG = issn,
 	COMMUTATOR = <=,
 	NEGATOR = <,
 	RESTRICT = scalargtsel,
 	JOIN = scalargtjoinsel );
 CREATE OPERATOR > (
 	PROCEDURE = isngt,
-	LEFTARG = ismn,
-	RIGHTARG = ismn,
+	LEFTARG = issn,
+	RIGHTARG = issn,
 	COMMUTATOR = <,
 	NEGATOR = <=,
 	RESTRICT = scalargtsel,
 	JOIN = scalargtjoinsel );
 CREATE OPERATOR <> (
 	PROCEDURE = isnne,
-	LEFTARG = ismn,
-	RIGHTARG = ismn,
+	LEFTARG = issn,
+	RIGHTARG = issn,
 	COMMUTATOR = <>,
 	NEGATOR = =,
 	RESTRICT = neqsel,
 	JOIN = neqjoinsel);
 
---
--- ISSN13 operators:
---
----------------------------------------------------
 CREATE OPERATOR < (
 	PROCEDURE = isnlt,
-	LEFTARG = issn13,
+	LEFTARG = issn,
 	RIGHTARG = issn13,
 	COMMUTATOR = >,
 	NEGATOR = >=,
@@ -1487,7 +2295,7 @@ CREATE OPERATOR < (
 	JOIN = scalarltjoinsel);
 CREATE OPERATOR <= (
 	PROCEDURE = isnle,
-	LEFTARG = issn13,
+	LEFTARG = issn,
 	RIGHTARG = issn13,
 	COMMUTATOR = >=,
 	NEGATOR = >,
@@ -1495,7 +2303,7 @@ CREATE OPERATOR <= (
 	JOIN = scalarltjoinsel);
 CREATE OPERATOR = (
 	PROCEDURE = isneq,
-	LEFTARG = issn13,
+	LEFTARG = issn,
 	RIGHTARG = issn13,
 	COMMUTATOR = =,
 	NEGATOR = <>,
@@ -1503,7 +2311,7 @@ CREATE OPERATOR = (
 	JOIN = eqjoinsel);
 CREATE OPERATOR >= (
 	PROCEDURE = isnge,
-	LEFTARG = issn13,
+	LEFTARG = issn,
 	RIGHTARG = issn13,
 	COMMUTATOR = <=,
 	NEGATOR = <,
@@ -1511,7 +2319,7 @@ CREATE OPERATOR >= (
 	JOIN = scalargtjoinsel );
 CREATE OPERATOR > (
 	PROCEDURE = isngt,
-	LEFTARG = issn13,
+	LEFTARG = issn,
 	RIGHTARG = issn13,
 	COMMUTATOR = <,
 	NEGATOR = <=,
@@ -1519,7 +2327,7 @@ CREATE OPERATOR > (
 	JOIN = scalargtjoinsel );
 CREATE OPERATOR <> (
 	PROCEDURE = isnne,
-	LEFTARG = issn13,
+	LEFTARG = issn,
 	RIGHTARG = issn13,
 	COMMUTATOR = <>,
 	NEGATOR = =,
@@ -1528,114 +2336,111 @@ CREATE OPERATOR <> (
 
 CREATE OPERATOR < (
 	PROCEDURE = isnlt,
-	LEFTARG = issn13,
-	RIGHTARG = issn,
+	LEFTARG = issn,
+	RIGHTARG = ean13,
 	COMMUTATOR = >,
 	NEGATOR = >=,
 	RESTRICT = scalarltsel,
 	JOIN = scalarltjoinsel);
 CREATE OPERATOR <= (
 	PROCEDURE = isnle,
-	LEFTARG = issn13,
-	RIGHTARG = issn,
+	LEFTARG = issn,
+	RIGHTARG = ean13,
 	COMMUTATOR = >=,
 	NEGATOR = >,
 	RESTRICT = scalarltsel,
 	JOIN = scalarltjoinsel);
 CREATE OPERATOR = (
 	PROCEDURE = isneq,
-	LEFTARG = issn13,
-	RIGHTARG = issn,
+	LEFTARG = issn,
+	RIGHTARG = ean13,
 	COMMUTATOR = =,
 	NEGATOR = <>,
 	RESTRICT = eqsel,
 	JOIN = eqjoinsel);
 CREATE OPERATOR >= (
 	PROCEDURE = isnge,
-	LEFTARG = issn13,
-	RIGHTARG = issn,
+	LEFTARG = issn,
+	RIGHTARG = ean13,
 	COMMUTATOR = <=,
 	NEGATOR = <,
 	RESTRICT = scalargtsel,
 	JOIN = scalargtjoinsel );
 CREATE OPERATOR > (
 	PROCEDURE = isngt,
-	LEFTARG = issn13,
-	RIGHTARG = issn,
+	LEFTARG = issn,
+	RIGHTARG = ean13,
 	COMMUTATOR = <,
 	NEGATOR = <=,
 	RESTRICT = scalargtsel,
 	JOIN = scalargtjoinsel );
 CREATE OPERATOR <> (
 	PROCEDURE = isnne,
-	LEFTARG = issn13,
-	RIGHTARG = issn,
+	LEFTARG = issn,
+	RIGHTARG = ean13,
 	COMMUTATOR = <>,
 	NEGATOR = =,
 	RESTRICT = neqsel,
 	JOIN = neqjoinsel);
 
 --
--- ISSN operators:
+-- UPC operators:
 --
 ---------------------------------------------------
 CREATE OPERATOR < (
 	PROCEDURE = isnlt,
-	LEFTARG = issn,
-	RIGHTARG = issn,
+	LEFTARG = upc,
+	RIGHTARG = upc,
 	COMMUTATOR = >,
 	NEGATOR = >=,
 	RESTRICT = scalarltsel,
 	JOIN = scalarltjoinsel);
 CREATE OPERATOR <= (
 	PROCEDURE = isnle,
-	LEFTARG = issn,
-	RIGHTARG = issn,
+	LEFTARG = upc,
+	RIGHTARG = upc,
 	COMMUTATOR = >=,
 	NEGATOR = >,
 	RESTRICT = scalarltsel,
 	JOIN = scalarltjoinsel);
 CREATE OPERATOR = (
 	PROCEDURE = isneq,
-	LEFTARG = issn,
-	RIGHTARG = issn,
+	LEFTARG = upc,
+	RIGHTARG = upc,
 	COMMUTATOR = =,
 	NEGATOR = <>,
 	RESTRICT = eqsel,
-	JOIN = eqjoinsel);
+	JOIN = eqjoinsel,
+	HASHES);
 CREATE OPERATOR >= (
 	PROCEDURE = isnge,
-	LEFTARG = issn,
-	RIGHTARG = issn,
+	LEFTARG = upc,
+	RIGHTARG = upc,
 	COMMUTATOR = <=,
 	NEGATOR = <,
 	RESTRICT = scalargtsel,
 	JOIN = scalargtjoinsel );
 CREATE OPERATOR > (
 	PROCEDURE = isngt,
-	LEFTARG = issn,
-	RIGHTARG = issn,
+	LEFTARG = upc,
+	RIGHTARG = upc,
 	COMMUTATOR = <,
 	NEGATOR = <=,
 	RESTRICT = scalargtsel,
 	JOIN = scalargtjoinsel );
 CREATE OPERATOR <> (
 	PROCEDURE = isnne,
-	LEFTARG = issn,
-	RIGHTARG = issn,
+	LEFTARG = upc,
+	RIGHTARG = upc,
 	COMMUTATOR = <>,
 	NEGATOR = =,
 	RESTRICT = neqsel,
 	JOIN = neqjoinsel);
 
---
--- UPC operators:
---
----------------------------------------------------
 CREATE OPERATOR < (
 	PROCEDURE = isnlt,
 	LEFTARG = upc,
-	RIGHTARG = upc,
+	RIGHTARG = ean13,
 	COMMUTATOR = >,
 	NEGATOR = >=,
 	RESTRICT = scalarltsel,
@@ -1643,7 +2448,7 @@ CREATE OPERATOR < (
 CREATE OPERATOR <= (
 	PROCEDURE = isnle,
 	LEFTARG = upc,
-	RIGHTARG = upc,
+	RIGHTARG = ean13,
 	COMMUTATOR = >=,
 	NEGATOR = >,
 	RESTRICT = scalarltsel,
@@ -1651,7 +2456,7 @@ CREATE OPERATOR <= (
 CREATE OPERATOR = (
 	PROCEDURE = isneq,
 	LEFTARG = upc,
-	RIGHTARG = upc,
+	RIGHTARG = ean13,
 	COMMUTATOR = =,
 	NEGATOR = <>,
 	RESTRICT = eqsel,
@@ -1659,7 +2464,7 @@ CREATE OPERATOR = (
 CREATE OPERATOR >= (
 	PROCEDURE = isnge,
 	LEFTARG = upc,
-	RIGHTARG = upc,
+	RIGHTARG = ean13,
 	COMMUTATOR = <=,
 	NEGATOR = <,
 	RESTRICT = scalargtsel,
@@ -1667,7 +2472,7 @@ CREATE OPERATOR >= (
 CREATE OPERATOR > (
 	PROCEDURE = isngt,
 	LEFTARG = upc,
-	RIGHTARG = upc,
+	RIGHTARG = ean13,
 	COMMUTATOR = <,
 	NEGATOR = <=,
 	RESTRICT = scalargtsel,
@@ -1675,7 +2480,7 @@ CREATE OPERATOR > (
 CREATE OPERATOR <> (
 	PROCEDURE = isnne,
 	LEFTARG = upc,
-	RIGHTARG = upc,
+	RIGHTARG = ean13,
 	COMMUTATOR = <>,
 	NEGATOR = =,
 	RESTRICT = neqsel,
@@ -1808,22 +2613,22 @@ CREATE FUNCTION btisbn13cmp(isbn13, isbn)
 
 CREATE OPERATOR CLASS isbn13_ops DEFAULT
 	FOR TYPE isbn13 USING btree AS
---	OPERATOR 1  < (isbn13, ean13),
+	OPERATOR 1  < (isbn13, ean13),
 	OPERATOR 1  < (isbn13, isbn),
 	OPERATOR 1  <,
---	OPERATOR 2  <= (isbn13, ean13),
+	OPERATOR 2  <= (isbn13, ean13),
 	OPERATOR 2  <= (isbn13, isbn),
 	OPERATOR 2  <=,
---	OPERATOR 3  = (isbn13, ean13), 
+	OPERATOR 3  = (isbn13, ean13), 
 	OPERATOR 3  = (isbn13, isbn),  
 	OPERATOR 3  =,
---	OPERATOR 4  >= (isbn13, ean13), 
+	OPERATOR 4  >= (isbn13, ean13), 
 	OPERATOR 4  >= (isbn13, isbn),  
 	OPERATOR 4  >=,
---	OPERATOR 5  > (isbn13, ean13), 
+	OPERATOR 5  > (isbn13, ean13), 
 	OPERATOR 5  > (isbn13, isbn),  
 	OPERATOR 5  >,
---	FUNCTION 1  btisbn13cmp(isbn13, ean13),
+	FUNCTION 1  btisbn13cmp(isbn13, ean13),
 	FUNCTION 1  btisbn13cmp(isbn13, isbn),
 	FUNCTION 1  btisbn13cmp(isbn13, isbn13);
 
@@ -1858,23 +2663,23 @@ CREATE FUNCTION btisbncmp(isbn, isbn13)
 
 CREATE OPERATOR CLASS isbn_ops DEFAULT
 	FOR TYPE isbn USING btree AS
---	OPERATOR 1  < (isbn, ean13),
---	OPERATOR 1  < (isbn, isbn13),
+	OPERATOR 1  < (isbn, ean13),
+	OPERATOR 1  < (isbn, isbn13),
 	OPERATOR 1  <,
---	OPERATOR 2  <= (isbn, ean13),  
---	OPERATOR 2  <= (isbn, isbn13), 
+	OPERATOR 2  <= (isbn, ean13),  
+	OPERATOR 2  <= (isbn, isbn13), 
 	OPERATOR 2  <=,
---	OPERATOR 3  = (isbn, ean13),  
---	OPERATOR 3  = (isbn, isbn13), 
+	OPERATOR 3  = (isbn, ean13),  
+	OPERATOR 3  = (isbn, isbn13), 
 	OPERATOR 3  =,
---	OPERATOR 4  >= (isbn, ean13),  
---	OPERATOR 4  >= (isbn, isbn13), 
+	OPERATOR 4  >= (isbn, ean13),  
+	OPERATOR 4  >= (isbn, isbn13), 
 	OPERATOR 4  >=,
---	OPERATOR 5  > (isbn, ean13),  
---	OPERATOR 5  > (isbn, isbn13), 
+	OPERATOR 5  > (isbn, ean13),  
+	OPERATOR 5  > (isbn, isbn13), 
 	OPERATOR 5  >,
---	FUNCTION 1  btisbncmp(isbn, ean13),
---	FUNCTION 1  btisbncmp(isbn, isbn13),
+	FUNCTION 1  btisbncmp(isbn, ean13),
+	FUNCTION 1  btisbncmp(isbn, isbn13),
 	FUNCTION 1  btisbncmp(isbn, isbn);
 
 CREATE FUNCTION hashisbn(isbn)
@@ -1908,22 +2713,22 @@ CREATE FUNCTION btismn13cmp(ismn13, ismn)
 
 CREATE OPERATOR CLASS ismn13_ops DEFAULT
 	FOR TYPE ismn13 USING btree AS
---	OPERATOR 1  < (ismn13, ean13),
+	OPERATOR 1  < (ismn13, ean13),
 	OPERATOR 1  < (ismn13, ismn),
 	OPERATOR 1  <,
---	OPERATOR 2  <= (ismn13, ean13),
+	OPERATOR 2  <= (ismn13, ean13),
 	OPERATOR 2  <= (ismn13, ismn),
 	OPERATOR 2  <=,
---	OPERATOR 3  = (ismn13, ean13), 
+	OPERATOR 3  = (ismn13, ean13), 
 	OPERATOR 3  = (ismn13, ismn),  
 	OPERATOR 3  =,
---	OPERATOR 4  >= (ismn13, ean13), 
+	OPERATOR 4  >= (ismn13, ean13), 
 	OPERATOR 4  >= (ismn13, ismn),  
 	OPERATOR 4  >=,
---	OPERATOR 5  > (ismn13, ean13), 
+	OPERATOR 5  > (ismn13, ean13), 
 	OPERATOR 5  > (ismn13, ismn),  
 	OPERATOR 5  >,
---	FUNCTION 1  btismn13cmp(ismn13, ean13),
+	FUNCTION 1  btismn13cmp(ismn13, ean13),
 	FUNCTION 1  btismn13cmp(ismn13, ismn),
 	FUNCTION 1  btismn13cmp(ismn13, ismn13);
 
@@ -1958,23 +2763,23 @@ CREATE FUNCTION btismncmp(ismn, ismn13)
 
 CREATE OPERATOR CLASS ismn_ops DEFAULT
 	FOR TYPE ismn USING btree AS
---	OPERATOR 1  < (ismn, ean13),
---	OPERATOR 1  < (ismn, ismn13),
+	OPERATOR 1  < (ismn, ean13),
+	OPERATOR 1  < (ismn, ismn13),
 	OPERATOR 1  <,
---	OPERATOR 2  <= (ismn, ean13),  
---	OPERATOR 2  <= (ismn, ismn13), 
+	OPERATOR 2  <= (ismn, ean13),  
+	OPERATOR 2  <= (ismn, ismn13), 
 	OPERATOR 2  <=,
---	OPERATOR 3  = (ismn, ean13),  
---	OPERATOR 3  = (ismn, ismn13), 
+	OPERATOR 3  = (ismn, ean13),  
+	OPERATOR 3  = (ismn, ismn13), 
 	OPERATOR 3  =,
---	OPERATOR 4  >= (ismn, ean13),  
---	OPERATOR 4  >= (ismn, ismn13), 
+	OPERATOR 4  >= (ismn, ean13),  
+	OPERATOR 4  >= (ismn, ismn13), 
 	OPERATOR 4  >=,
---	OPERATOR 5  > (ismn, ean13),  
---	OPERATOR 5  > (ismn, ismn13), 
+	OPERATOR 5  > (ismn, ean13),  
+	OPERATOR 5  > (ismn, ismn13), 
 	OPERATOR 5  >,
---	FUNCTION 1  btismncmp(ismn, ean13),
---	FUNCTION 1  btismncmp(ismn, ismn13),
+	FUNCTION 1  btismncmp(ismn, ean13),
+	FUNCTION 1  btismncmp(ismn, ismn13),
 	FUNCTION 1  btismncmp(ismn, ismn);
 
 CREATE FUNCTION hashismn(ismn)
@@ -2008,22 +2813,22 @@ CREATE FUNCTION btissn13cmp(issn13, issn)
 
 CREATE OPERATOR CLASS issn13_ops DEFAULT
 	FOR TYPE issn13 USING btree AS
---	OPERATOR 1  < (issn13, ean13),
+	OPERATOR 1  < (issn13, ean13),
 	OPERATOR 1  < (issn13, issn),
 	OPERATOR 1  <,
---	OPERATOR 2  <= (issn13, ean13),
+	OPERATOR 2  <= (issn13, ean13),
 	OPERATOR 2  <= (issn13, issn),
 	OPERATOR 2  <=,
---	OPERATOR 3  = (issn13, ean13), 
+	OPERATOR 3  = (issn13, ean13), 
 	OPERATOR 3  = (issn13, issn),  
 	OPERATOR 3  =,
---	OPERATOR 4  >= (issn13, ean13), 
+	OPERATOR 4  >= (issn13, ean13), 
 	OPERATOR 4  >= (issn13, issn),  
 	OPERATOR 4  >=,
---	OPERATOR 5  > (issn13, ean13), 
+	OPERATOR 5  > (issn13, ean13), 
 	OPERATOR 5  > (issn13, issn),  
 	OPERATOR 5  >,
---	FUNCTION 1  btissn13cmp(issn13, ean13),
+	FUNCTION 1  btissn13cmp(issn13, ean13),
 	FUNCTION 1  btissn13cmp(issn13, issn),
 	FUNCTION 1  btissn13cmp(issn13, issn13);
 
@@ -2058,23 +2863,23 @@ CREATE FUNCTION btissncmp(issn, issn13)
 
 CREATE OPERATOR CLASS issn_ops DEFAULT
 	FOR TYPE issn USING btree AS
---	OPERATOR 1  < (issn, ean13),
---	OPERATOR 1  < (issn, issn13),
+	OPERATOR 1  < (issn, ean13),
+	OPERATOR 1  < (issn, issn13),
 	OPERATOR 1  <,
---	OPERATOR 2  <= (issn, ean13),  
---	OPERATOR 2  <= (issn, issn13), 
+	OPERATOR 2  <= (issn, ean13),  
+	OPERATOR 2  <= (issn, issn13), 
 	OPERATOR 2  <=,
---	OPERATOR 3  = (issn, ean13),  
---	OPERATOR 3  = (issn, issn13), 
+	OPERATOR 3  = (issn, ean13),  
+	OPERATOR 3  = (issn, issn13), 
 	OPERATOR 3  =,
---	OPERATOR 4  >= (issn, ean13),  
---	OPERATOR 4  >= (issn, issn13), 
+	OPERATOR 4  >= (issn, ean13),  
+	OPERATOR 4  >= (issn, issn13), 
 	OPERATOR 4  >=,
---	OPERATOR 5  > (issn, ean13),  
---	OPERATOR 5  > (issn, issn13), 
+	OPERATOR 5  > (issn, ean13),  
+	OPERATOR 5  > (issn, issn13), 
 	OPERATOR 5  >,
---	FUNCTION 1  btissncmp(issn, ean13),
---	FUNCTION 1  btissncmp(issn, issn13),
+	FUNCTION 1  btissncmp(issn, ean13),
+	FUNCTION 1  btissncmp(issn, issn13),
 	FUNCTION 1  btissncmp(issn, issn);
 
 CREATE FUNCTION hashissn(issn)
@@ -2103,17 +2908,17 @@ CREATE FUNCTION btupccmp(upc, ean13)
 
 CREATE OPERATOR CLASS upc_ops DEFAULT
 	FOR TYPE upc USING btree AS
---	OPERATOR 1  < (upc, ean13),
+	OPERATOR 1  < (upc, ean13),
 	OPERATOR 1  <,
---	OPERATOR 2  <= (upc, ean13),  
+	OPERATOR 2  <= (upc, ean13),  
 	OPERATOR 2  <=,
---	OPERATOR 3  = (upc, ean13),  
+	OPERATOR 3  = (upc, ean13),  
 	OPERATOR 3  =,
---	OPERATOR 4  >= (upc, ean13),  
+	OPERATOR 4  >= (upc, ean13),  
 	OPERATOR 4  >=,
---	OPERATOR 5  > (upc, ean13),  
+	OPERATOR 5  > (upc, ean13),  
 	OPERATOR 5  >,
---	FUNCTION 1  btupccmp(upc, ean13),
+	FUNCTION 1  btupccmp(upc, ean13),
 	FUNCTION 1  btupccmp(upc, upc);
 
 CREATE FUNCTION hashupc(upc)
-- 
GitLab