MDB_page *fp;
MDB_db dummy;
int do_sub = 0;
+ unsigned int mcount = 0;
size_t nsize;
int rc, rc2;
char pbuf[PAGESIZE];
/* DB has dups? */
if (F_ISSET(mc->mc_db->md_flags, MDB_DUPSORT)) {
/* Was a single item before, must convert now */
+more:
if (!F_ISSET(leaf->mn_flags, F_DUPDATA)) {
/* Just overwrite the current item */
if (flags == MDB_CURRENT)
*/
if (!rc && !(flags & MDB_CURRENT))
mc->mc_db->md_entries++;
+ if (flags & MDB_MULTIPLE) {
+ mcount++;
+ if (mcount < data[1].mv_size) {
+ data[0].mv_data = (char *)data[0].mv_data + data[0].mv_size;
+ leaf = NODEPTR(mc->mc_pg[mc->mc_top], mc->mc_ki[mc->mc_top]);
+ goto more;
+ }
+ }
}
done:
return rc;
if (nflags & MDB_APPEND) {
mn.mc_ki[mn.mc_top] = 0;
sepkey = *newkey;
+ nkeys = 0;
+ split_indx = 0;
goto newsep;
}
#define MDB_RESERVE 0x10000
/** Data is being appended, don't split full pages. */
#define MDB_APPEND 0x20000
+/** Store multiple data items in one call. */
+#define MDB_MULTIPLE 0x40000
/* @} */
/** @brief Cursor Get operations.