diff --git a/contrib/intarray/_int.c b/contrib/intarray/_int.c index ba91a0eba4a499e728b0511c20de7aaabb7b8383..d956543af5f075eb8fc05e63248a3150e3c9d375 100644 --- a/contrib/intarray/_int.c +++ b/contrib/intarray/_int.c @@ -312,6 +312,17 @@ g_int_consistent(PG_FUNCTION_ARGS) { query); break; case RTSameStrategyNumber: + if ( GIST_LEAF(entry) ) + DirectFunctionCall3( + g_int_same, + entry->key, + PointerGetDatum(query), + PointerGetDatum(&retval) + ); + else + retval = inner_int_contains((ArrayType *) DatumGetPointer(entry->key), + query); + break; case RTContainsStrategyNumber: retval = inner_int_contains((ArrayType *) DatumGetPointer(entry->key), query); @@ -1263,6 +1274,16 @@ g_intbig_consistent(PG_FUNCTION_ARGS) { retval = _intbig_overlap((ArrayType *) DatumGetPointer(entry->key), q); break; case RTSameStrategyNumber: + if ( GIST_LEAF(entry) ) + DirectFunctionCall3( + g_intbig_same, + entry->key, + PointerGetDatum(q), + PointerGetDatum(&retval) + ); + else + retval = _intbig_contains((ArrayType *) DatumGetPointer(entry->key), q); + break; case RTContainsStrategyNumber: retval = _intbig_contains((ArrayType *) DatumGetPointer(entry->key), q); break; diff --git a/contrib/intarray/_int.sql.in b/contrib/intarray/_int.sql.in index 60a4972984b813aadae0f9a485eb759285c33d61..4d9031f65324e89e3c7778e1e78b050b4bec1b5e 100644 --- a/contrib/intarray/_int.sql.in +++ b/contrib/intarray/_int.sql.in @@ -179,7 +179,7 @@ INSERT INTO pg_amop (amopclaid, amopstrategy, amopreqcheck, amopopr) -- _int_same INSERT INTO pg_amop (amopclaid, amopstrategy, amopreqcheck, amopopr) - SELECT opcl.oid, 6, false, c.opoid + SELECT opcl.oid, 6, true, c.opoid FROM pg_opclass opcl, _int_ops_tmp c WHERE opcamid = (SELECT oid FROM pg_am WHERE amname = 'gist') @@ -354,6 +354,15 @@ INSERT INTO pg_amop (amopclaid, amopstrategy, amopreqcheck, amopopr) and opcname = 'gist__intbig_ops' and c.oprname = '~'; +-- _int_same +INSERT INTO pg_amop (amopclaid, amopstrategy, amopreqcheck, amopopr) + SELECT opcl.oid, 6, true, c.opoid + FROM pg_opclass opcl, _int_ops_tmp c + WHERE + opcamid = (SELECT oid FROM pg_am WHERE amname = 'gist') + and opcname = 'gist__intbig_ops' + and c.oprname = '='; + --boolean search INSERT INTO pg_amop (amopclaid, amopstrategy, amopreqcheck, amopopr) SELECT opcl.oid, 20, true, c.opoid