mirror of
https://git.postgresql.org/git/postgresql.git
synced 2024-11-27 07:21:09 +08:00
f7946a92b6
This will allow enums to be used in exclusion constraints. The code uses the new CallerFInfoFunctionCall infrastructure in fmgr, and the support for it added to btree_gist in commit 393bb504d7. Reviewed by Tom Lane and Anastasia Lubennikova Discussion: http://postgr.es/m/56EA8A71.8060107@dunslane.net
70 lines
1.8 KiB
SQL
70 lines
1.8 KiB
SQL
/* contrib/btree_gist/btree_gist--1.4--1.5.sql */
|
|
|
|
-- complain if script is sourced in psql, rather than via CREATE EXTENSION
|
|
\echo Use "ALTER EXTENSION btree_gist UPDATE TO '1.5'" to load this file. \quit
|
|
|
|
--
|
|
--
|
|
--
|
|
-- enum ops
|
|
--
|
|
--
|
|
--
|
|
-- define the GiST support methods
|
|
CREATE FUNCTION gbt_enum_consistent(internal,anyenum,int2,oid,internal)
|
|
RETURNS bool
|
|
AS 'MODULE_PATHNAME'
|
|
LANGUAGE C IMMUTABLE STRICT;
|
|
|
|
CREATE FUNCTION gbt_enum_compress(internal)
|
|
RETURNS internal
|
|
AS 'MODULE_PATHNAME'
|
|
LANGUAGE C IMMUTABLE STRICT;
|
|
|
|
CREATE FUNCTION gbt_enum_fetch(internal)
|
|
RETURNS internal
|
|
AS 'MODULE_PATHNAME'
|
|
LANGUAGE C IMMUTABLE STRICT;
|
|
|
|
CREATE FUNCTION gbt_enum_penalty(internal,internal,internal)
|
|
RETURNS internal
|
|
AS 'MODULE_PATHNAME'
|
|
LANGUAGE C IMMUTABLE STRICT;
|
|
|
|
CREATE FUNCTION gbt_enum_picksplit(internal, internal)
|
|
RETURNS internal
|
|
AS 'MODULE_PATHNAME'
|
|
LANGUAGE C IMMUTABLE STRICT;
|
|
|
|
CREATE FUNCTION gbt_enum_union(internal, internal)
|
|
RETURNS gbtreekey8
|
|
AS 'MODULE_PATHNAME'
|
|
LANGUAGE C IMMUTABLE STRICT;
|
|
|
|
CREATE FUNCTION gbt_enum_same(gbtreekey8, gbtreekey8, internal)
|
|
RETURNS internal
|
|
AS 'MODULE_PATHNAME'
|
|
LANGUAGE C IMMUTABLE STRICT;
|
|
|
|
-- Create the operator class
|
|
CREATE OPERATOR CLASS gist_enum_ops
|
|
DEFAULT FOR TYPE anyenum USING gist
|
|
AS
|
|
OPERATOR 1 < ,
|
|
OPERATOR 2 <= ,
|
|
OPERATOR 3 = ,
|
|
OPERATOR 4 >= ,
|
|
OPERATOR 5 > ,
|
|
FUNCTION 1 gbt_enum_consistent (internal, anyenum, int2, oid, internal),
|
|
FUNCTION 2 gbt_enum_union (internal, internal),
|
|
FUNCTION 3 gbt_enum_compress (internal),
|
|
FUNCTION 4 gbt_decompress (internal),
|
|
FUNCTION 5 gbt_enum_penalty (internal, internal, internal),
|
|
FUNCTION 6 gbt_enum_picksplit (internal, internal),
|
|
FUNCTION 7 gbt_enum_same (gbtreekey8, gbtreekey8, internal),
|
|
STORAGE gbtreekey8;
|
|
|
|
ALTER OPERATOR FAMILY gist_enum_ops USING gist ADD
|
|
OPERATOR 6 <> (anyenum, anyenum) ,
|
|
FUNCTION 9 (anyenum, anyenum) gbt_enum_fetch (internal) ;
|