mirror of
https://git.openldap.org/openldap/openldap.git
synced 2025-12-27 10:09:43 -05:00
Merge remote-tracking branch 'origin/mdb.master'
This commit is contained in:
commit
2a68553ec1
2 changed files with 28 additions and 0 deletions
|
|
@ -4261,6 +4261,33 @@ mdb_cursor_get(MDB_cursor *mc, MDB_val *key, MDB_val *data,
|
|||
assert(mc);
|
||||
|
||||
switch (op) {
|
||||
case MDB_GET_CURRENT:
|
||||
if (!mc->mc_flags & C_INITIALIZED) {
|
||||
rc = EINVAL;
|
||||
} else {
|
||||
MDB_page *mp = mc->mc_pg[mc->mc_top];
|
||||
if (!NUMKEYS(mp)) {
|
||||
mc->mc_ki[mc->mc_top] = 0;
|
||||
rc = MDB_NOTFOUND;
|
||||
break;
|
||||
}
|
||||
rc = MDB_SUCCESS;
|
||||
if (IS_LEAF2(mp)) {
|
||||
key->mv_size = mc->mc_db->md_pad;
|
||||
key->mv_data = LEAF2KEY(mp, mc->mc_ki[mc->mc_top], key->mv_size);
|
||||
} else {
|
||||
MDB_node *leaf = NODEPTR(mp, mc->mc_ki[mc->mc_top]);
|
||||
MDB_GET_KEY(leaf, key);
|
||||
if (data) {
|
||||
if (F_ISSET(leaf->mn_flags, F_DUPDATA)) {
|
||||
rc = mdb_cursor_get(&mc->mc_xcursor->mx_cursor, data, NULL, MDB_GET_CURRENT);
|
||||
} else {
|
||||
rc = mdb_node_read(mc->mc_txn, leaf, data);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
case MDB_GET_BOTH:
|
||||
case MDB_GET_BOTH_RANGE:
|
||||
if (data == NULL || mc->mc_xcursor == NULL) {
|
||||
|
|
|
|||
|
|
@ -229,6 +229,7 @@ typedef enum MDB_cursor_op {
|
|||
Only for #MDB_DUPSORT */
|
||||
MDB_GET_BOTH, /**< Position at key/data pair. Only for #MDB_DUPSORT */
|
||||
MDB_GET_BOTH_RANGE, /**< position at key, nearest data. Only for #MDB_DUPSORT */
|
||||
MDB_GET_CURRENT, /**< Return key/data at current cursor position */
|
||||
MDB_GET_MULTIPLE, /**< Return all the duplicate data items at the current
|
||||
cursor position. Only for #MDB_DUPFIXED */
|
||||
MDB_LAST, /**< Position at last key/data item */
|
||||
|
|
|
|||
Loading…
Reference in a new issue