mirror of
https://github.com/isar/libmdbx.git
synced 2025-01-22 08:08:20 +08:00
mdbx: backport - Cleanup: Add flag DB_DUPDATA, drop DB_DIRTY hack.
Change-Id: I5d30367104d025c1d2f8c39d29455faca59d7f19
This commit is contained in:
parent
b33fe4a3f0
commit
7b773e6f2d
10
mdb.c
10
mdb.c
@ -859,11 +859,12 @@ struct MDB_txn {
|
|||||||
* @ingroup internal
|
* @ingroup internal
|
||||||
* @{
|
* @{
|
||||||
*/
|
*/
|
||||||
#define DB_DIRTY 0x01 /**< DB was modified or is DUPSORT data */
|
#define DB_DIRTY 0x01 /**< DB was written in this txn */
|
||||||
#define DB_STALE 0x02 /**< Named-DB record is older than txnID */
|
#define DB_STALE 0x02 /**< Named-DB record is older than txnID */
|
||||||
#define DB_NEW 0x04 /**< Named-DB handle opened in this txn */
|
#define DB_NEW 0x04 /**< Named-DB handle opened in this txn */
|
||||||
#define DB_VALID 0x08 /**< DB handle is valid, see also #MDB_VALID */
|
#define DB_VALID 0x08 /**< DB handle is valid, see also #MDB_VALID */
|
||||||
#define DB_USRVALID 0x10 /**< As #DB_VALID, but not set for #FREE_DBI */
|
#define DB_USRVALID 0x10 /**< As #DB_VALID, but not set for #FREE_DBI */
|
||||||
|
#define DB_DUPDATA 0x20 /**< DB is #MDB_DUPSORT data */
|
||||||
/** @} */
|
/** @} */
|
||||||
/** In write txns, array of cursors for each DB */
|
/** In write txns, array of cursors for each DB */
|
||||||
MDB_cursor **mt_cursors;
|
MDB_cursor **mt_cursors;
|
||||||
@ -6465,7 +6466,8 @@ mdb_cursor_touch(MDB_cursor *mc)
|
|||||||
{
|
{
|
||||||
int rc = MDB_SUCCESS;
|
int rc = MDB_SUCCESS;
|
||||||
|
|
||||||
if (mc->mc_dbi >= CORE_DBS && !(*mc->mc_dbflag & DB_DIRTY)) {
|
if (mc->mc_dbi >= CORE_DBS && !(*mc->mc_dbflag & (DB_DIRTY|DB_DUPDATA))) {
|
||||||
|
/* Touch DB record of named DB */
|
||||||
MDB_cursor mc2;
|
MDB_cursor mc2;
|
||||||
MDB_xcursor mcx;
|
MDB_xcursor mcx;
|
||||||
if (TXN_DBI_CHANGED(mc->mc_txn, mc->mc_dbi))
|
if (TXN_DBI_CHANGED(mc->mc_txn, mc->mc_dbi))
|
||||||
@ -7550,7 +7552,7 @@ mdb_xcursor_init1(MDB_cursor *mc, MDB_node *node)
|
|||||||
}
|
}
|
||||||
mdb_debug("Sub-db -%u root page %zu", mx->mx_cursor.mc_dbi,
|
mdb_debug("Sub-db -%u root page %zu", mx->mx_cursor.mc_dbi,
|
||||||
mx->mx_db.md_root);
|
mx->mx_db.md_root);
|
||||||
mx->mx_dbflag = DB_VALID|DB_USRVALID|DB_DIRTY; /* DB_DIRTY guides mdb_cursor_touch */
|
mx->mx_dbflag = DB_VALID|DB_USRVALID|DB_DUPDATA;
|
||||||
/* #if UINT_MAX < SIZE_MAX
|
/* #if UINT_MAX < SIZE_MAX
|
||||||
if (mx->mx_dbx.md_cmp == mdb_cmp_int && mx->mx_db.md_pad == sizeof(size_t))
|
if (mx->mx_dbx.md_cmp == mdb_cmp_int && mx->mx_db.md_pad == sizeof(size_t))
|
||||||
mx->mx_dbx.md_cmp = mdb_cmp_clong;
|
mx->mx_dbx.md_cmp = mdb_cmp_clong;
|
||||||
@ -7576,7 +7578,7 @@ mdb_xcursor_init2(MDB_cursor *mc, MDB_xcursor *src_mx, int new_dupdata)
|
|||||||
mx->mx_cursor.mc_top = 0;
|
mx->mx_cursor.mc_top = 0;
|
||||||
mx->mx_cursor.mc_flags |= C_INITIALIZED;
|
mx->mx_cursor.mc_flags |= C_INITIALIZED;
|
||||||
mx->mx_cursor.mc_ki[0] = 0;
|
mx->mx_cursor.mc_ki[0] = 0;
|
||||||
mx->mx_dbflag = DB_VALID|DB_USRVALID|DB_DIRTY; /* DB_DIRTY guides mdb_cursor_touch */
|
mx->mx_dbflag = DB_VALID|DB_USRVALID|DB_DUPDATA;
|
||||||
#if UINT_MAX < SIZE_MAX
|
#if UINT_MAX < SIZE_MAX
|
||||||
mx->mx_dbx.md_cmp = src_mx->mx_dbx.md_cmp;
|
mx->mx_dbx.md_cmp = src_mx->mx_dbx.md_cmp;
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
x
Reference in New Issue
Block a user