245 lines
6.6 KiB
MySQL
245 lines
6.6 KiB
MySQL
|
--
|
||
|
-- 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;
|
||
|
|