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);
+ }
}
}
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,
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;