Please apply attached patch to contrib/intarray (7.2, 7.3).
authorBruce Momjian
Fri, 7 Jun 2002 21:52:33 +0000 (21:52 +0000)
committerBruce Momjian
Fri, 7 Jun 2002 21:52:33 +0000 (21:52 +0000)
     Fixed bug with '=' operator for gist__int_ops and
     define '=' operator for gist__intbig_ops opclass.
     Now '=' operator is consistent with standard 'array' type.

     Thanks Achilleus Mantzios for bug report and suggestion.

Oleg Bartunov

contrib/intarray/_int.c
contrib/intarray/_int.sql.in

index ba91a0eba4a499e728b0511c20de7aaabb7b8383..d956543af5f075eb8fc05e63248a3150e3c9d375 100644 (file)
@@ -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;
index 60a4972984b813aadae0f9a485eb759285c33d61..4d9031f65324e89e3c7778e1e78b050b4bec1b5e 100644 (file)
@@ -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