Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtp (Exim 4.84_2) (envelope-from ) id 1agVPz-0001At-5R for pgsql-hackers@arkaria.postgresql.org; Thu, 17 Mar 2016 10:44:39 +0000 Received: from localhost ([127.0.0.1] helo=postgresql.org) by malur.postgresql.org with smtp (Exim 4.84_2) (envelope-from ) id 1agVPy-0000oW-NR for pgsql-hackers@arkaria.postgresql.org; Thu, 17 Mar 2016 10:44:38 +0000 Received: from makus.postgresql.org ([2001:4800:1501:1::229]) by malur.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA384:256) (Exim 4.84_2) (envelope-from ) id 1agVPp-0000k8-MV for pgsql-hackers@postgresql.org; Thu, 17 Mar 2016 10:44:30 +0000 Received: from relay2-d.mail.gandi.net ([2001:4b98:c:538::194]) by makus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA384:256) (Exim 4.84_2) (envelope-from ) id 1agVPh-00009d-Hs for pgsql-hackers@postgresql.org; Thu, 17 Mar 2016 10:44:28 +0000 Received: from mfilter25-d.gandi.net (mfilter25-d.gandi.net [217.70.178.153]) by relay2-d.mail.gandi.net (Postfix) with ESMTP id 63B4EC5A6A for ; Thu, 17 Mar 2016 11:44:18 +0100 (CET) X-Virus-Scanned: Debian amavisd-new at mfilter25-d.gandi.net Received: from relay2-d.mail.gandi.net ([IPv6:::ffff:217.70.183.194]) by mfilter25-d.gandi.net (mfilter25-d.gandi.net [::ffff:10.0.15.180]) (amavisd-new, port 10024) with ESMTP id gvNVbrQ-sECi for ; Thu, 17 Mar 2016 11:44:03 +0100 (CET) X-Originating-IP: 98.122.164.227 Received: from [192.168.10.146] (unknown [98.122.164.227]) (Authenticated sender: adsend@dunslane.net) by relay2-d.mail.gandi.net (Postfix) with ESMTPSA id 62CE4C5A92 for ; Thu, 17 Mar 2016 11:44:03 +0100 (CET) From: Andrew Dunstan Subject: btree_gin and btree_gist for enums To: PostgreSQL-development Message-ID: <56EA8A71.8060107@dunslane.net> Date: Thu, 17 Mar 2016 06:44:01 -0400 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.3.0 MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="------------090302080304070004090802" X-Pg-Spam-Score: -2.6 (--) List-Archive: List-Help: List-ID: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: X-Mailing-List: pgsql-hackers Precedence: bulk Sender: pgsql-hackers-owner@postgresql.org This is a multi-part message in MIME format. --------------090302080304070004090802 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit Here is a patch to add enum support to btree_gin and btree_gist. I didn't include distance operations, as I didn't think it terribly important, and there isn't a simple way to compute it sanely and efficiently, so no KNN support. cheers andrew --------------090302080304070004090802 Content-Type: text/x-patch; name="enum-btree-gist-gin.patch" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="enum-btree-gist-gin.patch" diff --git a/contrib/btree_gin/Makefile b/contrib/btree_gin/Makefile index 0492091..f8a2d7f 100644 --- a/contrib/btree_gin/Makefile +++ b/contrib/btree_gin/Makefile @@ -4,13 +4,13 @@ MODULE_big = btree_gin OBJS = btree_gin.o $(WIN32RES) EXTENSION = btree_gin -DATA = btree_gin--1.0.sql btree_gin--unpackaged--1.0.sql +DATA = btree_gin--1.1.sql btree_gin--unpackaged--1.0.sql btree_gin--1.0--1.1.sql PGFILEDESC = "btree_gin - B-tree equivalent GIN operator classes" REGRESS = install_btree_gin int2 int4 int8 float4 float8 money oid \ timestamp timestamptz time timetz date interval \ macaddr inet cidr text varchar char bytea bit varbit \ - numeric + numeric enum ifdef USE_PGXS PG_CONFIG = pg_config diff --git a/contrib/btree_gin/btree_gin--1.0--1.1.sql b/contrib/btree_gin/btree_gin--1.0--1.1.sql new file mode 100644 index 0000000..0c90bbb --- /dev/null +++ b/contrib/btree_gin/btree_gin--1.0--1.1.sql @@ -0,0 +1,47 @@ +/* contrib/btree_gin/btree_gin--1.0--1.1.sql */ + +-- complain if script is sourced in psql, rather than via CREATE EXTENSION +\echo Use "ALTER EXTENSION btree_gin UPDATE TO '1.1'" to load this file. \quit + +-- +-- +-- +-- enum ops +-- +-- + + +CREATE FUNCTION gin_extract_value_anyenum(anyenum, internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE C STRICT IMMUTABLE; + +CREATE FUNCTION gin_compare_prefix_anyenum(anyenum, anyenum, int2, internal) +RETURNS int4 +AS 'MODULE_PATHNAME' +LANGUAGE C STRICT IMMUTABLE; + +CREATE FUNCTION gin_extract_query_anyenum(anyenum, internal, int2, internal, internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE C STRICT IMMUTABLE; + +CREATE FUNCTION gin_enum_cmp(anyenum, anyenum) +RETURNS int4 +AS 'MODULE_PATHNAME' +LANGUAGE C STRICT IMMUTABLE; + +CREATE OPERATOR CLASS enum_ops +DEFAULT FOR TYPE anyenum USING gin +AS + OPERATOR 1 <, + OPERATOR 2 <=, + OPERATOR 3 =, + OPERATOR 4 >=, + OPERATOR 5 >, + FUNCTION 1 gin_enum_cmp(anyenum,anyenum), + FUNCTION 2 gin_extract_value_anyenum(anyenum, internal), + FUNCTION 3 gin_extract_query_anyenum(anyenum, internal, int2, internal, internal), + FUNCTION 4 gin_btree_consistent(internal, int2, anyelement, int4, internal, internal), + FUNCTION 5 gin_compare_prefix_anyenum(anyenum,anyenum,int2, internal), +STORAGE oid; diff --git a/contrib/btree_gin/btree_gin--1.0.sql b/contrib/btree_gin/btree_gin--1.0.sql deleted file mode 100644 index cf867ef..0000000 --- a/contrib/btree_gin/btree_gin--1.0.sql +++ /dev/null @@ -1,689 +0,0 @@ -/* contrib/btree_gin/btree_gin--1.0.sql */ - --- complain if script is sourced in psql, rather than via CREATE EXTENSION -\echo Use "CREATE EXTENSION btree_gin" to load this file. \quit - -CREATE FUNCTION gin_btree_consistent(internal, int2, anyelement, int4, internal, internal) -RETURNS bool -AS 'MODULE_PATHNAME' -LANGUAGE C STRICT IMMUTABLE; - -CREATE FUNCTION gin_extract_value_int2(int2, internal) -RETURNS internal -AS 'MODULE_PATHNAME' -LANGUAGE C STRICT IMMUTABLE; - -CREATE FUNCTION gin_compare_prefix_int2(int2, int2, int2, internal) -RETURNS int4 -AS 'MODULE_PATHNAME' -LANGUAGE C STRICT IMMUTABLE; - -CREATE FUNCTION gin_extract_query_int2(int2, internal, int2, internal, internal) -RETURNS internal -AS 'MODULE_PATHNAME' -LANGUAGE C STRICT IMMUTABLE; - -CREATE OPERATOR CLASS int2_ops -DEFAULT FOR TYPE int2 USING gin -AS - OPERATOR 1 <, - OPERATOR 2 <=, - OPERATOR 3 =, - OPERATOR 4 >=, - OPERATOR 5 >, - FUNCTION 1 btint2cmp(int2,int2), - FUNCTION 2 gin_extract_value_int2(int2, internal), - FUNCTION 3 gin_extract_query_int2(int2, internal, int2, internal, internal), - FUNCTION 4 gin_btree_consistent(internal, int2, anyelement, int4, internal, internal), - FUNCTION 5 gin_compare_prefix_int2(int2,int2,int2, internal), -STORAGE int2; - -CREATE FUNCTION gin_extract_value_int4(int4, internal) -RETURNS internal -AS 'MODULE_PATHNAME' -LANGUAGE C STRICT IMMUTABLE; - -CREATE FUNCTION gin_compare_prefix_int4(int4, int4, int2, internal) -RETURNS int4 -AS 'MODULE_PATHNAME' -LANGUAGE C STRICT IMMUTABLE; - -CREATE FUNCTION gin_extract_query_int4(int4, internal, int2, internal, internal) -RETURNS internal -AS 'MODULE_PATHNAME' -LANGUAGE C STRICT IMMUTABLE; - -CREATE OPERATOR CLASS int4_ops -DEFAULT FOR TYPE int4 USING gin -AS - OPERATOR 1 <, - OPERATOR 2 <=, - OPERATOR 3 =, - OPERATOR 4 >=, - OPERATOR 5 >, - FUNCTION 1 btint4cmp(int4,int4), - FUNCTION 2 gin_extract_value_int4(int4, internal), - FUNCTION 3 gin_extract_query_int4(int4, internal, int2, internal, internal), - FUNCTION 4 gin_btree_consistent(internal, int2, anyelement, int4, internal, internal), - FUNCTION 5 gin_compare_prefix_int4(int4,int4,int2, internal), -STORAGE int4; - -CREATE FUNCTION gin_extract_value_int8(int8, internal) -RETURNS internal -AS 'MODULE_PATHNAME' -LANGUAGE C STRICT IMMUTABLE; - -CREATE FUNCTION gin_compare_prefix_int8(int8, int8, int2, internal) -RETURNS int4 -AS 'MODULE_PATHNAME' -LANGUAGE C STRICT IMMUTABLE; - -CREATE FUNCTION gin_extract_query_int8(int8, internal, int2, internal, internal) -RETURNS internal -AS 'MODULE_PATHNAME' -LANGUAGE C STRICT IMMUTABLE; - -CREATE OPERATOR CLASS int8_ops -DEFAULT FOR TYPE int8 USING gin -AS - OPERATOR 1 <, - OPERATOR 2 <=, - OPERATOR 3 =, - OPERATOR 4 >=, - OPERATOR 5 >, - FUNCTION 1 btint8cmp(int8,int8), - FUNCTION 2 gin_extract_value_int8(int8, internal), - FUNCTION 3 gin_extract_query_int8(int8, internal, int2, internal, internal), - FUNCTION 4 gin_btree_consistent(internal, int2, anyelement, int4, internal, internal), - FUNCTION 5 gin_compare_prefix_int8(int8,int8,int2, internal), -STORAGE int8; - -CREATE FUNCTION gin_extract_value_float4(float4, internal) -RETURNS internal -AS 'MODULE_PATHNAME' -LANGUAGE C STRICT IMMUTABLE; - -CREATE FUNCTION gin_compare_prefix_float4(float4, float4, int2, internal) -RETURNS int4 -AS 'MODULE_PATHNAME' -LANGUAGE C STRICT IMMUTABLE; - -CREATE FUNCTION gin_extract_query_float4(float4, internal, int2, internal, internal) -RETURNS internal -AS 'MODULE_PATHNAME' -LANGUAGE C STRICT IMMUTABLE; - -CREATE OPERATOR CLASS float4_ops -DEFAULT FOR TYPE float4 USING gin -AS - OPERATOR 1 <, - OPERATOR 2 <=, - OPERATOR 3 =, - OPERATOR 4 >=, - OPERATOR 5 >, - FUNCTION 1 btfloat4cmp(float4,float4), - FUNCTION 2 gin_extract_value_float4(float4, internal), - FUNCTION 3 gin_extract_query_float4(float4, internal, int2, internal, internal), - FUNCTION 4 gin_btree_consistent(internal, int2, anyelement, int4, internal, internal), - FUNCTION 5 gin_compare_prefix_float4(float4,float4,int2, internal), -STORAGE float4; - -CREATE FUNCTION gin_extract_value_float8(float8, internal) -RETURNS internal -AS 'MODULE_PATHNAME' -LANGUAGE C STRICT IMMUTABLE; - -CREATE FUNCTION gin_compare_prefix_float8(float8, float8, int2, internal) -RETURNS int4 -AS 'MODULE_PATHNAME' -LANGUAGE C STRICT IMMUTABLE; - -CREATE FUNCTION gin_extract_query_float8(float8, internal, int2, internal, internal) -RETURNS internal -AS 'MODULE_PATHNAME' -LANGUAGE C STRICT IMMUTABLE; - -CREATE OPERATOR CLASS float8_ops -DEFAULT FOR TYPE float8 USING gin -AS - OPERATOR 1 <, - OPERATOR 2 <=, - OPERATOR 3 =, - OPERATOR 4 >=, - OPERATOR 5 >, - FUNCTION 1 btfloat8cmp(float8,float8), - FUNCTION 2 gin_extract_value_float8(float8, internal), - FUNCTION 3 gin_extract_query_float8(float8, internal, int2, internal, internal), - FUNCTION 4 gin_btree_consistent(internal, int2, anyelement, int4, internal, internal), - FUNCTION 5 gin_compare_prefix_float8(float8,float8,int2, internal), -STORAGE float8; - -CREATE FUNCTION gin_extract_value_money(money, internal) -RETURNS internal -AS 'MODULE_PATHNAME' -LANGUAGE C STRICT IMMUTABLE; - -CREATE FUNCTION gin_compare_prefix_money(money, money, int2, internal) -RETURNS int4 -AS 'MODULE_PATHNAME' -LANGUAGE C STRICT IMMUTABLE; - -CREATE FUNCTION gin_extract_query_money(money, internal, int2, internal, internal) -RETURNS internal -AS 'MODULE_PATHNAME' -LANGUAGE C STRICT IMMUTABLE; - -CREATE OPERATOR CLASS money_ops -DEFAULT FOR TYPE money USING gin -AS - OPERATOR 1 <, - OPERATOR 2 <=, - OPERATOR 3 =, - OPERATOR 4 >=, - OPERATOR 5 >, - FUNCTION 1 cash_cmp(money,money), - FUNCTION 2 gin_extract_value_money(money, internal), - FUNCTION 3 gin_extract_query_money(money, internal, int2, internal, internal), - FUNCTION 4 gin_btree_consistent(internal, int2, anyelement, int4, internal, internal), - FUNCTION 5 gin_compare_prefix_money(money,money,int2, internal), -STORAGE money; - -CREATE FUNCTION gin_extract_value_oid(oid, internal) -RETURNS internal -AS 'MODULE_PATHNAME' -LANGUAGE C STRICT IMMUTABLE; - -CREATE FUNCTION gin_compare_prefix_oid(oid, oid, int2, internal) -RETURNS int4 -AS 'MODULE_PATHNAME' -LANGUAGE C STRICT IMMUTABLE; - -CREATE FUNCTION gin_extract_query_oid(oid, internal, int2, internal, internal) -RETURNS internal -AS 'MODULE_PATHNAME' -LANGUAGE C STRICT IMMUTABLE; - -CREATE OPERATOR CLASS oid_ops -DEFAULT FOR TYPE oid USING gin -AS - OPERATOR 1 <, - OPERATOR 2 <=, - OPERATOR 3 =, - OPERATOR 4 >=, - OPERATOR 5 >, - FUNCTION 1 btoidcmp(oid,oid), - FUNCTION 2 gin_extract_value_oid(oid, internal), - FUNCTION 3 gin_extract_query_oid(oid, internal, int2, internal, internal), - FUNCTION 4 gin_btree_consistent(internal, int2, anyelement, int4, internal, internal), - FUNCTION 5 gin_compare_prefix_oid(oid,oid,int2, internal), -STORAGE oid; - -CREATE FUNCTION gin_extract_value_timestamp(timestamp, internal) -RETURNS internal -AS 'MODULE_PATHNAME' -LANGUAGE C STRICT IMMUTABLE; - -CREATE FUNCTION gin_compare_prefix_timestamp(timestamp, timestamp, int2, internal) -RETURNS int4 -AS 'MODULE_PATHNAME' -LANGUAGE C STRICT IMMUTABLE; - -CREATE FUNCTION gin_extract_query_timestamp(timestamp, internal, int2, internal, internal) -RETURNS internal -AS 'MODULE_PATHNAME' -LANGUAGE C STRICT IMMUTABLE; - -CREATE OPERATOR CLASS timestamp_ops -DEFAULT FOR TYPE timestamp USING gin -AS - OPERATOR 1 <, - OPERATOR 2 <=, - OPERATOR 3 =, - OPERATOR 4 >=, - OPERATOR 5 >, - FUNCTION 1 timestamp_cmp(timestamp,timestamp), - FUNCTION 2 gin_extract_value_timestamp(timestamp, internal), - FUNCTION 3 gin_extract_query_timestamp(timestamp, internal, int2, internal, internal), - FUNCTION 4 gin_btree_consistent(internal, int2, anyelement, int4, internal, internal), - FUNCTION 5 gin_compare_prefix_timestamp(timestamp,timestamp,int2, internal), -STORAGE timestamp; - -CREATE FUNCTION gin_extract_value_timestamptz(timestamptz, internal) -RETURNS internal -AS 'MODULE_PATHNAME' -LANGUAGE C STRICT IMMUTABLE; - -CREATE FUNCTION gin_compare_prefix_timestamptz(timestamptz, timestamptz, int2, internal) -RETURNS int4 -AS 'MODULE_PATHNAME' -LANGUAGE C STRICT IMMUTABLE; - -CREATE FUNCTION gin_extract_query_timestamptz(timestamptz, internal, int2, internal, internal) -RETURNS internal -AS 'MODULE_PATHNAME' -LANGUAGE C STRICT IMMUTABLE; - -CREATE OPERATOR CLASS timestamptz_ops -DEFAULT FOR TYPE timestamptz USING gin -AS - OPERATOR 1 <, - OPERATOR 2 <=, - OPERATOR 3 =, - OPERATOR 4 >=, - OPERATOR 5 >, - FUNCTION 1 timestamptz_cmp(timestamptz,timestamptz), - FUNCTION 2 gin_extract_value_timestamptz(timestamptz, internal), - FUNCTION 3 gin_extract_query_timestamptz(timestamptz, internal, int2, internal, internal), - FUNCTION 4 gin_btree_consistent(internal, int2, anyelement, int4, internal, internal), - FUNCTION 5 gin_compare_prefix_timestamptz(timestamptz,timestamptz,int2, internal), -STORAGE timestamptz; - -CREATE FUNCTION gin_extract_value_time(time, internal) -RETURNS internal -AS 'MODULE_PATHNAME' -LANGUAGE C STRICT IMMUTABLE; - -CREATE FUNCTION gin_compare_prefix_time(time, time, int2, internal) -RETURNS int4 -AS 'MODULE_PATHNAME' -LANGUAGE C STRICT IMMUTABLE; - -CREATE FUNCTION gin_extract_query_time(time, internal, int2, internal, internal) -RETURNS internal -AS 'MODULE_PATHNAME' -LANGUAGE C STRICT IMMUTABLE; - -CREATE OPERATOR CLASS time_ops -DEFAULT FOR TYPE time USING gin -AS - OPERATOR 1 <, - OPERATOR 2 <=, - OPERATOR 3 =, - OPERATOR 4 >=, - OPERATOR 5 >, - FUNCTION 1 time_cmp(time,time), - FUNCTION 2 gin_extract_value_time(time, internal), - FUNCTION 3 gin_extract_query_time(time, internal, int2, internal, internal), - FUNCTION 4 gin_btree_consistent(internal, int2, anyelement, int4, internal, internal), - FUNCTION 5 gin_compare_prefix_time(time,time,int2, internal), -STORAGE time; - -CREATE FUNCTION gin_extract_value_timetz(timetz, internal) -RETURNS internal -AS 'MODULE_PATHNAME' -LANGUAGE C STRICT IMMUTABLE; - -CREATE FUNCTION gin_compare_prefix_timetz(timetz, timetz, int2, internal) -RETURNS int4 -AS 'MODULE_PATHNAME' -LANGUAGE C STRICT IMMUTABLE; - -CREATE FUNCTION gin_extract_query_timetz(timetz, internal, int2, internal, internal) -RETURNS internal -AS 'MODULE_PATHNAME' -LANGUAGE C STRICT IMMUTABLE; - -CREATE OPERATOR CLASS timetz_ops -DEFAULT FOR TYPE timetz USING gin -AS - OPERATOR 1 <, - OPERATOR 2 <=, - OPERATOR 3 =, - OPERATOR 4 >=, - OPERATOR 5 >, - FUNCTION 1 timetz_cmp(timetz,timetz), - FUNCTION 2 gin_extract_value_timetz(timetz, internal), - FUNCTION 3 gin_extract_query_timetz(timetz, internal, int2, internal, internal), - FUNCTION 4 gin_btree_consistent(internal, int2, anyelement, int4, internal, internal), - FUNCTION 5 gin_compare_prefix_timetz(timetz,timetz,int2, internal), -STORAGE timetz; - -CREATE FUNCTION gin_extract_value_date(date, internal) -RETURNS internal -AS 'MODULE_PATHNAME' -LANGUAGE C STRICT IMMUTABLE; - -CREATE FUNCTION gin_compare_prefix_date(date, date, int2, internal) -RETURNS int4 -AS 'MODULE_PATHNAME' -LANGUAGE C STRICT IMMUTABLE; - -CREATE FUNCTION gin_extract_query_date(date, internal, int2, internal, internal) -RETURNS internal -AS 'MODULE_PATHNAME' -LANGUAGE C STRICT IMMUTABLE; - -CREATE OPERATOR CLASS date_ops -DEFAULT FOR TYPE date USING gin -AS - OPERATOR 1 <, - OPERATOR 2 <=, - OPERATOR 3 =, - OPERATOR 4 >=, - OPERATOR 5 >, - FUNCTION 1 date_cmp(date,date), - FUNCTION 2 gin_extract_value_date(date, internal), - FUNCTION 3 gin_extract_query_date(date, internal, int2, internal, internal), - FUNCTION 4 gin_btree_consistent(internal, int2, anyelement, int4, internal, internal), - FUNCTION 5 gin_compare_prefix_date(date,date,int2, internal), -STORAGE date; - -CREATE FUNCTION gin_extract_value_interval(interval, internal) -RETURNS internal -AS 'MODULE_PATHNAME' -LANGUAGE C STRICT IMMUTABLE; - -CREATE FUNCTION gin_compare_prefix_interval(interval, interval, int2, internal) -RETURNS int4 -AS 'MODULE_PATHNAME' -LANGUAGE C STRICT IMMUTABLE; - -CREATE FUNCTION gin_extract_query_interval(interval, internal, int2, internal, internal) -RETURNS internal -AS 'MODULE_PATHNAME' -LANGUAGE C STRICT IMMUTABLE; - -CREATE OPERATOR CLASS interval_ops -DEFAULT FOR TYPE interval USING gin -AS - OPERATOR 1 <, - OPERATOR 2 <=, - OPERATOR 3 =, - OPERATOR 4 >=, - OPERATOR 5 >, - FUNCTION 1 interval_cmp(interval,interval), - FUNCTION 2 gin_extract_value_interval(interval, internal), - FUNCTION 3 gin_extract_query_interval(interval, internal, int2, internal, internal), - FUNCTION 4 gin_btree_consistent(internal, int2, anyelement, int4, internal, internal), - FUNCTION 5 gin_compare_prefix_interval(interval,interval,int2, internal), -STORAGE interval; - -CREATE FUNCTION gin_extract_value_macaddr(macaddr, internal) -RETURNS internal -AS 'MODULE_PATHNAME' -LANGUAGE C STRICT IMMUTABLE; - -CREATE FUNCTION gin_compare_prefix_macaddr(macaddr, macaddr, int2, internal) -RETURNS int4 -AS 'MODULE_PATHNAME' -LANGUAGE C STRICT IMMUTABLE; - -CREATE FUNCTION gin_extract_query_macaddr(macaddr, internal, int2, internal, internal) -RETURNS internal -AS 'MODULE_PATHNAME' -LANGUAGE C STRICT IMMUTABLE; - -CREATE OPERATOR CLASS macaddr_ops -DEFAULT FOR TYPE macaddr USING gin -AS - OPERATOR 1 <, - OPERATOR 2 <=, - OPERATOR 3 =, - OPERATOR 4 >=, - OPERATOR 5 >, - FUNCTION 1 macaddr_cmp(macaddr,macaddr), - FUNCTION 2 gin_extract_value_macaddr(macaddr, internal), - FUNCTION 3 gin_extract_query_macaddr(macaddr, internal, int2, internal, internal), - FUNCTION 4 gin_btree_consistent(internal, int2, anyelement, int4, internal, internal), - FUNCTION 5 gin_compare_prefix_macaddr(macaddr,macaddr,int2, internal), -STORAGE macaddr; - -CREATE FUNCTION gin_extract_value_inet(inet, internal) -RETURNS internal -AS 'MODULE_PATHNAME' -LANGUAGE C STRICT IMMUTABLE; - -CREATE FUNCTION gin_compare_prefix_inet(inet, inet, int2, internal) -RETURNS int4 -AS 'MODULE_PATHNAME' -LANGUAGE C STRICT IMMUTABLE; - -CREATE FUNCTION gin_extract_query_inet(inet, internal, int2, internal, internal) -RETURNS internal -AS 'MODULE_PATHNAME' -LANGUAGE C STRICT IMMUTABLE; - -CREATE OPERATOR CLASS inet_ops -DEFAULT FOR TYPE inet USING gin -AS - OPERATOR 1 <, - OPERATOR 2 <=, - OPERATOR 3 =, - OPERATOR 4 >=, - OPERATOR 5 >, - FUNCTION 1 network_cmp(inet,inet), - FUNCTION 2 gin_extract_value_inet(inet, internal), - FUNCTION 3 gin_extract_query_inet(inet, internal, int2, internal, internal), - FUNCTION 4 gin_btree_consistent(internal, int2, anyelement, int4, internal, internal), - FUNCTION 5 gin_compare_prefix_inet(inet,inet,int2, internal), -STORAGE inet; - -CREATE FUNCTION gin_extract_value_cidr(cidr, internal) -RETURNS internal -AS 'MODULE_PATHNAME' -LANGUAGE C STRICT IMMUTABLE; - -CREATE FUNCTION gin_compare_prefix_cidr(cidr, cidr, int2, internal) -RETURNS int4 -AS 'MODULE_PATHNAME' -LANGUAGE C STRICT IMMUTABLE; - -CREATE FUNCTION gin_extract_query_cidr(cidr, internal, int2, internal, internal) -RETURNS internal -AS 'MODULE_PATHNAME' -LANGUAGE C STRICT IMMUTABLE; - -CREATE OPERATOR CLASS cidr_ops -DEFAULT FOR TYPE cidr USING gin -AS - OPERATOR 1 <(inet,inet), - OPERATOR 2 <=(inet,inet), - OPERATOR 3 =(inet,inet), - OPERATOR 4 >=(inet,inet), - OPERATOR 5 >(inet,inet), - FUNCTION 1 network_cmp(inet,inet), - FUNCTION 2 gin_extract_value_cidr(cidr, internal), - FUNCTION 3 gin_extract_query_cidr(cidr, internal, int2, internal, internal), - FUNCTION 4 gin_btree_consistent(internal, int2, anyelement, int4, internal, internal), - FUNCTION 5 gin_compare_prefix_cidr(cidr,cidr,int2, internal), -STORAGE cidr; - -CREATE FUNCTION gin_extract_value_text(text, internal) -RETURNS internal -AS 'MODULE_PATHNAME' -LANGUAGE C STRICT IMMUTABLE; - -CREATE FUNCTION gin_compare_prefix_text(text, text, int2, internal) -RETURNS int4 -AS 'MODULE_PATHNAME' -LANGUAGE C STRICT IMMUTABLE; - -CREATE FUNCTION gin_extract_query_text(text, internal, int2, internal, internal) -RETURNS internal -AS 'MODULE_PATHNAME' -LANGUAGE C STRICT IMMUTABLE; - -CREATE OPERATOR CLASS text_ops -DEFAULT FOR TYPE text USING gin -AS - OPERATOR 1 <, - OPERATOR 2 <=, - OPERATOR 3 =, - OPERATOR 4 >=, - OPERATOR 5 >, - FUNCTION 1 bttextcmp(text,text), - FUNCTION 2 gin_extract_value_text(text, internal), - FUNCTION 3 gin_extract_query_text(text, internal, int2, internal, internal), - FUNCTION 4 gin_btree_consistent(internal, int2, anyelement, int4, internal, internal), - FUNCTION 5 gin_compare_prefix_text(text,text,int2, internal), -STORAGE text; - -CREATE OPERATOR CLASS varchar_ops -DEFAULT FOR TYPE varchar USING gin -AS - OPERATOR 1 <(text,text), - OPERATOR 2 <=(text,text), - OPERATOR 3 =(text,text), - OPERATOR 4 >=(text,text), - OPERATOR 5 >(text,text), - FUNCTION 1 bttextcmp(text,text), - FUNCTION 2 gin_extract_value_text(text, internal), - FUNCTION 3 gin_extract_query_text(text, internal, int2, internal, internal), - FUNCTION 4 gin_btree_consistent(internal, int2, anyelement, int4, internal, internal), - FUNCTION 5 gin_compare_prefix_text(text,text,int2, internal), -STORAGE varchar; - -CREATE FUNCTION gin_extract_value_char("char", internal) -RETURNS internal -AS 'MODULE_PATHNAME' -LANGUAGE C STRICT IMMUTABLE; - -CREATE FUNCTION gin_compare_prefix_char("char", "char", int2, internal) -RETURNS int4 -AS 'MODULE_PATHNAME' -LANGUAGE C STRICT IMMUTABLE; - -CREATE FUNCTION gin_extract_query_char("char", internal, int2, internal, internal) -RETURNS internal -AS 'MODULE_PATHNAME' -LANGUAGE C STRICT IMMUTABLE; - -CREATE OPERATOR CLASS char_ops -DEFAULT FOR TYPE "char" USING gin -AS - OPERATOR 1 <, - OPERATOR 2 <=, - OPERATOR 3 =, - OPERATOR 4 >=, - OPERATOR 5 >, - FUNCTION 1 btcharcmp("char","char"), - FUNCTION 2 gin_extract_value_char("char", internal), - FUNCTION 3 gin_extract_query_char("char", internal, int2, internal, internal), - FUNCTION 4 gin_btree_consistent(internal, int2, anyelement, int4, internal, internal), - FUNCTION 5 gin_compare_prefix_char("char","char",int2, internal), -STORAGE "char"; - -CREATE FUNCTION gin_extract_value_bytea(bytea, internal) -RETURNS internal -AS 'MODULE_PATHNAME' -LANGUAGE C STRICT IMMUTABLE; - -CREATE FUNCTION gin_compare_prefix_bytea(bytea, bytea, int2, internal) -RETURNS int4 -AS 'MODULE_PATHNAME' -LANGUAGE C STRICT IMMUTABLE; - -CREATE FUNCTION gin_extract_query_bytea(bytea, internal, int2, internal, internal) -RETURNS internal -AS 'MODULE_PATHNAME' -LANGUAGE C STRICT IMMUTABLE; - -CREATE OPERATOR CLASS bytea_ops -DEFAULT FOR TYPE bytea USING gin -AS - OPERATOR 1 <, - OPERATOR 2 <=, - OPERATOR 3 =, - OPERATOR 4 >=, - OPERATOR 5 >, - FUNCTION 1 byteacmp(bytea,bytea), - FUNCTION 2 gin_extract_value_bytea(bytea, internal), - FUNCTION 3 gin_extract_query_bytea(bytea, internal, int2, internal, internal), - FUNCTION 4 gin_btree_consistent(internal, int2, anyelement, int4, internal, internal), - FUNCTION 5 gin_compare_prefix_bytea(bytea,bytea,int2, internal), -STORAGE bytea; - -CREATE FUNCTION gin_extract_value_bit(bit, internal) -RETURNS internal -AS 'MODULE_PATHNAME' -LANGUAGE C STRICT IMMUTABLE; - -CREATE FUNCTION gin_compare_prefix_bit(bit, bit, int2, internal) -RETURNS int4 -AS 'MODULE_PATHNAME' -LANGUAGE C STRICT IMMUTABLE; - -CREATE FUNCTION gin_extract_query_bit(bit, internal, int2, internal, internal) -RETURNS internal -AS 'MODULE_PATHNAME' -LANGUAGE C STRICT IMMUTABLE; - -CREATE OPERATOR CLASS bit_ops -DEFAULT FOR TYPE bit USING gin -AS - OPERATOR 1 <, - OPERATOR 2 <=, - OPERATOR 3 =, - OPERATOR 4 >=, - OPERATOR 5 >, - FUNCTION 1 bitcmp(bit,bit), - FUNCTION 2 gin_extract_value_bit(bit, internal), - FUNCTION 3 gin_extract_query_bit(bit, internal, int2, internal, internal), - FUNCTION 4 gin_btree_consistent(internal, int2, anyelement, int4, internal, internal), - FUNCTION 5 gin_compare_prefix_bit(bit,bit,int2, internal), -STORAGE bit; - -CREATE FUNCTION gin_extract_value_varbit(varbit, internal) -RETURNS internal -AS 'MODULE_PATHNAME' -LANGUAGE C STRICT IMMUTABLE; - -CREATE FUNCTION gin_compare_prefix_varbit(varbit, varbit, int2, internal) -RETURNS int4 -AS 'MODULE_PATHNAME' -LANGUAGE C STRICT IMMUTABLE; - -CREATE FUNCTION gin_extract_query_varbit(varbit, internal, int2, internal, internal) -RETURNS internal -AS 'MODULE_PATHNAME' -LANGUAGE C STRICT IMMUTABLE; - -CREATE OPERATOR CLASS varbit_ops -DEFAULT FOR TYPE varbit USING gin -AS - OPERATOR 1 <, - OPERATOR 2 <=, - OPERATOR 3 =, - OPERATOR 4 >=, - OPERATOR 5 >, - FUNCTION 1 varbitcmp(varbit,varbit), - FUNCTION 2 gin_extract_value_varbit(varbit, internal), - FUNCTION 3 gin_extract_query_varbit(varbit, internal, int2, internal, internal), - FUNCTION 4 gin_btree_consistent(internal, int2, anyelement, int4, internal, internal), - FUNCTION 5 gin_compare_prefix_varbit(varbit,varbit,int2, internal), -STORAGE varbit; - -CREATE FUNCTION gin_extract_value_numeric(numeric, internal) -RETURNS internal -AS 'MODULE_PATHNAME' -LANGUAGE C STRICT IMMUTABLE; - -CREATE FUNCTION gin_compare_prefix_numeric(numeric, numeric, int2, internal) -RETURNS int4 -AS 'MODULE_PATHNAME' -LANGUAGE C STRICT IMMUTABLE; - -CREATE FUNCTION gin_extract_query_numeric(numeric, internal, int2, internal, internal) -RETURNS internal -AS 'MODULE_PATHNAME' -LANGUAGE C STRICT IMMUTABLE; - -CREATE FUNCTION gin_numeric_cmp(numeric, numeric) -RETURNS int4 -AS 'MODULE_PATHNAME' -LANGUAGE C STRICT IMMUTABLE; - -CREATE OPERATOR CLASS numeric_ops -DEFAULT FOR TYPE numeric USING gin -AS - OPERATOR 1 <, - OPERATOR 2 <=, - OPERATOR 3 =, - OPERATOR 4 >=, - OPERATOR 5 >, - FUNCTION 1 gin_numeric_cmp(numeric,numeric), - FUNCTION 2 gin_extract_value_numeric(numeric, internal), - FUNCTION 3 gin_extract_query_numeric(numeric, internal, int2, internal, internal), - FUNCTION 4 gin_btree_consistent(internal, int2, anyelement, int4, internal, internal), - FUNCTION 5 gin_compare_prefix_numeric(numeric,numeric,int2, internal), -STORAGE numeric; diff --git a/contrib/btree_gin/btree_gin--1.1.sql b/contrib/btree_gin/btree_gin--1.1.sql new file mode 100644 index 0000000..f117e4a --- /dev/null +++ b/contrib/btree_gin/btree_gin--1.1.sql @@ -0,0 +1,724 @@ +/* contrib/btree_gin/btree_gin--1.0.sql */ + +-- complain if script is sourced in psql, rather than via CREATE EXTENSION +\echo Use "CREATE EXTENSION btree_gin" to load this file. \quit + +CREATE FUNCTION gin_btree_consistent(internal, int2, anyelement, int4, internal, internal) +RETURNS bool +AS 'MODULE_PATHNAME' +LANGUAGE C STRICT IMMUTABLE; + +CREATE FUNCTION gin_extract_value_int2(int2, internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE C STRICT IMMUTABLE; + +CREATE FUNCTION gin_compare_prefix_int2(int2, int2, int2, internal) +RETURNS int4 +AS 'MODULE_PATHNAME' +LANGUAGE C STRICT IMMUTABLE; + +CREATE FUNCTION gin_extract_query_int2(int2, internal, int2, internal, internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE C STRICT IMMUTABLE; + +CREATE OPERATOR CLASS int2_ops +DEFAULT FOR TYPE int2 USING gin +AS + OPERATOR 1 <, + OPERATOR 2 <=, + OPERATOR 3 =, + OPERATOR 4 >=, + OPERATOR 5 >, + FUNCTION 1 btint2cmp(int2,int2), + FUNCTION 2 gin_extract_value_int2(int2, internal), + FUNCTION 3 gin_extract_query_int2(int2, internal, int2, internal, internal), + FUNCTION 4 gin_btree_consistent(internal, int2, anyelement, int4, internal, internal), + FUNCTION 5 gin_compare_prefix_int2(int2,int2,int2, internal), +STORAGE int2; + +CREATE FUNCTION gin_extract_value_int4(int4, internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE C STRICT IMMUTABLE; + +CREATE FUNCTION gin_compare_prefix_int4(int4, int4, int2, internal) +RETURNS int4 +AS 'MODULE_PATHNAME' +LANGUAGE C STRICT IMMUTABLE; + +CREATE FUNCTION gin_extract_query_int4(int4, internal, int2, internal, internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE C STRICT IMMUTABLE; + +CREATE OPERATOR CLASS int4_ops +DEFAULT FOR TYPE int4 USING gin +AS + OPERATOR 1 <, + OPERATOR 2 <=, + OPERATOR 3 =, + OPERATOR 4 >=, + OPERATOR 5 >, + FUNCTION 1 btint4cmp(int4,int4), + FUNCTION 2 gin_extract_value_int4(int4, internal), + FUNCTION 3 gin_extract_query_int4(int4, internal, int2, internal, internal), + FUNCTION 4 gin_btree_consistent(internal, int2, anyelement, int4, internal, internal), + FUNCTION 5 gin_compare_prefix_int4(int4,int4,int2, internal), +STORAGE int4; + +CREATE FUNCTION gin_extract_value_int8(int8, internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE C STRICT IMMUTABLE; + +CREATE FUNCTION gin_compare_prefix_int8(int8, int8, int2, internal) +RETURNS int4 +AS 'MODULE_PATHNAME' +LANGUAGE C STRICT IMMUTABLE; + +CREATE FUNCTION gin_extract_query_int8(int8, internal, int2, internal, internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE C STRICT IMMUTABLE; + +CREATE OPERATOR CLASS int8_ops +DEFAULT FOR TYPE int8 USING gin +AS + OPERATOR 1 <, + OPERATOR 2 <=, + OPERATOR 3 =, + OPERATOR 4 >=, + OPERATOR 5 >, + FUNCTION 1 btint8cmp(int8,int8), + FUNCTION 2 gin_extract_value_int8(int8, internal), + FUNCTION 3 gin_extract_query_int8(int8, internal, int2, internal, internal), + FUNCTION 4 gin_btree_consistent(internal, int2, anyelement, int4, internal, internal), + FUNCTION 5 gin_compare_prefix_int8(int8,int8,int2, internal), +STORAGE int8; + +CREATE FUNCTION gin_extract_value_float4(float4, internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE C STRICT IMMUTABLE; + +CREATE FUNCTION gin_compare_prefix_float4(float4, float4, int2, internal) +RETURNS int4 +AS 'MODULE_PATHNAME' +LANGUAGE C STRICT IMMUTABLE; + +CREATE FUNCTION gin_extract_query_float4(float4, internal, int2, internal, internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE C STRICT IMMUTABLE; + +CREATE OPERATOR CLASS float4_ops +DEFAULT FOR TYPE float4 USING gin +AS + OPERATOR 1 <, + OPERATOR 2 <=, + OPERATOR 3 =, + OPERATOR 4 >=, + OPERATOR 5 >, + FUNCTION 1 btfloat4cmp(float4,float4), + FUNCTION 2 gin_extract_value_float4(float4, internal), + FUNCTION 3 gin_extract_query_float4(float4, internal, int2, internal, internal), + FUNCTION 4 gin_btree_consistent(internal, int2, anyelement, int4, internal, internal), + FUNCTION 5 gin_compare_prefix_float4(float4,float4,int2, internal), +STORAGE float4; + +CREATE FUNCTION gin_extract_value_float8(float8, internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE C STRICT IMMUTABLE; + +CREATE FUNCTION gin_compare_prefix_float8(float8, float8, int2, internal) +RETURNS int4 +AS 'MODULE_PATHNAME' +LANGUAGE C STRICT IMMUTABLE; + +CREATE FUNCTION gin_extract_query_float8(float8, internal, int2, internal, internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE C STRICT IMMUTABLE; + +CREATE OPERATOR CLASS float8_ops +DEFAULT FOR TYPE float8 USING gin +AS + OPERATOR 1 <, + OPERATOR 2 <=, + OPERATOR 3 =, + OPERATOR 4 >=, + OPERATOR 5 >, + FUNCTION 1 btfloat8cmp(float8,float8), + FUNCTION 2 gin_extract_value_float8(float8, internal), + FUNCTION 3 gin_extract_query_float8(float8, internal, int2, internal, internal), + FUNCTION 4 gin_btree_consistent(internal, int2, anyelement, int4, internal, internal), + FUNCTION 5 gin_compare_prefix_float8(float8,float8,int2, internal), +STORAGE float8; + +CREATE FUNCTION gin_extract_value_money(money, internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE C STRICT IMMUTABLE; + +CREATE FUNCTION gin_compare_prefix_money(money, money, int2, internal) +RETURNS int4 +AS 'MODULE_PATHNAME' +LANGUAGE C STRICT IMMUTABLE; + +CREATE FUNCTION gin_extract_query_money(money, internal, int2, internal, internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE C STRICT IMMUTABLE; + +CREATE OPERATOR CLASS money_ops +DEFAULT FOR TYPE money USING gin +AS + OPERATOR 1 <, + OPERATOR 2 <=, + OPERATOR 3 =, + OPERATOR 4 >=, + OPERATOR 5 >, + FUNCTION 1 cash_cmp(money,money), + FUNCTION 2 gin_extract_value_money(money, internal), + FUNCTION 3 gin_extract_query_money(money, internal, int2, internal, internal), + FUNCTION 4 gin_btree_consistent(internal, int2, anyelement, int4, internal, internal), + FUNCTION 5 gin_compare_prefix_money(money,money,int2, internal), +STORAGE money; + +CREATE FUNCTION gin_extract_value_oid(oid, internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE C STRICT IMMUTABLE; + +CREATE FUNCTION gin_compare_prefix_oid(oid, oid, int2, internal) +RETURNS int4 +AS 'MODULE_PATHNAME' +LANGUAGE C STRICT IMMUTABLE; + +CREATE FUNCTION gin_extract_query_oid(oid, internal, int2, internal, internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE C STRICT IMMUTABLE; + +CREATE OPERATOR CLASS oid_ops +DEFAULT FOR TYPE oid USING gin +AS + OPERATOR 1 <, + OPERATOR 2 <=, + OPERATOR 3 =, + OPERATOR 4 >=, + OPERATOR 5 >, + FUNCTION 1 btoidcmp(oid,oid), + FUNCTION 2 gin_extract_value_oid(oid, internal), + FUNCTION 3 gin_extract_query_oid(oid, internal, int2, internal, internal), + FUNCTION 4 gin_btree_consistent(internal, int2, anyelement, int4, internal, internal), + FUNCTION 5 gin_compare_prefix_oid(oid,oid,int2, internal), +STORAGE oid; + +CREATE FUNCTION gin_extract_value_timestamp(timestamp, internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE C STRICT IMMUTABLE; + +CREATE FUNCTION gin_compare_prefix_timestamp(timestamp, timestamp, int2, internal) +RETURNS int4 +AS 'MODULE_PATHNAME' +LANGUAGE C STRICT IMMUTABLE; + +CREATE FUNCTION gin_extract_query_timestamp(timestamp, internal, int2, internal, internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE C STRICT IMMUTABLE; + +CREATE OPERATOR CLASS timestamp_ops +DEFAULT FOR TYPE timestamp USING gin +AS + OPERATOR 1 <, + OPERATOR 2 <=, + OPERATOR 3 =, + OPERATOR 4 >=, + OPERATOR 5 >, + FUNCTION 1 timestamp_cmp(timestamp,timestamp), + FUNCTION 2 gin_extract_value_timestamp(timestamp, internal), + FUNCTION 3 gin_extract_query_timestamp(timestamp, internal, int2, internal, internal), + FUNCTION 4 gin_btree_consistent(internal, int2, anyelement, int4, internal, internal), + FUNCTION 5 gin_compare_prefix_timestamp(timestamp,timestamp,int2, internal), +STORAGE timestamp; + +CREATE FUNCTION gin_extract_value_timestamptz(timestamptz, internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE C STRICT IMMUTABLE; + +CREATE FUNCTION gin_compare_prefix_timestamptz(timestamptz, timestamptz, int2, internal) +RETURNS int4 +AS 'MODULE_PATHNAME' +LANGUAGE C STRICT IMMUTABLE; + +CREATE FUNCTION gin_extract_query_timestamptz(timestamptz, internal, int2, internal, internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE C STRICT IMMUTABLE; + +CREATE OPERATOR CLASS timestamptz_ops +DEFAULT FOR TYPE timestamptz USING gin +AS + OPERATOR 1 <, + OPERATOR 2 <=, + OPERATOR 3 =, + OPERATOR 4 >=, + OPERATOR 5 >, + FUNCTION 1 timestamptz_cmp(timestamptz,timestamptz), + FUNCTION 2 gin_extract_value_timestamptz(timestamptz, internal), + FUNCTION 3 gin_extract_query_timestamptz(timestamptz, internal, int2, internal, internal), + FUNCTION 4 gin_btree_consistent(internal, int2, anyelement, int4, internal, internal), + FUNCTION 5 gin_compare_prefix_timestamptz(timestamptz,timestamptz,int2, internal), +STORAGE timestamptz; + +CREATE FUNCTION gin_extract_value_time(time, internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE C STRICT IMMUTABLE; + +CREATE FUNCTION gin_compare_prefix_time(time, time, int2, internal) +RETURNS int4 +AS 'MODULE_PATHNAME' +LANGUAGE C STRICT IMMUTABLE; + +CREATE FUNCTION gin_extract_query_time(time, internal, int2, internal, internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE C STRICT IMMUTABLE; + +CREATE OPERATOR CLASS time_ops +DEFAULT FOR TYPE time USING gin +AS + OPERATOR 1 <, + OPERATOR 2 <=, + OPERATOR 3 =, + OPERATOR 4 >=, + OPERATOR 5 >, + FUNCTION 1 time_cmp(time,time), + FUNCTION 2 gin_extract_value_time(time, internal), + FUNCTION 3 gin_extract_query_time(time, internal, int2, internal, internal), + FUNCTION 4 gin_btree_consistent(internal, int2, anyelement, int4, internal, internal), + FUNCTION 5 gin_compare_prefix_time(time,time,int2, internal), +STORAGE time; + +CREATE FUNCTION gin_extract_value_timetz(timetz, internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE C STRICT IMMUTABLE; + +CREATE FUNCTION gin_compare_prefix_timetz(timetz, timetz, int2, internal) +RETURNS int4 +AS 'MODULE_PATHNAME' +LANGUAGE C STRICT IMMUTABLE; + +CREATE FUNCTION gin_extract_query_timetz(timetz, internal, int2, internal, internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE C STRICT IMMUTABLE; + +CREATE OPERATOR CLASS timetz_ops +DEFAULT FOR TYPE timetz USING gin +AS + OPERATOR 1 <, + OPERATOR 2 <=, + OPERATOR 3 =, + OPERATOR 4 >=, + OPERATOR 5 >, + FUNCTION 1 timetz_cmp(timetz,timetz), + FUNCTION 2 gin_extract_value_timetz(timetz, internal), + FUNCTION 3 gin_extract_query_timetz(timetz, internal, int2, internal, internal), + FUNCTION 4 gin_btree_consistent(internal, int2, anyelement, int4, internal, internal), + FUNCTION 5 gin_compare_prefix_timetz(timetz,timetz,int2, internal), +STORAGE timetz; + +CREATE FUNCTION gin_extract_value_date(date, internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE C STRICT IMMUTABLE; + +CREATE FUNCTION gin_compare_prefix_date(date, date, int2, internal) +RETURNS int4 +AS 'MODULE_PATHNAME' +LANGUAGE C STRICT IMMUTABLE; + +CREATE FUNCTION gin_extract_query_date(date, internal, int2, internal, internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE C STRICT IMMUTABLE; + +CREATE OPERATOR CLASS date_ops +DEFAULT FOR TYPE date USING gin +AS + OPERATOR 1 <, + OPERATOR 2 <=, + OPERATOR 3 =, + OPERATOR 4 >=, + OPERATOR 5 >, + FUNCTION 1 date_cmp(date,date), + FUNCTION 2 gin_extract_value_date(date, internal), + FUNCTION 3 gin_extract_query_date(date, internal, int2, internal, internal), + FUNCTION 4 gin_btree_consistent(internal, int2, anyelement, int4, internal, internal), + FUNCTION 5 gin_compare_prefix_date(date,date,int2, internal), +STORAGE date; + +CREATE FUNCTION gin_extract_value_interval(interval, internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE C STRICT IMMUTABLE; + +CREATE FUNCTION gin_compare_prefix_interval(interval, interval, int2, internal) +RETURNS int4 +AS 'MODULE_PATHNAME' +LANGUAGE C STRICT IMMUTABLE; + +CREATE FUNCTION gin_extract_query_interval(interval, internal, int2, internal, internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE C STRICT IMMUTABLE; + +CREATE OPERATOR CLASS interval_ops +DEFAULT FOR TYPE interval USING gin +AS + OPERATOR 1 <, + OPERATOR 2 <=, + OPERATOR 3 =, + OPERATOR 4 >=, + OPERATOR 5 >, + FUNCTION 1 interval_cmp(interval,interval), + FUNCTION 2 gin_extract_value_interval(interval, internal), + FUNCTION 3 gin_extract_query_interval(interval, internal, int2, internal, internal), + FUNCTION 4 gin_btree_consistent(internal, int2, anyelement, int4, internal, internal), + FUNCTION 5 gin_compare_prefix_interval(interval,interval,int2, internal), +STORAGE interval; + +CREATE FUNCTION gin_extract_value_macaddr(macaddr, internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE C STRICT IMMUTABLE; + +CREATE FUNCTION gin_compare_prefix_macaddr(macaddr, macaddr, int2, internal) +RETURNS int4 +AS 'MODULE_PATHNAME' +LANGUAGE C STRICT IMMUTABLE; + +CREATE FUNCTION gin_extract_query_macaddr(macaddr, internal, int2, internal, internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE C STRICT IMMUTABLE; + +CREATE OPERATOR CLASS macaddr_ops +DEFAULT FOR TYPE macaddr USING gin +AS + OPERATOR 1 <, + OPERATOR 2 <=, + OPERATOR 3 =, + OPERATOR 4 >=, + OPERATOR 5 >, + FUNCTION 1 macaddr_cmp(macaddr,macaddr), + FUNCTION 2 gin_extract_value_macaddr(macaddr, internal), + FUNCTION 3 gin_extract_query_macaddr(macaddr, internal, int2, internal, internal), + FUNCTION 4 gin_btree_consistent(internal, int2, anyelement, int4, internal, internal), + FUNCTION 5 gin_compare_prefix_macaddr(macaddr,macaddr,int2, internal), +STORAGE macaddr; + +CREATE FUNCTION gin_extract_value_inet(inet, internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE C STRICT IMMUTABLE; + +CREATE FUNCTION gin_compare_prefix_inet(inet, inet, int2, internal) +RETURNS int4 +AS 'MODULE_PATHNAME' +LANGUAGE C STRICT IMMUTABLE; + +CREATE FUNCTION gin_extract_query_inet(inet, internal, int2, internal, internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE C STRICT IMMUTABLE; + +CREATE OPERATOR CLASS inet_ops +DEFAULT FOR TYPE inet USING gin +AS + OPERATOR 1 <, + OPERATOR 2 <=, + OPERATOR 3 =, + OPERATOR 4 >=, + OPERATOR 5 >, + FUNCTION 1 network_cmp(inet,inet), + FUNCTION 2 gin_extract_value_inet(inet, internal), + FUNCTION 3 gin_extract_query_inet(inet, internal, int2, internal, internal), + FUNCTION 4 gin_btree_consistent(internal, int2, anyelement, int4, internal, internal), + FUNCTION 5 gin_compare_prefix_inet(inet,inet,int2, internal), +STORAGE inet; + +CREATE FUNCTION gin_extract_value_cidr(cidr, internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE C STRICT IMMUTABLE; + +CREATE FUNCTION gin_compare_prefix_cidr(cidr, cidr, int2, internal) +RETURNS int4 +AS 'MODULE_PATHNAME' +LANGUAGE C STRICT IMMUTABLE; + +CREATE FUNCTION gin_extract_query_cidr(cidr, internal, int2, internal, internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE C STRICT IMMUTABLE; + +CREATE OPERATOR CLASS cidr_ops +DEFAULT FOR TYPE cidr USING gin +AS + OPERATOR 1 <(inet,inet), + OPERATOR 2 <=(inet,inet), + OPERATOR 3 =(inet,inet), + OPERATOR 4 >=(inet,inet), + OPERATOR 5 >(inet,inet), + FUNCTION 1 network_cmp(inet,inet), + FUNCTION 2 gin_extract_value_cidr(cidr, internal), + FUNCTION 3 gin_extract_query_cidr(cidr, internal, int2, internal, internal), + FUNCTION 4 gin_btree_consistent(internal, int2, anyelement, int4, internal, internal), + FUNCTION 5 gin_compare_prefix_cidr(cidr,cidr,int2, internal), +STORAGE cidr; + +CREATE FUNCTION gin_extract_value_text(text, internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE C STRICT IMMUTABLE; + +CREATE FUNCTION gin_compare_prefix_text(text, text, int2, internal) +RETURNS int4 +AS 'MODULE_PATHNAME' +LANGUAGE C STRICT IMMUTABLE; + +CREATE FUNCTION gin_extract_query_text(text, internal, int2, internal, internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE C STRICT IMMUTABLE; + +CREATE OPERATOR CLASS text_ops +DEFAULT FOR TYPE text USING gin +AS + OPERATOR 1 <, + OPERATOR 2 <=, + OPERATOR 3 =, + OPERATOR 4 >=, + OPERATOR 5 >, + FUNCTION 1 bttextcmp(text,text), + FUNCTION 2 gin_extract_value_text(text, internal), + FUNCTION 3 gin_extract_query_text(text, internal, int2, internal, internal), + FUNCTION 4 gin_btree_consistent(internal, int2, anyelement, int4, internal, internal), + FUNCTION 5 gin_compare_prefix_text(text,text,int2, internal), +STORAGE text; + +CREATE OPERATOR CLASS varchar_ops +DEFAULT FOR TYPE varchar USING gin +AS + OPERATOR 1 <(text,text), + OPERATOR 2 <=(text,text), + OPERATOR 3 =(text,text), + OPERATOR 4 >=(text,text), + OPERATOR 5 >(text,text), + FUNCTION 1 bttextcmp(text,text), + FUNCTION 2 gin_extract_value_text(text, internal), + FUNCTION 3 gin_extract_query_text(text, internal, int2, internal, internal), + FUNCTION 4 gin_btree_consistent(internal, int2, anyelement, int4, internal, internal), + FUNCTION 5 gin_compare_prefix_text(text,text,int2, internal), +STORAGE varchar; + +CREATE FUNCTION gin_extract_value_char("char", internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE C STRICT IMMUTABLE; + +CREATE FUNCTION gin_compare_prefix_char("char", "char", int2, internal) +RETURNS int4 +AS 'MODULE_PATHNAME' +LANGUAGE C STRICT IMMUTABLE; + +CREATE FUNCTION gin_extract_query_char("char", internal, int2, internal, internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE C STRICT IMMUTABLE; + +CREATE OPERATOR CLASS char_ops +DEFAULT FOR TYPE "char" USING gin +AS + OPERATOR 1 <, + OPERATOR 2 <=, + OPERATOR 3 =, + OPERATOR 4 >=, + OPERATOR 5 >, + FUNCTION 1 btcharcmp("char","char"), + FUNCTION 2 gin_extract_value_char("char", internal), + FUNCTION 3 gin_extract_query_char("char", internal, int2, internal, internal), + FUNCTION 4 gin_btree_consistent(internal, int2, anyelement, int4, internal, internal), + FUNCTION 5 gin_compare_prefix_char("char","char",int2, internal), +STORAGE "char"; + +CREATE FUNCTION gin_extract_value_bytea(bytea, internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE C STRICT IMMUTABLE; + +CREATE FUNCTION gin_compare_prefix_bytea(bytea, bytea, int2, internal) +RETURNS int4 +AS 'MODULE_PATHNAME' +LANGUAGE C STRICT IMMUTABLE; + +CREATE FUNCTION gin_extract_query_bytea(bytea, internal, int2, internal, internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE C STRICT IMMUTABLE; + +CREATE OPERATOR CLASS bytea_ops +DEFAULT FOR TYPE bytea USING gin +AS + OPERATOR 1 <, + OPERATOR 2 <=, + OPERATOR 3 =, + OPERATOR 4 >=, + OPERATOR 5 >, + FUNCTION 1 byteacmp(bytea,bytea), + FUNCTION 2 gin_extract_value_bytea(bytea, internal), + FUNCTION 3 gin_extract_query_bytea(bytea, internal, int2, internal, internal), + FUNCTION 4 gin_btree_consistent(internal, int2, anyelement, int4, internal, internal), + FUNCTION 5 gin_compare_prefix_bytea(bytea,bytea,int2, internal), +STORAGE bytea; + +CREATE FUNCTION gin_extract_value_bit(bit, internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE C STRICT IMMUTABLE; + +CREATE FUNCTION gin_compare_prefix_bit(bit, bit, int2, internal) +RETURNS int4 +AS 'MODULE_PATHNAME' +LANGUAGE C STRICT IMMUTABLE; + +CREATE FUNCTION gin_extract_query_bit(bit, internal, int2, internal, internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE C STRICT IMMUTABLE; + +CREATE OPERATOR CLASS bit_ops +DEFAULT FOR TYPE bit USING gin +AS + OPERATOR 1 <, + OPERATOR 2 <=, + OPERATOR 3 =, + OPERATOR 4 >=, + OPERATOR 5 >, + FUNCTION 1 bitcmp(bit,bit), + FUNCTION 2 gin_extract_value_bit(bit, internal), + FUNCTION 3 gin_extract_query_bit(bit, internal, int2, internal, internal), + FUNCTION 4 gin_btree_consistent(internal, int2, anyelement, int4, internal, internal), + FUNCTION 5 gin_compare_prefix_bit(bit,bit,int2, internal), +STORAGE bit; + +CREATE FUNCTION gin_extract_value_varbit(varbit, internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE C STRICT IMMUTABLE; + +CREATE FUNCTION gin_compare_prefix_varbit(varbit, varbit, int2, internal) +RETURNS int4 +AS 'MODULE_PATHNAME' +LANGUAGE C STRICT IMMUTABLE; + +CREATE FUNCTION gin_extract_query_varbit(varbit, internal, int2, internal, internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE C STRICT IMMUTABLE; + +CREATE OPERATOR CLASS varbit_ops +DEFAULT FOR TYPE varbit USING gin +AS + OPERATOR 1 <, + OPERATOR 2 <=, + OPERATOR 3 =, + OPERATOR 4 >=, + OPERATOR 5 >, + FUNCTION 1 varbitcmp(varbit,varbit), + FUNCTION 2 gin_extract_value_varbit(varbit, internal), + FUNCTION 3 gin_extract_query_varbit(varbit, internal, int2, internal, internal), + FUNCTION 4 gin_btree_consistent(internal, int2, anyelement, int4, internal, internal), + FUNCTION 5 gin_compare_prefix_varbit(varbit,varbit,int2, internal), +STORAGE varbit; + +CREATE FUNCTION gin_extract_value_numeric(numeric, internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE C STRICT IMMUTABLE; + +CREATE FUNCTION gin_compare_prefix_numeric(numeric, numeric, int2, internal) +RETURNS int4 +AS 'MODULE_PATHNAME' +LANGUAGE C STRICT IMMUTABLE; + +CREATE FUNCTION gin_extract_query_numeric(numeric, internal, int2, internal, internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE C STRICT IMMUTABLE; + +CREATE FUNCTION gin_numeric_cmp(numeric, numeric) +RETURNS int4 +AS 'MODULE_PATHNAME' +LANGUAGE C STRICT IMMUTABLE; + +CREATE OPERATOR CLASS numeric_ops +DEFAULT FOR TYPE numeric USING gin +AS + OPERATOR 1 <, + OPERATOR 2 <=, + OPERATOR 3 =, + OPERATOR 4 >=, + OPERATOR 5 >, + FUNCTION 1 gin_numeric_cmp(numeric,numeric), + FUNCTION 2 gin_extract_value_numeric(numeric, internal), + FUNCTION 3 gin_extract_query_numeric(numeric, internal, int2, internal, internal), + FUNCTION 4 gin_btree_consistent(internal, int2, anyelement, int4, internal, internal), + FUNCTION 5 gin_compare_prefix_numeric(numeric,numeric,int2, internal), +STORAGE numeric; + +CREATE FUNCTION gin_extract_value_anyenum(anyenum, internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE C STRICT IMMUTABLE; + +CREATE FUNCTION gin_compare_prefix_anyenum(anyenum, anyenum, int2, internal) +RETURNS int4 +AS 'MODULE_PATHNAME' +LANGUAGE C STRICT IMMUTABLE; + +CREATE FUNCTION gin_extract_query_anyenum(anyenum, internal, int2, internal, internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE C STRICT IMMUTABLE; + +CREATE FUNCTION gin_enum_cmp(anyenum, anyenum) +RETURNS int4 +AS 'MODULE_PATHNAME' +LANGUAGE C STRICT IMMUTABLE; + +CREATE OPERATOR CLASS enum_ops +DEFAULT FOR TYPE anyenum USING gin +AS + OPERATOR 1 <, + OPERATOR 2 <=, + OPERATOR 3 =, + OPERATOR 4 >=, + OPERATOR 5 >, + FUNCTION 1 gin_enum_cmp(anyenum,anyenum), + FUNCTION 2 gin_extract_value_anyenum(anyenum, internal), + FUNCTION 3 gin_extract_query_anyenum(anyenum, internal, int2, internal, internal), + FUNCTION 4 gin_btree_consistent(internal, int2, anyelement, int4, internal, internal), + FUNCTION 5 gin_compare_prefix_anyenum(anyenum,anyenum,int2, internal), +STORAGE oid; diff --git a/contrib/btree_gin/btree_gin.c b/contrib/btree_gin/btree_gin.c index f74e912..0ea3d70 100644 --- a/contrib/btree_gin/btree_gin.c +++ b/contrib/btree_gin/btree_gin.c @@ -422,3 +422,47 @@ leftmostvalue_numeric(void) } GIN_SUPPORT(numeric, true, leftmostvalue_numeric, gin_numeric_cmp) + +/* + * Use a similar trick to that used for numeric for enums, since we don't + * actually know the leftmost value of any enum without knowing the concrete + * type, so we use a dummy leftmost value of InvalidOid. + */ + + +#define ENUM_IS_LEFTMOST(x) ((x) == InvalidOid) + +PG_FUNCTION_INFO_V1(gin_enum_cmp); + +Datum +gin_enum_cmp(PG_FUNCTION_ARGS) +{ + Oid a = PG_GETARG_OID(0); + Oid b = PG_GETARG_OID(1); + int res = 0; + + if (ENUM_IS_LEFTMOST(a)) + { + res = (ENUM_IS_LEFTMOST(b)) ? 0 : -1; + } + else if (ENUM_IS_LEFTMOST(b)) + { + res = 1; + } + else + { + res = DatumGetInt32(DirectFunctionCall2(enum_cmp, + ObjectIdGetDatum(a), + ObjectIdGetDatum(b))); + } + + PG_RETURN_INT32(res); +} + +static Datum +leftmostvalue_enum(void) +{ + return ObjectIdGetDatum(InvalidOid); +} + +GIN_SUPPORT(anyenum, false, leftmostvalue_enum, gin_enum_cmp) diff --git a/contrib/btree_gin/btree_gin.control b/contrib/btree_gin/btree_gin.control index 3b2cb2d..d96436e 100644 --- a/contrib/btree_gin/btree_gin.control +++ b/contrib/btree_gin/btree_gin.control @@ -1,5 +1,5 @@ # btree_gin extension comment = 'support for indexing common datatypes in GIN' -default_version = '1.0' +default_version = '1.1' module_pathname = '$libdir/btree_gin' relocatable = true diff --git a/contrib/btree_gin/expected/enum.out b/contrib/btree_gin/expected/enum.out new file mode 100644 index 0000000..4e02b2d --- /dev/null +++ b/contrib/btree_gin/expected/enum.out @@ -0,0 +1,58 @@ +set enable_seqscan=off; +CREATE TYPE rainbow AS ENUM ('r','o','y','g','b','i','v'); +CREATE TABLE test_enum ( + i rainbow +); +INSERT INTO test_enum VALUES ('v'),('y'),('r'),('g'),('o'),('i'),('b'); +CREATE INDEX idx_enum ON test_enum USING gin (i); +SELECT * FROM test_enum WHERE i<'g'::rainbow ORDER BY i; + i +--- + r + o + y +(3 rows) + +SELECT * FROM test_enum WHERE i<='g'::rainbow ORDER BY i; + i +--- + r + o + y + g +(4 rows) + +SELECT * FROM test_enum WHERE i='g'::rainbow ORDER BY i; + i +--- + g +(1 row) + +SELECT * FROM test_enum WHERE i>='g'::rainbow ORDER BY i; + i +--- + g + b + i + v +(4 rows) + +SELECT * FROM test_enum WHERE i>'g'::rainbow ORDER BY i; + i +--- + b + i + v +(3 rows) + +explain (costs off) SELECT * FROM test_enum WHERE i>='g'::rainbow ORDER BY i; + QUERY PLAN +----------------------------------------------- + Sort + Sort Key: i + -> Bitmap Heap Scan on test_enum + Recheck Cond: (i >= 'g'::rainbow) + -> Bitmap Index Scan on idx_enum + Index Cond: (i >= 'g'::rainbow) +(6 rows) + diff --git a/contrib/btree_gin/sql/enum.sql b/contrib/btree_gin/sql/enum.sql new file mode 100644 index 0000000..9ee8f4c --- /dev/null +++ b/contrib/btree_gin/sql/enum.sql @@ -0,0 +1,19 @@ +set enable_seqscan=off; + +CREATE TYPE rainbow AS ENUM ('r','o','y','g','b','i','v'); + +CREATE TABLE test_enum ( + i rainbow +); + +INSERT INTO test_enum VALUES ('v'),('y'),('r'),('g'),('o'),('i'),('b'); + +CREATE INDEX idx_enum ON test_enum USING gin (i); + +SELECT * FROM test_enum WHERE i<'g'::rainbow ORDER BY i; +SELECT * FROM test_enum WHERE i<='g'::rainbow ORDER BY i; +SELECT * FROM test_enum WHERE i='g'::rainbow ORDER BY i; +SELECT * FROM test_enum WHERE i>='g'::rainbow ORDER BY i; +SELECT * FROM test_enum WHERE i>'g'::rainbow ORDER BY i; + +explain (costs off) SELECT * FROM test_enum WHERE i>='g'::rainbow ORDER BY i; diff --git a/contrib/btree_gist/Makefile b/contrib/btree_gist/Makefile index a4b2cc7..ec38c4f 100644 --- a/contrib/btree_gist/Makefile +++ b/contrib/btree_gist/Makefile @@ -6,16 +6,16 @@ OBJS = btree_gist.o btree_utils_num.o btree_utils_var.o btree_int2.o \ btree_int4.o btree_int8.o btree_float4.o btree_float8.o btree_cash.o \ btree_oid.o btree_ts.o btree_time.o btree_date.o btree_interval.o \ btree_macaddr.o btree_inet.o btree_text.o btree_bytea.o btree_bit.o \ - btree_numeric.o $(WIN32RES) + btree_numeric.o btree_enum.o $(WIN32RES) EXTENSION = btree_gist -DATA = btree_gist--1.1.sql btree_gist--unpackaged--1.0.sql \ - btree_gist--1.0--1.1.sql +DATA = btree_gist--1.2.sql btree_gist--unpackaged--1.0.sql \ + btree_gist--1.0--1.1.sql btree_gist--1.1--1.2.sql PGFILEDESC = "btree_gist - B-tree equivalent GiST operator classes" REGRESS = init int2 int4 int8 float4 float8 cash oid timestamp timestamptz \ time timetz date interval macaddr inet cidr text varchar char bytea \ - bit varbit numeric not_equal + bit varbit numeric enum not_equal SHLIB_LINK += $(filter -lm, $(LIBS)) diff --git a/contrib/btree_gist/btree_enum.c b/contrib/btree_gist/btree_enum.c new file mode 100644 index 0000000..6126962 --- /dev/null +++ b/contrib/btree_gist/btree_enum.c @@ -0,0 +1,186 @@ +/* + * contrib/btree_gist/btree_enum.c + */ +#include "postgres.h" +#include "utils/builtins.h" + +#include "btree_gist.h" +#include "btree_utils_num.h" + +/* enums are really Oids, so we just use the same structure */ + +typedef struct +{ + Oid lower; + Oid upper; +} oidKEY; + +/* +** enum ops +*/ +PG_FUNCTION_INFO_V1(gbt_enum_compress); +PG_FUNCTION_INFO_V1(gbt_enum_fetch); +PG_FUNCTION_INFO_V1(gbt_enum_union); +PG_FUNCTION_INFO_V1(gbt_enum_picksplit); +PG_FUNCTION_INFO_V1(gbt_enum_consistent); +PG_FUNCTION_INFO_V1(gbt_enum_penalty); +PG_FUNCTION_INFO_V1(gbt_enum_same); + + +static bool +gbt_enumgt(const void *a, const void *b) +{ + return DatumGetBool( + DirectFunctionCall2(enum_gt, ObjectIdGetDatum(*((const Oid *) a)), ObjectIdGetDatum(*((const Oid *) b))) + ); +} +static bool +gbt_enumge(const void *a, const void *b) +{ + return DatumGetBool( + DirectFunctionCall2(enum_ge, ObjectIdGetDatum(*((const Oid *) a)), ObjectIdGetDatum(*((const Oid *) b))) + ); +} +static bool +gbt_enumeq(const void *a, const void *b) +{ + return (*((const Oid *) a) == *((const Oid *) b)); +} +static bool +gbt_enumle(const void *a, const void *b) +{ + return DatumGetBool( + DirectFunctionCall2(enum_le, ObjectIdGetDatum(*((const Oid *) a)), ObjectIdGetDatum(*((const Oid *) b))) + ); +} +static bool +gbt_enumlt(const void *a, const void *b) +{ + return DatumGetBool( + DirectFunctionCall2(enum_lt, ObjectIdGetDatum(*((const Oid *) a)), ObjectIdGetDatum(*((const Oid *) b))) + ); +} + +static int +gbt_enumkey_cmp(const void *a, const void *b) +{ + oidKEY *ia = (oidKEY *) (((const Nsrt *) a)->t); + oidKEY *ib = (oidKEY *) (((const Nsrt *) b)->t); + + if (ia->lower == ib->lower) + { + if (ia->upper == ib->upper) + return 0; + + return DatumGetInt32( + DirectFunctionCall2(enum_cmp, ObjectIdGetDatum(ia->upper), ObjectIdGetDatum(ib->upper)) + ); + } + + return DatumGetInt32( + DirectFunctionCall2(enum_cmp, ObjectIdGetDatum(ia->lower), ObjectIdGetDatum(ib->lower)) + ); +} + +static const gbtree_ninfo tinfo = +{ + gbt_t_enum, + sizeof(Oid), + 8, /* sizeof(gbtreekey8) */ + gbt_enumgt, + gbt_enumge, + gbt_enumeq, + gbt_enumle, + gbt_enumlt, + gbt_enumkey_cmp, + NULL /* no KNN support at least for now */ +}; + + +/************************************************** + * Enum ops + **************************************************/ + + +Datum +gbt_enum_compress(PG_FUNCTION_ARGS) +{ + GISTENTRY *entry = (GISTENTRY *) PG_GETARG_POINTER(0); + + PG_RETURN_POINTER(gbt_num_compress(entry, &tinfo)); +} + +Datum +gbt_enum_fetch(PG_FUNCTION_ARGS) +{ + GISTENTRY *entry = (GISTENTRY *) PG_GETARG_POINTER(0); + + PG_RETURN_POINTER(gbt_num_fetch(entry, &tinfo)); +} + +Datum +gbt_enum_consistent(PG_FUNCTION_ARGS) +{ + GISTENTRY *entry = (GISTENTRY *) PG_GETARG_POINTER(0); + Oid query = PG_GETARG_OID(1); + StrategyNumber strategy = (StrategyNumber) PG_GETARG_UINT16(2); + + /* Oid subtype = PG_GETARG_OID(3); */ + bool *recheck = (bool *) PG_GETARG_POINTER(4); + oidKEY *kkk = (oidKEY *) DatumGetPointer(entry->key); + GBT_NUMKEY_R key; + + /* All cases served by this function are exact */ + *recheck = false; + + key.lower = (GBT_NUMKEY *) &kkk->lower; + key.upper = (GBT_NUMKEY *) &kkk->upper; + + PG_RETURN_BOOL( + gbt_num_consistent(&key, (void *) &query, &strategy, GIST_LEAF(entry), &tinfo) + ); +} + +Datum +gbt_enum_union(PG_FUNCTION_ARGS) +{ + GistEntryVector *entryvec = (GistEntryVector *) PG_GETARG_POINTER(0); + void *out = palloc(sizeof(oidKEY)); + + *(int *) PG_GETARG_POINTER(1) = sizeof(oidKEY); + PG_RETURN_POINTER(gbt_num_union((void *) out, entryvec, &tinfo)); +} + + +Datum +gbt_enum_penalty(PG_FUNCTION_ARGS) +{ + oidKEY *origentry = (oidKEY *) DatumGetPointer(((GISTENTRY *) PG_GETARG_POINTER(0))->key); + oidKEY *newentry = (oidKEY *) DatumGetPointer(((GISTENTRY *) PG_GETARG_POINTER(1))->key); + float *result = (float *) PG_GETARG_POINTER(2); + + penalty_num(result, origentry->lower, origentry->upper, newentry->lower, newentry->upper); + + PG_RETURN_POINTER(result); +} + +Datum +gbt_enum_picksplit(PG_FUNCTION_ARGS) +{ + PG_RETURN_POINTER(gbt_num_picksplit( + (GistEntryVector *) PG_GETARG_POINTER(0), + (GIST_SPLITVEC *) PG_GETARG_POINTER(1), + &tinfo + )); +} + +Datum +gbt_enum_same(PG_FUNCTION_ARGS) +{ + oidKEY *b1 = (oidKEY *) PG_GETARG_POINTER(0); + oidKEY *b2 = (oidKEY *) PG_GETARG_POINTER(1); + bool *result = (bool *) PG_GETARG_POINTER(2); + + *result = gbt_num_same((void *) b1, (void *) b2, &tinfo); + PG_RETURN_POINTER(result); +} diff --git a/contrib/btree_gist/btree_gist--1.1--1.2.sql b/contrib/btree_gist/btree_gist--1.1--1.2.sql new file mode 100644 index 0000000..f3e8d90 --- /dev/null +++ b/contrib/btree_gist/btree_gist--1.1--1.2.sql @@ -0,0 +1,69 @@ +/* contrib/btree_gist/btree_gist--1.1--1.2.sql */ + +-- complain if script is sourced in psql, rather than via CREATE EXTENSION +\echo Use "ALTER EXTENSION btree_gist UPDATE TO '1.2'" 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 gbtreekey4 +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) ; diff --git a/contrib/btree_gist/btree_gist--1.1.sql b/contrib/btree_gist/btree_gist--1.1.sql deleted file mode 100644 index f0a4682..0000000 --- a/contrib/btree_gist/btree_gist--1.1.sql +++ /dev/null @@ -1,1570 +0,0 @@ -/* contrib/btree_gist/btree_gist--1.0.sql */ - --- complain if script is sourced in psql, rather than via CREATE EXTENSION -\echo Use "CREATE EXTENSION btree_gist" to load this file. \quit - -CREATE FUNCTION gbtreekey4_in(cstring) -RETURNS gbtreekey4 -AS 'MODULE_PATHNAME', 'gbtreekey_in' -LANGUAGE C IMMUTABLE STRICT; - -CREATE FUNCTION gbtreekey4_out(gbtreekey4) -RETURNS cstring -AS 'MODULE_PATHNAME', 'gbtreekey_out' -LANGUAGE C IMMUTABLE STRICT; - -CREATE TYPE gbtreekey4 ( - INTERNALLENGTH = 4, - INPUT = gbtreekey4_in, - OUTPUT = gbtreekey4_out -); - -CREATE FUNCTION gbtreekey8_in(cstring) -RETURNS gbtreekey8 -AS 'MODULE_PATHNAME', 'gbtreekey_in' -LANGUAGE C IMMUTABLE STRICT; - -CREATE FUNCTION gbtreekey8_out(gbtreekey8) -RETURNS cstring -AS 'MODULE_PATHNAME', 'gbtreekey_out' -LANGUAGE C IMMUTABLE STRICT; - -CREATE TYPE gbtreekey8 ( - INTERNALLENGTH = 8, - INPUT = gbtreekey8_in, - OUTPUT = gbtreekey8_out -); - -CREATE FUNCTION gbtreekey16_in(cstring) -RETURNS gbtreekey16 -AS 'MODULE_PATHNAME', 'gbtreekey_in' -LANGUAGE C IMMUTABLE STRICT; - -CREATE FUNCTION gbtreekey16_out(gbtreekey16) -RETURNS cstring -AS 'MODULE_PATHNAME', 'gbtreekey_out' -LANGUAGE C IMMUTABLE STRICT; - -CREATE TYPE gbtreekey16 ( - INTERNALLENGTH = 16, - INPUT = gbtreekey16_in, - OUTPUT = gbtreekey16_out -); - -CREATE FUNCTION gbtreekey32_in(cstring) -RETURNS gbtreekey32 -AS 'MODULE_PATHNAME', 'gbtreekey_in' -LANGUAGE C IMMUTABLE STRICT; - -CREATE FUNCTION gbtreekey32_out(gbtreekey32) -RETURNS cstring -AS 'MODULE_PATHNAME', 'gbtreekey_out' -LANGUAGE C IMMUTABLE STRICT; - -CREATE TYPE gbtreekey32 ( - INTERNALLENGTH = 32, - INPUT = gbtreekey32_in, - OUTPUT = gbtreekey32_out -); - -CREATE FUNCTION gbtreekey_var_in(cstring) -RETURNS gbtreekey_var -AS 'MODULE_PATHNAME', 'gbtreekey_in' -LANGUAGE C IMMUTABLE STRICT; - -CREATE FUNCTION gbtreekey_var_out(gbtreekey_var) -RETURNS cstring -AS 'MODULE_PATHNAME', 'gbtreekey_out' -LANGUAGE C IMMUTABLE STRICT; - -CREATE TYPE gbtreekey_var ( - INTERNALLENGTH = VARIABLE, - INPUT = gbtreekey_var_in, - OUTPUT = gbtreekey_var_out, - STORAGE = EXTENDED -); - ---distance operators - -CREATE FUNCTION cash_dist(money, money) -RETURNS money -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -CREATE OPERATOR <-> ( - LEFTARG = money, - RIGHTARG = money, - PROCEDURE = cash_dist, - COMMUTATOR = '<->' -); - -CREATE FUNCTION date_dist(date, date) -RETURNS int4 -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -CREATE OPERATOR <-> ( - LEFTARG = date, - RIGHTARG = date, - PROCEDURE = date_dist, - COMMUTATOR = '<->' -); - -CREATE FUNCTION float4_dist(float4, float4) -RETURNS float4 -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -CREATE OPERATOR <-> ( - LEFTARG = float4, - RIGHTARG = float4, - PROCEDURE = float4_dist, - COMMUTATOR = '<->' -); - -CREATE FUNCTION float8_dist(float8, float8) -RETURNS float8 -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -CREATE OPERATOR <-> ( - LEFTARG = float8, - RIGHTARG = float8, - PROCEDURE = float8_dist, - COMMUTATOR = '<->' -); - -CREATE FUNCTION int2_dist(int2, int2) -RETURNS int2 -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -CREATE OPERATOR <-> ( - LEFTARG = int2, - RIGHTARG = int2, - PROCEDURE = int2_dist, - COMMUTATOR = '<->' -); - -CREATE FUNCTION int4_dist(int4, int4) -RETURNS int4 -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -CREATE OPERATOR <-> ( - LEFTARG = int4, - RIGHTARG = int4, - PROCEDURE = int4_dist, - COMMUTATOR = '<->' -); - -CREATE FUNCTION int8_dist(int8, int8) -RETURNS int8 -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -CREATE OPERATOR <-> ( - LEFTARG = int8, - RIGHTARG = int8, - PROCEDURE = int8_dist, - COMMUTATOR = '<->' -); - -CREATE FUNCTION interval_dist(interval, interval) -RETURNS interval -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -CREATE OPERATOR <-> ( - LEFTARG = interval, - RIGHTARG = interval, - PROCEDURE = interval_dist, - COMMUTATOR = '<->' -); - -CREATE FUNCTION oid_dist(oid, oid) -RETURNS oid -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -CREATE OPERATOR <-> ( - LEFTARG = oid, - RIGHTARG = oid, - PROCEDURE = oid_dist, - COMMUTATOR = '<->' -); - -CREATE FUNCTION time_dist(time, time) -RETURNS interval -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -CREATE OPERATOR <-> ( - LEFTARG = time, - RIGHTARG = time, - PROCEDURE = time_dist, - COMMUTATOR = '<->' -); - -CREATE FUNCTION ts_dist(timestamp, timestamp) -RETURNS interval -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -CREATE OPERATOR <-> ( - LEFTARG = timestamp, - RIGHTARG = timestamp, - PROCEDURE = ts_dist, - COMMUTATOR = '<->' -); - -CREATE FUNCTION tstz_dist(timestamptz, timestamptz) -RETURNS interval -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -CREATE OPERATOR <-> ( - LEFTARG = timestamptz, - RIGHTARG = timestamptz, - PROCEDURE = tstz_dist, - COMMUTATOR = '<->' -); - - --- --- --- --- oid ops --- --- --- --- define the GiST support methods -CREATE FUNCTION gbt_oid_consistent(internal,oid,int2,oid,internal) -RETURNS bool -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -CREATE FUNCTION gbt_oid_distance(internal,oid,int2,oid,internal) -RETURNS float8 -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -CREATE FUNCTION gbt_oid_fetch(internal) -RETURNS internal -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -CREATE FUNCTION gbt_oid_compress(internal) -RETURNS internal -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -CREATE FUNCTION gbt_decompress(internal) -RETURNS internal -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -CREATE FUNCTION gbt_var_decompress(internal) -RETURNS internal -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -CREATE FUNCTION gbt_var_fetch(internal) -RETURNS internal -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -CREATE FUNCTION gbt_oid_penalty(internal,internal,internal) -RETURNS internal -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -CREATE FUNCTION gbt_oid_picksplit(internal, internal) -RETURNS internal -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -CREATE FUNCTION gbt_oid_union(internal, internal) -RETURNS gbtreekey8 -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -CREATE FUNCTION gbt_oid_same(gbtreekey8, gbtreekey8, internal) -RETURNS internal -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - --- Create the operator class -CREATE OPERATOR CLASS gist_oid_ops -DEFAULT FOR TYPE oid USING gist -AS - OPERATOR 1 < , - OPERATOR 2 <= , - OPERATOR 3 = , - OPERATOR 4 >= , - OPERATOR 5 > , - FUNCTION 1 gbt_oid_consistent (internal, oid, int2, oid, internal), - FUNCTION 2 gbt_oid_union (internal, internal), - FUNCTION 3 gbt_oid_compress (internal), - FUNCTION 4 gbt_decompress (internal), - FUNCTION 5 gbt_oid_penalty (internal, internal, internal), - FUNCTION 6 gbt_oid_picksplit (internal, internal), - FUNCTION 7 gbt_oid_same (gbtreekey8, gbtreekey8, internal), - STORAGE gbtreekey8; - --- Add operators that are new in 9.1. We do it like this, leaving them --- "loose" in the operator family rather than bound into the opclass, because --- that's the only state that can be reproduced during an upgrade from 9.0. -ALTER OPERATOR FAMILY gist_oid_ops USING gist ADD - OPERATOR 6 <> (oid, oid) , - OPERATOR 15 <-> (oid, oid) FOR ORDER BY pg_catalog.oid_ops , - FUNCTION 8 (oid, oid) gbt_oid_distance (internal, oid, int2, oid, internal) , - -- Also add support function for index-only-scans, added in 9.5. - FUNCTION 9 (oid, oid) gbt_oid_fetch (internal) ; - - --- --- --- --- int2 ops --- --- --- --- define the GiST support methods -CREATE FUNCTION gbt_int2_consistent(internal,int2,int2,oid,internal) -RETURNS bool -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -CREATE FUNCTION gbt_int2_distance(internal,int2,int2,oid,internal) -RETURNS float8 -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -CREATE FUNCTION gbt_int2_compress(internal) -RETURNS internal -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -CREATE FUNCTION gbt_int2_fetch(internal) -RETURNS internal -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -CREATE FUNCTION gbt_int2_penalty(internal,internal,internal) -RETURNS internal -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -CREATE FUNCTION gbt_int2_picksplit(internal, internal) -RETURNS internal -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -CREATE FUNCTION gbt_int2_union(internal, internal) -RETURNS gbtreekey4 -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -CREATE FUNCTION gbt_int2_same(gbtreekey4, gbtreekey4, internal) -RETURNS internal -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - --- Create the operator class -CREATE OPERATOR CLASS gist_int2_ops -DEFAULT FOR TYPE int2 USING gist -AS - OPERATOR 1 < , - OPERATOR 2 <= , - OPERATOR 3 = , - OPERATOR 4 >= , - OPERATOR 5 > , - FUNCTION 1 gbt_int2_consistent (internal, int2, int2, oid, internal), - FUNCTION 2 gbt_int2_union (internal, internal), - FUNCTION 3 gbt_int2_compress (internal), - FUNCTION 4 gbt_decompress (internal), - FUNCTION 5 gbt_int2_penalty (internal, internal, internal), - FUNCTION 6 gbt_int2_picksplit (internal, internal), - FUNCTION 7 gbt_int2_same (gbtreekey4, gbtreekey4, internal), - STORAGE gbtreekey4; - -ALTER OPERATOR FAMILY gist_int2_ops USING gist ADD - OPERATOR 6 <> (int2, int2) , - OPERATOR 15 <-> (int2, int2) FOR ORDER BY pg_catalog.integer_ops , - FUNCTION 8 (int2, int2) gbt_int2_distance (internal, int2, int2, oid, internal) , - FUNCTION 9 (int2, int2) gbt_int2_fetch (internal) ; - --- --- --- --- int4 ops --- --- --- --- define the GiST support methods -CREATE FUNCTION gbt_int4_consistent(internal,int4,int2,oid,internal) -RETURNS bool -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -CREATE FUNCTION gbt_int4_distance(internal,int4,int2,oid,internal) -RETURNS float8 -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -CREATE FUNCTION gbt_int4_compress(internal) -RETURNS internal -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -CREATE FUNCTION gbt_int4_fetch(internal) -RETURNS internal -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -CREATE FUNCTION gbt_int4_penalty(internal,internal,internal) -RETURNS internal -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -CREATE FUNCTION gbt_int4_picksplit(internal, internal) -RETURNS internal -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -CREATE FUNCTION gbt_int4_union(internal, internal) -RETURNS gbtreekey8 -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -CREATE FUNCTION gbt_int4_same(gbtreekey8, gbtreekey8, internal) -RETURNS internal -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - --- Create the operator class -CREATE OPERATOR CLASS gist_int4_ops -DEFAULT FOR TYPE int4 USING gist -AS - OPERATOR 1 < , - OPERATOR 2 <= , - OPERATOR 3 = , - OPERATOR 4 >= , - OPERATOR 5 > , - FUNCTION 1 gbt_int4_consistent (internal, int4, int2, oid, internal), - FUNCTION 2 gbt_int4_union (internal, internal), - FUNCTION 3 gbt_int4_compress (internal), - FUNCTION 4 gbt_decompress (internal), - FUNCTION 5 gbt_int4_penalty (internal, internal, internal), - FUNCTION 6 gbt_int4_picksplit (internal, internal), - FUNCTION 7 gbt_int4_same (gbtreekey8, gbtreekey8, internal), - STORAGE gbtreekey8; - -ALTER OPERATOR FAMILY gist_int4_ops USING gist ADD - OPERATOR 6 <> (int4, int4) , - OPERATOR 15 <-> (int4, int4) FOR ORDER BY pg_catalog.integer_ops , - FUNCTION 8 (int4, int4) gbt_int4_distance (internal, int4, int2, oid, internal) , - FUNCTION 9 (int4, int4) gbt_int4_fetch (internal) ; - - --- --- --- --- int8 ops --- --- --- --- define the GiST support methods -CREATE FUNCTION gbt_int8_consistent(internal,int8,int2,oid,internal) -RETURNS bool -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -CREATE FUNCTION gbt_int8_distance(internal,int8,int2,oid,internal) -RETURNS float8 -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -CREATE FUNCTION gbt_int8_compress(internal) -RETURNS internal -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -CREATE FUNCTION gbt_int8_fetch(internal) -RETURNS internal -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -CREATE FUNCTION gbt_int8_penalty(internal,internal,internal) -RETURNS internal -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -CREATE FUNCTION gbt_int8_picksplit(internal, internal) -RETURNS internal -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -CREATE FUNCTION gbt_int8_union(internal, internal) -RETURNS gbtreekey16 -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -CREATE FUNCTION gbt_int8_same(gbtreekey16, gbtreekey16, internal) -RETURNS internal -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - --- Create the operator class -CREATE OPERATOR CLASS gist_int8_ops -DEFAULT FOR TYPE int8 USING gist -AS - OPERATOR 1 < , - OPERATOR 2 <= , - OPERATOR 3 = , - OPERATOR 4 >= , - OPERATOR 5 > , - FUNCTION 1 gbt_int8_consistent (internal, int8, int2, oid, internal), - FUNCTION 2 gbt_int8_union (internal, internal), - FUNCTION 3 gbt_int8_compress (internal), - FUNCTION 4 gbt_decompress (internal), - FUNCTION 5 gbt_int8_penalty (internal, internal, internal), - FUNCTION 6 gbt_int8_picksplit (internal, internal), - FUNCTION 7 gbt_int8_same (gbtreekey16, gbtreekey16, internal), - STORAGE gbtreekey16; - -ALTER OPERATOR FAMILY gist_int8_ops USING gist ADD - OPERATOR 6 <> (int8, int8) , - OPERATOR 15 <-> (int8, int8) FOR ORDER BY pg_catalog.integer_ops , - FUNCTION 8 (int8, int8) gbt_int8_distance (internal, int8, int2, oid, internal) , - FUNCTION 9 (int8, int8) gbt_int8_fetch (internal) ; - --- --- --- --- float4 ops --- --- --- --- define the GiST support methods -CREATE FUNCTION gbt_float4_consistent(internal,float4,int2,oid,internal) -RETURNS bool -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -CREATE FUNCTION gbt_float4_distance(internal,float4,int2,oid,internal) -RETURNS float8 -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -CREATE FUNCTION gbt_float4_compress(internal) -RETURNS internal -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -CREATE FUNCTION gbt_float4_fetch(internal) -RETURNS internal -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -CREATE FUNCTION gbt_float4_penalty(internal,internal,internal) -RETURNS internal -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -CREATE FUNCTION gbt_float4_picksplit(internal, internal) -RETURNS internal -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -CREATE FUNCTION gbt_float4_union(internal, internal) -RETURNS gbtreekey8 -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -CREATE FUNCTION gbt_float4_same(gbtreekey8, gbtreekey8, internal) -RETURNS internal -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - --- Create the operator class -CREATE OPERATOR CLASS gist_float4_ops -DEFAULT FOR TYPE float4 USING gist -AS - OPERATOR 1 < , - OPERATOR 2 <= , - OPERATOR 3 = , - OPERATOR 4 >= , - OPERATOR 5 > , - FUNCTION 1 gbt_float4_consistent (internal, float4, int2, oid, internal), - FUNCTION 2 gbt_float4_union (internal, internal), - FUNCTION 3 gbt_float4_compress (internal), - FUNCTION 4 gbt_decompress (internal), - FUNCTION 5 gbt_float4_penalty (internal, internal, internal), - FUNCTION 6 gbt_float4_picksplit (internal, internal), - FUNCTION 7 gbt_float4_same (gbtreekey8, gbtreekey8, internal), - STORAGE gbtreekey8; - -ALTER OPERATOR FAMILY gist_float4_ops USING gist ADD - OPERATOR 6 <> (float4, float4) , - OPERATOR 15 <-> (float4, float4) FOR ORDER BY pg_catalog.float_ops , - FUNCTION 8 (float4, float4) gbt_float4_distance (internal, float4, int2, oid, internal) , - FUNCTION 9 (float4, float4) gbt_float4_fetch (internal) ; - --- --- --- --- float8 ops --- --- --- --- define the GiST support methods -CREATE FUNCTION gbt_float8_consistent(internal,float8,int2,oid,internal) -RETURNS bool -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -CREATE FUNCTION gbt_float8_distance(internal,float8,int2,oid,internal) -RETURNS float8 -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -CREATE FUNCTION gbt_float8_compress(internal) -RETURNS internal -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -CREATE FUNCTION gbt_float8_fetch(internal) -RETURNS internal -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -CREATE FUNCTION gbt_float8_penalty(internal,internal,internal) -RETURNS internal -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -CREATE FUNCTION gbt_float8_picksplit(internal, internal) -RETURNS internal -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -CREATE FUNCTION gbt_float8_union(internal, internal) -RETURNS gbtreekey16 -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -CREATE FUNCTION gbt_float8_same(gbtreekey16, gbtreekey16, internal) -RETURNS internal -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - --- Create the operator class -CREATE OPERATOR CLASS gist_float8_ops -DEFAULT FOR TYPE float8 USING gist -AS - OPERATOR 1 < , - OPERATOR 2 <= , - OPERATOR 3 = , - OPERATOR 4 >= , - OPERATOR 5 > , - FUNCTION 1 gbt_float8_consistent (internal, float8, int2, oid, internal), - FUNCTION 2 gbt_float8_union (internal, internal), - FUNCTION 3 gbt_float8_compress (internal), - FUNCTION 4 gbt_decompress (internal), - FUNCTION 5 gbt_float8_penalty (internal, internal, internal), - FUNCTION 6 gbt_float8_picksplit (internal, internal), - FUNCTION 7 gbt_float8_same (gbtreekey16, gbtreekey16, internal), - STORAGE gbtreekey16; - -ALTER OPERATOR FAMILY gist_float8_ops USING gist ADD - OPERATOR 6 <> (float8, float8) , - OPERATOR 15 <-> (float8, float8) FOR ORDER BY pg_catalog.float_ops , - FUNCTION 8 (float8, float8) gbt_float8_distance (internal, float8, int2, oid, internal) , - FUNCTION 9 (float8, float8) gbt_float8_fetch (internal) ; - --- --- --- --- timestamp ops --- --- --- - -CREATE FUNCTION gbt_ts_consistent(internal,timestamp,int2,oid,internal) -RETURNS bool -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -CREATE FUNCTION gbt_ts_distance(internal,timestamp,int2,oid,internal) -RETURNS float8 -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -CREATE FUNCTION gbt_tstz_consistent(internal,timestamptz,int2,oid,internal) -RETURNS bool -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -CREATE FUNCTION gbt_tstz_distance(internal,timestamptz,int2,oid,internal) -RETURNS float8 -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -CREATE FUNCTION gbt_ts_compress(internal) -RETURNS internal -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -CREATE FUNCTION gbt_tstz_compress(internal) -RETURNS internal -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -CREATE FUNCTION gbt_ts_fetch(internal) -RETURNS internal -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -CREATE FUNCTION gbt_ts_penalty(internal,internal,internal) -RETURNS internal -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -CREATE FUNCTION gbt_ts_picksplit(internal, internal) -RETURNS internal -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -CREATE FUNCTION gbt_ts_union(internal, internal) -RETURNS gbtreekey16 -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -CREATE FUNCTION gbt_ts_same(gbtreekey16, gbtreekey16, internal) -RETURNS internal -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - --- Create the operator class -CREATE OPERATOR CLASS gist_timestamp_ops -DEFAULT FOR TYPE timestamp USING gist -AS - OPERATOR 1 < , - OPERATOR 2 <= , - OPERATOR 3 = , - OPERATOR 4 >= , - OPERATOR 5 > , - FUNCTION 1 gbt_ts_consistent (internal, timestamp, int2, oid, internal), - FUNCTION 2 gbt_ts_union (internal, internal), - FUNCTION 3 gbt_ts_compress (internal), - FUNCTION 4 gbt_decompress (internal), - FUNCTION 5 gbt_ts_penalty (internal, internal, internal), - FUNCTION 6 gbt_ts_picksplit (internal, internal), - FUNCTION 7 gbt_ts_same (gbtreekey16, gbtreekey16, internal), - STORAGE gbtreekey16; - -ALTER OPERATOR FAMILY gist_timestamp_ops USING gist ADD - OPERATOR 6 <> (timestamp, timestamp) , - OPERATOR 15 <-> (timestamp, timestamp) FOR ORDER BY pg_catalog.interval_ops , - FUNCTION 8 (timestamp, timestamp) gbt_ts_distance (internal, timestamp, int2, oid, internal) , - FUNCTION 9 (timestamp, timestamp) gbt_ts_fetch (internal) ; - --- Create the operator class -CREATE OPERATOR CLASS gist_timestamptz_ops -DEFAULT FOR TYPE timestamptz USING gist -AS - OPERATOR 1 < , - OPERATOR 2 <= , - OPERATOR 3 = , - OPERATOR 4 >= , - OPERATOR 5 > , - FUNCTION 1 gbt_tstz_consistent (internal, timestamptz, int2, oid, internal), - FUNCTION 2 gbt_ts_union (internal, internal), - FUNCTION 3 gbt_tstz_compress (internal), - FUNCTION 4 gbt_decompress (internal), - FUNCTION 5 gbt_ts_penalty (internal, internal, internal), - FUNCTION 6 gbt_ts_picksplit (internal, internal), - FUNCTION 7 gbt_ts_same (gbtreekey16, gbtreekey16, internal), - STORAGE gbtreekey16; - -ALTER OPERATOR FAMILY gist_timestamptz_ops USING gist ADD - OPERATOR 6 <> (timestamptz, timestamptz) , - OPERATOR 15 <-> (timestamptz, timestamptz) FOR ORDER BY pg_catalog.interval_ops , - FUNCTION 8 (timestamptz, timestamptz) gbt_tstz_distance (internal, timestamptz, int2, oid, internal) , - FUNCTION 9 (timestamptz, timestamptz) gbt_ts_fetch (internal) ; - --- --- --- --- time ops --- --- --- - -CREATE FUNCTION gbt_time_consistent(internal,time,int2,oid,internal) -RETURNS bool -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -CREATE FUNCTION gbt_time_distance(internal,time,int2,oid,internal) -RETURNS float8 -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -CREATE FUNCTION gbt_timetz_consistent(internal,timetz,int2,oid,internal) -RETURNS bool -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -CREATE FUNCTION gbt_time_compress(internal) -RETURNS internal -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -CREATE FUNCTION gbt_timetz_compress(internal) -RETURNS internal -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -CREATE FUNCTION gbt_time_fetch(internal) -RETURNS internal -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -CREATE FUNCTION gbt_time_penalty(internal,internal,internal) -RETURNS internal -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -CREATE FUNCTION gbt_time_picksplit(internal, internal) -RETURNS internal -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -CREATE FUNCTION gbt_time_union(internal, internal) -RETURNS gbtreekey16 -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -CREATE FUNCTION gbt_time_same(gbtreekey16, gbtreekey16, internal) -RETURNS internal -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - --- Create the operator class -CREATE OPERATOR CLASS gist_time_ops -DEFAULT FOR TYPE time USING gist -AS - OPERATOR 1 < , - OPERATOR 2 <= , - OPERATOR 3 = , - OPERATOR 4 >= , - OPERATOR 5 > , - FUNCTION 1 gbt_time_consistent (internal, time, int2, oid, internal), - FUNCTION 2 gbt_time_union (internal, internal), - FUNCTION 3 gbt_time_compress (internal), - FUNCTION 4 gbt_decompress (internal), - FUNCTION 5 gbt_time_penalty (internal, internal, internal), - FUNCTION 6 gbt_time_picksplit (internal, internal), - FUNCTION 7 gbt_time_same (gbtreekey16, gbtreekey16, internal), - STORAGE gbtreekey16; - -ALTER OPERATOR FAMILY gist_time_ops USING gist ADD - OPERATOR 6 <> (time, time) , - OPERATOR 15 <-> (time, time) FOR ORDER BY pg_catalog.interval_ops , - FUNCTION 8 (time, time) gbt_time_distance (internal, time, int2, oid, internal) , - FUNCTION 9 (time, time) gbt_time_fetch (internal) ; - - -CREATE OPERATOR CLASS gist_timetz_ops -DEFAULT FOR TYPE timetz USING gist -AS - OPERATOR 1 < , - OPERATOR 2 <= , - OPERATOR 3 = , - OPERATOR 4 >= , - OPERATOR 5 > , - FUNCTION 1 gbt_timetz_consistent (internal, timetz, int2, oid, internal), - FUNCTION 2 gbt_time_union (internal, internal), - FUNCTION 3 gbt_timetz_compress (internal), - FUNCTION 4 gbt_decompress (internal), - FUNCTION 5 gbt_time_penalty (internal, internal, internal), - FUNCTION 6 gbt_time_picksplit (internal, internal), - FUNCTION 7 gbt_time_same (gbtreekey16, gbtreekey16, internal), - STORAGE gbtreekey16; - -ALTER OPERATOR FAMILY gist_timetz_ops USING gist ADD - OPERATOR 6 <> (timetz, timetz) ; - -- no 'fetch' function, as the compress function is lossy. - - --- --- --- --- date ops --- --- --- - -CREATE FUNCTION gbt_date_consistent(internal,date,int2,oid,internal) -RETURNS bool -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -CREATE FUNCTION gbt_date_distance(internal,date,int2,oid,internal) -RETURNS float8 -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -CREATE FUNCTION gbt_date_compress(internal) -RETURNS internal -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -CREATE FUNCTION gbt_date_fetch(internal) -RETURNS internal -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -CREATE FUNCTION gbt_date_penalty(internal,internal,internal) -RETURNS internal -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -CREATE FUNCTION gbt_date_picksplit(internal, internal) -RETURNS internal -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -CREATE FUNCTION gbt_date_union(internal, internal) -RETURNS gbtreekey8 -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -CREATE FUNCTION gbt_date_same(gbtreekey8, gbtreekey8, internal) -RETURNS internal -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - --- Create the operator class -CREATE OPERATOR CLASS gist_date_ops -DEFAULT FOR TYPE date USING gist -AS - OPERATOR 1 < , - OPERATOR 2 <= , - OPERATOR 3 = , - OPERATOR 4 >= , - OPERATOR 5 > , - FUNCTION 1 gbt_date_consistent (internal, date, int2, oid, internal), - FUNCTION 2 gbt_date_union (internal, internal), - FUNCTION 3 gbt_date_compress (internal), - FUNCTION 4 gbt_decompress (internal), - FUNCTION 5 gbt_date_penalty (internal, internal, internal), - FUNCTION 6 gbt_date_picksplit (internal, internal), - FUNCTION 7 gbt_date_same (gbtreekey8, gbtreekey8, internal), - STORAGE gbtreekey8; - -ALTER OPERATOR FAMILY gist_date_ops USING gist ADD - OPERATOR 6 <> (date, date) , - OPERATOR 15 <-> (date, date) FOR ORDER BY pg_catalog.integer_ops , - FUNCTION 8 (date, date) gbt_date_distance (internal, date, int2, oid, internal) , - FUNCTION 9 (date, date) gbt_date_fetch (internal) ; - - --- --- --- --- interval ops --- --- --- - -CREATE FUNCTION gbt_intv_consistent(internal,interval,int2,oid,internal) -RETURNS bool -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -CREATE FUNCTION gbt_intv_distance(internal,interval,int2,oid,internal) -RETURNS float8 -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -CREATE FUNCTION gbt_intv_compress(internal) -RETURNS internal -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -CREATE FUNCTION gbt_intv_decompress(internal) -RETURNS internal -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -CREATE FUNCTION gbt_intv_fetch(internal) -RETURNS internal -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -CREATE FUNCTION gbt_intv_penalty(internal,internal,internal) -RETURNS internal -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -CREATE FUNCTION gbt_intv_picksplit(internal, internal) -RETURNS internal -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -CREATE FUNCTION gbt_intv_union(internal, internal) -RETURNS gbtreekey32 -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -CREATE FUNCTION gbt_intv_same(gbtreekey32, gbtreekey32, internal) -RETURNS internal -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - --- Create the operator class -CREATE OPERATOR CLASS gist_interval_ops -DEFAULT FOR TYPE interval USING gist -AS - OPERATOR 1 < , - OPERATOR 2 <= , - OPERATOR 3 = , - OPERATOR 4 >= , - OPERATOR 5 > , - FUNCTION 1 gbt_intv_consistent (internal, interval, int2, oid, internal), - FUNCTION 2 gbt_intv_union (internal, internal), - FUNCTION 3 gbt_intv_compress (internal), - FUNCTION 4 gbt_intv_decompress (internal), - FUNCTION 5 gbt_intv_penalty (internal, internal, internal), - FUNCTION 6 gbt_intv_picksplit (internal, internal), - FUNCTION 7 gbt_intv_same (gbtreekey32, gbtreekey32, internal), - STORAGE gbtreekey32; - -ALTER OPERATOR FAMILY gist_interval_ops USING gist ADD - OPERATOR 6 <> (interval, interval) , - OPERATOR 15 <-> (interval, interval) FOR ORDER BY pg_catalog.interval_ops , - FUNCTION 8 (interval, interval) gbt_intv_distance (internal, interval, int2, oid, internal) , - FUNCTION 9 (interval, interval) gbt_intv_fetch (internal) ; - - --- --- --- --- cash ops --- --- --- --- define the GiST support methods -CREATE FUNCTION gbt_cash_consistent(internal,money,int2,oid,internal) -RETURNS bool -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -CREATE FUNCTION gbt_cash_distance(internal,money,int2,oid,internal) -RETURNS float8 -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -CREATE FUNCTION gbt_cash_compress(internal) -RETURNS internal -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -CREATE FUNCTION gbt_cash_fetch(internal) -RETURNS internal -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -CREATE FUNCTION gbt_cash_penalty(internal,internal,internal) -RETURNS internal -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -CREATE FUNCTION gbt_cash_picksplit(internal, internal) -RETURNS internal -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -CREATE FUNCTION gbt_cash_union(internal, internal) -RETURNS gbtreekey16 -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -CREATE FUNCTION gbt_cash_same(gbtreekey16, gbtreekey16, internal) -RETURNS internal -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - --- Create the operator class -CREATE OPERATOR CLASS gist_cash_ops -DEFAULT FOR TYPE money USING gist -AS - OPERATOR 1 < , - OPERATOR 2 <= , - OPERATOR 3 = , - OPERATOR 4 >= , - OPERATOR 5 > , - FUNCTION 1 gbt_cash_consistent (internal, money, int2, oid, internal), - FUNCTION 2 gbt_cash_union (internal, internal), - FUNCTION 3 gbt_cash_compress (internal), - FUNCTION 4 gbt_decompress (internal), - FUNCTION 5 gbt_cash_penalty (internal, internal, internal), - FUNCTION 6 gbt_cash_picksplit (internal, internal), - FUNCTION 7 gbt_cash_same (gbtreekey16, gbtreekey16, internal), - STORAGE gbtreekey16; - -ALTER OPERATOR FAMILY gist_cash_ops USING gist ADD - OPERATOR 6 <> (money, money) , - OPERATOR 15 <-> (money, money) FOR ORDER BY pg_catalog.money_ops , - FUNCTION 8 (money, money) gbt_cash_distance (internal, money, int2, oid, internal) , - FUNCTION 9 (money, money) gbt_cash_fetch (internal) ; - - --- --- --- --- macaddr ops --- --- --- --- define the GiST support methods -CREATE FUNCTION gbt_macad_consistent(internal,macaddr,int2,oid,internal) -RETURNS bool -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -CREATE FUNCTION gbt_macad_compress(internal) -RETURNS internal -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -CREATE FUNCTION gbt_macad_fetch(internal) -RETURNS internal -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -CREATE FUNCTION gbt_macad_penalty(internal,internal,internal) -RETURNS internal -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -CREATE FUNCTION gbt_macad_picksplit(internal, internal) -RETURNS internal -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -CREATE FUNCTION gbt_macad_union(internal, internal) -RETURNS gbtreekey16 -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -CREATE FUNCTION gbt_macad_same(gbtreekey16, gbtreekey16, internal) -RETURNS internal -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - --- Create the operator class -CREATE OPERATOR CLASS gist_macaddr_ops -DEFAULT FOR TYPE macaddr USING gist -AS - OPERATOR 1 < , - OPERATOR 2 <= , - OPERATOR 3 = , - OPERATOR 4 >= , - OPERATOR 5 > , - FUNCTION 1 gbt_macad_consistent (internal, macaddr, int2, oid, internal), - FUNCTION 2 gbt_macad_union (internal, internal), - FUNCTION 3 gbt_macad_compress (internal), - FUNCTION 4 gbt_decompress (internal), - FUNCTION 5 gbt_macad_penalty (internal, internal, internal), - FUNCTION 6 gbt_macad_picksplit (internal, internal), - FUNCTION 7 gbt_macad_same (gbtreekey16, gbtreekey16, internal), - STORAGE gbtreekey16; - -ALTER OPERATOR FAMILY gist_macaddr_ops USING gist ADD - OPERATOR 6 <> (macaddr, macaddr) , - FUNCTION 9 (macaddr, macaddr) gbt_macad_fetch (internal); - - --- --- --- --- text/ bpchar ops --- --- --- --- define the GiST support methods -CREATE FUNCTION gbt_text_consistent(internal,text,int2,oid,internal) -RETURNS bool -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -CREATE FUNCTION gbt_bpchar_consistent(internal,bpchar,int2,oid,internal) -RETURNS bool -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -CREATE FUNCTION gbt_text_compress(internal) -RETURNS internal -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -CREATE FUNCTION gbt_bpchar_compress(internal) -RETURNS internal -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -CREATE FUNCTION gbt_text_penalty(internal,internal,internal) -RETURNS internal -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -CREATE FUNCTION gbt_text_picksplit(internal, internal) -RETURNS internal -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -CREATE FUNCTION gbt_text_union(internal, internal) -RETURNS gbtreekey_var -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -CREATE FUNCTION gbt_text_same(gbtreekey_var, gbtreekey_var, internal) -RETURNS internal -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - --- Create the operator class -CREATE OPERATOR CLASS gist_text_ops -DEFAULT FOR TYPE text USING gist -AS - OPERATOR 1 < , - OPERATOR 2 <= , - OPERATOR 3 = , - OPERATOR 4 >= , - OPERATOR 5 > , - FUNCTION 1 gbt_text_consistent (internal, text, int2, oid, internal), - FUNCTION 2 gbt_text_union (internal, internal), - FUNCTION 3 gbt_text_compress (internal), - FUNCTION 4 gbt_var_decompress (internal), - FUNCTION 5 gbt_text_penalty (internal, internal, internal), - FUNCTION 6 gbt_text_picksplit (internal, internal), - FUNCTION 7 gbt_text_same (gbtreekey_var, gbtreekey_var, internal), - STORAGE gbtreekey_var; - -ALTER OPERATOR FAMILY gist_text_ops USING gist ADD - OPERATOR 6 <> (text, text) , - FUNCTION 9 (text, text) gbt_var_fetch (internal) ; - - ----- Create the operator class -CREATE OPERATOR CLASS gist_bpchar_ops -DEFAULT FOR TYPE bpchar USING gist -AS - OPERATOR 1 < , - OPERATOR 2 <= , - OPERATOR 3 = , - OPERATOR 4 >= , - OPERATOR 5 > , - FUNCTION 1 gbt_bpchar_consistent (internal, bpchar , int2, oid, internal), - FUNCTION 2 gbt_text_union (internal, internal), - FUNCTION 3 gbt_bpchar_compress (internal), - FUNCTION 4 gbt_var_decompress (internal), - FUNCTION 5 gbt_text_penalty (internal, internal, internal), - FUNCTION 6 gbt_text_picksplit (internal, internal), - FUNCTION 7 gbt_text_same (gbtreekey_var, gbtreekey_var, internal), - STORAGE gbtreekey_var; - -ALTER OPERATOR FAMILY gist_bpchar_ops USING gist ADD - OPERATOR 6 <> (bpchar, bpchar) , - FUNCTION 9 (bpchar, bpchar) gbt_var_fetch (internal) ; - --- --- --- bytea ops --- --- --- --- define the GiST support methods -CREATE FUNCTION gbt_bytea_consistent(internal,bytea,int2,oid,internal) -RETURNS bool -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -CREATE FUNCTION gbt_bytea_compress(internal) -RETURNS internal -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -CREATE FUNCTION gbt_bytea_penalty(internal,internal,internal) -RETURNS internal -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -CREATE FUNCTION gbt_bytea_picksplit(internal, internal) -RETURNS internal -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -CREATE FUNCTION gbt_bytea_union(internal, internal) -RETURNS gbtreekey_var -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -CREATE FUNCTION gbt_bytea_same(gbtreekey_var, gbtreekey_var, internal) -RETURNS internal -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - --- Create the operator class -CREATE OPERATOR CLASS gist_bytea_ops -DEFAULT FOR TYPE bytea USING gist -AS - OPERATOR 1 < , - OPERATOR 2 <= , - OPERATOR 3 = , - OPERATOR 4 >= , - OPERATOR 5 > , - FUNCTION 1 gbt_bytea_consistent (internal, bytea, int2, oid, internal), - FUNCTION 2 gbt_bytea_union (internal, internal), - FUNCTION 3 gbt_bytea_compress (internal), - FUNCTION 4 gbt_var_decompress (internal), - FUNCTION 5 gbt_bytea_penalty (internal, internal, internal), - FUNCTION 6 gbt_bytea_picksplit (internal, internal), - FUNCTION 7 gbt_bytea_same (gbtreekey_var, gbtreekey_var, internal), - STORAGE gbtreekey_var; - -ALTER OPERATOR FAMILY gist_bytea_ops USING gist ADD - OPERATOR 6 <> (bytea, bytea) , - FUNCTION 9 (bytea, bytea) gbt_var_fetch (internal) ; - - --- --- --- --- numeric ops --- --- --- --- define the GiST support methods -CREATE FUNCTION gbt_numeric_consistent(internal,numeric,int2,oid,internal) -RETURNS bool -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -CREATE FUNCTION gbt_numeric_compress(internal) -RETURNS internal -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -CREATE FUNCTION gbt_numeric_penalty(internal,internal,internal) -RETURNS internal -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -CREATE FUNCTION gbt_numeric_picksplit(internal, internal) -RETURNS internal -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -CREATE FUNCTION gbt_numeric_union(internal, internal) -RETURNS gbtreekey_var -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -CREATE FUNCTION gbt_numeric_same(gbtreekey_var, gbtreekey_var, internal) -RETURNS internal -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - --- Create the operator class -CREATE OPERATOR CLASS gist_numeric_ops -DEFAULT FOR TYPE numeric USING gist -AS - OPERATOR 1 < , - OPERATOR 2 <= , - OPERATOR 3 = , - OPERATOR 4 >= , - OPERATOR 5 > , - FUNCTION 1 gbt_numeric_consistent (internal, numeric, int2, oid, internal), - FUNCTION 2 gbt_numeric_union (internal, internal), - FUNCTION 3 gbt_numeric_compress (internal), - FUNCTION 4 gbt_var_decompress (internal), - FUNCTION 5 gbt_numeric_penalty (internal, internal, internal), - FUNCTION 6 gbt_numeric_picksplit (internal, internal), - FUNCTION 7 gbt_numeric_same (gbtreekey_var, gbtreekey_var, internal), - STORAGE gbtreekey_var; - -ALTER OPERATOR FAMILY gist_numeric_ops USING gist ADD - OPERATOR 6 <> (numeric, numeric) , - FUNCTION 9 (numeric, numeric) gbt_var_fetch (internal) ; - - --- --- --- bit ops --- --- --- --- define the GiST support methods -CREATE FUNCTION gbt_bit_consistent(internal,bit,int2,oid,internal) -RETURNS bool -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -CREATE FUNCTION gbt_bit_compress(internal) -RETURNS internal -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -CREATE FUNCTION gbt_bit_penalty(internal,internal,internal) -RETURNS internal -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -CREATE FUNCTION gbt_bit_picksplit(internal, internal) -RETURNS internal -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -CREATE FUNCTION gbt_bit_union(internal, internal) -RETURNS gbtreekey_var -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -CREATE FUNCTION gbt_bit_same(gbtreekey_var, gbtreekey_var, internal) -RETURNS internal -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - --- Create the operator class -CREATE OPERATOR CLASS gist_bit_ops -DEFAULT FOR TYPE bit USING gist -AS - OPERATOR 1 < , - OPERATOR 2 <= , - OPERATOR 3 = , - OPERATOR 4 >= , - OPERATOR 5 > , - FUNCTION 1 gbt_bit_consistent (internal, bit, int2, oid, internal), - FUNCTION 2 gbt_bit_union (internal, internal), - FUNCTION 3 gbt_bit_compress (internal), - FUNCTION 4 gbt_var_decompress (internal), - FUNCTION 5 gbt_bit_penalty (internal, internal, internal), - FUNCTION 6 gbt_bit_picksplit (internal, internal), - FUNCTION 7 gbt_bit_same (gbtreekey_var, gbtreekey_var, internal), - STORAGE gbtreekey_var; - -ALTER OPERATOR FAMILY gist_bit_ops USING gist ADD - OPERATOR 6 <> (bit, bit) , - FUNCTION 9 (bit, bit) gbt_var_fetch (internal) ; - - --- Create the operator class -CREATE OPERATOR CLASS gist_vbit_ops -DEFAULT FOR TYPE varbit USING gist -AS - OPERATOR 1 < , - OPERATOR 2 <= , - OPERATOR 3 = , - OPERATOR 4 >= , - OPERATOR 5 > , - FUNCTION 1 gbt_bit_consistent (internal, bit, int2, oid, internal), - FUNCTION 2 gbt_bit_union (internal, internal), - FUNCTION 3 gbt_bit_compress (internal), - FUNCTION 4 gbt_var_decompress (internal), - FUNCTION 5 gbt_bit_penalty (internal, internal, internal), - FUNCTION 6 gbt_bit_picksplit (internal, internal), - FUNCTION 7 gbt_bit_same (gbtreekey_var, gbtreekey_var, internal), - STORAGE gbtreekey_var; - -ALTER OPERATOR FAMILY gist_vbit_ops USING gist ADD - OPERATOR 6 <> (varbit, varbit) , - FUNCTION 9 (varbit, varbit) gbt_var_fetch (internal) ; - - --- --- --- --- inet/cidr ops --- --- --- --- define the GiST support methods -CREATE FUNCTION gbt_inet_consistent(internal,inet,int2,oid,internal) -RETURNS bool -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -CREATE FUNCTION gbt_inet_compress(internal) -RETURNS internal -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -CREATE FUNCTION gbt_inet_penalty(internal,internal,internal) -RETURNS internal -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -CREATE FUNCTION gbt_inet_picksplit(internal, internal) -RETURNS internal -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -CREATE FUNCTION gbt_inet_union(internal, internal) -RETURNS gbtreekey16 -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -CREATE FUNCTION gbt_inet_same(gbtreekey16, gbtreekey16, internal) -RETURNS internal -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - --- Create the operator class -CREATE OPERATOR CLASS gist_inet_ops -DEFAULT FOR TYPE inet USING gist -AS - OPERATOR 1 < , - OPERATOR 2 <= , - OPERATOR 3 = , - OPERATOR 4 >= , - OPERATOR 5 > , - FUNCTION 1 gbt_inet_consistent (internal, inet, int2, oid, internal), - FUNCTION 2 gbt_inet_union (internal, internal), - FUNCTION 3 gbt_inet_compress (internal), - FUNCTION 4 gbt_decompress (internal), - FUNCTION 5 gbt_inet_penalty (internal, internal, internal), - FUNCTION 6 gbt_inet_picksplit (internal, internal), - FUNCTION 7 gbt_inet_same (gbtreekey16, gbtreekey16, internal), - STORAGE gbtreekey16; - -ALTER OPERATOR FAMILY gist_inet_ops USING gist ADD - OPERATOR 6 <> (inet, inet) ; - -- no fetch support, the compress function is lossy - --- Create the operator class -CREATE OPERATOR CLASS gist_cidr_ops -DEFAULT FOR TYPE cidr USING gist -AS - OPERATOR 1 < (inet, inet) , - OPERATOR 2 <= (inet, inet) , - OPERATOR 3 = (inet, inet) , - OPERATOR 4 >= (inet, inet) , - OPERATOR 5 > (inet, inet) , - FUNCTION 1 gbt_inet_consistent (internal, inet, int2, oid, internal), - FUNCTION 2 gbt_inet_union (internal, internal), - FUNCTION 3 gbt_inet_compress (internal), - FUNCTION 4 gbt_decompress (internal), - FUNCTION 5 gbt_inet_penalty (internal, internal, internal), - FUNCTION 6 gbt_inet_picksplit (internal, internal), - FUNCTION 7 gbt_inet_same (gbtreekey16, gbtreekey16, internal), - STORAGE gbtreekey16; - -ALTER OPERATOR FAMILY gist_cidr_ops USING gist ADD - OPERATOR 6 <> (inet, inet) ; - -- no fetch support, the compress function is lossy diff --git a/contrib/btree_gist/btree_gist--1.2.sql b/contrib/btree_gist/btree_gist--1.2.sql new file mode 100644 index 0000000..f5d2de7 --- /dev/null +++ b/contrib/btree_gist/btree_gist--1.2.sql @@ -0,0 +1,1635 @@ +/* contrib/btree_gist/btree_gist--1.0.sql */ + +-- complain if script is sourced in psql, rather than via CREATE EXTENSION +\echo Use "CREATE EXTENSION btree_gist" to load this file. \quit + +CREATE FUNCTION gbtreekey4_in(cstring) +RETURNS gbtreekey4 +AS 'MODULE_PATHNAME', 'gbtreekey_in' +LANGUAGE C IMMUTABLE STRICT; + +CREATE FUNCTION gbtreekey4_out(gbtreekey4) +RETURNS cstring +AS 'MODULE_PATHNAME', 'gbtreekey_out' +LANGUAGE C IMMUTABLE STRICT; + +CREATE TYPE gbtreekey4 ( + INTERNALLENGTH = 4, + INPUT = gbtreekey4_in, + OUTPUT = gbtreekey4_out +); + +CREATE FUNCTION gbtreekey8_in(cstring) +RETURNS gbtreekey8 +AS 'MODULE_PATHNAME', 'gbtreekey_in' +LANGUAGE C IMMUTABLE STRICT; + +CREATE FUNCTION gbtreekey8_out(gbtreekey8) +RETURNS cstring +AS 'MODULE_PATHNAME', 'gbtreekey_out' +LANGUAGE C IMMUTABLE STRICT; + +CREATE TYPE gbtreekey8 ( + INTERNALLENGTH = 8, + INPUT = gbtreekey8_in, + OUTPUT = gbtreekey8_out +); + +CREATE FUNCTION gbtreekey16_in(cstring) +RETURNS gbtreekey16 +AS 'MODULE_PATHNAME', 'gbtreekey_in' +LANGUAGE C IMMUTABLE STRICT; + +CREATE FUNCTION gbtreekey16_out(gbtreekey16) +RETURNS cstring +AS 'MODULE_PATHNAME', 'gbtreekey_out' +LANGUAGE C IMMUTABLE STRICT; + +CREATE TYPE gbtreekey16 ( + INTERNALLENGTH = 16, + INPUT = gbtreekey16_in, + OUTPUT = gbtreekey16_out +); + +CREATE FUNCTION gbtreekey32_in(cstring) +RETURNS gbtreekey32 +AS 'MODULE_PATHNAME', 'gbtreekey_in' +LANGUAGE C IMMUTABLE STRICT; + +CREATE FUNCTION gbtreekey32_out(gbtreekey32) +RETURNS cstring +AS 'MODULE_PATHNAME', 'gbtreekey_out' +LANGUAGE C IMMUTABLE STRICT; + +CREATE TYPE gbtreekey32 ( + INTERNALLENGTH = 32, + INPUT = gbtreekey32_in, + OUTPUT = gbtreekey32_out +); + +CREATE FUNCTION gbtreekey_var_in(cstring) +RETURNS gbtreekey_var +AS 'MODULE_PATHNAME', 'gbtreekey_in' +LANGUAGE C IMMUTABLE STRICT; + +CREATE FUNCTION gbtreekey_var_out(gbtreekey_var) +RETURNS cstring +AS 'MODULE_PATHNAME', 'gbtreekey_out' +LANGUAGE C IMMUTABLE STRICT; + +CREATE TYPE gbtreekey_var ( + INTERNALLENGTH = VARIABLE, + INPUT = gbtreekey_var_in, + OUTPUT = gbtreekey_var_out, + STORAGE = EXTENDED +); + +--distance operators + +CREATE FUNCTION cash_dist(money, money) +RETURNS money +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +CREATE OPERATOR <-> ( + LEFTARG = money, + RIGHTARG = money, + PROCEDURE = cash_dist, + COMMUTATOR = '<->' +); + +CREATE FUNCTION date_dist(date, date) +RETURNS int4 +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +CREATE OPERATOR <-> ( + LEFTARG = date, + RIGHTARG = date, + PROCEDURE = date_dist, + COMMUTATOR = '<->' +); + +CREATE FUNCTION float4_dist(float4, float4) +RETURNS float4 +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +CREATE OPERATOR <-> ( + LEFTARG = float4, + RIGHTARG = float4, + PROCEDURE = float4_dist, + COMMUTATOR = '<->' +); + +CREATE FUNCTION float8_dist(float8, float8) +RETURNS float8 +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +CREATE OPERATOR <-> ( + LEFTARG = float8, + RIGHTARG = float8, + PROCEDURE = float8_dist, + COMMUTATOR = '<->' +); + +CREATE FUNCTION int2_dist(int2, int2) +RETURNS int2 +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +CREATE OPERATOR <-> ( + LEFTARG = int2, + RIGHTARG = int2, + PROCEDURE = int2_dist, + COMMUTATOR = '<->' +); + +CREATE FUNCTION int4_dist(int4, int4) +RETURNS int4 +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +CREATE OPERATOR <-> ( + LEFTARG = int4, + RIGHTARG = int4, + PROCEDURE = int4_dist, + COMMUTATOR = '<->' +); + +CREATE FUNCTION int8_dist(int8, int8) +RETURNS int8 +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +CREATE OPERATOR <-> ( + LEFTARG = int8, + RIGHTARG = int8, + PROCEDURE = int8_dist, + COMMUTATOR = '<->' +); + +CREATE FUNCTION interval_dist(interval, interval) +RETURNS interval +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +CREATE OPERATOR <-> ( + LEFTARG = interval, + RIGHTARG = interval, + PROCEDURE = interval_dist, + COMMUTATOR = '<->' +); + +CREATE FUNCTION oid_dist(oid, oid) +RETURNS oid +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +CREATE OPERATOR <-> ( + LEFTARG = oid, + RIGHTARG = oid, + PROCEDURE = oid_dist, + COMMUTATOR = '<->' +); + +CREATE FUNCTION time_dist(time, time) +RETURNS interval +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +CREATE OPERATOR <-> ( + LEFTARG = time, + RIGHTARG = time, + PROCEDURE = time_dist, + COMMUTATOR = '<->' +); + +CREATE FUNCTION ts_dist(timestamp, timestamp) +RETURNS interval +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +CREATE OPERATOR <-> ( + LEFTARG = timestamp, + RIGHTARG = timestamp, + PROCEDURE = ts_dist, + COMMUTATOR = '<->' +); + +CREATE FUNCTION tstz_dist(timestamptz, timestamptz) +RETURNS interval +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +CREATE OPERATOR <-> ( + LEFTARG = timestamptz, + RIGHTARG = timestamptz, + PROCEDURE = tstz_dist, + COMMUTATOR = '<->' +); + + +-- +-- +-- +-- oid ops +-- +-- +-- +-- define the GiST support methods +CREATE FUNCTION gbt_oid_consistent(internal,oid,int2,oid,internal) +RETURNS bool +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +CREATE FUNCTION gbt_oid_distance(internal,oid,int2,oid,internal) +RETURNS float8 +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +CREATE FUNCTION gbt_oid_fetch(internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +CREATE FUNCTION gbt_oid_compress(internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +CREATE FUNCTION gbt_decompress(internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +CREATE FUNCTION gbt_var_decompress(internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +CREATE FUNCTION gbt_var_fetch(internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +CREATE FUNCTION gbt_oid_penalty(internal,internal,internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +CREATE FUNCTION gbt_oid_picksplit(internal, internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +CREATE FUNCTION gbt_oid_union(internal, internal) +RETURNS gbtreekey8 +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +CREATE FUNCTION gbt_oid_same(gbtreekey8, gbtreekey8, internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +-- Create the operator class +CREATE OPERATOR CLASS gist_oid_ops +DEFAULT FOR TYPE oid USING gist +AS + OPERATOR 1 < , + OPERATOR 2 <= , + OPERATOR 3 = , + OPERATOR 4 >= , + OPERATOR 5 > , + FUNCTION 1 gbt_oid_consistent (internal, oid, int2, oid, internal), + FUNCTION 2 gbt_oid_union (internal, internal), + FUNCTION 3 gbt_oid_compress (internal), + FUNCTION 4 gbt_decompress (internal), + FUNCTION 5 gbt_oid_penalty (internal, internal, internal), + FUNCTION 6 gbt_oid_picksplit (internal, internal), + FUNCTION 7 gbt_oid_same (gbtreekey8, gbtreekey8, internal), + STORAGE gbtreekey8; + +-- Add operators that are new in 9.1. We do it like this, leaving them +-- "loose" in the operator family rather than bound into the opclass, because +-- that's the only state that can be reproduced during an upgrade from 9.0. +ALTER OPERATOR FAMILY gist_oid_ops USING gist ADD + OPERATOR 6 <> (oid, oid) , + OPERATOR 15 <-> (oid, oid) FOR ORDER BY pg_catalog.oid_ops , + FUNCTION 8 (oid, oid) gbt_oid_distance (internal, oid, int2, oid, internal) , + -- Also add support function for index-only-scans, added in 9.5. + FUNCTION 9 (oid, oid) gbt_oid_fetch (internal) ; + + +-- +-- +-- +-- 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 gbtreekey4 +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) ; + +-- +-- +-- +-- int2 ops +-- +-- +-- +-- define the GiST support methods +CREATE FUNCTION gbt_int2_consistent(internal,int2,int2,oid,internal) +RETURNS bool +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +CREATE FUNCTION gbt_int2_distance(internal,int2,int2,oid,internal) +RETURNS float8 +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +CREATE FUNCTION gbt_int2_compress(internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +CREATE FUNCTION gbt_int2_fetch(internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +CREATE FUNCTION gbt_int2_penalty(internal,internal,internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +CREATE FUNCTION gbt_int2_picksplit(internal, internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +CREATE FUNCTION gbt_int2_union(internal, internal) +RETURNS gbtreekey4 +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +CREATE FUNCTION gbt_int2_same(gbtreekey4, gbtreekey4, internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +-- Create the operator class +CREATE OPERATOR CLASS gist_int2_ops +DEFAULT FOR TYPE int2 USING gist +AS + OPERATOR 1 < , + OPERATOR 2 <= , + OPERATOR 3 = , + OPERATOR 4 >= , + OPERATOR 5 > , + FUNCTION 1 gbt_int2_consistent (internal, int2, int2, oid, internal), + FUNCTION 2 gbt_int2_union (internal, internal), + FUNCTION 3 gbt_int2_compress (internal), + FUNCTION 4 gbt_decompress (internal), + FUNCTION 5 gbt_int2_penalty (internal, internal, internal), + FUNCTION 6 gbt_int2_picksplit (internal, internal), + FUNCTION 7 gbt_int2_same (gbtreekey4, gbtreekey4, internal), + STORAGE gbtreekey4; + +ALTER OPERATOR FAMILY gist_int2_ops USING gist ADD + OPERATOR 6 <> (int2, int2) , + OPERATOR 15 <-> (int2, int2) FOR ORDER BY pg_catalog.integer_ops , + FUNCTION 8 (int2, int2) gbt_int2_distance (internal, int2, int2, oid, internal) , + FUNCTION 9 (int2, int2) gbt_int2_fetch (internal) ; + +-- +-- +-- +-- int4 ops +-- +-- +-- +-- define the GiST support methods +CREATE FUNCTION gbt_int4_consistent(internal,int4,int2,oid,internal) +RETURNS bool +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +CREATE FUNCTION gbt_int4_distance(internal,int4,int2,oid,internal) +RETURNS float8 +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +CREATE FUNCTION gbt_int4_compress(internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +CREATE FUNCTION gbt_int4_fetch(internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +CREATE FUNCTION gbt_int4_penalty(internal,internal,internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +CREATE FUNCTION gbt_int4_picksplit(internal, internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +CREATE FUNCTION gbt_int4_union(internal, internal) +RETURNS gbtreekey8 +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +CREATE FUNCTION gbt_int4_same(gbtreekey8, gbtreekey8, internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +-- Create the operator class +CREATE OPERATOR CLASS gist_int4_ops +DEFAULT FOR TYPE int4 USING gist +AS + OPERATOR 1 < , + OPERATOR 2 <= , + OPERATOR 3 = , + OPERATOR 4 >= , + OPERATOR 5 > , + FUNCTION 1 gbt_int4_consistent (internal, int4, int2, oid, internal), + FUNCTION 2 gbt_int4_union (internal, internal), + FUNCTION 3 gbt_int4_compress (internal), + FUNCTION 4 gbt_decompress (internal), + FUNCTION 5 gbt_int4_penalty (internal, internal, internal), + FUNCTION 6 gbt_int4_picksplit (internal, internal), + FUNCTION 7 gbt_int4_same (gbtreekey8, gbtreekey8, internal), + STORAGE gbtreekey8; + +ALTER OPERATOR FAMILY gist_int4_ops USING gist ADD + OPERATOR 6 <> (int4, int4) , + OPERATOR 15 <-> (int4, int4) FOR ORDER BY pg_catalog.integer_ops , + FUNCTION 8 (int4, int4) gbt_int4_distance (internal, int4, int2, oid, internal) , + FUNCTION 9 (int4, int4) gbt_int4_fetch (internal) ; + + +-- +-- +-- +-- int8 ops +-- +-- +-- +-- define the GiST support methods +CREATE FUNCTION gbt_int8_consistent(internal,int8,int2,oid,internal) +RETURNS bool +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +CREATE FUNCTION gbt_int8_distance(internal,int8,int2,oid,internal) +RETURNS float8 +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +CREATE FUNCTION gbt_int8_compress(internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +CREATE FUNCTION gbt_int8_fetch(internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +CREATE FUNCTION gbt_int8_penalty(internal,internal,internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +CREATE FUNCTION gbt_int8_picksplit(internal, internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +CREATE FUNCTION gbt_int8_union(internal, internal) +RETURNS gbtreekey16 +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +CREATE FUNCTION gbt_int8_same(gbtreekey16, gbtreekey16, internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +-- Create the operator class +CREATE OPERATOR CLASS gist_int8_ops +DEFAULT FOR TYPE int8 USING gist +AS + OPERATOR 1 < , + OPERATOR 2 <= , + OPERATOR 3 = , + OPERATOR 4 >= , + OPERATOR 5 > , + FUNCTION 1 gbt_int8_consistent (internal, int8, int2, oid, internal), + FUNCTION 2 gbt_int8_union (internal, internal), + FUNCTION 3 gbt_int8_compress (internal), + FUNCTION 4 gbt_decompress (internal), + FUNCTION 5 gbt_int8_penalty (internal, internal, internal), + FUNCTION 6 gbt_int8_picksplit (internal, internal), + FUNCTION 7 gbt_int8_same (gbtreekey16, gbtreekey16, internal), + STORAGE gbtreekey16; + +ALTER OPERATOR FAMILY gist_int8_ops USING gist ADD + OPERATOR 6 <> (int8, int8) , + OPERATOR 15 <-> (int8, int8) FOR ORDER BY pg_catalog.integer_ops , + FUNCTION 8 (int8, int8) gbt_int8_distance (internal, int8, int2, oid, internal) , + FUNCTION 9 (int8, int8) gbt_int8_fetch (internal) ; + +-- +-- +-- +-- float4 ops +-- +-- +-- +-- define the GiST support methods +CREATE FUNCTION gbt_float4_consistent(internal,float4,int2,oid,internal) +RETURNS bool +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +CREATE FUNCTION gbt_float4_distance(internal,float4,int2,oid,internal) +RETURNS float8 +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +CREATE FUNCTION gbt_float4_compress(internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +CREATE FUNCTION gbt_float4_fetch(internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +CREATE FUNCTION gbt_float4_penalty(internal,internal,internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +CREATE FUNCTION gbt_float4_picksplit(internal, internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +CREATE FUNCTION gbt_float4_union(internal, internal) +RETURNS gbtreekey8 +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +CREATE FUNCTION gbt_float4_same(gbtreekey8, gbtreekey8, internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +-- Create the operator class +CREATE OPERATOR CLASS gist_float4_ops +DEFAULT FOR TYPE float4 USING gist +AS + OPERATOR 1 < , + OPERATOR 2 <= , + OPERATOR 3 = , + OPERATOR 4 >= , + OPERATOR 5 > , + FUNCTION 1 gbt_float4_consistent (internal, float4, int2, oid, internal), + FUNCTION 2 gbt_float4_union (internal, internal), + FUNCTION 3 gbt_float4_compress (internal), + FUNCTION 4 gbt_decompress (internal), + FUNCTION 5 gbt_float4_penalty (internal, internal, internal), + FUNCTION 6 gbt_float4_picksplit (internal, internal), + FUNCTION 7 gbt_float4_same (gbtreekey8, gbtreekey8, internal), + STORAGE gbtreekey8; + +ALTER OPERATOR FAMILY gist_float4_ops USING gist ADD + OPERATOR 6 <> (float4, float4) , + OPERATOR 15 <-> (float4, float4) FOR ORDER BY pg_catalog.float_ops , + FUNCTION 8 (float4, float4) gbt_float4_distance (internal, float4, int2, oid, internal) , + FUNCTION 9 (float4, float4) gbt_float4_fetch (internal) ; + +-- +-- +-- +-- float8 ops +-- +-- +-- +-- define the GiST support methods +CREATE FUNCTION gbt_float8_consistent(internal,float8,int2,oid,internal) +RETURNS bool +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +CREATE FUNCTION gbt_float8_distance(internal,float8,int2,oid,internal) +RETURNS float8 +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +CREATE FUNCTION gbt_float8_compress(internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +CREATE FUNCTION gbt_float8_fetch(internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +CREATE FUNCTION gbt_float8_penalty(internal,internal,internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +CREATE FUNCTION gbt_float8_picksplit(internal, internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +CREATE FUNCTION gbt_float8_union(internal, internal) +RETURNS gbtreekey16 +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +CREATE FUNCTION gbt_float8_same(gbtreekey16, gbtreekey16, internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +-- Create the operator class +CREATE OPERATOR CLASS gist_float8_ops +DEFAULT FOR TYPE float8 USING gist +AS + OPERATOR 1 < , + OPERATOR 2 <= , + OPERATOR 3 = , + OPERATOR 4 >= , + OPERATOR 5 > , + FUNCTION 1 gbt_float8_consistent (internal, float8, int2, oid, internal), + FUNCTION 2 gbt_float8_union (internal, internal), + FUNCTION 3 gbt_float8_compress (internal), + FUNCTION 4 gbt_decompress (internal), + FUNCTION 5 gbt_float8_penalty (internal, internal, internal), + FUNCTION 6 gbt_float8_picksplit (internal, internal), + FUNCTION 7 gbt_float8_same (gbtreekey16, gbtreekey16, internal), + STORAGE gbtreekey16; + +ALTER OPERATOR FAMILY gist_float8_ops USING gist ADD + OPERATOR 6 <> (float8, float8) , + OPERATOR 15 <-> (float8, float8) FOR ORDER BY pg_catalog.float_ops , + FUNCTION 8 (float8, float8) gbt_float8_distance (internal, float8, int2, oid, internal) , + FUNCTION 9 (float8, float8) gbt_float8_fetch (internal) ; + +-- +-- +-- +-- timestamp ops +-- +-- +-- + +CREATE FUNCTION gbt_ts_consistent(internal,timestamp,int2,oid,internal) +RETURNS bool +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +CREATE FUNCTION gbt_ts_distance(internal,timestamp,int2,oid,internal) +RETURNS float8 +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +CREATE FUNCTION gbt_tstz_consistent(internal,timestamptz,int2,oid,internal) +RETURNS bool +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +CREATE FUNCTION gbt_tstz_distance(internal,timestamptz,int2,oid,internal) +RETURNS float8 +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +CREATE FUNCTION gbt_ts_compress(internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +CREATE FUNCTION gbt_tstz_compress(internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +CREATE FUNCTION gbt_ts_fetch(internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +CREATE FUNCTION gbt_ts_penalty(internal,internal,internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +CREATE FUNCTION gbt_ts_picksplit(internal, internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +CREATE FUNCTION gbt_ts_union(internal, internal) +RETURNS gbtreekey16 +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +CREATE FUNCTION gbt_ts_same(gbtreekey16, gbtreekey16, internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +-- Create the operator class +CREATE OPERATOR CLASS gist_timestamp_ops +DEFAULT FOR TYPE timestamp USING gist +AS + OPERATOR 1 < , + OPERATOR 2 <= , + OPERATOR 3 = , + OPERATOR 4 >= , + OPERATOR 5 > , + FUNCTION 1 gbt_ts_consistent (internal, timestamp, int2, oid, internal), + FUNCTION 2 gbt_ts_union (internal, internal), + FUNCTION 3 gbt_ts_compress (internal), + FUNCTION 4 gbt_decompress (internal), + FUNCTION 5 gbt_ts_penalty (internal, internal, internal), + FUNCTION 6 gbt_ts_picksplit (internal, internal), + FUNCTION 7 gbt_ts_same (gbtreekey16, gbtreekey16, internal), + STORAGE gbtreekey16; + +ALTER OPERATOR FAMILY gist_timestamp_ops USING gist ADD + OPERATOR 6 <> (timestamp, timestamp) , + OPERATOR 15 <-> (timestamp, timestamp) FOR ORDER BY pg_catalog.interval_ops , + FUNCTION 8 (timestamp, timestamp) gbt_ts_distance (internal, timestamp, int2, oid, internal) , + FUNCTION 9 (timestamp, timestamp) gbt_ts_fetch (internal) ; + +-- Create the operator class +CREATE OPERATOR CLASS gist_timestamptz_ops +DEFAULT FOR TYPE timestamptz USING gist +AS + OPERATOR 1 < , + OPERATOR 2 <= , + OPERATOR 3 = , + OPERATOR 4 >= , + OPERATOR 5 > , + FUNCTION 1 gbt_tstz_consistent (internal, timestamptz, int2, oid, internal), + FUNCTION 2 gbt_ts_union (internal, internal), + FUNCTION 3 gbt_tstz_compress (internal), + FUNCTION 4 gbt_decompress (internal), + FUNCTION 5 gbt_ts_penalty (internal, internal, internal), + FUNCTION 6 gbt_ts_picksplit (internal, internal), + FUNCTION 7 gbt_ts_same (gbtreekey16, gbtreekey16, internal), + STORAGE gbtreekey16; + +ALTER OPERATOR FAMILY gist_timestamptz_ops USING gist ADD + OPERATOR 6 <> (timestamptz, timestamptz) , + OPERATOR 15 <-> (timestamptz, timestamptz) FOR ORDER BY pg_catalog.interval_ops , + FUNCTION 8 (timestamptz, timestamptz) gbt_tstz_distance (internal, timestamptz, int2, oid, internal) , + FUNCTION 9 (timestamptz, timestamptz) gbt_ts_fetch (internal) ; + +-- +-- +-- +-- time ops +-- +-- +-- + +CREATE FUNCTION gbt_time_consistent(internal,time,int2,oid,internal) +RETURNS bool +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +CREATE FUNCTION gbt_time_distance(internal,time,int2,oid,internal) +RETURNS float8 +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +CREATE FUNCTION gbt_timetz_consistent(internal,timetz,int2,oid,internal) +RETURNS bool +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +CREATE FUNCTION gbt_time_compress(internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +CREATE FUNCTION gbt_timetz_compress(internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +CREATE FUNCTION gbt_time_fetch(internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +CREATE FUNCTION gbt_time_penalty(internal,internal,internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +CREATE FUNCTION gbt_time_picksplit(internal, internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +CREATE FUNCTION gbt_time_union(internal, internal) +RETURNS gbtreekey16 +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +CREATE FUNCTION gbt_time_same(gbtreekey16, gbtreekey16, internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +-- Create the operator class +CREATE OPERATOR CLASS gist_time_ops +DEFAULT FOR TYPE time USING gist +AS + OPERATOR 1 < , + OPERATOR 2 <= , + OPERATOR 3 = , + OPERATOR 4 >= , + OPERATOR 5 > , + FUNCTION 1 gbt_time_consistent (internal, time, int2, oid, internal), + FUNCTION 2 gbt_time_union (internal, internal), + FUNCTION 3 gbt_time_compress (internal), + FUNCTION 4 gbt_decompress (internal), + FUNCTION 5 gbt_time_penalty (internal, internal, internal), + FUNCTION 6 gbt_time_picksplit (internal, internal), + FUNCTION 7 gbt_time_same (gbtreekey16, gbtreekey16, internal), + STORAGE gbtreekey16; + +ALTER OPERATOR FAMILY gist_time_ops USING gist ADD + OPERATOR 6 <> (time, time) , + OPERATOR 15 <-> (time, time) FOR ORDER BY pg_catalog.interval_ops , + FUNCTION 8 (time, time) gbt_time_distance (internal, time, int2, oid, internal) , + FUNCTION 9 (time, time) gbt_time_fetch (internal) ; + + +CREATE OPERATOR CLASS gist_timetz_ops +DEFAULT FOR TYPE timetz USING gist +AS + OPERATOR 1 < , + OPERATOR 2 <= , + OPERATOR 3 = , + OPERATOR 4 >= , + OPERATOR 5 > , + FUNCTION 1 gbt_timetz_consistent (internal, timetz, int2, oid, internal), + FUNCTION 2 gbt_time_union (internal, internal), + FUNCTION 3 gbt_timetz_compress (internal), + FUNCTION 4 gbt_decompress (internal), + FUNCTION 5 gbt_time_penalty (internal, internal, internal), + FUNCTION 6 gbt_time_picksplit (internal, internal), + FUNCTION 7 gbt_time_same (gbtreekey16, gbtreekey16, internal), + STORAGE gbtreekey16; + +ALTER OPERATOR FAMILY gist_timetz_ops USING gist ADD + OPERATOR 6 <> (timetz, timetz) ; + -- no 'fetch' function, as the compress function is lossy. + + +-- +-- +-- +-- date ops +-- +-- +-- + +CREATE FUNCTION gbt_date_consistent(internal,date,int2,oid,internal) +RETURNS bool +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +CREATE FUNCTION gbt_date_distance(internal,date,int2,oid,internal) +RETURNS float8 +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +CREATE FUNCTION gbt_date_compress(internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +CREATE FUNCTION gbt_date_fetch(internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +CREATE FUNCTION gbt_date_penalty(internal,internal,internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +CREATE FUNCTION gbt_date_picksplit(internal, internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +CREATE FUNCTION gbt_date_union(internal, internal) +RETURNS gbtreekey8 +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +CREATE FUNCTION gbt_date_same(gbtreekey8, gbtreekey8, internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +-- Create the operator class +CREATE OPERATOR CLASS gist_date_ops +DEFAULT FOR TYPE date USING gist +AS + OPERATOR 1 < , + OPERATOR 2 <= , + OPERATOR 3 = , + OPERATOR 4 >= , + OPERATOR 5 > , + FUNCTION 1 gbt_date_consistent (internal, date, int2, oid, internal), + FUNCTION 2 gbt_date_union (internal, internal), + FUNCTION 3 gbt_date_compress (internal), + FUNCTION 4 gbt_decompress (internal), + FUNCTION 5 gbt_date_penalty (internal, internal, internal), + FUNCTION 6 gbt_date_picksplit (internal, internal), + FUNCTION 7 gbt_date_same (gbtreekey8, gbtreekey8, internal), + STORAGE gbtreekey8; + +ALTER OPERATOR FAMILY gist_date_ops USING gist ADD + OPERATOR 6 <> (date, date) , + OPERATOR 15 <-> (date, date) FOR ORDER BY pg_catalog.integer_ops , + FUNCTION 8 (date, date) gbt_date_distance (internal, date, int2, oid, internal) , + FUNCTION 9 (date, date) gbt_date_fetch (internal) ; + + +-- +-- +-- +-- interval ops +-- +-- +-- + +CREATE FUNCTION gbt_intv_consistent(internal,interval,int2,oid,internal) +RETURNS bool +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +CREATE FUNCTION gbt_intv_distance(internal,interval,int2,oid,internal) +RETURNS float8 +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +CREATE FUNCTION gbt_intv_compress(internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +CREATE FUNCTION gbt_intv_decompress(internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +CREATE FUNCTION gbt_intv_fetch(internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +CREATE FUNCTION gbt_intv_penalty(internal,internal,internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +CREATE FUNCTION gbt_intv_picksplit(internal, internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +CREATE FUNCTION gbt_intv_union(internal, internal) +RETURNS gbtreekey32 +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +CREATE FUNCTION gbt_intv_same(gbtreekey32, gbtreekey32, internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +-- Create the operator class +CREATE OPERATOR CLASS gist_interval_ops +DEFAULT FOR TYPE interval USING gist +AS + OPERATOR 1 < , + OPERATOR 2 <= , + OPERATOR 3 = , + OPERATOR 4 >= , + OPERATOR 5 > , + FUNCTION 1 gbt_intv_consistent (internal, interval, int2, oid, internal), + FUNCTION 2 gbt_intv_union (internal, internal), + FUNCTION 3 gbt_intv_compress (internal), + FUNCTION 4 gbt_intv_decompress (internal), + FUNCTION 5 gbt_intv_penalty (internal, internal, internal), + FUNCTION 6 gbt_intv_picksplit (internal, internal), + FUNCTION 7 gbt_intv_same (gbtreekey32, gbtreekey32, internal), + STORAGE gbtreekey32; + +ALTER OPERATOR FAMILY gist_interval_ops USING gist ADD + OPERATOR 6 <> (interval, interval) , + OPERATOR 15 <-> (interval, interval) FOR ORDER BY pg_catalog.interval_ops , + FUNCTION 8 (interval, interval) gbt_intv_distance (internal, interval, int2, oid, internal) , + FUNCTION 9 (interval, interval) gbt_intv_fetch (internal) ; + + +-- +-- +-- +-- cash ops +-- +-- +-- +-- define the GiST support methods +CREATE FUNCTION gbt_cash_consistent(internal,money,int2,oid,internal) +RETURNS bool +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +CREATE FUNCTION gbt_cash_distance(internal,money,int2,oid,internal) +RETURNS float8 +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +CREATE FUNCTION gbt_cash_compress(internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +CREATE FUNCTION gbt_cash_fetch(internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +CREATE FUNCTION gbt_cash_penalty(internal,internal,internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +CREATE FUNCTION gbt_cash_picksplit(internal, internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +CREATE FUNCTION gbt_cash_union(internal, internal) +RETURNS gbtreekey16 +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +CREATE FUNCTION gbt_cash_same(gbtreekey16, gbtreekey16, internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +-- Create the operator class +CREATE OPERATOR CLASS gist_cash_ops +DEFAULT FOR TYPE money USING gist +AS + OPERATOR 1 < , + OPERATOR 2 <= , + OPERATOR 3 = , + OPERATOR 4 >= , + OPERATOR 5 > , + FUNCTION 1 gbt_cash_consistent (internal, money, int2, oid, internal), + FUNCTION 2 gbt_cash_union (internal, internal), + FUNCTION 3 gbt_cash_compress (internal), + FUNCTION 4 gbt_decompress (internal), + FUNCTION 5 gbt_cash_penalty (internal, internal, internal), + FUNCTION 6 gbt_cash_picksplit (internal, internal), + FUNCTION 7 gbt_cash_same (gbtreekey16, gbtreekey16, internal), + STORAGE gbtreekey16; + +ALTER OPERATOR FAMILY gist_cash_ops USING gist ADD + OPERATOR 6 <> (money, money) , + OPERATOR 15 <-> (money, money) FOR ORDER BY pg_catalog.money_ops , + FUNCTION 8 (money, money) gbt_cash_distance (internal, money, int2, oid, internal) , + FUNCTION 9 (money, money) gbt_cash_fetch (internal) ; + + +-- +-- +-- +-- macaddr ops +-- +-- +-- +-- define the GiST support methods +CREATE FUNCTION gbt_macad_consistent(internal,macaddr,int2,oid,internal) +RETURNS bool +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +CREATE FUNCTION gbt_macad_compress(internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +CREATE FUNCTION gbt_macad_fetch(internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +CREATE FUNCTION gbt_macad_penalty(internal,internal,internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +CREATE FUNCTION gbt_macad_picksplit(internal, internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +CREATE FUNCTION gbt_macad_union(internal, internal) +RETURNS gbtreekey16 +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +CREATE FUNCTION gbt_macad_same(gbtreekey16, gbtreekey16, internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +-- Create the operator class +CREATE OPERATOR CLASS gist_macaddr_ops +DEFAULT FOR TYPE macaddr USING gist +AS + OPERATOR 1 < , + OPERATOR 2 <= , + OPERATOR 3 = , + OPERATOR 4 >= , + OPERATOR 5 > , + FUNCTION 1 gbt_macad_consistent (internal, macaddr, int2, oid, internal), + FUNCTION 2 gbt_macad_union (internal, internal), + FUNCTION 3 gbt_macad_compress (internal), + FUNCTION 4 gbt_decompress (internal), + FUNCTION 5 gbt_macad_penalty (internal, internal, internal), + FUNCTION 6 gbt_macad_picksplit (internal, internal), + FUNCTION 7 gbt_macad_same (gbtreekey16, gbtreekey16, internal), + STORAGE gbtreekey16; + +ALTER OPERATOR FAMILY gist_macaddr_ops USING gist ADD + OPERATOR 6 <> (macaddr, macaddr) , + FUNCTION 9 (macaddr, macaddr) gbt_macad_fetch (internal); + + +-- +-- +-- +-- text/ bpchar ops +-- +-- +-- +-- define the GiST support methods +CREATE FUNCTION gbt_text_consistent(internal,text,int2,oid,internal) +RETURNS bool +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +CREATE FUNCTION gbt_bpchar_consistent(internal,bpchar,int2,oid,internal) +RETURNS bool +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +CREATE FUNCTION gbt_text_compress(internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +CREATE FUNCTION gbt_bpchar_compress(internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +CREATE FUNCTION gbt_text_penalty(internal,internal,internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +CREATE FUNCTION gbt_text_picksplit(internal, internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +CREATE FUNCTION gbt_text_union(internal, internal) +RETURNS gbtreekey_var +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +CREATE FUNCTION gbt_text_same(gbtreekey_var, gbtreekey_var, internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +-- Create the operator class +CREATE OPERATOR CLASS gist_text_ops +DEFAULT FOR TYPE text USING gist +AS + OPERATOR 1 < , + OPERATOR 2 <= , + OPERATOR 3 = , + OPERATOR 4 >= , + OPERATOR 5 > , + FUNCTION 1 gbt_text_consistent (internal, text, int2, oid, internal), + FUNCTION 2 gbt_text_union (internal, internal), + FUNCTION 3 gbt_text_compress (internal), + FUNCTION 4 gbt_var_decompress (internal), + FUNCTION 5 gbt_text_penalty (internal, internal, internal), + FUNCTION 6 gbt_text_picksplit (internal, internal), + FUNCTION 7 gbt_text_same (gbtreekey_var, gbtreekey_var, internal), + STORAGE gbtreekey_var; + +ALTER OPERATOR FAMILY gist_text_ops USING gist ADD + OPERATOR 6 <> (text, text) , + FUNCTION 9 (text, text) gbt_var_fetch (internal) ; + + +---- Create the operator class +CREATE OPERATOR CLASS gist_bpchar_ops +DEFAULT FOR TYPE bpchar USING gist +AS + OPERATOR 1 < , + OPERATOR 2 <= , + OPERATOR 3 = , + OPERATOR 4 >= , + OPERATOR 5 > , + FUNCTION 1 gbt_bpchar_consistent (internal, bpchar , int2, oid, internal), + FUNCTION 2 gbt_text_union (internal, internal), + FUNCTION 3 gbt_bpchar_compress (internal), + FUNCTION 4 gbt_var_decompress (internal), + FUNCTION 5 gbt_text_penalty (internal, internal, internal), + FUNCTION 6 gbt_text_picksplit (internal, internal), + FUNCTION 7 gbt_text_same (gbtreekey_var, gbtreekey_var, internal), + STORAGE gbtreekey_var; + +ALTER OPERATOR FAMILY gist_bpchar_ops USING gist ADD + OPERATOR 6 <> (bpchar, bpchar) , + FUNCTION 9 (bpchar, bpchar) gbt_var_fetch (internal) ; + +-- +-- +-- bytea ops +-- +-- +-- +-- define the GiST support methods +CREATE FUNCTION gbt_bytea_consistent(internal,bytea,int2,oid,internal) +RETURNS bool +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +CREATE FUNCTION gbt_bytea_compress(internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +CREATE FUNCTION gbt_bytea_penalty(internal,internal,internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +CREATE FUNCTION gbt_bytea_picksplit(internal, internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +CREATE FUNCTION gbt_bytea_union(internal, internal) +RETURNS gbtreekey_var +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +CREATE FUNCTION gbt_bytea_same(gbtreekey_var, gbtreekey_var, internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +-- Create the operator class +CREATE OPERATOR CLASS gist_bytea_ops +DEFAULT FOR TYPE bytea USING gist +AS + OPERATOR 1 < , + OPERATOR 2 <= , + OPERATOR 3 = , + OPERATOR 4 >= , + OPERATOR 5 > , + FUNCTION 1 gbt_bytea_consistent (internal, bytea, int2, oid, internal), + FUNCTION 2 gbt_bytea_union (internal, internal), + FUNCTION 3 gbt_bytea_compress (internal), + FUNCTION 4 gbt_var_decompress (internal), + FUNCTION 5 gbt_bytea_penalty (internal, internal, internal), + FUNCTION 6 gbt_bytea_picksplit (internal, internal), + FUNCTION 7 gbt_bytea_same (gbtreekey_var, gbtreekey_var, internal), + STORAGE gbtreekey_var; + +ALTER OPERATOR FAMILY gist_bytea_ops USING gist ADD + OPERATOR 6 <> (bytea, bytea) , + FUNCTION 9 (bytea, bytea) gbt_var_fetch (internal) ; + + +-- +-- +-- +-- numeric ops +-- +-- +-- +-- define the GiST support methods +CREATE FUNCTION gbt_numeric_consistent(internal,numeric,int2,oid,internal) +RETURNS bool +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +CREATE FUNCTION gbt_numeric_compress(internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +CREATE FUNCTION gbt_numeric_penalty(internal,internal,internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +CREATE FUNCTION gbt_numeric_picksplit(internal, internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +CREATE FUNCTION gbt_numeric_union(internal, internal) +RETURNS gbtreekey_var +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +CREATE FUNCTION gbt_numeric_same(gbtreekey_var, gbtreekey_var, internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +-- Create the operator class +CREATE OPERATOR CLASS gist_numeric_ops +DEFAULT FOR TYPE numeric USING gist +AS + OPERATOR 1 < , + OPERATOR 2 <= , + OPERATOR 3 = , + OPERATOR 4 >= , + OPERATOR 5 > , + FUNCTION 1 gbt_numeric_consistent (internal, numeric, int2, oid, internal), + FUNCTION 2 gbt_numeric_union (internal, internal), + FUNCTION 3 gbt_numeric_compress (internal), + FUNCTION 4 gbt_var_decompress (internal), + FUNCTION 5 gbt_numeric_penalty (internal, internal, internal), + FUNCTION 6 gbt_numeric_picksplit (internal, internal), + FUNCTION 7 gbt_numeric_same (gbtreekey_var, gbtreekey_var, internal), + STORAGE gbtreekey_var; + +ALTER OPERATOR FAMILY gist_numeric_ops USING gist ADD + OPERATOR 6 <> (numeric, numeric) , + FUNCTION 9 (numeric, numeric) gbt_var_fetch (internal) ; + + +-- +-- +-- bit ops +-- +-- +-- +-- define the GiST support methods +CREATE FUNCTION gbt_bit_consistent(internal,bit,int2,oid,internal) +RETURNS bool +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +CREATE FUNCTION gbt_bit_compress(internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +CREATE FUNCTION gbt_bit_penalty(internal,internal,internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +CREATE FUNCTION gbt_bit_picksplit(internal, internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +CREATE FUNCTION gbt_bit_union(internal, internal) +RETURNS gbtreekey_var +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +CREATE FUNCTION gbt_bit_same(gbtreekey_var, gbtreekey_var, internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +-- Create the operator class +CREATE OPERATOR CLASS gist_bit_ops +DEFAULT FOR TYPE bit USING gist +AS + OPERATOR 1 < , + OPERATOR 2 <= , + OPERATOR 3 = , + OPERATOR 4 >= , + OPERATOR 5 > , + FUNCTION 1 gbt_bit_consistent (internal, bit, int2, oid, internal), + FUNCTION 2 gbt_bit_union (internal, internal), + FUNCTION 3 gbt_bit_compress (internal), + FUNCTION 4 gbt_var_decompress (internal), + FUNCTION 5 gbt_bit_penalty (internal, internal, internal), + FUNCTION 6 gbt_bit_picksplit (internal, internal), + FUNCTION 7 gbt_bit_same (gbtreekey_var, gbtreekey_var, internal), + STORAGE gbtreekey_var; + +ALTER OPERATOR FAMILY gist_bit_ops USING gist ADD + OPERATOR 6 <> (bit, bit) , + FUNCTION 9 (bit, bit) gbt_var_fetch (internal) ; + + +-- Create the operator class +CREATE OPERATOR CLASS gist_vbit_ops +DEFAULT FOR TYPE varbit USING gist +AS + OPERATOR 1 < , + OPERATOR 2 <= , + OPERATOR 3 = , + OPERATOR 4 >= , + OPERATOR 5 > , + FUNCTION 1 gbt_bit_consistent (internal, bit, int2, oid, internal), + FUNCTION 2 gbt_bit_union (internal, internal), + FUNCTION 3 gbt_bit_compress (internal), + FUNCTION 4 gbt_var_decompress (internal), + FUNCTION 5 gbt_bit_penalty (internal, internal, internal), + FUNCTION 6 gbt_bit_picksplit (internal, internal), + FUNCTION 7 gbt_bit_same (gbtreekey_var, gbtreekey_var, internal), + STORAGE gbtreekey_var; + +ALTER OPERATOR FAMILY gist_vbit_ops USING gist ADD + OPERATOR 6 <> (varbit, varbit) , + FUNCTION 9 (varbit, varbit) gbt_var_fetch (internal) ; + + +-- +-- +-- +-- inet/cidr ops +-- +-- +-- +-- define the GiST support methods +CREATE FUNCTION gbt_inet_consistent(internal,inet,int2,oid,internal) +RETURNS bool +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +CREATE FUNCTION gbt_inet_compress(internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +CREATE FUNCTION gbt_inet_penalty(internal,internal,internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +CREATE FUNCTION gbt_inet_picksplit(internal, internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +CREATE FUNCTION gbt_inet_union(internal, internal) +RETURNS gbtreekey16 +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +CREATE FUNCTION gbt_inet_same(gbtreekey16, gbtreekey16, internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE STRICT; + +-- Create the operator class +CREATE OPERATOR CLASS gist_inet_ops +DEFAULT FOR TYPE inet USING gist +AS + OPERATOR 1 < , + OPERATOR 2 <= , + OPERATOR 3 = , + OPERATOR 4 >= , + OPERATOR 5 > , + FUNCTION 1 gbt_inet_consistent (internal, inet, int2, oid, internal), + FUNCTION 2 gbt_inet_union (internal, internal), + FUNCTION 3 gbt_inet_compress (internal), + FUNCTION 4 gbt_decompress (internal), + FUNCTION 5 gbt_inet_penalty (internal, internal, internal), + FUNCTION 6 gbt_inet_picksplit (internal, internal), + FUNCTION 7 gbt_inet_same (gbtreekey16, gbtreekey16, internal), + STORAGE gbtreekey16; + +ALTER OPERATOR FAMILY gist_inet_ops USING gist ADD + OPERATOR 6 <> (inet, inet) ; + -- no fetch support, the compress function is lossy + +-- Create the operator class +CREATE OPERATOR CLASS gist_cidr_ops +DEFAULT FOR TYPE cidr USING gist +AS + OPERATOR 1 < (inet, inet) , + OPERATOR 2 <= (inet, inet) , + OPERATOR 3 = (inet, inet) , + OPERATOR 4 >= (inet, inet) , + OPERATOR 5 > (inet, inet) , + FUNCTION 1 gbt_inet_consistent (internal, inet, int2, oid, internal), + FUNCTION 2 gbt_inet_union (internal, internal), + FUNCTION 3 gbt_inet_compress (internal), + FUNCTION 4 gbt_decompress (internal), + FUNCTION 5 gbt_inet_penalty (internal, internal, internal), + FUNCTION 6 gbt_inet_picksplit (internal, internal), + FUNCTION 7 gbt_inet_same (gbtreekey16, gbtreekey16, internal), + STORAGE gbtreekey16; + +ALTER OPERATOR FAMILY gist_cidr_ops USING gist ADD + OPERATOR 6 <> (inet, inet) ; + -- no fetch support, the compress function is lossy diff --git a/contrib/btree_gist/btree_gist.control b/contrib/btree_gist/btree_gist.control index c7adfeb..74d0e92 100644 --- a/contrib/btree_gist/btree_gist.control +++ b/contrib/btree_gist/btree_gist.control @@ -1,5 +1,5 @@ # btree_gist extension comment = 'support for indexing common datatypes in GiST' -default_version = '1.1' +default_version = '1.2' module_pathname = '$libdir/btree_gist' relocatable = true diff --git a/contrib/btree_gist/btree_gist.h b/contrib/btree_gist/btree_gist.h index dcffbb5..61f8d83 100644 --- a/contrib/btree_gist/btree_gist.h +++ b/contrib/btree_gist/btree_gist.h @@ -31,7 +31,8 @@ enum gbtree_type gbt_t_bpchar, gbt_t_bytea, gbt_t_bit, - gbt_t_inet + gbt_t_inet, + gbt_t_enum }; diff --git a/contrib/btree_gist/btree_utils_num.c b/contrib/btree_gist/btree_utils_num.c index 99cb41f..79f40a9 100644 --- a/contrib/btree_gist/btree_utils_num.c +++ b/contrib/btree_gist/btree_utils_num.c @@ -48,6 +48,7 @@ gbt_num_compress(GISTENTRY *entry, const gbtree_ninfo *tinfo) leaf = &v.i8; break; case gbt_t_oid: + case gbt_t_enum: v.i4 = DatumGetObjectId(entry->key); leaf = &v.i4; break; @@ -122,6 +123,7 @@ gbt_num_fetch(GISTENTRY *entry, const gbtree_ninfo *tinfo) datum = Int64GetDatum(*(int64 *) entry->key); break; case gbt_t_oid: + case gbt_t_enum: datum = ObjectIdGetDatum(*(Oid *) entry->key); break; case gbt_t_float4: diff --git a/contrib/btree_gist/expected/enum.out b/contrib/btree_gist/expected/enum.out new file mode 100644 index 0000000..c4b769d --- /dev/null +++ b/contrib/btree_gist/expected/enum.out @@ -0,0 +1,91 @@ +-- enum check +create type rainbow as enum ('r','o','y','g','b','i','v'); +CREATE TABLE enumtmp (a rainbow); +\copy enumtmp from 'data/enum.data' +SET enable_seqscan=on; +select a, count(*) from enumtmp group by a order by 1; + a | count +---+------- + r | 76 + o | 78 + y | 73 + g | 75 + b | 77 + i | 78 + v | 75 + | 63 +(8 rows) + +SELECT count(*) FROM enumtmp WHERE a < 'g'::rainbow; + count +------- + 227 +(1 row) + +SELECT count(*) FROM enumtmp WHERE a <= 'g'::rainbow; + count +------- + 302 +(1 row) + +SELECT count(*) FROM enumtmp WHERE a = 'g'::rainbow; + count +------- + 75 +(1 row) + +SELECT count(*) FROM enumtmp WHERE a >= 'g'::rainbow; + count +------- + 305 +(1 row) + +SELECT count(*) FROM enumtmp WHERE a > 'g'::rainbow; + count +------- + 230 +(1 row) + +CREATE INDEX enumidx ON enumtmp USING gist ( a ); +SET enable_seqscan=off; +SELECT count(*) FROM enumtmp WHERE a < 'g'::rainbow; + count +------- + 227 +(1 row) + +SELECT count(*) FROM enumtmp WHERE a <= 'g'::rainbow; + count +------- + 302 +(1 row) + +SELECT count(*) FROM enumtmp WHERE a = 'g'::rainbow; + count +------- + 75 +(1 row) + +SELECT count(*) FROM enumtmp WHERE a >= 'g'::rainbow; + count +------- + 305 +(1 row) + +SELECT count(*) FROM enumtmp WHERE a > 'g'::rainbow; + count +------- + 230 +(1 row) + +EXPLAIN (COSTS OFF) +SELECT count(*) FROM enumtmp WHERE a >= 'g'::rainbow; + QUERY PLAN +----------------------------------------------- + Aggregate + -> Bitmap Heap Scan on enumtmp + Recheck Cond: (a >= 'g'::rainbow) + -> Bitmap Index Scan on enumidx + Index Cond: (a >= 'g'::rainbow) +(5 rows) + diff --git a/contrib/btree_gist/sql/enum.sql b/contrib/btree_gist/sql/enum.sql new file mode 100644 index 0000000..476211e --- /dev/null +++ b/contrib/btree_gist/sql/enum.sql @@ -0,0 +1,38 @@ +-- enum check + +create type rainbow as enum ('r','o','y','g','b','i','v'); + +CREATE TABLE enumtmp (a rainbow); + +\copy enumtmp from 'data/enum.data' + +SET enable_seqscan=on; + +select a, count(*) from enumtmp group by a order by 1; + +SELECT count(*) FROM enumtmp WHERE a < 'g'::rainbow; + +SELECT count(*) FROM enumtmp WHERE a <= 'g'::rainbow; + +SELECT count(*) FROM enumtmp WHERE a = 'g'::rainbow; + +SELECT count(*) FROM enumtmp WHERE a >= 'g'::rainbow; + +SELECT count(*) FROM enumtmp WHERE a > 'g'::rainbow; + +CREATE INDEX enumidx ON enumtmp USING gist ( a ); + +SET enable_seqscan=off; + +SELECT count(*) FROM enumtmp WHERE a < 'g'::rainbow; + +SELECT count(*) FROM enumtmp WHERE a <= 'g'::rainbow; + +SELECT count(*) FROM enumtmp WHERE a = 'g'::rainbow; + +SELECT count(*) FROM enumtmp WHERE a >= 'g'::rainbow; + +SELECT count(*) FROM enumtmp WHERE a > 'g'::rainbow; + +EXPLAIN (COSTS OFF) +SELECT count(*) FROM enumtmp WHERE a >= 'g'::rainbow; diff --git a/doc/src/sgml/btree-gin.sgml b/doc/src/sgml/btree-gin.sgml index 2b081db..f407e92 100644 --- a/doc/src/sgml/btree-gin.sgml +++ b/doc/src/sgml/btree-gin.sgml @@ -16,7 +16,8 @@ time without time zone, date, interval, oid, money, "char", varchar, text, bytea, bit, - varbit, macaddr, inet, and cidr. + varbit, macaddr, inet, cidr, + and all enum types. diff --git a/doc/src/sgml/btree-gist.sgml b/doc/src/sgml/btree-gist.sgml index f4afc09..6db5ae3 100644 --- a/doc/src/sgml/btree-gist.sgml +++ b/doc/src/sgml/btree-gist.sgml @@ -16,7 +16,8 @@ time without time zone, date, interval, oid, money, char, varchar, text, bytea, bit, - varbit, macaddr, inet, and cidr. + varbit, macaddr, inet, cidr, + and all enum types. --------------090302080304070004090802 Content-Type: text/plain Content-Disposition: inline Content-Transfer-Encoding: 8bit MIME-Version: 1.0 -- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers --------------090302080304070004090802--