aboutsummaryrefslogtreecommitdiff
path: root/contrib
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2008-04-14 17:05:34 +0000
committerTom Lane <tgl@sss.pgh.pa.us>2008-04-14 17:05:34 +0000
commit9b5c8d45f62bd3d243a40cc84deb93893f2f5122 (patch)
tree2d75607f7bdb96cfa1d73a3a36a4b3328118ff08 /contrib
parent10be77c173211a75718f50fe6061862f6a0cb4a2 (diff)
downloadpostgresql-9b5c8d45f62bd3d243a40cc84deb93893f2f5122.tar.gz
postgresql-9b5c8d45f62bd3d243a40cc84deb93893f2f5122.zip
Push index operator lossiness determination down to GIST/GIN opclass
"consistent" functions, and remove pg_amop.opreqcheck, as per recent discussion. The main immediate benefit of this is that we no longer need 8.3's ugly hack of requiring @@@ rather than @@ to test weight-using tsquery searches on GIN indexes. In future it should be possible to optimize some other queries better than is done now, by detecting at runtime whether the index match is exact or not. Tom Lane, after an idea of Heikki's, and with some help from Teodor.
Diffstat (limited to 'contrib')
-rw-r--r--contrib/btree_gist/btree_bit.c7
-rw-r--r--contrib/btree_gist/btree_bytea.c7
-rw-r--r--contrib/btree_gist/btree_cash.c7
-rw-r--r--contrib/btree_gist/btree_date.c7
-rw-r--r--contrib/btree_gist/btree_float4.c7
-rw-r--r--contrib/btree_gist/btree_float8.c8
-rw-r--r--contrib/btree_gist/btree_gist.sql.in116
-rw-r--r--contrib/btree_gist/btree_inet.c5
-rw-r--r--contrib/btree_gist/btree_int2.c7
-rw-r--r--contrib/btree_gist/btree_int4.c8
-rw-r--r--contrib/btree_gist/btree_int8.c7
-rw-r--r--contrib/btree_gist/btree_interval.c7
-rw-r--r--contrib/btree_gist/btree_macaddr.c8
-rw-r--r--contrib/btree_gist/btree_numeric.c8
-rw-r--r--contrib/btree_gist/btree_oid.c8
-rw-r--r--contrib/btree_gist/btree_text.c18
-rw-r--r--contrib/btree_gist/btree_time.c14
-rw-r--r--contrib/btree_gist/btree_ts.c14
-rw-r--r--contrib/btree_gist/uninstall_btree_gist.sql42
-rw-r--r--contrib/cube/cube.c7
-rw-r--r--contrib/cube/cube.sql.in6
-rw-r--r--contrib/cube/uninstall_cube.sql4
-rw-r--r--contrib/hstore/hstore.sql.in24
-rw-r--r--contrib/hstore/hstore_gin.c14
-rw-r--r--contrib/hstore/hstore_gist.c5
-rw-r--r--contrib/hstore/uninstall_hstore.sql6
-rw-r--r--contrib/intarray/_int.sql.in36
-rw-r--r--contrib/intarray/_int_gin.c44
-rw-r--r--contrib/intarray/_int_gist.c5
-rw-r--r--contrib/intarray/_intbig_gist.c5
-rw-r--r--contrib/intarray/uninstall__int.sql8
-rw-r--r--contrib/ltree/_ltree_gist.c7
-rw-r--r--contrib/ltree/ltree.sql.in26
-rw-r--r--contrib/ltree/ltree_gist.c11
-rw-r--r--contrib/ltree/uninstall_ltree.sql6
-rw-r--r--contrib/pg_trgm/pg_trgm.sql.in12
-rw-r--r--contrib/pg_trgm/trgm_gin.c7
-rw-r--r--contrib/pg_trgm/trgm_gist.c15
-rw-r--r--contrib/pg_trgm/uninstall_pg_trgm.sql6
-rw-r--r--contrib/seg/seg.c13
-rw-r--r--contrib/seg/seg.sql.in6
-rw-r--r--contrib/seg/uninstall_seg.sql4
-rw-r--r--contrib/tsearch2/tsearch2.sql.in16
43 files changed, 389 insertions, 209 deletions
diff --git a/contrib/btree_gist/btree_bit.c b/contrib/btree_gist/btree_bit.c
index 534c9af8131..d86034fd6ff 100644
--- a/contrib/btree_gist/btree_bit.c
+++ b/contrib/btree_gist/btree_bit.c
@@ -126,12 +126,17 @@ Datum
gbt_bit_consistent(PG_FUNCTION_ARGS)
{
GISTENTRY *entry = (GISTENTRY *) PG_GETARG_POINTER(0);
- GBT_VARKEY *key = (GBT_VARKEY *) DatumGetPointer(entry->key);
void *query = (void *) DatumGetByteaP(PG_GETARG_DATUM(1));
StrategyNumber strategy = (StrategyNumber) PG_GETARG_UINT16(2);
+ /* Oid subtype = PG_GETARG_OID(3); */
+ bool *recheck = (bool *) PG_GETARG_POINTER(4);
bool retval = FALSE;
+ GBT_VARKEY *key = (GBT_VARKEY *) DatumGetPointer(entry->key);
GBT_VARKEY_R r = gbt_var_key_readable(key);
+ /* All cases served by this function are exact */
+ *recheck = false;
+
if (GIST_LEAF(entry))
retval = gbt_var_consistent(&r, query, &strategy, TRUE, &tinfo);
else
diff --git a/contrib/btree_gist/btree_bytea.c b/contrib/btree_gist/btree_bytea.c
index d5345872d6e..02229653f48 100644
--- a/contrib/btree_gist/btree_bytea.c
+++ b/contrib/btree_gist/btree_bytea.c
@@ -96,12 +96,17 @@ Datum
gbt_bytea_consistent(PG_FUNCTION_ARGS)
{
GISTENTRY *entry = (GISTENTRY *) PG_GETARG_POINTER(0);
- GBT_VARKEY *key = (GBT_VARKEY *) DatumGetPointer(entry->key);
void *query = (void *) DatumGetByteaP(PG_GETARG_DATUM(1));
StrategyNumber strategy = (StrategyNumber) PG_GETARG_UINT16(2);
+ /* Oid subtype = PG_GETARG_OID(3); */
+ bool *recheck = (bool *) PG_GETARG_POINTER(4);
bool retval;
+ GBT_VARKEY *key = (GBT_VARKEY *) DatumGetPointer(entry->key);
GBT_VARKEY_R r = gbt_var_key_readable(key);
+ /* All cases served by this function are exact */
+ *recheck = false;
+
retval = gbt_var_consistent(&r, query, &strategy, GIST_LEAF(entry), &tinfo);
PG_RETURN_BOOL(retval);
}
diff --git a/contrib/btree_gist/btree_cash.c b/contrib/btree_gist/btree_cash.c
index 13f8200fb74..eb618754d9a 100644
--- a/contrib/btree_gist/btree_cash.c
+++ b/contrib/btree_gist/btree_cash.c
@@ -97,9 +97,14 @@ gbt_cash_consistent(PG_FUNCTION_ARGS)
{
GISTENTRY *entry = (GISTENTRY *) PG_GETARG_POINTER(0);
Cash query = (*((Cash *) PG_GETARG_POINTER(1)));
+ StrategyNumber strategy = (StrategyNumber) PG_GETARG_UINT16(2);
+ /* Oid subtype = PG_GETARG_OID(3); */
+ bool *recheck = (bool *) PG_GETARG_POINTER(4);
cashKEY *kkk = (cashKEY *) DatumGetPointer(entry->key);
GBT_NUMKEY_R key;
- StrategyNumber strategy = (StrategyNumber) PG_GETARG_UINT16(2);
+
+ /* All cases served by this function are exact */
+ *recheck = false;
key.lower = (GBT_NUMKEY *) & kkk->lower;
key.upper = (GBT_NUMKEY *) & kkk->upper;
diff --git a/contrib/btree_gist/btree_date.c b/contrib/btree_gist/btree_date.c
index b14888889dd..212ee2d3972 100644
--- a/contrib/btree_gist/btree_date.c
+++ b/contrib/btree_gist/btree_date.c
@@ -113,9 +113,14 @@ gbt_date_consistent(PG_FUNCTION_ARGS)
{
GISTENTRY *entry = (GISTENTRY *) PG_GETARG_POINTER(0);
DateADT query = PG_GETARG_DATEADT(1);
+ StrategyNumber strategy = (StrategyNumber) PG_GETARG_UINT16(2);
+ /* Oid subtype = PG_GETARG_OID(3); */
+ bool *recheck = (bool *) PG_GETARG_POINTER(4);
dateKEY *kkk = (dateKEY *) DatumGetPointer(entry->key);
GBT_NUMKEY_R key;
- StrategyNumber strategy = (StrategyNumber) PG_GETARG_UINT16(2);
+
+ /* All cases served by this function are exact */
+ *recheck = false;
key.lower = (GBT_NUMKEY *) & kkk->lower;
key.upper = (GBT_NUMKEY *) & kkk->upper;
diff --git a/contrib/btree_gist/btree_float4.c b/contrib/btree_gist/btree_float4.c
index a4c941f8359..1aab392b80d 100644
--- a/contrib/btree_gist/btree_float4.c
+++ b/contrib/btree_gist/btree_float4.c
@@ -96,9 +96,14 @@ gbt_float4_consistent(PG_FUNCTION_ARGS)
{
GISTENTRY *entry = (GISTENTRY *) PG_GETARG_POINTER(0);
float4 query = PG_GETARG_FLOAT4(1);
+ StrategyNumber strategy = (StrategyNumber) PG_GETARG_UINT16(2);
+ /* Oid subtype = PG_GETARG_OID(3); */
+ bool *recheck = (bool *) PG_GETARG_POINTER(4);
float4KEY *kkk = (float4KEY *) DatumGetPointer(entry->key);
GBT_NUMKEY_R key;
- StrategyNumber strategy = (StrategyNumber) PG_GETARG_UINT16(2);
+
+ /* All cases served by this function are exact */
+ *recheck = false;
key.lower = (GBT_NUMKEY *) & kkk->lower;
key.upper = (GBT_NUMKEY *) & kkk->upper;
diff --git a/contrib/btree_gist/btree_float8.c b/contrib/btree_gist/btree_float8.c
index 1b87b4ee1b2..3c804922cc1 100644
--- a/contrib/btree_gist/btree_float8.c
+++ b/contrib/btree_gist/btree_float8.c
@@ -95,12 +95,16 @@ gbt_float8_compress(PG_FUNCTION_ARGS)
Datum
gbt_float8_consistent(PG_FUNCTION_ARGS)
{
-
GISTENTRY *entry = (GISTENTRY *) PG_GETARG_POINTER(0);
float8 query = PG_GETARG_FLOAT8(1);
+ StrategyNumber strategy = (StrategyNumber) PG_GETARG_UINT16(2);
+ /* Oid subtype = PG_GETARG_OID(3); */
+ bool *recheck = (bool *) PG_GETARG_POINTER(4);
float8KEY *kkk = (float8KEY *) DatumGetPointer(entry->key);
GBT_NUMKEY_R key;
- StrategyNumber strategy = (StrategyNumber) PG_GETARG_UINT16(2);
+
+ /* All cases served by this function are exact */
+ *recheck = false;
key.lower = (GBT_NUMKEY *) & kkk->lower;
key.upper = (GBT_NUMKEY *) & kkk->upper;
diff --git a/contrib/btree_gist/btree_gist.sql.in b/contrib/btree_gist/btree_gist.sql.in
index 0dc7cb93297..f9007cb92c4 100644
--- a/contrib/btree_gist/btree_gist.sql.in
+++ b/contrib/btree_gist/btree_gist.sql.in
@@ -1,4 +1,4 @@
-/* $PostgreSQL: pgsql/contrib/btree_gist/btree_gist.sql.in,v 1.19 2007/11/13 04:24:27 momjian Exp $ */
+/* $PostgreSQL: pgsql/contrib/btree_gist/btree_gist.sql.in,v 1.20 2008/04/14 17:05:31 tgl Exp $ */
-- Adjust this setting to control where the objects get created.
SET search_path = public;
@@ -94,7 +94,7 @@ CREATE TYPE gbtreekey_var (
--
--
-- define the GiST support methods
-CREATE OR REPLACE FUNCTION gbt_oid_consistent(internal,oid,int2)
+CREATE OR REPLACE FUNCTION gbt_oid_consistent(internal,oid,int2,oid,internal)
RETURNS bool
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE;
@@ -143,7 +143,7 @@ AS
OPERATOR 3 = ,
OPERATOR 4 >= ,
OPERATOR 5 > ,
- FUNCTION 1 gbt_oid_consistent (internal, oid, int2),
+ FUNCTION 1 gbt_oid_consistent (internal, oid, int2, oid, internal),
FUNCTION 2 gbt_oid_union (bytea, internal),
FUNCTION 3 gbt_oid_compress (internal),
FUNCTION 4 gbt_decompress (internal),
@@ -161,7 +161,7 @@ AS
--
--
-- define the GiST support methods
-CREATE OR REPLACE FUNCTION gbt_int2_consistent(internal,int2,int2)
+CREATE OR REPLACE FUNCTION gbt_int2_consistent(internal,int2,int2,oid,internal)
RETURNS bool
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE;
@@ -200,7 +200,7 @@ AS
OPERATOR 3 = ,
OPERATOR 4 >= ,
OPERATOR 5 > ,
- FUNCTION 1 gbt_int2_consistent (internal, int2, int2),
+ FUNCTION 1 gbt_int2_consistent (internal, int2, int2, oid, internal),
FUNCTION 2 gbt_int2_union (bytea, internal),
FUNCTION 3 gbt_int2_compress (internal),
FUNCTION 4 gbt_decompress (internal),
@@ -217,7 +217,7 @@ AS
--
--
-- define the GiST support methods
-CREATE OR REPLACE FUNCTION gbt_int4_consistent(internal,int4,int2)
+CREATE OR REPLACE FUNCTION gbt_int4_consistent(internal,int4,int2,oid,internal)
RETURNS bool
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE;
@@ -256,7 +256,7 @@ AS
OPERATOR 3 = ,
OPERATOR 4 >= ,
OPERATOR 5 > ,
- FUNCTION 1 gbt_int4_consistent (internal, int4, int2),
+ FUNCTION 1 gbt_int4_consistent (internal, int4, int2, oid, internal),
FUNCTION 2 gbt_int4_union (bytea, internal),
FUNCTION 3 gbt_int4_compress (internal),
FUNCTION 4 gbt_decompress (internal),
@@ -273,7 +273,7 @@ AS
--
--
-- define the GiST support methods
-CREATE OR REPLACE FUNCTION gbt_int8_consistent(internal,int8,int2)
+CREATE OR REPLACE FUNCTION gbt_int8_consistent(internal,int8,int2,oid,internal)
RETURNS bool
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE;
@@ -312,7 +312,7 @@ AS
OPERATOR 3 = ,
OPERATOR 4 >= ,
OPERATOR 5 > ,
- FUNCTION 1 gbt_int8_consistent (internal, int8, int2),
+ FUNCTION 1 gbt_int8_consistent (internal, int8, int2, oid, internal),
FUNCTION 2 gbt_int8_union (bytea, internal),
FUNCTION 3 gbt_int8_compress (internal),
FUNCTION 4 gbt_decompress (internal),
@@ -330,7 +330,7 @@ AS
--
--
-- define the GiST support methods
-CREATE OR REPLACE FUNCTION gbt_float4_consistent(internal,float4,int2)
+CREATE OR REPLACE FUNCTION gbt_float4_consistent(internal,float4,int2,oid,internal)
RETURNS bool
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE;
@@ -369,7 +369,7 @@ AS
OPERATOR 3 = ,
OPERATOR 4 >= ,
OPERATOR 5 > ,
- FUNCTION 1 gbt_float4_consistent (internal, float4, int2),
+ FUNCTION 1 gbt_float4_consistent (internal, float4, int2, oid, internal),
FUNCTION 2 gbt_float4_union (bytea, internal),
FUNCTION 3 gbt_float4_compress (internal),
FUNCTION 4 gbt_decompress (internal),
@@ -389,7 +389,7 @@ AS
--
--
-- define the GiST support methods
-CREATE OR REPLACE FUNCTION gbt_float8_consistent(internal,float8,int2)
+CREATE OR REPLACE FUNCTION gbt_float8_consistent(internal,float8,int2,oid,internal)
RETURNS bool
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE;
@@ -428,7 +428,7 @@ AS
OPERATOR 3 = ,
OPERATOR 4 >= ,
OPERATOR 5 > ,
- FUNCTION 1 gbt_float8_consistent (internal, float8, int2),
+ FUNCTION 1 gbt_float8_consistent (internal, float8, int2, oid, internal),
FUNCTION 2 gbt_float8_union (bytea, internal),
FUNCTION 3 gbt_float8_compress (internal),
FUNCTION 4 gbt_decompress (internal),
@@ -446,12 +446,12 @@ AS
--
--
-CREATE OR REPLACE FUNCTION gbt_ts_consistent(internal,timestamp,int2)
+CREATE OR REPLACE FUNCTION gbt_ts_consistent(internal,timestamp,int2,oid,internal)
RETURNS bool
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE;
-CREATE OR REPLACE FUNCTION gbt_tstz_consistent(internal,timestamptz,int2)
+CREATE OR REPLACE FUNCTION gbt_tstz_consistent(internal,timestamptz,int2,oid,internal)
RETURNS bool
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE;
@@ -495,7 +495,7 @@ AS
OPERATOR 3 = ,
OPERATOR 4 >= ,
OPERATOR 5 > ,
- FUNCTION 1 gbt_ts_consistent (internal, timestamp, int2),
+ FUNCTION 1 gbt_ts_consistent (internal, timestamp, int2, oid, internal),
FUNCTION 2 gbt_ts_union (bytea, internal),
FUNCTION 3 gbt_ts_compress (internal),
FUNCTION 4 gbt_decompress (internal),
@@ -514,7 +514,7 @@ AS
OPERATOR 3 = ,
OPERATOR 4 >= ,
OPERATOR 5 > ,
- FUNCTION 1 gbt_tstz_consistent (internal, timestamptz, int2),
+ FUNCTION 1 gbt_tstz_consistent (internal, timestamptz, int2, oid, internal),
FUNCTION 2 gbt_ts_union (bytea, internal),
FUNCTION 3 gbt_tstz_compress (internal),
FUNCTION 4 gbt_decompress (internal),
@@ -532,12 +532,12 @@ AS
--
--
-CREATE OR REPLACE FUNCTION gbt_time_consistent(internal,time,int2)
+CREATE OR REPLACE FUNCTION gbt_time_consistent(internal,time,int2,oid,internal)
RETURNS bool
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE;
-CREATE OR REPLACE FUNCTION gbt_timetz_consistent(internal,timetz,int2)
+CREATE OR REPLACE FUNCTION gbt_timetz_consistent(internal,timetz,int2,oid,internal)
RETURNS bool
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE;
@@ -581,7 +581,7 @@ AS
OPERATOR 3 = ,
OPERATOR 4 >= ,
OPERATOR 5 > ,
- FUNCTION 1 gbt_time_consistent (internal, time, int2),
+ FUNCTION 1 gbt_time_consistent (internal, time, int2, oid, internal),
FUNCTION 2 gbt_time_union (bytea, internal),
FUNCTION 3 gbt_time_compress (internal),
FUNCTION 4 gbt_decompress (internal),
@@ -593,12 +593,12 @@ AS
CREATE OPERATOR CLASS gist_timetz_ops
DEFAULT FOR TYPE timetz USING gist
AS
- OPERATOR 1 < RECHECK ,
- OPERATOR 2 <= RECHECK ,
- OPERATOR 3 = RECHECK ,
- OPERATOR 4 >= RECHECK ,
- OPERATOR 5 > RECHECK ,
- FUNCTION 1 gbt_timetz_consistent (internal, timetz, int2),
+ 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 (bytea, internal),
FUNCTION 3 gbt_timetz_compress (internal),
FUNCTION 4 gbt_decompress (internal),
@@ -616,7 +616,7 @@ AS
--
--
-CREATE OR REPLACE FUNCTION gbt_date_consistent(internal,date,int2)
+CREATE OR REPLACE FUNCTION gbt_date_consistent(internal,date,int2,oid,internal)
RETURNS bool
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE;
@@ -655,7 +655,7 @@ AS
OPERATOR 3 = ,
OPERATOR 4 >= ,
OPERATOR 5 > ,
- FUNCTION 1 gbt_date_consistent (internal, date, int2),
+ FUNCTION 1 gbt_date_consistent (internal, date, int2, oid, internal),
FUNCTION 2 gbt_date_union (bytea, internal),
FUNCTION 3 gbt_date_compress (internal),
FUNCTION 4 gbt_decompress (internal),
@@ -673,7 +673,7 @@ AS
--
--
-CREATE OR REPLACE FUNCTION gbt_intv_consistent(internal,interval,int2)
+CREATE OR REPLACE FUNCTION gbt_intv_consistent(internal,interval,int2,oid,internal)
RETURNS bool
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE;
@@ -717,7 +717,7 @@ AS
OPERATOR 3 = ,
OPERATOR 4 >= ,
OPERATOR 5 > ,
- FUNCTION 1 gbt_intv_consistent (internal, interval, int2),
+ FUNCTION 1 gbt_intv_consistent (internal, interval, int2, oid, internal),
FUNCTION 2 gbt_intv_union (bytea, internal),
FUNCTION 3 gbt_intv_compress (internal),
FUNCTION 4 gbt_intv_decompress (internal),
@@ -734,7 +734,7 @@ AS
--
--
-- define the GiST support methods
-CREATE OR REPLACE FUNCTION gbt_cash_consistent(internal,money,int2)
+CREATE OR REPLACE FUNCTION gbt_cash_consistent(internal,money,int2,oid,internal)
RETURNS bool
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE;
@@ -773,7 +773,7 @@ AS
OPERATOR 3 = ,
OPERATOR 4 >= ,
OPERATOR 5 > ,
- FUNCTION 1 gbt_cash_consistent (internal, money, int2),
+ FUNCTION 1 gbt_cash_consistent (internal, money, int2, oid, internal),
FUNCTION 2 gbt_cash_union (bytea, internal),
FUNCTION 3 gbt_cash_compress (internal),
FUNCTION 4 gbt_decompress (internal),
@@ -790,7 +790,7 @@ AS
--
--
-- define the GiST support methods
-CREATE OR REPLACE FUNCTION gbt_macad_consistent(internal,macaddr,int2)
+CREATE OR REPLACE FUNCTION gbt_macad_consistent(internal,macaddr,int2,oid,internal)
RETURNS bool
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE;
@@ -829,7 +829,7 @@ AS
OPERATOR 3 = ,
OPERATOR 4 >= ,
OPERATOR 5 > ,
- FUNCTION 1 gbt_macad_consistent (internal, macaddr, int2),
+ FUNCTION 1 gbt_macad_consistent (internal, macaddr, int2, oid, internal),
FUNCTION 2 gbt_macad_union (bytea, internal),
FUNCTION 3 gbt_macad_compress (internal),
FUNCTION 4 gbt_decompress (internal),
@@ -848,12 +848,12 @@ AS
--
--
-- define the GiST support methods
-CREATE OR REPLACE FUNCTION gbt_text_consistent(internal,text,int2)
+CREATE OR REPLACE FUNCTION gbt_text_consistent(internal,text,int2,oid,internal)
RETURNS bool
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE;
-CREATE OR REPLACE FUNCTION gbt_bpchar_consistent(internal,bpchar,int2)
+CREATE OR REPLACE FUNCTION gbt_bpchar_consistent(internal,bpchar,int2,oid,internal)
RETURNS bool
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE;
@@ -897,7 +897,7 @@ AS
OPERATOR 3 = ,
OPERATOR 4 >= ,
OPERATOR 5 > ,
- FUNCTION 1 gbt_text_consistent (internal, text, int2),
+ FUNCTION 1 gbt_text_consistent (internal, text, int2, oid, internal),
FUNCTION 2 gbt_text_union (bytea, internal),
FUNCTION 3 gbt_text_compress (internal),
FUNCTION 4 gbt_var_decompress (internal),
@@ -916,7 +916,7 @@ AS
OPERATOR 3 = ,
OPERATOR 4 >= ,
OPERATOR 5 > ,
- FUNCTION 1 gbt_bpchar_consistent (internal, bpchar , int2),
+ FUNCTION 1 gbt_bpchar_consistent (internal, bpchar , int2, oid, internal),
FUNCTION 2 gbt_text_union (bytea, internal),
FUNCTION 3 gbt_bpchar_compress (internal),
FUNCTION 4 gbt_var_decompress (internal),
@@ -934,7 +934,7 @@ AS
--
--
-- define the GiST support methods
-CREATE OR REPLACE FUNCTION gbt_bytea_consistent(internal,bytea,int2)
+CREATE OR REPLACE FUNCTION gbt_bytea_consistent(internal,bytea,int2,oid,internal)
RETURNS bool
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE;
@@ -973,7 +973,7 @@ AS
OPERATOR 3 = ,
OPERATOR 4 >= ,
OPERATOR 5 > ,
- FUNCTION 1 gbt_bytea_consistent (internal, bytea, int2),
+ FUNCTION 1 gbt_bytea_consistent (internal, bytea, int2, oid, internal),
FUNCTION 2 gbt_bytea_union (bytea, internal),
FUNCTION 3 gbt_bytea_compress (internal),
FUNCTION 4 gbt_var_decompress (internal),
@@ -991,7 +991,7 @@ AS
--
--
-- define the GiST support methods
-CREATE OR REPLACE FUNCTION gbt_numeric_consistent(internal,numeric,int2)
+CREATE OR REPLACE FUNCTION gbt_numeric_consistent(internal,numeric,int2,oid,internal)
RETURNS bool
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE;
@@ -1030,7 +1030,7 @@ AS
OPERATOR 3 = ,
OPERATOR 4 >= ,
OPERATOR 5 > ,
- FUNCTION 1 gbt_numeric_consistent (internal, numeric, int2),
+ FUNCTION 1 gbt_numeric_consistent (internal, numeric, int2, oid, internal),
FUNCTION 2 gbt_numeric_union (bytea, internal),
FUNCTION 3 gbt_numeric_compress (internal),
FUNCTION 4 gbt_var_decompress (internal),
@@ -1046,7 +1046,7 @@ AS
--
--
-- define the GiST support methods
-CREATE OR REPLACE FUNCTION gbt_bit_consistent(internal,bit,int2)
+CREATE OR REPLACE FUNCTION gbt_bit_consistent(internal,bit,int2,oid,internal)
RETURNS bool
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE;
@@ -1085,7 +1085,7 @@ AS
OPERATOR 3 = ,
OPERATOR 4 >= ,
OPERATOR 5 > ,
- FUNCTION 1 gbt_bit_consistent (internal, bit, int2),
+ FUNCTION 1 gbt_bit_consistent (internal, bit, int2, oid, internal),
FUNCTION 2 gbt_bit_union (bytea, internal),
FUNCTION 3 gbt_bit_compress (internal),
FUNCTION 4 gbt_var_decompress (internal),
@@ -1104,7 +1104,7 @@ AS
OPERATOR 3 = ,
OPERATOR 4 >= ,
OPERATOR 5 > ,
- FUNCTION 1 gbt_bit_consistent (internal, bit, int2),
+ FUNCTION 1 gbt_bit_consistent (internal, bit, int2, oid, internal),
FUNCTION 2 gbt_bit_union (bytea, internal),
FUNCTION 3 gbt_bit_compress (internal),
FUNCTION 4 gbt_var_decompress (internal),
@@ -1123,7 +1123,7 @@ AS
--
--
-- define the GiST support methods
-CREATE OR REPLACE FUNCTION gbt_inet_consistent(internal,inet,int2)
+CREATE OR REPLACE FUNCTION gbt_inet_consistent(internal,inet,int2,oid,internal)
RETURNS bool
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE;
@@ -1157,12 +1157,12 @@ LANGUAGE C IMMUTABLE;
CREATE OPERATOR CLASS gist_inet_ops
DEFAULT FOR TYPE inet USING gist
AS
- OPERATOR 1 < RECHECK ,
- OPERATOR 2 <= RECHECK ,
- OPERATOR 3 = RECHECK ,
- OPERATOR 4 >= RECHECK ,
- OPERATOR 5 > RECHECK ,
- FUNCTION 1 gbt_inet_consistent (internal, inet, int2),
+ 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 (bytea, internal),
FUNCTION 3 gbt_inet_compress (internal),
FUNCTION 4 gbt_decompress (internal),
@@ -1175,12 +1175,12 @@ AS
CREATE OPERATOR CLASS gist_cidr_ops
DEFAULT FOR TYPE cidr USING gist
AS
- OPERATOR 1 < (inet, inet) RECHECK ,
- OPERATOR 2 <= (inet, inet) RECHECK ,
- OPERATOR 3 = (inet, inet) RECHECK ,
- OPERATOR 4 >= (inet, inet) RECHECK ,
- OPERATOR 5 > (inet, inet) RECHECK ,
- FUNCTION 1 gbt_inet_consistent (internal, inet, int2),
+ 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 (bytea, internal),
FUNCTION 3 gbt_inet_compress (internal),
FUNCTION 4 gbt_decompress (internal),
diff --git a/contrib/btree_gist/btree_inet.c b/contrib/btree_gist/btree_inet.c
index 914f4f6d5ef..b54e1c112f7 100644
--- a/contrib/btree_gist/btree_inet.c
+++ b/contrib/btree_gist/btree_inet.c
@@ -115,9 +115,14 @@ gbt_inet_consistent(PG_FUNCTION_ARGS)
GISTENTRY *entry = (GISTENTRY *) PG_GETARG_POINTER(0);
double query = convert_network_to_scalar(PG_GETARG_DATUM(1), INETOID);
StrategyNumber strategy = (StrategyNumber) PG_GETARG_UINT16(2);
+ /* Oid subtype = PG_GETARG_OID(3); */
+ bool *recheck = (bool *) PG_GETARG_POINTER(4);
inetKEY *kkk = (inetKEY *) DatumGetPointer(entry->key);
GBT_NUMKEY_R key;
+ /* All cases served by this function are inexact */
+ *recheck = true;
+
key.lower = (GBT_NUMKEY *) & kkk->lower;
key.upper = (GBT_NUMKEY *) & kkk->upper;
diff --git a/contrib/btree_gist/btree_int2.c b/contrib/btree_gist/btree_int2.c
index 5e2a66526e5..b129130c2c4 100644
--- a/contrib/btree_gist/btree_int2.c
+++ b/contrib/btree_gist/btree_int2.c
@@ -100,9 +100,14 @@ gbt_int2_consistent(PG_FUNCTION_ARGS)
{
GISTENTRY *entry = (GISTENTRY *) PG_GETARG_POINTER(0);
int16 query = PG_GETARG_INT16(1);
+ StrategyNumber strategy = (StrategyNumber) PG_GETARG_UINT16(2);
+ /* Oid subtype = PG_GETARG_OID(3); */
+ bool *recheck = (bool *) PG_GETARG_POINTER(4);
int16KEY *kkk = (int16KEY *) DatumGetPointer(entry->key);
GBT_NUMKEY_R key;
- StrategyNumber strategy = (StrategyNumber) PG_GETARG_UINT16(2);
+
+ /* All cases served by this function are exact */
+ *recheck = false;
key.lower = (GBT_NUMKEY *) & kkk->lower;
key.upper = (GBT_NUMKEY *) & kkk->upper;
diff --git a/contrib/btree_gist/btree_int4.c b/contrib/btree_gist/btree_int4.c
index 6a69b85bdd9..c07c9a1e2c2 100644
--- a/contrib/btree_gist/btree_int4.c
+++ b/contrib/btree_gist/btree_int4.c
@@ -95,12 +95,16 @@ gbt_int4_compress(PG_FUNCTION_ARGS)
Datum
gbt_int4_consistent(PG_FUNCTION_ARGS)
{
-
GISTENTRY *entry = (GISTENTRY *) PG_GETARG_POINTER(0);
int32 query = PG_GETARG_INT32(1);
+ StrategyNumber strategy = (StrategyNumber) PG_GETARG_UINT16(2);
+ /* Oid subtype = PG_GETARG_OID(3); */
+ bool *recheck = (bool *) PG_GETARG_POINTER(4);
int32KEY *kkk = (int32KEY *) DatumGetPointer(entry->key);
GBT_NUMKEY_R key;
- StrategyNumber strategy = (StrategyNumber) PG_GETARG_UINT16(2);
+
+ /* All cases served by this function are exact */
+ *recheck = false;
key.lower = (GBT_NUMKEY *) & kkk->lower;
key.upper = (GBT_NUMKEY *) & kkk->upper;
diff --git a/contrib/btree_gist/btree_int8.c b/contrib/btree_gist/btree_int8.c
index 83275f2c7a7..3466e1c1156 100644
--- a/contrib/btree_gist/btree_int8.c
+++ b/contrib/btree_gist/btree_int8.c
@@ -97,9 +97,14 @@ gbt_int8_consistent(PG_FUNCTION_ARGS)
{
GISTENTRY *entry = (GISTENTRY *) PG_GETARG_POINTER(0);
int64 query = PG_GETARG_INT64(1);
+ StrategyNumber strategy = (StrategyNumber) PG_GETARG_UINT16(2);
+ /* Oid subtype = PG_GETARG_OID(3); */
+ bool *recheck = (bool *) PG_GETARG_POINTER(4);
int64KEY *kkk = (int64KEY *) DatumGetPointer(entry->key);
GBT_NUMKEY_R key;
- StrategyNumber strategy = (StrategyNumber) PG_GETARG_UINT16(2);
+
+ /* All cases served by this function are exact */
+ *recheck = false;
key.lower = (GBT_NUMKEY *) & kkk->lower;
key.upper = (GBT_NUMKEY *) & kkk->upper;
diff --git a/contrib/btree_gist/btree_interval.c b/contrib/btree_gist/btree_interval.c
index 09c6be5487a..232ba20531f 100644
--- a/contrib/btree_gist/btree_interval.c
+++ b/contrib/btree_gist/btree_interval.c
@@ -165,9 +165,14 @@ gbt_intv_consistent(PG_FUNCTION_ARGS)
{
GISTENTRY *entry = (GISTENTRY *) PG_GETARG_POINTER(0);
Interval *query = PG_GETARG_INTERVAL_P(1);
+ StrategyNumber strategy = (StrategyNumber) PG_GETARG_UINT16(2);
+ /* Oid subtype = PG_GETARG_OID(3); */
+ bool *recheck = (bool *) PG_GETARG_POINTER(4);
intvKEY *kkk = (intvKEY *) DatumGetPointer(entry->key);
GBT_NUMKEY_R key;
- StrategyNumber strategy = (StrategyNumber) PG_GETARG_UINT16(2);
+
+ /* All cases served by this function are exact */
+ *recheck = false;
key.lower = (GBT_NUMKEY *) & kkk->lower;
key.upper = (GBT_NUMKEY *) & kkk->upper;
diff --git a/contrib/btree_gist/btree_macaddr.c b/contrib/btree_gist/btree_macaddr.c
index 52cf4cb1d48..5bdc9eb3bd0 100644
--- a/contrib/btree_gist/btree_macaddr.c
+++ b/contrib/btree_gist/btree_macaddr.c
@@ -116,12 +116,16 @@ gbt_macad_compress(PG_FUNCTION_ARGS)
Datum
gbt_macad_consistent(PG_FUNCTION_ARGS)
{
-
GISTENTRY *entry = (GISTENTRY *) PG_GETARG_POINTER(0);
macaddr *query = (macaddr *) PG_GETARG_POINTER(1);
+ StrategyNumber strategy = (StrategyNumber) PG_GETARG_UINT16(2);
+ /* Oid subtype = PG_GETARG_OID(3); */
+ bool *recheck = (bool *) PG_GETARG_POINTER(4);
macKEY *kkk = (macKEY *) DatumGetPointer(entry->key);
GBT_NUMKEY_R key;
- StrategyNumber strategy = (StrategyNumber) PG_GETARG_UINT16(2);
+
+ /* All cases served by this function are exact */
+ *recheck = false;
key.lower = (GBT_NUMKEY *) & kkk->lower;
key.upper = (GBT_NUMKEY *) & kkk->upper;
diff --git a/contrib/btree_gist/btree_numeric.c b/contrib/btree_gist/btree_numeric.c
index 639b575cb3f..a1fcf602c0e 100644
--- a/contrib/btree_gist/btree_numeric.c
+++ b/contrib/btree_gist/btree_numeric.c
@@ -99,14 +99,18 @@ gbt_numeric_compress(PG_FUNCTION_ARGS)
Datum
gbt_numeric_consistent(PG_FUNCTION_ARGS)
{
-
GISTENTRY *entry = (GISTENTRY *) PG_GETARG_POINTER(0);
- GBT_VARKEY *key = (GBT_VARKEY *) DatumGetPointer(entry->key);
void *query = (void *) DatumGetNumeric(PG_GETARG_DATUM(1));
StrategyNumber strategy = (StrategyNumber) PG_GETARG_UINT16(2);
+ /* Oid subtype = PG_GETARG_OID(3); */
+ bool *recheck = (bool *) PG_GETARG_POINTER(4);
bool retval;
+ GBT_VARKEY *key = (GBT_VARKEY *) DatumGetPointer(entry->key);
GBT_VARKEY_R r = gbt_var_key_readable(key);
+ /* All cases served by this function are exact */
+ *recheck = false;
+
retval = gbt_var_consistent(&r, query, &strategy, GIST_LEAF(entry), &tinfo);
PG_RETURN_BOOL(retval);
}
diff --git a/contrib/btree_gist/btree_oid.c b/contrib/btree_gist/btree_oid.c
index 979d728a73d..119035cad60 100644
--- a/contrib/btree_gist/btree_oid.c
+++ b/contrib/btree_gist/btree_oid.c
@@ -95,12 +95,16 @@ gbt_oid_compress(PG_FUNCTION_ARGS)
Datum
gbt_oid_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;
- StrategyNumber strategy = (StrategyNumber) PG_GETARG_UINT16(2);
+
+ /* All cases served by this function are exact */
+ *recheck = false;
key.lower = (GBT_NUMKEY *) & kkk->lower;
key.upper = (GBT_NUMKEY *) & kkk->upper;
diff --git a/contrib/btree_gist/btree_text.c b/contrib/btree_gist/btree_text.c
index fa4eb904f50..7951d055d3d 100644
--- a/contrib/btree_gist/btree_text.c
+++ b/contrib/btree_gist/btree_text.c
@@ -130,12 +130,17 @@ Datum
gbt_text_consistent(PG_FUNCTION_ARGS)
{
GISTENTRY *entry = (GISTENTRY *) PG_GETARG_POINTER(0);
- GBT_VARKEY *key = (GBT_VARKEY *) DatumGetPointer(entry->key);
void *query = (void *) DatumGetTextP(PG_GETARG_DATUM(1));
StrategyNumber strategy = (StrategyNumber) PG_GETARG_UINT16(2);
- bool retval = FALSE;
+ /* Oid subtype = PG_GETARG_OID(3); */
+ bool *recheck = (bool *) PG_GETARG_POINTER(4);
+ bool retval;
+ GBT_VARKEY *key = (GBT_VARKEY *) DatumGetPointer(entry->key);
GBT_VARKEY_R r = gbt_var_key_readable(key);
+ /* All cases served by this function are exact */
+ *recheck = false;
+
if (tinfo.eml == 0)
{
tinfo.eml = pg_database_encoding_max_length();
@@ -151,12 +156,17 @@ Datum
gbt_bpchar_consistent(PG_FUNCTION_ARGS)
{
GISTENTRY *entry = (GISTENTRY *) PG_GETARG_POINTER(0);
- GBT_VARKEY *key = (GBT_VARKEY *) DatumGetPointer(entry->key);
void *query = (void *) DatumGetPointer(PG_DETOAST_DATUM(PG_GETARG_DATUM(1)));
- void *trim = (void *) DatumGetPointer(DirectFunctionCall1(rtrim1, PointerGetDatum(query)));
StrategyNumber strategy = (StrategyNumber) PG_GETARG_UINT16(2);
+ /* Oid subtype = PG_GETARG_OID(3); */
+ bool *recheck = (bool *) PG_GETARG_POINTER(4);
bool retval;
+ GBT_VARKEY *key = (GBT_VARKEY *) DatumGetPointer(entry->key);
GBT_VARKEY_R r = gbt_var_key_readable(key);
+ void *trim = (void *) DatumGetPointer(DirectFunctionCall1(rtrim1, PointerGetDatum(query)));
+
+ /* All cases served by this function are exact */
+ *recheck = false;
if (tinfo.eml == 0)
{
diff --git a/contrib/btree_gist/btree_time.c b/contrib/btree_gist/btree_time.c
index fd5e63e2bbc..6c1ec80a314 100644
--- a/contrib/btree_gist/btree_time.c
+++ b/contrib/btree_gist/btree_time.c
@@ -151,14 +151,18 @@ gbt_time_consistent(PG_FUNCTION_ARGS)
{
GISTENTRY *entry = (GISTENTRY *) PG_GETARG_POINTER(0);
TimeADT query = PG_GETARG_TIMEADT(1);
+ StrategyNumber strategy = (StrategyNumber) PG_GETARG_UINT16(2);
+ /* Oid subtype = PG_GETARG_OID(3); */
+ bool *recheck = (bool *) PG_GETARG_POINTER(4);
timeKEY *kkk = (timeKEY *) DatumGetPointer(entry->key);
GBT_NUMKEY_R key;
- StrategyNumber strategy = (StrategyNumber) PG_GETARG_UINT16(2);
+
+ /* 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)
);
@@ -170,11 +174,15 @@ gbt_timetz_consistent(PG_FUNCTION_ARGS)
GISTENTRY *entry = (GISTENTRY *) PG_GETARG_POINTER(0);
TimeTzADT *query = PG_GETARG_TIMETZADT_P(1);
StrategyNumber strategy = (StrategyNumber) PG_GETARG_UINT16(2);
-
+ /* Oid subtype = PG_GETARG_OID(3); */
+ bool *recheck = (bool *) PG_GETARG_POINTER(4);
timeKEY *kkk = (timeKEY *) DatumGetPointer(entry->key);
TimeADT qqq;
GBT_NUMKEY_R key;
+ /* All cases served by this function are inexact */
+ *recheck = true;
+
#ifdef HAVE_INT64_TIMESTAMP
qqq = query->time + (query->zone * INT64CONST(1000000));
#else
diff --git a/contrib/btree_gist/btree_ts.c b/contrib/btree_gist/btree_ts.c
index 9a7d6505279..606a986a70d 100644
--- a/contrib/btree_gist/btree_ts.c
+++ b/contrib/btree_gist/btree_ts.c
@@ -173,9 +173,14 @@ gbt_ts_consistent(PG_FUNCTION_ARGS)
{
GISTENTRY *entry = (GISTENTRY *) PG_GETARG_POINTER(0);
Timestamp *query = (Timestamp *) PG_GETARG_POINTER(1);
+ StrategyNumber strategy = (StrategyNumber) PG_GETARG_UINT16(2);
+ /* Oid subtype = PG_GETARG_OID(3); */
+ bool *recheck = (bool *) PG_GETARG_POINTER(4);
tsKEY *kkk = (tsKEY *) DatumGetPointer(entry->key);
GBT_NUMKEY_R key;
- StrategyNumber strategy = (StrategyNumber) PG_GETARG_UINT16(2);
+
+ /* All cases served by this function are exact */
+ *recheck = false;
key.lower = (GBT_NUMKEY *) & kkk->lower;
key.upper = (GBT_NUMKEY *) & kkk->upper;
@@ -190,11 +195,16 @@ gbt_tstz_consistent(PG_FUNCTION_ARGS)
{
GISTENTRY *entry = (GISTENTRY *) PG_GETARG_POINTER(0);
TimestampTz *query = (Timestamp *) PG_GETARG_POINTER(1);
+ StrategyNumber strategy = (StrategyNumber) PG_GETARG_UINT16(2);
+ /* Oid subtype = PG_GETARG_OID(3); */
+ bool *recheck = (bool *) PG_GETARG_POINTER(4);
char *kkk = (char *) DatumGetPointer(entry->key);
GBT_NUMKEY_R key;
- StrategyNumber strategy = (StrategyNumber) PG_GETARG_UINT16(2);
Timestamp qqq;
+ /* All cases served by this function are exact */
+ *recheck = false;
+
key.lower = (GBT_NUMKEY *) & kkk[0];
key.upper = (GBT_NUMKEY *) & kkk[MAXALIGN(tinfo.size)];
tstz_to_ts_gmt(&qqq, query);
diff --git a/contrib/btree_gist/uninstall_btree_gist.sql b/contrib/btree_gist/uninstall_btree_gist.sql
index aee0edd4026..9e71819e1aa 100644
--- a/contrib/btree_gist/uninstall_btree_gist.sql
+++ b/contrib/btree_gist/uninstall_btree_gist.sql
@@ -1,4 +1,4 @@
-/* $PostgreSQL: pgsql/contrib/btree_gist/uninstall_btree_gist.sql,v 1.4 2007/11/13 04:24:27 momjian Exp $ */
+/* $PostgreSQL: pgsql/contrib/btree_gist/uninstall_btree_gist.sql,v 1.5 2008/04/14 17:05:32 tgl Exp $ */
-- Adjust this setting to control where the objects get dropped.
SET search_path = public;
@@ -17,7 +17,7 @@ DROP FUNCTION gbt_inet_penalty(internal,internal,internal);
DROP FUNCTION gbt_inet_compress(internal);
-DROP FUNCTION gbt_inet_consistent(internal,inet,int2);
+DROP FUNCTION gbt_inet_consistent(internal,inet,int2,oid,internal);
DROP OPERATOR CLASS gist_vbit_ops USING gist;
@@ -33,7 +33,7 @@ DROP FUNCTION gbt_bit_penalty(internal,internal,internal);
DROP FUNCTION gbt_bit_compress(internal);
-DROP FUNCTION gbt_bit_consistent(internal,bit,int2);
+DROP FUNCTION gbt_bit_consistent(internal,bit,int2,oid,internal);
DROP OPERATOR CLASS gist_numeric_ops USING gist;
@@ -47,7 +47,7 @@ DROP FUNCTION gbt_numeric_penalty(internal,internal,internal);
DROP FUNCTION gbt_numeric_compress(internal);
-DROP FUNCTION gbt_numeric_consistent(internal,numeric,int2);
+DROP FUNCTION gbt_numeric_consistent(internal,numeric,int2,oid,internal);
DROP OPERATOR CLASS gist_bytea_ops USING gist;
@@ -61,7 +61,7 @@ DROP FUNCTION gbt_bytea_penalty(internal,internal,internal);
DROP FUNCTION gbt_bytea_compress(internal);
-DROP FUNCTION gbt_bytea_consistent(internal,bytea,int2);
+DROP FUNCTION gbt_bytea_consistent(internal,bytea,int2,oid,internal);
DROP OPERATOR CLASS gist_bpchar_ops USING gist;
@@ -79,9 +79,9 @@ DROP FUNCTION gbt_bpchar_compress(internal);
DROP FUNCTION gbt_text_compress(internal);
-DROP FUNCTION gbt_bpchar_consistent(internal,bpchar,int2);
+DROP FUNCTION gbt_bpchar_consistent(internal,bpchar,int2,oid,internal);
-DROP FUNCTION gbt_text_consistent(internal,text,int2);
+DROP FUNCTION gbt_text_consistent(internal,text,int2,oid,internal);
DROP OPERATOR CLASS gist_macaddr_ops USING gist;
@@ -95,7 +95,7 @@ DROP FUNCTION gbt_macad_penalty(internal,internal,internal);
DROP FUNCTION gbt_macad_compress(internal);
-DROP FUNCTION gbt_macad_consistent(internal,macaddr,int2);
+DROP FUNCTION gbt_macad_consistent(internal,macaddr,int2,oid,internal);
DROP OPERATOR CLASS gist_cash_ops USING gist;
@@ -109,7 +109,7 @@ DROP FUNCTION gbt_cash_penalty(internal,internal,internal);
DROP FUNCTION gbt_cash_compress(internal);
-DROP FUNCTION gbt_cash_consistent(internal,money,int2);
+DROP FUNCTION gbt_cash_consistent(internal,money,int2,oid,internal);
DROP OPERATOR CLASS gist_interval_ops USING gist;
@@ -125,7 +125,7 @@ DROP FUNCTION gbt_intv_decompress(internal);
DROP FUNCTION gbt_intv_compress(internal);
-DROP FUNCTION gbt_intv_consistent(internal,interval,int2);
+DROP FUNCTION gbt_intv_consistent(internal,interval,int2,oid,internal);
DROP OPERATOR CLASS gist_date_ops USING gist;
@@ -139,7 +139,7 @@ DROP FUNCTION gbt_date_penalty(internal,internal,internal);
DROP FUNCTION gbt_date_compress(internal);
-DROP FUNCTION gbt_date_consistent(internal,date,int2);
+DROP FUNCTION gbt_date_consistent(internal,date,int2,oid,internal);
DROP OPERATOR CLASS gist_timetz_ops USING gist;
@@ -157,9 +157,9 @@ DROP FUNCTION gbt_timetz_compress(internal);
DROP FUNCTION gbt_time_compress(internal);
-DROP FUNCTION gbt_timetz_consistent(internal,timetz,int2);
+DROP FUNCTION gbt_timetz_consistent(internal,timetz,int2,oid,internal);
-DROP FUNCTION gbt_time_consistent(internal,time,int2);
+DROP FUNCTION gbt_time_consistent(internal,time,int2,oid,internal);
DROP OPERATOR CLASS gist_timestamptz_ops USING gist;
@@ -177,9 +177,9 @@ DROP FUNCTION gbt_tstz_compress(internal);
DROP FUNCTION gbt_ts_compress(internal);
-DROP FUNCTION gbt_tstz_consistent(internal,timestamptz,int2);
+DROP FUNCTION gbt_tstz_consistent(internal,timestamptz,int2,oid,internal);
-DROP FUNCTION gbt_ts_consistent(internal,timestamp,int2);
+DROP FUNCTION gbt_ts_consistent(internal,timestamp,int2,oid,internal);
DROP OPERATOR CLASS gist_float8_ops USING gist;
@@ -193,7 +193,7 @@ DROP FUNCTION gbt_float8_penalty(internal,internal,internal);
DROP FUNCTION gbt_float8_compress(internal);
-DROP FUNCTION gbt_float8_consistent(internal,float8,int2);
+DROP FUNCTION gbt_float8_consistent(internal,float8,int2,oid,internal);
DROP OPERATOR CLASS gist_float4_ops USING gist;
@@ -207,7 +207,7 @@ DROP FUNCTION gbt_float4_penalty(internal,internal,internal);
DROP FUNCTION gbt_float4_compress(internal);
-DROP FUNCTION gbt_float4_consistent(internal,float4,int2);
+DROP FUNCTION gbt_float4_consistent(internal,float4,int2,oid,internal);
DROP OPERATOR CLASS gist_int8_ops USING gist;
@@ -221,7 +221,7 @@ DROP FUNCTION gbt_int8_penalty(internal,internal,internal);
DROP FUNCTION gbt_int8_compress(internal);
-DROP FUNCTION gbt_int8_consistent(internal,int8,int2);
+DROP FUNCTION gbt_int8_consistent(internal,int8,int2,oid,internal);
DROP OPERATOR CLASS gist_int4_ops USING gist;
@@ -235,7 +235,7 @@ DROP FUNCTION gbt_int4_penalty(internal,internal,internal);
DROP FUNCTION gbt_int4_compress(internal);
-DROP FUNCTION gbt_int4_consistent(internal,int4,int2);
+DROP FUNCTION gbt_int4_consistent(internal,int4,int2,oid,internal);
DROP OPERATOR CLASS gist_int2_ops USING gist;
@@ -249,7 +249,7 @@ DROP FUNCTION gbt_int2_penalty(internal,internal,internal);
DROP FUNCTION gbt_int2_compress(internal);
-DROP FUNCTION gbt_int2_consistent(internal,int2,int2);
+DROP FUNCTION gbt_int2_consistent(internal,int2,int2,oid,internal);
DROP OPERATOR CLASS gist_oid_ops USING gist;
@@ -267,7 +267,7 @@ DROP FUNCTION gbt_decompress(internal);
DROP FUNCTION gbt_oid_compress(internal);
-DROP FUNCTION gbt_oid_consistent(internal,oid,int2);
+DROP FUNCTION gbt_oid_consistent(internal,oid,int2,oid,internal);
DROP TYPE gbtreekey_var CASCADE;
diff --git a/contrib/cube/cube.c b/contrib/cube/cube.c
index c57b9919c48..2aa9177516d 100644
--- a/contrib/cube/cube.c
+++ b/contrib/cube/cube.c
@@ -1,5 +1,5 @@
/******************************************************************************
- $PostgreSQL: pgsql/contrib/cube/cube.c,v 1.34 2007/11/15 21:14:29 momjian Exp $
+ $PostgreSQL: pgsql/contrib/cube/cube.c,v 1.35 2008/04/14 17:05:32 tgl Exp $
This file contains routines that can be bound to a Postgres backend and
called by the backend in the process of processing queries. The calling
@@ -381,8 +381,13 @@ g_cube_consistent(PG_FUNCTION_ARGS)
GISTENTRY *entry = (GISTENTRY *) PG_GETARG_POINTER(0);
NDBOX *query = PG_GETARG_NDBOX(1);
StrategyNumber strategy = (StrategyNumber) PG_GETARG_UINT16(2);
+ /* Oid subtype = PG_GETARG_OID(3); */
+ bool *recheck = (bool *) PG_GETARG_POINTER(4);
bool res;
+ /* All cases served by this function are exact */
+ *recheck = false;
+
/*
* if entry is not leaf, use g_cube_internal_consistent, else use
* g_cube_leaf_consistent
diff --git a/contrib/cube/cube.sql.in b/contrib/cube/cube.sql.in
index 7756e16de2f..cd3713d323b 100644
--- a/contrib/cube/cube.sql.in
+++ b/contrib/cube/cube.sql.in
@@ -1,4 +1,4 @@
-/* $PostgreSQL: pgsql/contrib/cube/cube.sql.in,v 1.23 2007/11/13 04:24:27 momjian Exp $ */
+/* $PostgreSQL: pgsql/contrib/cube/cube.sql.in,v 1.24 2008/04/14 17:05:32 tgl Exp $ */
-- Adjust this setting to control where the objects get created.
SET search_path = public;
@@ -262,7 +262,7 @@ CREATE OPERATOR ~ (
-- define the GiST support methods
-CREATE OR REPLACE FUNCTION g_cube_consistent(internal,cube,int4)
+CREATE OR REPLACE FUNCTION g_cube_consistent(internal,cube,int,oid,internal)
RETURNS bool
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE;
@@ -317,7 +317,7 @@ CREATE OPERATOR CLASS gist_cube_ops
OPERATOR 8 <@ ,
OPERATOR 13 @ ,
OPERATOR 14 ~ ,
- FUNCTION 1 g_cube_consistent (internal, cube, int4),
+ FUNCTION 1 g_cube_consistent (internal, cube, int, oid, internal),
FUNCTION 2 g_cube_union (internal, internal),
FUNCTION 3 g_cube_compress (internal),
FUNCTION 4 g_cube_decompress (internal),
diff --git a/contrib/cube/uninstall_cube.sql b/contrib/cube/uninstall_cube.sql
index fa78a061f56..abdb5a2db34 100644
--- a/contrib/cube/uninstall_cube.sql
+++ b/contrib/cube/uninstall_cube.sql
@@ -1,4 +1,4 @@
-/* $PostgreSQL: pgsql/contrib/cube/uninstall_cube.sql,v 1.7 2007/11/13 04:24:27 momjian Exp $ */
+/* $PostgreSQL: pgsql/contrib/cube/uninstall_cube.sql,v 1.8 2008/04/14 17:05:32 tgl Exp $ */
-- Adjust this setting to control where the objects get dropped.
SET search_path = public;
@@ -19,7 +19,7 @@ DROP FUNCTION g_cube_decompress(internal);
DROP FUNCTION g_cube_compress(internal);
-DROP FUNCTION g_cube_consistent(internal,cube,int4);
+DROP FUNCTION g_cube_consistent(internal,cube,int,oid,internal);
DROP OPERATOR ~ (cube, cube);
diff --git a/contrib/hstore/hstore.sql.in b/contrib/hstore/hstore.sql.in
index fb39967866c..1b22ff63c56 100644
--- a/contrib/hstore/hstore.sql.in
+++ b/contrib/hstore/hstore.sql.in
@@ -1,4 +1,4 @@
-/* $PostgreSQL: pgsql/contrib/hstore/hstore.sql.in,v 1.8 2007/11/13 04:24:28 momjian Exp $ */
+/* $PostgreSQL: pgsql/contrib/hstore/hstore.sql.in,v 1.9 2008/04/14 17:05:32 tgl Exp $ */
-- Adjust this setting to control where the objects get created.
SET search_path = public;
@@ -214,7 +214,7 @@ RETURNS internal
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE;
-CREATE OR REPLACE FUNCTION ghstore_consistent(internal,internal,int4)
+CREATE OR REPLACE FUNCTION ghstore_consistent(internal,internal,int,oid,internal)
RETURNS bool
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE;
@@ -223,12 +223,12 @@ LANGUAGE C IMMUTABLE;
CREATE OPERATOR CLASS gist_hstore_ops
DEFAULT FOR TYPE hstore USING gist
AS
- OPERATOR 7 @> RECHECK,
- OPERATOR 9 ?(hstore,text) RECHECK,
- --OPERATOR 8 <@ RECHECK,
- OPERATOR 13 @ RECHECK,
- --OPERATOR 14 ~ RECHECK,
- FUNCTION 1 ghstore_consistent (internal, internal, int4),
+ OPERATOR 7 @> ,
+ OPERATOR 9 ?(hstore,text) ,
+ --OPERATOR 8 <@ ,
+ OPERATOR 13 @ ,
+ --OPERATOR 14 ~ ,
+ FUNCTION 1 ghstore_consistent (internal, internal, int, oid, internal),
FUNCTION 2 ghstore_union (internal, internal),
FUNCTION 3 ghstore_compress (internal),
FUNCTION 4 ghstore_decompress (internal),
@@ -249,18 +249,18 @@ RETURNS internal
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE;
-CREATE OR REPLACE FUNCTION gin_consistent_hstore(internal, int2, internal)
-RETURNS internal
+CREATE OR REPLACE FUNCTION gin_consistent_hstore(internal, int2, internal, internal)
+RETURNS bool
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE;
CREATE OPERATOR CLASS gin_hstore_ops
DEFAULT FOR TYPE hstore USING gin
AS
- OPERATOR 7 @> RECHECK,
+ OPERATOR 7 @> ,
OPERATOR 9 ?(hstore,text),
FUNCTION 1 bttextcmp(text,text),
FUNCTION 2 gin_extract_hstore(internal, internal),
FUNCTION 3 gin_extract_hstore_query(internal, internal, int2),
- FUNCTION 4 gin_consistent_hstore(internal, int2, internal),
+ FUNCTION 4 gin_consistent_hstore(internal, int2, internal, internal),
STORAGE text;
diff --git a/contrib/hstore/hstore_gin.c b/contrib/hstore/hstore_gin.c
index 144758f3cd5..aec25b2b652 100644
--- a/contrib/hstore/hstore_gin.c
+++ b/contrib/hstore/hstore_gin.c
@@ -113,21 +113,31 @@ Datum gin_consistent_hstore(PG_FUNCTION_ARGS);
Datum
gin_consistent_hstore(PG_FUNCTION_ARGS)
{
+ bool *check = (bool *) PG_GETARG_POINTER(0);
StrategyNumber strategy = PG_GETARG_UINT16(1);
+ HStore *query = PG_GETARG_HS(2);
+ bool *recheck = (bool *) PG_GETARG_POINTER(3);
bool res = true;
if (strategy == HStoreContainsStrategyNumber)
{
- bool *check = (bool *) PG_GETARG_POINTER(0);
- HStore *query = PG_GETARG_HS(2);
int i;
+ /*
+ * Index lost information about correspondence of keys
+ * and values, so we need recheck
+ */
+ *recheck = true;
for (i = 0; res && i < 2 * query->size; i++)
if (check[i] == false)
res = false;
}
else if (strategy == HStoreExistsStrategyNumber)
+ {
+ /* Existence of key is guaranteed */
+ *recheck = false;
res = true;
+ }
else
elog(ERROR, "Unsupported strategy number: %d", strategy);
diff --git a/contrib/hstore/hstore_gist.c b/contrib/hstore/hstore_gist.c
index aa3aa0d94be..15ac9659919 100644
--- a/contrib/hstore/hstore_gist.c
+++ b/contrib/hstore/hstore_gist.c
@@ -508,9 +508,14 @@ ghstore_consistent(PG_FUNCTION_ARGS)
{
GISTTYPE *entry = (GISTTYPE *) DatumGetPointer(((GISTENTRY *) PG_GETARG_POINTER(0))->key);
StrategyNumber strategy = (StrategyNumber) PG_GETARG_UINT16(2);
+ /* Oid subtype = PG_GETARG_OID(3); */
+ bool *recheck = (bool *) PG_GETARG_POINTER(4);
bool res = true;
BITVECP sign;
+ /* All cases served by this function are inexact */
+ *recheck = true;
+
if (ISALLTRUE(entry))
PG_RETURN_BOOL(true);
diff --git a/contrib/hstore/uninstall_hstore.sql b/contrib/hstore/uninstall_hstore.sql
index d9e08927a5e..84d567fcadf 100644
--- a/contrib/hstore/uninstall_hstore.sql
+++ b/contrib/hstore/uninstall_hstore.sql
@@ -1,4 +1,4 @@
-/* $PostgreSQL: pgsql/contrib/hstore/uninstall_hstore.sql,v 1.6 2007/11/13 04:24:28 momjian Exp $ */
+/* $PostgreSQL: pgsql/contrib/hstore/uninstall_hstore.sql,v 1.7 2008/04/14 17:05:32 tgl Exp $ */
-- Adjust this setting to control where the objects get dropped.
SET search_path = public;
@@ -37,8 +37,8 @@ DROP FUNCTION ghstore_penalty(internal,internal,internal);
DROP FUNCTION ghstore_picksplit(internal, internal);
DROP FUNCTION ghstore_union(internal, internal);
DROP FUNCTION ghstore_same(internal, internal, internal);
-DROP FUNCTION ghstore_consistent(internal,internal,int4);
-DROP FUNCTION gin_consistent_hstore(internal, smallint, internal);
+DROP FUNCTION ghstore_consistent(internal,internal,int,oid,internal);
+DROP FUNCTION gin_consistent_hstore(internal, int2, internal, internal);
DROP FUNCTION gin_extract_hstore(internal, internal);
DROP FUNCTION gin_extract_hstore_query(internal, internal, smallint);
diff --git a/contrib/intarray/_int.sql.in b/contrib/intarray/_int.sql.in
index 9753f14fbf3..c681626dc9b 100644
--- a/contrib/intarray/_int.sql.in
+++ b/contrib/intarray/_int.sql.in
@@ -1,4 +1,4 @@
-/* $PostgreSQL: pgsql/contrib/intarray/_int.sql.in,v 1.27 2007/11/13 04:24:28 momjian Exp $ */
+/* $PostgreSQL: pgsql/contrib/intarray/_int.sql.in,v 1.28 2008/04/14 17:05:32 tgl Exp $ */
-- Adjust this setting to control where the objects get created.
SET search_path = public;
@@ -323,7 +323,7 @@ CREATE OPERATOR & (
--------------
-- define the GiST support methods
-CREATE OR REPLACE FUNCTION g_int_consistent(internal,_int4,int4)
+CREATE OR REPLACE FUNCTION g_int_consistent(internal,_int4,int,oid,internal)
RETURNS bool
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE;
@@ -364,13 +364,13 @@ LANGUAGE C IMMUTABLE;
CREATE OPERATOR CLASS gist__int_ops
DEFAULT FOR TYPE _int4 USING gist AS
OPERATOR 3 &&,
- OPERATOR 6 = (anyarray, anyarray) RECHECK,
+ OPERATOR 6 = (anyarray, anyarray),
OPERATOR 7 @>,
OPERATOR 8 <@,
OPERATOR 13 @,
OPERATOR 14 ~,
OPERATOR 20 @@ (_int4, query_int),
- FUNCTION 1 g_int_consistent (internal, _int4, int4),
+ FUNCTION 1 g_int_consistent (internal, _int4, int, oid, internal),
FUNCTION 2 g_int_union (internal, internal),
FUNCTION 3 g_int_compress (internal),
FUNCTION 4 g_int_decompress (internal),
@@ -400,7 +400,7 @@ CREATE TYPE intbig_gkey (
OUTPUT = _intbig_out
);
-CREATE OR REPLACE FUNCTION g_intbig_consistent(internal,internal,int4)
+CREATE OR REPLACE FUNCTION g_intbig_consistent(internal,internal,int,oid,internal)
RETURNS bool
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE;
@@ -440,14 +440,14 @@ LANGUAGE C IMMUTABLE;
CREATE OPERATOR CLASS gist__intbig_ops
FOR TYPE _int4 USING gist
AS
- OPERATOR 3 && RECHECK,
- OPERATOR 6 = (anyarray, anyarray) RECHECK,
- OPERATOR 7 @> RECHECK,
- OPERATOR 8 <@ RECHECK,
- OPERATOR 13 @ RECHECK,
- OPERATOR 14 ~ RECHECK,
- OPERATOR 20 @@ (_int4, query_int) RECHECK,
- FUNCTION 1 g_intbig_consistent (internal, internal, int4),
+ OPERATOR 3 &&,
+ OPERATOR 6 = (anyarray, anyarray),
+ OPERATOR 7 @>,
+ OPERATOR 8 <@,
+ OPERATOR 13 @,
+ OPERATOR 14 ~,
+ OPERATOR 20 @@ (_int4, query_int),
+ FUNCTION 1 g_intbig_consistent (internal, internal, int, oid, internal),
FUNCTION 2 g_intbig_union (internal, internal),
FUNCTION 3 g_intbig_compress (internal),
FUNCTION 4 g_intbig_decompress (internal),
@@ -463,7 +463,7 @@ RETURNS internal
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE;
-CREATE OR REPLACE FUNCTION ginint4_consistent(internal, int2, internal)
+CREATE OR REPLACE FUNCTION ginint4_consistent(internal, int2, internal, internal)
RETURNS internal
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE;
@@ -472,14 +472,14 @@ CREATE OPERATOR CLASS gin__int_ops
FOR TYPE _int4 USING gin
AS
OPERATOR 3 &&,
- OPERATOR 6 = (anyarray, anyarray) RECHECK,
+ OPERATOR 6 = (anyarray, anyarray),
OPERATOR 7 @>,
- OPERATOR 8 <@ RECHECK,
+ OPERATOR 8 <@,
OPERATOR 13 @,
- OPERATOR 14 ~ RECHECK,
+ OPERATOR 14 ~,
OPERATOR 20 @@ (_int4, query_int),
FUNCTION 1 btint4cmp (int4, int4),
FUNCTION 2 ginarrayextract (anyarray, internal),
FUNCTION 3 ginint4_queryextract (internal, internal, int2),
- FUNCTION 4 ginint4_consistent (internal, int2, internal),
+ FUNCTION 4 ginint4_consistent (internal, int2, internal, internal),
STORAGE int4;
diff --git a/contrib/intarray/_int_gin.c b/contrib/intarray/_int_gin.c
index 6856a68e038..8b6e99edae3 100644
--- a/contrib/intarray/_int_gin.c
+++ b/contrib/intarray/_int_gin.c
@@ -82,50 +82,76 @@ ginint4_consistent(PG_FUNCTION_ARGS)
{
bool *check = (bool *) PG_GETARG_POINTER(0);
StrategyNumber strategy = PG_GETARG_UINT16(1);
- int res = FALSE;
+ bool *recheck = (bool *) PG_GETARG_POINTER(3);
+ bool res = FALSE;
/*
- * we can do not check array carefully, it's done by previous
+ * we need not check array carefully, it's done by previous
* ginarrayextract call
*/
switch (strategy)
{
case RTOverlapStrategyNumber:
+ /* result is not lossy */
+ *recheck = false;
+ /* at least one element in check[] is true, so result = true */
+ res = TRUE;
+ break;
case RTContainedByStrategyNumber:
case RTOldContainedByStrategyNumber:
+ /* we will need recheck */
+ *recheck = true;
/* at least one element in check[] is true, so result = true */
-
res = TRUE;
break;
case RTSameStrategyNumber:
+ {
+ ArrayType *query = PG_GETARG_ARRAYTYPE_P(2);
+ int i,
+ nentries = ARRNELEMS(query);
+
+ /* we will need recheck */
+ *recheck = true;
+ res = TRUE;
+ for (i = 0; i < nentries; i++)
+ if (!check[i])
+ {
+ res = FALSE;
+ break;
+ }
+ }
+ break;
case RTContainsStrategyNumber:
case RTOldContainsStrategyNumber:
- res = TRUE;
- do
{
ArrayType *query = PG_GETARG_ARRAYTYPE_P(2);
int i,
nentries = ARRNELEMS(query);
+ /* result is not lossy */
+ *recheck = false;
+ res = TRUE;
for (i = 0; i < nentries; i++)
if (!check[i])
{
res = FALSE;
break;
}
- } while (0);
+ }
break;
case BooleanSearchStrategy:
- do
{
QUERYTYPE *query = (QUERYTYPE *) PG_DETOAST_DATUM(PG_GETARG_POINTER(2));
+ /* result is not lossy */
+ *recheck = false;
res = ginconsistent(query, check);
- } while (0);
+ }
break;
default:
- elog(ERROR, "ginint4_consistent: unknown strategy number: %d", strategy);
+ elog(ERROR, "ginint4_consistent: unknown strategy number: %d",
+ strategy);
}
PG_RETURN_BOOL(res);
diff --git a/contrib/intarray/_int_gist.c b/contrib/intarray/_int_gist.c
index abd576223e8..37c05784b96 100644
--- a/contrib/intarray/_int_gist.c
+++ b/contrib/intarray/_int_gist.c
@@ -34,8 +34,13 @@ g_int_consistent(PG_FUNCTION_ARGS)
GISTENTRY *entry = (GISTENTRY *) PG_GETARG_POINTER(0);
ArrayType *query = (ArrayType *) PG_DETOAST_DATUM_COPY(PG_GETARG_POINTER(1));
StrategyNumber strategy = (StrategyNumber) PG_GETARG_UINT16(2);
+ /* Oid subtype = PG_GETARG_OID(3); */
+ bool *recheck = (bool *) PG_GETARG_POINTER(4);
bool retval;
+ /* this is exact except for RTSameStrategyNumber */
+ *recheck = (strategy == RTSameStrategyNumber);
+
if (strategy == BooleanSearchStrategy)
{
retval = execconsistent((QUERYTYPE *) query,
diff --git a/contrib/intarray/_intbig_gist.c b/contrib/intarray/_intbig_gist.c
index 3bfbc84dc75..b96c6d72893 100644
--- a/contrib/intarray/_intbig_gist.c
+++ b/contrib/intarray/_intbig_gist.c
@@ -498,8 +498,13 @@ g_intbig_consistent(PG_FUNCTION_ARGS)
GISTENTRY *entry = (GISTENTRY *) PG_GETARG_POINTER(0);
ArrayType *query = (ArrayType *) PG_DETOAST_DATUM(PG_GETARG_POINTER(1));
StrategyNumber strategy = (StrategyNumber) PG_GETARG_UINT16(2);
+ /* Oid subtype = PG_GETARG_OID(3); */
+ bool *recheck = (bool *) PG_GETARG_POINTER(4);
bool retval;
+ /* All cases served by this function are inexact */
+ *recheck = true;
+
if (ISALLTRUE(DatumGetPointer(entry->key)))
PG_RETURN_BOOL(true);
diff --git a/contrib/intarray/uninstall__int.sql b/contrib/intarray/uninstall__int.sql
index 9ef269ec21c..59ef2afc0f0 100644
--- a/contrib/intarray/uninstall__int.sql
+++ b/contrib/intarray/uninstall__int.sql
@@ -1,4 +1,4 @@
-/* $PostgreSQL: pgsql/contrib/intarray/uninstall__int.sql,v 1.8 2007/11/13 04:24:28 momjian Exp $ */
+/* $PostgreSQL: pgsql/contrib/intarray/uninstall__int.sql,v 1.9 2008/04/14 17:05:32 tgl Exp $ */
-- Adjust this setting to control where the objects get created.
SET search_path = public;
@@ -7,7 +7,7 @@ DROP OPERATOR CLASS gin__int_ops USING gin;
DROP FUNCTION ginint4_queryextract(internal, internal, int2);
-DROP FUNCTION ginint4_consistent(internal, int2, internal);
+DROP FUNCTION ginint4_consistent(internal, int2, internal, internal);
DROP OPERATOR CLASS gist__intbig_ops USING gist;
@@ -23,7 +23,7 @@ DROP FUNCTION g_intbig_decompress(internal);
DROP FUNCTION g_intbig_compress(internal);
-DROP FUNCTION g_intbig_consistent(internal,internal,int4);
+DROP FUNCTION g_intbig_consistent(internal,internal,int,oid,internal);
DROP TYPE intbig_gkey CASCADE;
@@ -41,7 +41,7 @@ DROP FUNCTION g_int_decompress(internal);
DROP FUNCTION g_int_compress(internal);
-DROP FUNCTION g_int_consistent(internal,_int4,int4);
+DROP FUNCTION g_int_consistent(internal,_int4,int,oid,internal);
DROP OPERATOR & (_int4, _int4);
diff --git a/contrib/ltree/_ltree_gist.c b/contrib/ltree/_ltree_gist.c
index 34ec2552ca4..1c9b6b03eaa 100644
--- a/contrib/ltree/_ltree_gist.c
+++ b/contrib/ltree/_ltree_gist.c
@@ -554,10 +554,15 @@ _ltree_consistent(PG_FUNCTION_ARGS)
{
GISTENTRY *entry = (GISTENTRY *) PG_GETARG_POINTER(0);
char *query = (char *) DatumGetPointer(PG_DETOAST_DATUM(PG_GETARG_DATUM(1)));
- ltree_gist *key = (ltree_gist *) DatumGetPointer(entry->key);
StrategyNumber strategy = (StrategyNumber) PG_GETARG_UINT16(2);
+ /* Oid subtype = PG_GETARG_OID(3); */
+ bool *recheck = (bool *) PG_GETARG_POINTER(4);
+ ltree_gist *key = (ltree_gist *) DatumGetPointer(entry->key);
bool res = false;
+ /* All cases served by this function are inexact */
+ *recheck = true;
+
switch (strategy)
{
case 10:
diff --git a/contrib/ltree/ltree.sql.in b/contrib/ltree/ltree.sql.in
index 1d7c288fc74..4d378823ca0 100644
--- a/contrib/ltree/ltree.sql.in
+++ b/contrib/ltree/ltree.sql.in
@@ -1,4 +1,4 @@
-/* $PostgreSQL: pgsql/contrib/ltree/ltree.sql.in,v 1.16 2007/11/13 04:24:28 momjian Exp $ */
+/* $PostgreSQL: pgsql/contrib/ltree/ltree.sql.in,v 1.17 2008/04/14 17:05:32 tgl Exp $ */
-- Adjust this setting to control where the objects get created.
SET search_path = public;
@@ -496,7 +496,7 @@ CREATE TYPE ltree_gist (
);
-CREATE OR REPLACE FUNCTION ltree_consistent(internal,internal,int2)
+CREATE OR REPLACE FUNCTION ltree_consistent(internal,internal,int2,oid,internal)
RETURNS bool as 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE;
CREATE OR REPLACE FUNCTION ltree_compress(internal)
@@ -532,7 +532,7 @@ CREATE OPERATOR CLASS gist_ltree_ops
OPERATOR 15 @ (ltxtquery, ltree) ,
OPERATOR 16 ? (ltree, _lquery) ,
OPERATOR 17 ? (_lquery, ltree) ,
- FUNCTION 1 ltree_consistent (internal, internal, int2),
+ FUNCTION 1 ltree_consistent (internal, internal, int2, oid, internal),
FUNCTION 2 ltree_union (internal, internal),
FUNCTION 3 ltree_compress (internal),
FUNCTION 4 ltree_decompress (internal),
@@ -822,7 +822,7 @@ CREATE OPERATOR ?@ (
);
--GiST support for ltree[]
-CREATE OR REPLACE FUNCTION _ltree_consistent(internal,internal,int2)
+CREATE OR REPLACE FUNCTION _ltree_consistent(internal,internal,int2,oid,internal)
RETURNS bool
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE;
@@ -854,15 +854,15 @@ LANGUAGE C IMMUTABLE;
CREATE OPERATOR CLASS gist__ltree_ops
DEFAULT FOR TYPE _ltree USING gist AS
- OPERATOR 10 <@ (_ltree, ltree) RECHECK ,
- OPERATOR 11 @> (ltree, _ltree) RECHECK ,
- OPERATOR 12 ~ (_ltree, lquery) RECHECK ,
- OPERATOR 13 ~ (lquery, _ltree) RECHECK ,
- OPERATOR 14 @ (_ltree, ltxtquery) RECHECK ,
- OPERATOR 15 @ (ltxtquery, _ltree) RECHECK ,
- OPERATOR 16 ? (_ltree, _lquery) RECHECK ,
- OPERATOR 17 ? (_lquery, _ltree) RECHECK ,
- FUNCTION 1 _ltree_consistent (internal, internal, int2),
+ OPERATOR 10 <@ (_ltree, ltree),
+ OPERATOR 11 @> (ltree, _ltree),
+ OPERATOR 12 ~ (_ltree, lquery),
+ OPERATOR 13 ~ (lquery, _ltree),
+ OPERATOR 14 @ (_ltree, ltxtquery),
+ OPERATOR 15 @ (ltxtquery, _ltree),
+ OPERATOR 16 ? (_ltree, _lquery),
+ OPERATOR 17 ? (_lquery, _ltree),
+ FUNCTION 1 _ltree_consistent (internal, internal, int2, oid, internal),
FUNCTION 2 _ltree_union (internal, internal),
FUNCTION 3 _ltree_compress (internal),
FUNCTION 4 ltree_decompress (internal),
diff --git a/contrib/ltree/ltree_gist.c b/contrib/ltree/ltree_gist.c
index dea0b9c3863..17c44b93aac 100644
--- a/contrib/ltree/ltree_gist.c
+++ b/contrib/ltree/ltree_gist.c
@@ -1,7 +1,7 @@
/*
* GiST support for ltree
* Teodor Sigaev <teodor@stack.net>
- * $PostgreSQL: pgsql/contrib/ltree/ltree_gist.c,v 1.22 2007/11/16 01:12:24 momjian Exp $
+ * $PostgreSQL: pgsql/contrib/ltree/ltree_gist.c,v 1.23 2008/04/14 17:05:32 tgl Exp $
*/
#include "ltree.h"
@@ -624,11 +624,16 @@ Datum
ltree_consistent(PG_FUNCTION_ARGS)
{
GISTENTRY *entry = (GISTENTRY *) PG_GETARG_POINTER(0);
- void *query = NULL;
- ltree_gist *key = (ltree_gist *) DatumGetPointer(entry->key);
StrategyNumber strategy = (StrategyNumber) PG_GETARG_UINT16(2);
+ /* Oid subtype = PG_GETARG_OID(3); */
+ bool *recheck = (bool *) PG_GETARG_POINTER(4);
+ ltree_gist *key = (ltree_gist *) DatumGetPointer(entry->key);
+ void *query = NULL;
bool res = false;
+ /* All cases served by this function are exact */
+ *recheck = false;
+
switch (strategy)
{
case BTLessStrategyNumber:
diff --git a/contrib/ltree/uninstall_ltree.sql b/contrib/ltree/uninstall_ltree.sql
index 4d976839a4a..acd07df1e8a 100644
--- a/contrib/ltree/uninstall_ltree.sql
+++ b/contrib/ltree/uninstall_ltree.sql
@@ -1,4 +1,4 @@
-/* $PostgreSQL: pgsql/contrib/ltree/uninstall_ltree.sql,v 1.5 2007/11/13 04:24:28 momjian Exp $ */
+/* $PostgreSQL: pgsql/contrib/ltree/uninstall_ltree.sql,v 1.6 2008/04/14 17:05:32 tgl Exp $ */
-- Adjust this setting to control where the objects get dropped.
SET search_path = public;
@@ -15,7 +15,7 @@ DROP FUNCTION _ltree_penalty(internal,internal,internal);
DROP FUNCTION _ltree_compress(internal);
-DROP FUNCTION _ltree_consistent(internal,internal,int2);
+DROP FUNCTION _ltree_consistent(internal,internal,int2,oid,internal);
DROP OPERATOR ?@ (_ltree, ltxtquery);
@@ -107,7 +107,7 @@ DROP FUNCTION ltree_decompress(internal);
DROP FUNCTION ltree_compress(internal);
-DROP FUNCTION ltree_consistent(internal,internal,int2);
+DROP FUNCTION ltree_consistent(internal,internal,int2,oid,internal);
DROP TYPE ltree_gist CASCADE;
diff --git a/contrib/pg_trgm/pg_trgm.sql.in b/contrib/pg_trgm/pg_trgm.sql.in
index 963e6f091df..d65a9cf6b2e 100644
--- a/contrib/pg_trgm/pg_trgm.sql.in
+++ b/contrib/pg_trgm/pg_trgm.sql.in
@@ -1,4 +1,4 @@
-/* $PostgreSQL: pgsql/contrib/pg_trgm/pg_trgm.sql.in,v 1.7 2007/12/09 02:22:46 tgl Exp $ */
+/* $PostgreSQL: pgsql/contrib/pg_trgm/pg_trgm.sql.in,v 1.8 2008/04/14 17:05:32 tgl Exp $ */
-- Adjust this setting to control where the objects get created.
SET search_path = public;
@@ -55,7 +55,7 @@ CREATE TYPE gtrgm (
);
-- support functions for gist
-CREATE OR REPLACE FUNCTION gtrgm_consistent(gtrgm,internal,int4)
+CREATE OR REPLACE FUNCTION gtrgm_consistent(internal,text,int,oid,internal)
RETURNS bool
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE;
@@ -95,7 +95,7 @@ CREATE OPERATOR CLASS gist_trgm_ops
FOR TYPE text USING gist
AS
OPERATOR 1 % (text, text),
- FUNCTION 1 gtrgm_consistent (gtrgm, internal, int4),
+ FUNCTION 1 gtrgm_consistent (internal, text, int, oid, internal),
FUNCTION 2 gtrgm_union (bytea, internal),
FUNCTION 3 gtrgm_compress (internal),
FUNCTION 4 gtrgm_decompress (internal),
@@ -115,7 +115,7 @@ RETURNS internal
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE;
-CREATE OR REPLACE FUNCTION gin_trgm_consistent(internal, internal, text)
+CREATE OR REPLACE FUNCTION gin_trgm_consistent(internal, int2, text, internal)
RETURNS internal
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE;
@@ -124,9 +124,9 @@ LANGUAGE C IMMUTABLE;
CREATE OPERATOR CLASS gin_trgm_ops
FOR TYPE text USING gin
AS
- OPERATOR 1 % (text, text) RECHECK,
+ OPERATOR 1 % (text, text),
FUNCTION 1 btint4cmp (int4, int4),
FUNCTION 2 gin_extract_trgm (text, internal),
FUNCTION 3 gin_extract_trgm (text, internal, internal),
- FUNCTION 4 gin_trgm_consistent (internal, internal, text),
+ FUNCTION 4 gin_trgm_consistent (internal, int2, text, internal),
STORAGE int4;
diff --git a/contrib/pg_trgm/trgm_gin.c b/contrib/pg_trgm/trgm_gin.c
index 33d005ae9a0..9a36afa074a 100644
--- a/contrib/pg_trgm/trgm_gin.c
+++ b/contrib/pg_trgm/trgm_gin.c
@@ -53,13 +53,18 @@ Datum
gin_trgm_consistent(PG_FUNCTION_ARGS)
{
bool *check = (bool *) PG_GETARG_POINTER(0);
- text *query = (text *) PG_GETARG_TEXT_P(2);
+ /* StrategyNumber strategy = PG_GETARG_UINT16(1); */
+ text *query = PG_GETARG_TEXT_P(2);
+ bool *recheck = (bool *) PG_GETARG_POINTER(3);
bool res = FALSE;
TRGM *trg;
int4 i,
trglen,
ntrue = 0;
+ /* All cases served by this function are inexact */
+ *recheck = true;
+
trg = generate_trgm(VARDATA(query), VARSIZE(query) - VARHDRSZ);
trglen = ARRNELEM(trg);
diff --git a/contrib/pg_trgm/trgm_gist.c b/contrib/pg_trgm/trgm_gist.c
index 4286928d348..9cf88dc45bd 100644
--- a/contrib/pg_trgm/trgm_gist.c
+++ b/contrib/pg_trgm/trgm_gist.c
@@ -159,12 +159,19 @@ gtrgm_decompress(PG_FUNCTION_ARGS)
Datum
gtrgm_consistent(PG_FUNCTION_ARGS)
{
- text *query = (text *) PG_GETARG_TEXT_P(1);
- TRGM *key = (TRGM *) DatumGetPointer(((GISTENTRY *) PG_GETARG_POINTER(0))->key);
+ GISTENTRY *entry = (GISTENTRY *) PG_GETARG_POINTER(0);
+ text *query = PG_GETARG_TEXT_P(1);
+ /* StrategyNumber strategy = (StrategyNumber) PG_GETARG_UINT16(2); */
+ /* Oid subtype = PG_GETARG_OID(3); */
+ bool *recheck = (bool *) PG_GETARG_POINTER(4);
+ TRGM *key = (TRGM *) DatumGetPointer(entry->key);
TRGM *qtrg = generate_trgm(VARDATA(query), VARSIZE(query) - VARHDRSZ);
- int res = false;
+ bool res = false;
+
+ /* All cases served by this function are exact */
+ *recheck = false;
- if (GIST_LEAF((GISTENTRY *) PG_GETARG_POINTER(0)))
+ if (GIST_LEAF(entry))
{ /* all leafs contains orig trgm */
float4 tmpsml = cnt_sml(key, qtrg);
diff --git a/contrib/pg_trgm/uninstall_pg_trgm.sql b/contrib/pg_trgm/uninstall_pg_trgm.sql
index 907b884b4e7..094dfcddc73 100644
--- a/contrib/pg_trgm/uninstall_pg_trgm.sql
+++ b/contrib/pg_trgm/uninstall_pg_trgm.sql
@@ -1,4 +1,4 @@
-/* $PostgreSQL: pgsql/contrib/pg_trgm/uninstall_pg_trgm.sql,v 1.5 2007/11/13 04:24:28 momjian Exp $ */
+/* $PostgreSQL: pgsql/contrib/pg_trgm/uninstall_pg_trgm.sql,v 1.6 2008/04/14 17:05:32 tgl Exp $ */
-- Adjust this setting to control where the objects get dropped.
SET search_path = public;
@@ -17,7 +17,7 @@ DROP FUNCTION gtrgm_decompress(internal);
DROP FUNCTION gtrgm_compress(internal);
-DROP FUNCTION gtrgm_consistent(gtrgm,internal,int4);
+DROP FUNCTION gtrgm_consistent(internal,text,int,oid,internal);
DROP TYPE gtrgm CASCADE;
@@ -27,7 +27,7 @@ DROP FUNCTION gin_extract_trgm(text, internal);
DROP FUNCTION gin_extract_trgm(text, internal, internal);
-DROP FUNCTION gin_trgm_consistent(internal, internal, text);
+DROP FUNCTION gin_trgm_consistent(internal, int2, text, internal);
DROP OPERATOR % (text, text);
diff --git a/contrib/seg/seg.c b/contrib/seg/seg.c
index aea86765568..65ddda1671f 100644
--- a/contrib/seg/seg.c
+++ b/contrib/seg/seg.c
@@ -42,7 +42,11 @@ float32 seg_center(SEG * seg);
/*
** GiST support methods
*/
-bool gseg_consistent(GISTENTRY *entry, SEG * query, StrategyNumber strategy);
+bool gseg_consistent(GISTENTRY *entry,
+ SEG * query,
+ StrategyNumber strategy,
+ Oid subtype,
+ bool *recheck);
GISTENTRY *gseg_compress(GISTENTRY *entry);
GISTENTRY *gseg_decompress(GISTENTRY *entry);
float *gseg_penalty(GISTENTRY *origentry, GISTENTRY *newentry, float *result);
@@ -202,8 +206,13 @@ seg_upper(SEG * seg)
bool
gseg_consistent(GISTENTRY *entry,
SEG * query,
- StrategyNumber strategy)
+ StrategyNumber strategy,
+ Oid subtype,
+ bool *recheck)
{
+ /* All cases served by this function are exact */
+ *recheck = false;
+
/*
* if entry is not leaf, use gseg_internal_consistent, else use
* gseg_leaf_consistent
diff --git a/contrib/seg/seg.sql.in b/contrib/seg/seg.sql.in
index 7a8b9dc9c70..6f7d1a6438a 100644
--- a/contrib/seg/seg.sql.in
+++ b/contrib/seg/seg.sql.in
@@ -1,4 +1,4 @@
-/* $PostgreSQL: pgsql/contrib/seg/seg.sql.in,v 1.16 2007/11/13 04:24:28 momjian Exp $ */
+/* $PostgreSQL: pgsql/contrib/seg/seg.sql.in,v 1.17 2008/04/14 17:05:32 tgl Exp $ */
-- Adjust this setting to control where the objects get created.
SET search_path = public;
@@ -322,7 +322,7 @@ CREATE OPERATOR ~ (
-- define the GiST support methods
-CREATE OR REPLACE FUNCTION gseg_consistent(internal,seg,int4)
+CREATE OR REPLACE FUNCTION gseg_consistent(internal,seg,int,oid,internal)
RETURNS bool
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE;
@@ -382,7 +382,7 @@ AS
OPERATOR 8 <@ ,
OPERATOR 13 @ ,
OPERATOR 14 ~ ,
- FUNCTION 1 gseg_consistent (internal, seg, int4),
+ FUNCTION 1 gseg_consistent (internal, seg, int, oid, internal),
FUNCTION 2 gseg_union (internal, internal),
FUNCTION 3 gseg_compress (internal),
FUNCTION 4 gseg_decompress (internal),
diff --git a/contrib/seg/uninstall_seg.sql b/contrib/seg/uninstall_seg.sql
index 5237ff81cb3..2822927531d 100644
--- a/contrib/seg/uninstall_seg.sql
+++ b/contrib/seg/uninstall_seg.sql
@@ -1,4 +1,4 @@
-/* $PostgreSQL: pgsql/contrib/seg/uninstall_seg.sql,v 1.5 2007/11/13 04:24:28 momjian Exp $ */
+/* $PostgreSQL: pgsql/contrib/seg/uninstall_seg.sql,v 1.6 2008/04/14 17:05:32 tgl Exp $ */
-- Adjust this setting to control where the objects get dropped.
SET search_path = public;
@@ -19,7 +19,7 @@ DROP FUNCTION gseg_decompress(internal);
DROP FUNCTION gseg_compress(internal);
-DROP FUNCTION gseg_consistent(internal,seg,int4);
+DROP FUNCTION gseg_consistent(internal,seg,int,oid,internal);
DROP OPERATOR <@ (seg, seg);
diff --git a/contrib/tsearch2/tsearch2.sql.in b/contrib/tsearch2/tsearch2.sql.in
index 13f22d6adfd..3a6f21614f1 100644
--- a/contrib/tsearch2/tsearch2.sql.in
+++ b/contrib/tsearch2/tsearch2.sql.in
@@ -1,4 +1,4 @@
-/* $PostgreSQL: pgsql/contrib/tsearch2/tsearch2.sql.in,v 1.4 2007/11/28 19:33:04 tgl Exp $ */
+/* $PostgreSQL: pgsql/contrib/tsearch2/tsearch2.sql.in,v 1.5 2008/04/14 17:05:32 tgl Exp $ */
-- Adjust this setting to control where the objects get created.
SET search_path = public;
@@ -388,8 +388,8 @@ CREATE FUNCTION headline(text, tsquery)
CREATE OPERATOR CLASS gist_tsvector_ops
FOR TYPE tsvector USING gist
AS
- OPERATOR 1 @@ (tsvector, tsquery) RECHECK ,
- FUNCTION 1 gtsvector_consistent (gtsvector, internal, int4),
+ OPERATOR 1 @@ (tsvector, tsquery),
+ FUNCTION 1 gtsvector_consistent (internal, gtsvector, int, oid, internal),
FUNCTION 2 gtsvector_union (internal, internal),
FUNCTION 3 gtsvector_compress (internal),
FUNCTION 4 gtsvector_decompress (internal),
@@ -534,9 +534,9 @@ CREATE OR REPLACE FUNCTION tsq_mcontained(tsquery, tsquery)
CREATE OPERATOR CLASS gist_tp_tsquery_ops
FOR TYPE tsquery USING gist
AS
- OPERATOR 7 @> (tsquery, tsquery) RECHECK,
- OPERATOR 8 <@ (tsquery, tsquery) RECHECK,
- FUNCTION 1 gtsquery_consistent (bigint, internal, int4),
+ OPERATOR 7 @> (tsquery, tsquery),
+ OPERATOR 8 <@ (tsquery, tsquery),
+ FUNCTION 1 gtsquery_consistent (internal, internal, int, oid, internal),
FUNCTION 2 gtsquery_union (internal, internal),
FUNCTION 3 gtsquery_compress (internal),
FUNCTION 4 gtsquery_decompress (internal),
@@ -549,11 +549,11 @@ CREATE OPERATOR CLASS gin_tsvector_ops
FOR TYPE tsvector USING gin
AS
OPERATOR 1 @@ (tsvector, tsquery),
- OPERATOR 2 @@@ (tsvector, tsquery) RECHECK,
+ OPERATOR 2 @@@ (tsvector, tsquery),
FUNCTION 1 bttextcmp(text, text),
FUNCTION 2 gin_extract_tsvector(tsvector,internal),
FUNCTION 3 gin_extract_tsquery(tsquery,internal,smallint),
- FUNCTION 4 gin_tsquery_consistent(internal,smallint,tsquery),
+ FUNCTION 4 gin_tsquery_consistent(internal,smallint,tsquery,internal),
STORAGE text;
CREATE OPERATOR CLASS tsvector_ops