mirror of
https://git.openldap.org/openldap/openldap.git
synced 2025-01-18 11:05:48 +08:00
Merge remote-tracking branch 'origin/mdb.RE/0.9'
This commit is contained in:
commit
a6ea07dd63
@ -5752,15 +5752,21 @@ set1:
|
||||
return rc;
|
||||
}
|
||||
} else if (op == MDB_GET_BOTH || op == MDB_GET_BOTH_RANGE) {
|
||||
MDB_val d2;
|
||||
if ((rc = mdb_node_read(mc->mc_txn, leaf, &d2)) != MDB_SUCCESS)
|
||||
MDB_val olddata;
|
||||
MDB_cmp_func *dcmp;
|
||||
if ((rc = mdb_node_read(mc->mc_txn, leaf, &olddata)) != MDB_SUCCESS)
|
||||
return rc;
|
||||
rc = mc->mc_dbx->md_dcmp(data, &d2);
|
||||
dcmp = mc->mc_dbx->md_dcmp;
|
||||
#if UINT_MAX < SIZE_MAX
|
||||
if (dcmp == mdb_cmp_int && olddata.mv_size == sizeof(size_t))
|
||||
dcmp = mdb_cmp_clong;
|
||||
#endif
|
||||
rc = dcmp(data, &olddata);
|
||||
if (rc) {
|
||||
if (op == MDB_GET_BOTH || rc > 0)
|
||||
return MDB_NOTFOUND;
|
||||
rc = 0;
|
||||
*data = d2;
|
||||
*data = olddata;
|
||||
}
|
||||
|
||||
} else {
|
||||
@ -6270,16 +6276,17 @@ more:
|
||||
|
||||
/* Was a single item before, must convert now */
|
||||
if (!F_ISSET(leaf->mn_flags, F_DUPDATA)) {
|
||||
MDB_cmp_func *dcmp;
|
||||
/* Just overwrite the current item */
|
||||
if (flags == MDB_CURRENT)
|
||||
goto current;
|
||||
|
||||
dcmp = mc->mc_dbx->md_dcmp;
|
||||
#if UINT_MAX < SIZE_MAX
|
||||
if (mc->mc_dbx->md_dcmp == mdb_cmp_int && olddata.mv_size == sizeof(size_t))
|
||||
mc->mc_dbx->md_dcmp = mdb_cmp_clong;
|
||||
if (dcmp == mdb_cmp_int && olddata.mv_size == sizeof(size_t))
|
||||
dcmp = mdb_cmp_clong;
|
||||
#endif
|
||||
/* does data match? */
|
||||
if (!mc->mc_dbx->md_dcmp(data, &olddata)) {
|
||||
if (!dcmp(data, &olddata)) {
|
||||
if (flags & MDB_NODUPDATA)
|
||||
return MDB_KEYEXIST;
|
||||
/* overwrite it */
|
||||
@ -7076,15 +7083,13 @@ mdb_xcursor_init1(MDB_cursor *mc, MDB_node *node)
|
||||
mx->mx_db.md_flags |= MDB_INTEGERKEY;
|
||||
}
|
||||
}
|
||||
#if UINT_MAX < SIZE_MAX
|
||||
if (mc->mc_dbx->md_dcmp == mdb_cmp_int && mx->mx_db.md_pad == sizeof(size_t)) {
|
||||
mc->mc_dbx->md_dcmp = mdb_cmp_clong;
|
||||
mx->mx_dbx.md_cmp = mdb_cmp_clong;
|
||||
}
|
||||
#endif
|
||||
DPRINTF(("Sub-db -%u root page %"Z"u", mx->mx_cursor.mc_dbi,
|
||||
mx->mx_db.md_root));
|
||||
mx->mx_dbflag = DB_VALID|DB_DIRTY; /* DB_DIRTY guides mdb_cursor_touch */
|
||||
#if UINT_MAX < SIZE_MAX
|
||||
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;
|
||||
#endif
|
||||
}
|
||||
|
||||
/** Initialize a cursor for a given transaction and database. */
|
||||
|
Loading…
Reference in New Issue
Block a user