Update crypto with patch for computation.
authorBruce Momjian <[email protected]>
Tue, 15 May 2001 17:05:28 +0000 (17:05 +0000)
committerBruce Momjian <[email protected]>
Tue, 15 May 2001 17:05:28 +0000 (17:05 +0000)
src/backend/access/gist/gist.c
src/backend/access/gist/gistget.c

index aa2ae783307592635fbbcf608ef7c7aa262add5a..74e777c02003c12473a4bbdaa419feb5c31a6f2a 100644 (file)
@@ -1199,13 +1199,17 @@ gistdentryinit(GISTSTATE *giststate, GISTENTRY *e, char *pr, Relation r,
        gistentryinit(*e, pr, r, pg, o, b, l);
        if (giststate->haskeytype)
        {
-               dep = (GISTENTRY *)
-                       DatumGetPointer(FunctionCall1(&giststate->decompressFn,
+               if ( b ) {
+                       dep = (GISTENTRY *)
+                               DatumGetPointer(FunctionCall1(&giststate->decompressFn,
                                                                                  PointerGetDatum(e)));
-               gistentryinit(*e, dep->pred, dep->rel, dep->page, dep->offset, dep->bytes,
+                       gistentryinit(*e, dep->pred, dep->rel, dep->page, dep->offset, dep->bytes,
                                          dep->leafkey);
-               if (dep != e)
-                       pfree(dep);
+                       if (dep != e)
+                               pfree(dep);
+               } else {
+                       gistentryinit(*e, (char*)NULL, r, pg, o, 0, l);
+               }
        }
 }
 
index 8f3b5dd475c96ce0c1b4cacddb51d0ceeae2264b..d6fac6f4e2050eaf5e117b9217fb31787078a676 100644 (file)
@@ -241,16 +241,16 @@ gistindex_keytest(IndexTuple tuple,
                                                          1,
                                                          tupdesc,
                                                          &isNull);
-               gistdentryinit(giststate, &de, (char *) datum, r, p, offset,
-                                          IndexTupleSize(tuple) - sizeof(IndexTupleData),
-                                          FALSE);
-
-               if (isNull)
+               if (isNull || IndexTupleSize(tuple) == sizeof(IndexTupleData) )
                {
                        /* XXX eventually should check if SK_ISNULL */
                        return false;
                }
 
+               gistdentryinit(giststate, &de, (char *) datum, r, p, offset,
+                                          IndexTupleSize(tuple) - sizeof(IndexTupleData),
+                                          FALSE);
+
                if (key[0].sk_flags & SK_COMMUTE)
                {
                        test = FunctionCall3(&key[0].sk_func,
@@ -266,6 +266,9 @@ gistindex_keytest(IndexTuple tuple,
                                                                 ObjectIdGetDatum(key[0].sk_procedure));
                }
 
+               if ( (char*)de.pred != (char*)datum )
+                       if ( de.pred ) pfree( de.pred );
+
                if (DatumGetBool(test) == !!(key[0].sk_flags & SK_NEGATE))
                        return false;