mirror of
https://git.openldap.org/openldap/openldap.git
synced 2026-01-06 23:19:59 -05:00
ITS#7913 mdb_cursor_get(*_DUP) cleanup
FIRST_DUP/LAST_DUP should succeed even on non-duplicate values PREV_DUP should reset cursor's EOF flag.
This commit is contained in:
parent
3630066843
commit
8498c6cba2
1 changed files with 12 additions and 1 deletions
|
|
@ -5355,8 +5355,10 @@ mdb_cursor_prev(MDB_cursor *mc, MDB_val *key, MDB_val *data, MDB_cursor_op op)
|
|||
if (op == MDB_PREV || op == MDB_PREV_DUP) {
|
||||
rc = mdb_cursor_prev(&mc->mc_xcursor->mx_cursor, data, NULL, MDB_PREV);
|
||||
if (op != MDB_PREV || rc != MDB_NOTFOUND) {
|
||||
if (rc == MDB_SUCCESS)
|
||||
if (rc == MDB_SUCCESS) {
|
||||
MDB_GET_KEY(leaf, key);
|
||||
mc->mc_flags &= ~C_EOF;
|
||||
}
|
||||
return rc;
|
||||
}
|
||||
} else {
|
||||
|
|
@ -5833,6 +5835,15 @@ fetchm:
|
|||
rc = MDB_INCOMPATIBLE;
|
||||
break;
|
||||
}
|
||||
{
|
||||
MDB_node *leaf = NODEPTR(mc->mc_pg[mc->mc_top], mc->mc_ki[mc->mc_top]);
|
||||
if (!F_ISSET(leaf->mn_flags, F_DUPDATA)) {
|
||||
MDB_GET_KEY(leaf, key);
|
||||
if (data)
|
||||
rc = mdb_node_read(mc->mc_txn, leaf, data);
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!(mc->mc_xcursor->mx_cursor.mc_flags & C_INITIALIZED)) {
|
||||
rc = EINVAL;
|
||||
break;
|
||||
|
|
|
|||
Loading…
Reference in a new issue