diff options
| author | Marc G. Fournier <scrappy@hub.org> | 1996-07-30 07:56:04 +0000 |
|---|---|---|
| committer | Marc G. Fournier <scrappy@hub.org> | 1996-07-30 07:56:04 +0000 |
| commit | 74cdf928687ac62db73b72509e1e11b9008a6bf2 (patch) | |
| tree | 8e556818774c9f880bba2e307bb9492d6e101200 /src/backend/access/nbtree/nbtsearch.c | |
| parent | e5e12f640571f1d1a440d868454afd543beb73fd (diff) | |
Fixes:
> INDEXED searches in some cases DO NOT WORK.
> Although simple search expressions (i.e. with a constant value on
> the right side of an operator) work, performing a join (by putting
> a field of some other table on the right side of an operator) produces
> empty output.
> WITHOUT indices, everything works fine.
>
submitted by: "Vadim B. Mikheev" <root@ais.sable.krasnoyarsk.su>
Diffstat (limited to 'src/backend/access/nbtree/nbtsearch.c')
| -rw-r--r-- | src/backend/access/nbtree/nbtsearch.c | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/src/backend/access/nbtree/nbtsearch.c b/src/backend/access/nbtree/nbtsearch.c index d7a7fc7d62e..3756c2fc30c 100644 --- a/src/backend/access/nbtree/nbtsearch.c +++ b/src/backend/access/nbtree/nbtsearch.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/access/nbtree/nbtsearch.c,v 1.1.1.1 1996/07/09 06:21:12 scrappy Exp $ + * $Header: /cvsroot/pgsql/src/backend/access/nbtree/nbtsearch.c,v 1.2 1996/07/30 07:56:02 scrappy Exp $ * *------------------------------------------------------------------------- */ @@ -604,6 +604,10 @@ _bt_first(IndexScanDesc scan, ScanDirection dir) BTScanOpaque so; ScanKeyData skdata; + so = (BTScanOpaque) scan->opaque; + if ( so->qual_ok == 0 ) /* may be set by _bt_orderkeys */ + return ((RetrieveIndexResult) NULL); + /* if we just need to walk down one edge of the tree, do that */ if (scan->scanFromEnd) return (_bt_endpoint(scan, dir)); @@ -611,7 +615,6 @@ _bt_first(IndexScanDesc scan, ScanDirection dir) rel = scan->relation; itupdesc = RelationGetTupleDescriptor(scan->relation); current = &(scan->currentItemData); - so = (BTScanOpaque) scan->opaque; /* * Okay, we want something more complicated. What we'll do is use @@ -628,7 +631,7 @@ _bt_first(IndexScanDesc scan, ScanDirection dir) */ proc = index_getprocid(rel, 1, BTORDER_PROC); ScanKeyEntryInitialize(&skdata, 0x0, 1, proc, - scan->keyData[0].sk_argument); + so->keyData[0].sk_argument); stack = _bt_search(rel, 1, &skdata, &buf); _bt_freestack(stack); @@ -666,7 +669,7 @@ _bt_first(IndexScanDesc scan, ScanDirection dir) */ result = _bt_compare(rel, itupdesc, page, 1, &skdata, offnum); - strat = _bt_getstrat(rel, 1, scan->keyData[0].sk_procedure); + strat = _bt_getstrat(rel, 1, so->keyData[0].sk_procedure); switch (strat) { case BTLessStrategyNumber: |
