2023-01-21 19:04:31 +00:00
|
|
|
/*
|
|
|
|
* SPDX-FileCopyrightText: 2023 jordi fita mas <jfita@peritasoft.com>
|
|
|
|
*
|
|
|
|
* SPDX-License-Identifier: PostgreSQL
|
|
|
|
*/
|
2023-01-21 18:31:50 +00:00
|
|
|
|
|
|
|
-- complain if script is sources in psql, rather than via CREATE EXTENSION
|
|
|
|
\echo Use "CREATE EXTENSION vat" to load this file. \quit
|
|
|
|
|
|
|
|
-- Example:
|
|
|
|
-- create table test ( id vatin );
|
|
|
|
-- insert into tast values('ES40404040D');
|
|
|
|
--
|
|
|
|
-- select vatin('ES40404040-D');
|
|
|
|
--
|
|
|
|
|
|
|
|
--
|
|
|
|
-- Input and output functions and data types:
|
|
|
|
--
|
|
|
|
---------------------------------------------
|
|
|
|
CREATE FUNCTION vatin_in(cstring)
|
|
|
|
RETURNS vatin
|
|
|
|
AS 'MODULE_PATHNAME'
|
|
|
|
LANGUAGE C
|
|
|
|
IMMUTABLE STRICT
|
|
|
|
PARALLEL SAFE
|
|
|
|
;
|
|
|
|
CREATE FUNCTION vatin_out(vatin)
|
|
|
|
RETURNS cstring
|
|
|
|
AS 'textout'
|
|
|
|
LANGUAGE 'internal'
|
|
|
|
IMMUTABLE STRICT
|
|
|
|
PARALLEL SAFE
|
|
|
|
;
|
|
|
|
CREATE TYPE vatin (
|
|
|
|
INPUT = vatin_in,
|
|
|
|
OUTPUT = vatin_out,
|
|
|
|
LIKE = pg_catalog.text
|
|
|
|
);
|
|
|
|
COMMENT ON TYPE vatin
|
|
|
|
IS 'Value added tax identification number (VATIN)'
|
|
|
|
;
|
|
|
|
|
|
|
|
--
|
|
|
|
-- Operator functions:
|
|
|
|
--
|
|
|
|
---------------------------------------------
|
|
|
|
CREATE FUNCTION vatinlt(vatin, vatin)
|
|
|
|
RETURNS boolean
|
|
|
|
AS 'text_lt'
|
|
|
|
LANGUAGE 'internal'
|
|
|
|
IMMUTABLE STRICT
|
|
|
|
PARALLEL SAFE
|
|
|
|
;
|
|
|
|
CREATE FUNCTION vatinle(vatin, vatin)
|
|
|
|
RETURNS boolean
|
|
|
|
AS 'text_le'
|
|
|
|
LANGUAGE 'internal'
|
|
|
|
IMMUTABLE STRICT
|
|
|
|
PARALLEL SAFE
|
|
|
|
;
|
|
|
|
CREATE FUNCTION vatineq(vatin, vatin)
|
|
|
|
RETURNS boolean
|
|
|
|
AS 'texteq'
|
|
|
|
LANGUAGE 'internal'
|
|
|
|
IMMUTABLE STRICT
|
|
|
|
PARALLEL SAFE;
|
|
|
|
CREATE FUNCTION vatinge(vatin, vatin)
|
|
|
|
RETURNS boolean
|
|
|
|
AS 'text_ge'
|
|
|
|
LANGUAGE 'internal'
|
|
|
|
IMMUTABLE STRICT
|
|
|
|
PARALLEL SAFE
|
|
|
|
;
|
|
|
|
CREATE FUNCTION vatingt(vatin, vatin)
|
|
|
|
RETURNS boolean
|
|
|
|
AS 'text_gt'
|
|
|
|
LANGUAGE 'internal'
|
|
|
|
IMMUTABLE STRICT
|
|
|
|
PARALLEL SAFE
|
|
|
|
;
|
|
|
|
CREATE FUNCTION vatinne(vatin, vatin)
|
|
|
|
RETURNS boolean
|
|
|
|
AS 'textne'
|
|
|
|
LANGUAGE 'internal'
|
|
|
|
IMMUTABLE STRICT
|
|
|
|
PARALLEL SAFE
|
|
|
|
;
|
|
|
|
|
|
|
|
--
|
|
|
|
-- Operators:
|
|
|
|
--
|
|
|
|
---------------------------------------------
|
|
|
|
CREATE OPERATOR < (
|
|
|
|
PROCEDURE = vatinlt,
|
|
|
|
LEFTARG = vatin,
|
|
|
|
RIGHTARG = vatin,
|
|
|
|
COMMUTATOR = >,
|
|
|
|
NEGATOR = >=,
|
|
|
|
RESTRICT = scalarltsel,
|
|
|
|
JOIN = scalarltjoinsel
|
|
|
|
);
|
|
|
|
CREATE OPERATOR <= (
|
|
|
|
PROCEDURE = vatinle,
|
|
|
|
LEFTARG = vatin,
|
|
|
|
RIGHTARG = vatin,
|
|
|
|
COMMUTATOR = >=,
|
|
|
|
NEGATOR = >,
|
|
|
|
RESTRICT = scalarltsel,
|
|
|
|
JOIN = scalarltjoinsel
|
|
|
|
);
|
|
|
|
CREATE OPERATOR = (
|
|
|
|
PROCEDURE = vatineq,
|
|
|
|
LEFTARG = vatin,
|
|
|
|
RIGHTARG = vatin,
|
|
|
|
COMMUTATOR = =,
|
|
|
|
NEGATOR = <>,
|
|
|
|
RESTRICT = eqsel,
|
|
|
|
JOIN = eqjoinsel,
|
|
|
|
MERGES,
|
|
|
|
HASHES
|
|
|
|
);
|
|
|
|
CREATE OPERATOR >= (
|
|
|
|
PROCEDURE = vatinge,
|
|
|
|
LEFTARG = vatin,
|
|
|
|
RIGHTARG = vatin,
|
|
|
|
COMMUTATOR = <=,
|
|
|
|
NEGATOR = <,
|
|
|
|
RESTRICT = scalargtsel,
|
|
|
|
JOIN = scalargtjoinsel
|
|
|
|
);
|
|
|
|
CREATE OPERATOR > (
|
|
|
|
PROCEDURE = vatingt,
|
|
|
|
LEFTARG = vatin,
|
|
|
|
RIGHTARG = vatin,
|
|
|
|
COMMUTATOR = <,
|
|
|
|
NEGATOR = <=,
|
|
|
|
RESTRICT = scalargtsel,
|
|
|
|
JOIN = scalargtjoinsel
|
|
|
|
);
|
|
|
|
CREATE OPERATOR <> (
|
|
|
|
PROCEDURE = vatinne,
|
|
|
|
LEFTARG = vatin,
|
|
|
|
RIGHTARG = vatin,
|
|
|
|
COMMUTATOR = <>,
|
|
|
|
NEGATOR = =,
|
|
|
|
RESTRICT = neqsel,
|
|
|
|
JOIN = neqjoinsel
|
|
|
|
);
|
|
|
|
|
|
|
|
--
|
|
|
|
-- Operator families for the various operator classes:
|
|
|
|
--
|
|
|
|
---------------------------------------------
|
|
|
|
CREATE OPERATOR FAMILY vatin_ops USING btree;
|
|
|
|
CREATE OPERATOR FAMILY vatin_ops USING hash;
|
|
|
|
|
|
|
|
--
|
|
|
|
-- Operator classes:
|
|
|
|
--
|
|
|
|
---------------------------------------------
|
|
|
|
CREATE FUNCTION btvatincmp(vatin, vatin)
|
|
|
|
RETURNS int4
|
|
|
|
AS 'bttextcmp'
|
|
|
|
LANGUAGE 'internal'
|
|
|
|
IMMUTABLE STRICT
|
|
|
|
PARALLEL SAFE
|
|
|
|
;
|
|
|
|
|
|
|
|
CREATE OPERATOR CLASS vatin_ops DEFAULT
|
|
|
|
FOR TYPE vatin USING btree FAMILY vatin_ops AS
|
|
|
|
OPERATOR 1 <,
|
|
|
|
OPERATOR 2 <=,
|
|
|
|
OPERATOR 3 =,
|
|
|
|
OPERATOR 4 >=,
|
|
|
|
OPERATOR 5 >,
|
|
|
|
FUNCTION 1 btvatincmp(vatin, vatin)
|
|
|
|
;
|
|
|
|
|
|
|
|
CREATE FUNCTION hashvatin(vatin)
|
|
|
|
RETURNS int4
|
|
|
|
AS 'hashtext'
|
|
|
|
LANGUAGE 'internal' IMMUTABLE STRICT
|
|
|
|
PARALLEL SAFE
|
|
|
|
;
|
|
|
|
|
|
|
|
CREATE OPERATOR CLASS vatin_ops DEFAULT
|
|
|
|
FOR TYPE vatin USING hash FAMILY vatin_ops AS
|
|
|
|
OPERATOR 1 =,
|
|
|
|
FUNCTION 1 hashvatin(vatin)
|
|
|
|
;
|