OSSP CVS Repository

ossp - ossp-pkg/uuid/pgsql/uuid.sql.in
Not logged in
[Honeypot]  [Browse]  [Directory]  [Home]  [Login
[Reports]  [Search]  [Ticket]  [Timeline
  [Raw

ossp-pkg/uuid/pgsql/uuid.sql.in
--
--  OSSP uuid - Universally Unique Identifier
--  Copyright (c) 2004-2007 Ralf S. Engelschall <rse@engelschall.com>
--  Copyright (c) 2004-2007 The OSSP Project <http://www.ossp.org/>
--
--  This file is part of OSSP uuid, a library for the generation
--  of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
--
--  Permission to use, copy, modify, and distribute this software for
--  any purpose with or without fee is hereby granted, provided that
--  the above copyright notice and this permission notice appear in all
--  copies.
--
--  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
--  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
--  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
--  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
--  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
--  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
--  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
--  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
--  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
--  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
--  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
--  SUCH DAMAGE.
--
--  uuid.sql: PostgreSQL Binding (SQL part)
--

--
--  prolog
--

SET search_path TO public;
SET client_min_messages TO warning;

DROP FUNCTION uuid_in(CSTRING)                    CASCADE;
DROP FUNCTION uuid_out(uuid)                      CASCADE;
DROP FUNCTION uuid_recv(INTERNAL)                 CASCADE;
DROP FUNCTION uuid_send(uuid)                     CASCADE;
DROP TYPE     uuid                                CASCADE;
DROP CAST     (CSTRING AS uuid)                   CASCADE;
DROP CAST     (uuid AS CSTRING)                   CASCADE;

DROP FUNCTION uuid(CSTRING)                       CASCADE;
DROP FUNCTION uuid(INTEGER)                       CASCADE;
DROP FUNCTION uuid(INTEGER, CSTRING, CSTRING)     CASCADE;

DROP FUNCTION uuid_eq(uuid)                       CASCADE;
DROP FUNCTION uuid_ne(uuid)                       CASCADE;
DROP FUNCTION uuid_lt(uuid, uuid)                 CASCADE;
DROP FUNCTION uuid_gt(uuid, uuid)                 CASCADE;
DROP FUNCTION uuid_le(uuid, uuid)                 CASCADE;
DROP FUNCTION uuid_ge(uuid, uuid)                 CASCADE;
DROP OPERATOR =(uuid,uuid)                        CASCADE;
DROP OPERATOR <>(uuid,uuid)                       CASCADE;
DROP OPERATOR <(uuid,uuid)                        CASCADE;
DROP OPERATOR >(uuid,uuid)                        CASCADE;
DROP OPERATOR <=(uuid,uuid)                       CASCADE;
DROP OPERATOR >=(uuid,uuid)                       CASCADE;

DROP FUNCTION uuid_hash(uuid)                     CASCADE;
DROP FUNCTION uuid_cmp(uuid, uuid)                CASCADE;
DROP OPERATOR CLASS uuid_ops USING hash           CASCADE;
DROP OPERATOR CLASS uuid_ops USING btree          CASCADE;

BEGIN;

--
--  the UUID data type
--

CREATE FUNCTION
    uuid_in(CSTRING) RETURNS uuid
    STRICT
    LANGUAGE C AS 'MODULE_PATHNAME', 'pg_uuid_in';

CREATE FUNCTION
    uuid_out(uuid) RETURNS CSTRING
    STRICT
    LANGUAGE C AS 'MODULE_PATHNAME', 'pg_uuid_out';

CREATE FUNCTION
    uuid_recv(INTERNAL) RETURNS uuid
    STRICT
    LANGUAGE C AS 'MODULE_PATHNAME', 'pg_uuid_recv';

CREATE FUNCTION
    uuid_send(uuid) RETURNS BYTEA
    STRICT
    LANGUAGE C AS 'MODULE_PATHNAME', 'pg_uuid_send';

CREATE TYPE uuid (
    INPUT   = uuid_in,   -- for SQL input
    OUTPUT  = uuid_out,  -- for SQL output
    RECEIVE = uuid_recv, -- for DB input
    SEND    = uuid_send, -- for DB output
    DEFAULT = 'uuid(1)',
    INTERNALLENGTH = 16,
    ALIGNMENT = char
);

COMMENT ON TYPE uuid
    IS 'UUID type';

-- CREATE CAST (CSTRING AS uuid)
--     WITH FUNCTION uuid_in(CSTRING) AS ASSIGNMENT;
-- 
-- CREATE CAST (uuid AS CSTRING)
--     WITH FUNCTION uuid_out(uuid)   AS ASSIGNMENT;

--
--  the UUID constructor function
--

CREATE FUNCTION
    uuid(CSTRING) RETURNS uuid
    IMMUTABLE STRICT
    LANGUAGE C AS 'MODULE_PATHNAME', 'pg_uuid_in';

CREATE FUNCTION
    uuid(INTEGER) RETURNS uuid
    VOLATILE CALLED ON NULL INPUT
    LANGUAGE C AS 'MODULE_PATHNAME', 'pg_uuid_make';

CREATE FUNCTION
    uuid(INTEGER, CSTRING, CSTRING) RETURNS uuid
    VOLATILE CALLED ON NULL INPUT
    LANGUAGE C AS 'MODULE_PATHNAME', 'pg_uuid_make';

--
--  the UUID operators
--

CREATE FUNCTION
    uuid_eq(uuid, uuid) RETURNS BOOL
    IMMUTABLE STRICT
    LANGUAGE C AS 'MODULE_PATHNAME', 'pg_uuid_eq';

CREATE FUNCTION
    uuid_ne(uuid, uuid) RETURNS BOOL
    IMMUTABLE STRICT
    LANGUAGE C AS 'MODULE_PATHNAME', 'pg_uuid_ne';

CREATE FUNCTION
    uuid_lt(uuid, uuid) RETURNS BOOL
    IMMUTABLE STRICT
    LANGUAGE C AS 'MODULE_PATHNAME', 'pg_uuid_lt';

CREATE FUNCTION
    uuid_gt(uuid, uuid) RETURNS BOOL
    IMMUTABLE STRICT
    LANGUAGE C AS 'MODULE_PATHNAME', 'pg_uuid_gt';

CREATE FUNCTION
    uuid_le(uuid, uuid) RETURNS BOOL
    IMMUTABLE STRICT
    LANGUAGE C AS 'MODULE_PATHNAME', 'pg_uuid_le';

CREATE FUNCTION
    uuid_ge(uuid, uuid) RETURNS BOOL
    IMMUTABLE STRICT
    LANGUAGE C AS 'MODULE_PATHNAME', 'pg_uuid_ge';

CREATE OPERATOR = (
    leftarg    = uuid,
    rightarg   = uuid,
    negator    = <>,
    procedure  = uuid_eq
);

CREATE OPERATOR <> (
    leftarg    = uuid,
    rightarg   = uuid,
    negator    = =,
    procedure  = uuid_ne
);

CREATE OPERATOR < (
    leftarg    = uuid,
    rightarg   = uuid,
    commutator = >,
    negator    = >=,
    procedure  = uuid_lt
);

CREATE OPERATOR > (
    leftarg    = uuid,
    rightarg   = uuid,
    commutator = <,
    negator    = <=,
    procedure  = uuid_gt
);

CREATE OPERATOR <= (
    leftarg    = uuid,
    rightarg   = uuid,
    commutator = >=,
    negator    = >,
    procedure  = uuid_le
);

CREATE OPERATOR >= (
    leftarg    = uuid,
    rightarg   = uuid,
    commutator = <=,
    negator    = <,
    procedure  = uuid_ge
);

--
--  the UUID support for indexing
--

CREATE FUNCTION
    uuid_hash(uuid) RETURNS INTEGER
    IMMUTABLE STRICT
    LANGUAGE C AS 'MODULE_PATHNAME', 'pg_uuid_hash';

CREATE FUNCTION
    uuid_cmp(uuid, uuid) RETURNS INTEGER
    IMMUTABLE STRICT
    LANGUAGE C AS 'MODULE_PATHNAME', 'pg_uuid_cmp';

CREATE OPERATOR CLASS uuid_ops
    DEFAULT FOR TYPE uuid USING hash AS
    OPERATOR 1 =,   -- 1: equal
    FUNCTION 1 uuid_hash(uuid);

CREATE OPERATOR CLASS uuid_ops
    DEFAULT FOR TYPE uuid USING btree AS
    OPERATOR 1 <,   -- 1: less than
    OPERATOR 2 <=,  -- 2: less than or equal
    OPERATOR 3 =,   -- 3: equal
    OPERATOR 4 >=,  -- 4: greater than or equal
    OPERATOR 5 >,   -- 5: greater than
    FUNCTION 1 uuid_cmp(uuid, uuid);

--
--  epilog
--

COMMIT;


CVSTrac 2.0.1