diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2001-05-31 18:16:55 +0000 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2001-05-31 18:16:55 +0000 |
commit | 3043810d977b8197f9671c98439104db80b8e914 (patch) | |
tree | 99be1d86e7f18cf24e2016b5c021c2748dc1a8af /src/backend/access/gist/gistget.c | |
parent | e1107fc28536bf5f24f388bd701bffb98c09cd06 (diff) | |
download | postgresql-3043810d977b8197f9671c98439104db80b8e914.tar.gz |
Updates to make GIST work with multi-key indexes (from Oleg Bartunov
and Teodor Sigaev). Declare key values as Datum where appropriate,
rather than char* (Tom Lane).
Diffstat (limited to 'src/backend/access/gist/gistget.c')
-rw-r--r-- | src/backend/access/gist/gistget.c | 27 |
1 files changed, 16 insertions, 11 deletions
diff --git a/src/backend/access/gist/gistget.c b/src/backend/access/gist/gistget.c index f922da750d..028ff601d9 100644 --- a/src/backend/access/gist/gistget.c +++ b/src/backend/access/gist/gistget.c @@ -8,7 +8,7 @@ * Portions Copyright (c) 1994, Regents of the University of California * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/access/gist/gistget.c,v 1.27 2001/05/30 19:53:40 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/access/gist/gistget.c,v 1.28 2001/05/31 18:16:54 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -238,16 +238,21 @@ gistindex_keytest(IndexTuple tuple, while (scanKeySize > 0) { datum = index_getattr(tuple, - 1, + key[0].sk_attno, tupdesc, &isNull); - if (isNull || IndexTupleSize(tuple) == sizeof(IndexTupleData) ) + if (isNull) { /* XXX eventually should check if SK_ISNULL */ return false; } - gistdentryinit(giststate, &de, (char *) datum, r, p, offset, +/* this code from backend/access/common/indexvalid.c. But why and what??? + if (key[0].sk_flags & SK_ISNULL) + return false; +*/ + gistdentryinit(giststate, key[0].sk_attno-1, &de, + datum, r, p, offset, IndexTupleSize(tuple) - sizeof(IndexTupleData), FALSE); @@ -266,16 +271,16 @@ gistindex_keytest(IndexTuple tuple, ObjectIdGetDatum(key[0].sk_procedure)); } - if ( (char*)de.pred != (char*)datum ) - if ( de.pred ) pfree( de.pred ); + if ( de.key != datum ) + if ( DatumGetPointer(de.key) != NULL ) + pfree( DatumGetPointer(de.key) ); if (DatumGetBool(test) == !!(key[0].sk_flags & SK_NEGATE)) return false; - scanKeySize -= 1; + scanKeySize--; key++; } - return true; } @@ -284,7 +289,7 @@ static OffsetNumber gistfindnext(IndexScanDesc s, Page p, OffsetNumber n, ScanDirection dir) { OffsetNumber maxoff; - char *it; + IndexTuple it; GISTPageOpaque po; GISTScanOpaque so; GISTSTATE *giststate; @@ -307,8 +312,8 @@ gistfindnext(IndexScanDesc s, Page p, OffsetNumber n, ScanDirection dir) while (n >= FirstOffsetNumber && n <= maxoff) { - it = (char *) PageGetItem(p, PageGetItemId(p, n)); - if (gistindex_keytest((IndexTuple) it, + it = (IndexTuple) PageGetItem(p, PageGetItemId(p, n)); + if (gistindex_keytest(it, RelationGetDescr(s->relation), s->numberOfKeys, s->keyData, giststate, s->relation, p, n)) |