rc = mdb_cursor_first(&mc->mc_xcursor->mx_cursor, data, NULL);
if (rc != MDB_SUCCESS)
return rc;
+ } else if (mc->mc_db->md_flags & MDB_DUPSORT) {
+ mc->mc_xcursor->mx_cursor.mc_flags &= ~C_INITIALIZED;
}
}
break;
}
rc = MDB_SUCCESS;
- if (!(mc->mc_xcursor->mx_cursor.mc_flags & C_INITIALIZED) ||
- (mc->mc_xcursor->mx_cursor.mc_flags & C_EOF))
+ if (!(mc->mc_xcursor->mx_cursor.mc_flags & C_INITIALIZED))
+ goto fetch;
+ if (mc->mc_xcursor->mx_cursor.mc_flags & C_EOF)
break;
goto fetchm;
case MDB_NEXT_MULTIPLE:
if (!(mc->mc_flags & C_INITIALIZED))
rc = mdb_cursor_first(mc, key, data);
else
- rc = mdb_cursor_next(mc, key, data, MDB_NEXT_DUP);
+ rc = mdb_cursor_next(mc, key, data, MDB_NEXT_NODUP);
if (rc == MDB_SUCCESS) {
if (mc->mc_xcursor->mx_cursor.mc_flags & C_INITIALIZED) {
MDB_cursor *mx;
data->mv_data = METADATA(mx->mc_pg[mx->mc_top]);
mx->mc_ki[mx->mc_top] = NUMKEYS(mx->mc_pg[mx->mc_top])-1;
} else {
- rc = MDB_NOTFOUND;
+ MDB_node *leaf;
+fetch:
+ leaf = NODEPTR(mc->mc_pg[mc->mc_top], mc->mc_ki[mc->mc_top]);
+ data->mv_size = NODEDSZ(leaf);
+ data->mv_data = NODEDATA(leaf);
}
}
break;