mirror of
https://git.openldap.org/openldap/openldap.git
synced 2025-12-24 00:29:35 -05:00
Add MDB_PREV_MULTIPLE
Logical counterpart to GET_MULTIPLE, NEXT_MULTIPLE
This commit is contained in:
parent
5db0b54ca1
commit
27b1c5f366
2 changed files with 25 additions and 1 deletions
|
|
@ -392,7 +392,9 @@ typedef enum MDB_cursor_op {
|
|||
MDB_PREV_NODUP, /**< Position at last data item of previous key */
|
||||
MDB_SET, /**< Position at specified key */
|
||||
MDB_SET_KEY, /**< Position at specified key, return key + data */
|
||||
MDB_SET_RANGE /**< Position at first key greater than or equal to specified key. */
|
||||
MDB_SET_RANGE, /**< Position at first key greater than or equal to specified key. */
|
||||
MDB_PREV_MULTIPLE /**< Position at previous page and return key and up to
|
||||
a page of duplicate data items. Only for #MDB_DUPFIXED */
|
||||
} MDB_cursor_op;
|
||||
|
||||
/** @defgroup errors Return Codes
|
||||
|
|
|
|||
|
|
@ -6997,6 +6997,28 @@ fetchm:
|
|||
}
|
||||
}
|
||||
break;
|
||||
case MDB_PREV_MULTIPLE:
|
||||
if (data == NULL) {
|
||||
rc = EINVAL;
|
||||
break;
|
||||
}
|
||||
if (!(mc->mc_db->md_flags & MDB_DUPFIXED)) {
|
||||
rc = MDB_INCOMPATIBLE;
|
||||
break;
|
||||
}
|
||||
if (!(mc->mc_flags & C_INITIALIZED))
|
||||
rc = mdb_cursor_first(mc, key, data);
|
||||
else {
|
||||
MDB_cursor *mx = &mc->mc_xcursor->mx_cursor;
|
||||
if (mx->mc_flags & C_INITIALIZED) {
|
||||
rc = mdb_cursor_sibling(mx, 0);
|
||||
if (rc == MDB_SUCCESS)
|
||||
goto fetchm;
|
||||
} else {
|
||||
rc = MDB_NOTFOUND;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case MDB_NEXT:
|
||||
case MDB_NEXT_DUP:
|
||||
case MDB_NEXT_NODUP:
|
||||
|
|
|
|||
Loading…
Reference in a new issue