vat/vat--0.0.sql

192 lines
3.5 KiB
SQL

/*
* SPDX-FileCopyrightText: 2023 jordi fita mas <jfita@peritasoft.com>
*
* SPDX-License-Identifier: PostgreSQL
*/
-- 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)
;