diff options
author | Don Anderson <dda@mongodb.com> | 2016-05-02 11:36:37 -0400 |
---|---|---|
committer | Don Anderson <dda@mongodb.com> | 2016-05-02 11:36:37 -0400 |
commit | 92497038c06e5ef7e640434fe2b4a1166f644174 (patch) | |
tree | b507ac814477c42914bda5e16126103772464a8f | |
parent | 29c36f5e86b3e772924486d1da737b1a58c76a48 (diff) | |
download | mongo-92497038c06e5ef7e640434fe2b4a1166f644174.tar.gz |
WT-2592 Fix joins for the non-recno, non-raw case (#2705)
WT-2592 Fix joins for the non-recno, non-raw case. Also detect a failed search as the last step of the WT_CURSOR::next() operation, and distinguish it from WT_NOTFOUND.
-rw-r--r-- | src/cursor/cur_join.c | 21 |
1 files changed, 9 insertions, 12 deletions
diff --git a/src/cursor/cur_join.c b/src/cursor/cur_join.c index 8bf7007527b..675d4851b38 100644 --- a/src/cursor/cur_join.c +++ b/src/cursor/cur_join.c @@ -1076,7 +1076,6 @@ __curjoin_next(WT_CURSOR *cursor) WT_CURSOR_JOIN_ITER *iter; WT_DECL_RET; WT_SESSION_IMPL *session; - const uint8_t *p; int tret; cjoin = (WT_CURSOR_JOIN *)cursor; @@ -1104,19 +1103,17 @@ __curjoin_next(WT_CURSOR *cursor) if (ret == 0) { /* - * Position the 'main' cursor, this will be used to - * retrieve values from the cursor join. + * Position the 'main' cursor, this will be used to retrieve + * values from the cursor join. The key we have is raw, but + * the main cursor may not be raw. */ c = cjoin->main; - if (WT_CURSOR_RECNO(cursor) && - !F_ISSET(cursor, WT_CURSTD_RAW)) { - p = (const uint8_t *)iter->curkey->data; - WT_ERR(__wt_vunpack_uint(&p, iter->curkey->size, - &cjoin->iface.recno)); - c->set_key(c, cjoin->iface.recno); - } else - c->set_key(c, iter->curkey); - WT_ERR(c->search(c)); + __wt_cursor_set_raw_key(c, iter->curkey); + + /* A failed search is not expected, don't return WT_NOTFOUND. */ + if ((ret = c->search(c)) == WT_NOTFOUND) + ret = WT_ERROR; + WT_ERR(ret); F_SET(cursor, WT_CURSTD_KEY_INT | WT_CURSTD_VALUE_INT); } else if (ret == WT_NOTFOUND && (tret = __curjoin_iter_close_all(iter)) != 0) |