mirror of
https://git.openldap.org/openldap/openldap.git
synced 2025-03-13 14:27:59 +08:00
Add mdb_cursor_renew()
Allow cursors on read-only txns to be reused with later txns.
This commit is contained in:
parent
076b2b36a9
commit
acbff5b1ea
@ -5285,6 +5285,19 @@ mdb_cursor_open(MDB_txn *txn, MDB_dbi dbi, MDB_cursor **ret)
|
||||
return MDB_SUCCESS;
|
||||
}
|
||||
|
||||
int
|
||||
mdb_cursor_renew(MDB_txn *txn, MDB_cursor *mc)
|
||||
{
|
||||
if (txn == NULL || mc == NULL || mc->mc_dbi >= txn->mt_numdbs)
|
||||
return EINVAL;
|
||||
|
||||
if (txn->mt_cursors)
|
||||
return EINVAL;
|
||||
|
||||
mdb_cursor_init(mc, txn, mc->mc_dbi, mc->mc_xcursor);
|
||||
return MDB_SUCCESS;
|
||||
}
|
||||
|
||||
/* Return the count of duplicate data items for the current key */
|
||||
int
|
||||
mdb_cursor_count(MDB_cursor *mc, size_t *countp)
|
||||
|
@ -904,6 +904,23 @@ int mdb_cursor_open(MDB_txn *txn, MDB_dbi dbi, MDB_cursor **cursor);
|
||||
*/
|
||||
void mdb_cursor_close(MDB_cursor *cursor);
|
||||
|
||||
/** @brief Renew a cursor handle.
|
||||
*
|
||||
* Cursors are associated with a specific transaction and database and
|
||||
* may not span threads. Cursors that are only used in read-only
|
||||
* transactions may be re-used, to avoid unnecessary malloc/free overhead.
|
||||
* The cursor may be associated with a new read-only transaction, and
|
||||
* referencing the same database handle as it was created with.
|
||||
* @param[in] txn A transaction handle returned by #mdb_txn_begin()
|
||||
* @param[in] cursor A cursor handle returned by #mdb_cursor_open()
|
||||
* @return A non-zero error value on failure and 0 on success. Some possible
|
||||
* errors are:
|
||||
* <ul>
|
||||
* <li>EINVAL - an invalid parameter was specified.
|
||||
* </ul>
|
||||
*/
|
||||
int mdb_cursor_renew(MDB_txn *txn, MDB_cursor *cursor);
|
||||
|
||||
/** @brief Return the cursor's transaction handle.
|
||||
*
|
||||
* @param[in] cursor A cursor handle returned by #mdb_cursor_open()
|
||||
|
Loading…
x
Reference in New Issue
Block a user