diff options
Diffstat (limited to 'contrib/btree_gist')
-rw-r--r-- | contrib/btree_gist/Makefile | 6 | ||||
-rw-r--r-- | contrib/btree_gist/btree_gist--1.7--1.8.sql | 87 | ||||
-rw-r--r-- | contrib/btree_gist/btree_gist.c | 27 | ||||
-rw-r--r-- | contrib/btree_gist/btree_gist.control | 2 | ||||
-rw-r--r-- | contrib/btree_gist/expected/stratnum.out | 13 | ||||
-rw-r--r-- | contrib/btree_gist/meson.build | 2 | ||||
-rw-r--r-- | contrib/btree_gist/sql/stratnum.sql | 3 |
7 files changed, 137 insertions, 3 deletions
diff --git a/contrib/btree_gist/Makefile b/contrib/btree_gist/Makefile index 073dcc745c4..9ab8548bc0e 100644 --- a/contrib/btree_gist/Makefile +++ b/contrib/btree_gist/Makefile @@ -33,12 +33,14 @@ EXTENSION = btree_gist DATA = btree_gist--1.0--1.1.sql \ btree_gist--1.1--1.2.sql btree_gist--1.2.sql btree_gist--1.2--1.3.sql \ btree_gist--1.3--1.4.sql btree_gist--1.4--1.5.sql \ - btree_gist--1.5--1.6.sql btree_gist--1.6--1.7.sql + btree_gist--1.5--1.6.sql btree_gist--1.6--1.7.sql \ + btree_gist--1.7--1.8.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 macaddr8 inet cidr text varchar char \ - bytea bit varbit numeric uuid not_equal enum bool partitions + bytea bit varbit numeric uuid not_equal enum bool partitions \ + stratnum SHLIB_LINK += $(filter -lm, $(LIBS)) diff --git a/contrib/btree_gist/btree_gist--1.7--1.8.sql b/contrib/btree_gist/btree_gist--1.7--1.8.sql new file mode 100644 index 00000000000..307bfe574b0 --- /dev/null +++ b/contrib/btree_gist/btree_gist--1.7--1.8.sql @@ -0,0 +1,87 @@ +/* contrib/btree_gist/btree_gist--1.7--1.8.sql */ + +-- complain if script is sourced in psql, rather than via CREATE EXTENSION +\echo Use "ALTER EXTENSION btree_gist UPDATE TO '1.8'" to load this file. \quit + +CREATE FUNCTION gist_stratnum_btree(smallint) +RETURNS smallint +AS 'MODULE_PATHNAME' +LANGUAGE C IMMUTABLE PARALLEL SAFE STRICT; + +ALTER OPERATOR FAMILY gist_oid_ops USING gist ADD + FUNCTION 12 (oid, oid) gist_stratnum_btree (int2) ; + +ALTER OPERATOR FAMILY gist_int2_ops USING gist ADD + FUNCTION 12 (int2, int2) gist_stratnum_btree (int2) ; + +ALTER OPERATOR FAMILY gist_int4_ops USING gist ADD + FUNCTION 12 (int4, int4) gist_stratnum_btree (int2) ; + +ALTER OPERATOR FAMILY gist_int8_ops USING gist ADD + FUNCTION 12 (int8, int8) gist_stratnum_btree (int2) ; + +ALTER OPERATOR FAMILY gist_float4_ops USING gist ADD + FUNCTION 12 (float4, float4) gist_stratnum_btree (int2) ; + +ALTER OPERATOR FAMILY gist_float8_ops USING gist ADD + FUNCTION 12 (float8, float8) gist_stratnum_btree (int2) ; + +ALTER OPERATOR FAMILY gist_timestamp_ops USING gist ADD + FUNCTION 12 (timestamp, timestamp) gist_stratnum_btree (int2) ; + +ALTER OPERATOR FAMILY gist_timestamptz_ops USING gist ADD + FUNCTION 12 (timestamptz, timestamptz) gist_stratnum_btree (int2) ; + +ALTER OPERATOR FAMILY gist_time_ops USING gist ADD + FUNCTION 12 (time, time) gist_stratnum_btree (int2) ; + +ALTER OPERATOR FAMILY gist_date_ops USING gist ADD + FUNCTION 12 (date, date) gist_stratnum_btree (int2) ; + +ALTER OPERATOR FAMILY gist_interval_ops USING gist ADD + FUNCTION 12 (interval, interval) gist_stratnum_btree (int2) ; + +ALTER OPERATOR FAMILY gist_cash_ops USING gist ADD + FUNCTION 12 (money, money) gist_stratnum_btree (int2) ; + +ALTER OPERATOR FAMILY gist_macaddr_ops USING gist ADD + FUNCTION 12 (macaddr, macaddr) gist_stratnum_btree (int2) ; + +ALTER OPERATOR FAMILY gist_text_ops USING gist ADD + FUNCTION 12 (text, text) gist_stratnum_btree (int2) ; + +ALTER OPERATOR FAMILY gist_bpchar_ops USING gist ADD + FUNCTION 12 (bpchar, bpchar) gist_stratnum_btree (int2) ; + +ALTER OPERATOR FAMILY gist_bytea_ops USING gist ADD + FUNCTION 12 (bytea, bytea) gist_stratnum_btree (int2) ; + +ALTER OPERATOR FAMILY gist_numeric_ops USING gist ADD + FUNCTION 12 (numeric, numeric) gist_stratnum_btree (int2) ; + +ALTER OPERATOR FAMILY gist_bit_ops USING gist ADD + FUNCTION 12 (bit, bit) gist_stratnum_btree (int2) ; + +ALTER OPERATOR FAMILY gist_vbit_ops USING gist ADD + FUNCTION 12 (varbit, varbit) gist_stratnum_btree (int2) ; + +ALTER OPERATOR FAMILY gist_inet_ops USING gist ADD + FUNCTION 12 (inet, inet) gist_stratnum_btree (int2) ; + +ALTER OPERATOR FAMILY gist_cidr_ops USING gist ADD + FUNCTION 12 (cidr, cidr) gist_stratnum_btree (int2) ; + +ALTER OPERATOR FAMILY gist_timetz_ops USING gist ADD + FUNCTION 12 (timetz, timetz) gist_stratnum_btree (int2) ; + +ALTER OPERATOR FAMILY gist_uuid_ops USING gist ADD + FUNCTION 12 (uuid, uuid) gist_stratnum_btree (int2) ; + +ALTER OPERATOR FAMILY gist_macaddr8_ops USING gist ADD + FUNCTION 12 (macaddr8, macaddr8) gist_stratnum_btree (int2) ; + +ALTER OPERATOR FAMILY gist_enum_ops USING gist ADD + FUNCTION 12 (anyenum, anyenum) gist_stratnum_btree (int2) ; + +ALTER OPERATOR FAMILY gist_bool_ops USING gist ADD + FUNCTION 12 (bool, bool) gist_stratnum_btree (int2) ; diff --git a/contrib/btree_gist/btree_gist.c b/contrib/btree_gist/btree_gist.c index 92520aedae1..5fd4cce27d0 100644 --- a/contrib/btree_gist/btree_gist.c +++ b/contrib/btree_gist/btree_gist.c @@ -3,6 +3,7 @@ */ #include "postgres.h" +#include "access/stratnum.h" #include "utils/builtins.h" PG_MODULE_MAGIC; @@ -10,6 +11,7 @@ PG_MODULE_MAGIC; PG_FUNCTION_INFO_V1(gbt_decompress); PG_FUNCTION_INFO_V1(gbtreekey_in); PG_FUNCTION_INFO_V1(gbtreekey_out); +PG_FUNCTION_INFO_V1(gist_stratnum_btree); /************************************************** * In/Out for keys @@ -51,3 +53,28 @@ gbt_decompress(PG_FUNCTION_ARGS) { PG_RETURN_POINTER(PG_GETARG_POINTER(0)); } + +/* + * Returns the btree number for supported operators, otherwise invalid. + */ +Datum +gist_stratnum_btree(PG_FUNCTION_ARGS) +{ + StrategyNumber strat = PG_GETARG_UINT16(0); + + switch (strat) + { + case RTEqualStrategyNumber: + PG_RETURN_UINT16(BTEqualStrategyNumber); + case RTLessStrategyNumber: + PG_RETURN_UINT16(BTLessStrategyNumber); + case RTLessEqualStrategyNumber: + PG_RETURN_UINT16(BTLessEqualStrategyNumber); + case RTGreaterStrategyNumber: + PG_RETURN_UINT16(BTGreaterStrategyNumber); + case RTGreaterEqualStrategyNumber: + PG_RETURN_UINT16(BTGreaterEqualStrategyNumber); + default: + PG_RETURN_UINT16(InvalidStrategy); + } +} diff --git a/contrib/btree_gist/btree_gist.control b/contrib/btree_gist/btree_gist.control index fa9171a80a2..abf66538f32 100644 --- a/contrib/btree_gist/btree_gist.control +++ b/contrib/btree_gist/btree_gist.control @@ -1,6 +1,6 @@ # btree_gist extension comment = 'support for indexing common datatypes in GiST' -default_version = '1.7' +default_version = '1.8' module_pathname = '$libdir/btree_gist' relocatable = true trusted = true diff --git a/contrib/btree_gist/expected/stratnum.out b/contrib/btree_gist/expected/stratnum.out new file mode 100644 index 00000000000..9d80c6590d9 --- /dev/null +++ b/contrib/btree_gist/expected/stratnum.out @@ -0,0 +1,13 @@ +-- test stratnum support func +SELECT gist_stratnum_btree(3::smallint); + gist_stratnum_btree +--------------------- + 0 +(1 row) + +SELECT gist_stratnum_btree(18::smallint); + gist_stratnum_btree +--------------------- + 3 +(1 row) + diff --git a/contrib/btree_gist/meson.build b/contrib/btree_gist/meson.build index c88a6ac84ae..a44ce905e59 100644 --- a/contrib/btree_gist/meson.build +++ b/contrib/btree_gist/meson.build @@ -50,6 +50,7 @@ install_data( 'btree_gist--1.4--1.5.sql', 'btree_gist--1.5--1.6.sql', 'btree_gist--1.6--1.7.sql', + 'btree_gist--1.7--1.8.sql', kwargs: contrib_data_args, ) @@ -89,6 +90,7 @@ tests += { 'enum', 'bool', 'partitions', + 'stratnum', ], }, } diff --git a/contrib/btree_gist/sql/stratnum.sql b/contrib/btree_gist/sql/stratnum.sql new file mode 100644 index 00000000000..f58cdbe93da --- /dev/null +++ b/contrib/btree_gist/sql/stratnum.sql @@ -0,0 +1,3 @@ +-- test stratnum support func +SELECT gist_stratnum_btree(3::smallint); +SELECT gist_stratnum_btree(18::smallint); |