diff --git a/core/storage/btree.rs b/core/storage/btree.rs index eac034f5a..d6527c777 100644 --- a/core/storage/btree.rs +++ b/core/storage/btree.rs @@ -4120,28 +4120,6 @@ impl BTreeCursor { /// back. #[instrument(skip(self), level = Level::INFO)] pub fn record(&self) -> Result>>> { - if self.mv_cursor.is_some() { - let mv_cursor = self.mv_cursor.as_ref().unwrap().borrow(); - if let Some(row) = mv_cursor.current_row().unwrap() { - // Follow the same pattern as the non-MVCC path - self.get_immutable_record_or_create() - .as_mut() - .unwrap() - .invalidate(); - self.get_immutable_record_or_create() - .as_mut() - .unwrap() - .start_serialization(&row.data); - self.record_cursor.borrow_mut().invalidate(); - - let record_ref = - Ref::filter_map(self.reusable_immutable_record.borrow(), |opt| opt.as_ref()) - .unwrap(); - return Ok(IOResult::Done(Some(record_ref))); - } else { - return Ok(IOResult::Done(None)); - } - } if !self.has_record.get() { return Ok(IOResult::Done(None)); } @@ -4157,6 +4135,24 @@ impl BTreeCursor { .unwrap(); return Ok(IOResult::Done(Some(record_ref))); } + if self.mv_cursor.is_some() { + let mv_cursor = self.mv_cursor.as_ref().unwrap().borrow(); + let row = mv_cursor.current_row().unwrap().unwrap(); + self.get_immutable_record_or_create() + .as_mut() + .unwrap() + .invalidate(); + self.get_immutable_record_or_create() + .as_mut() + .unwrap() + .start_serialization(&row.data); + self.record_cursor.borrow_mut().invalidate(); + let record_ref = + Ref::filter_map(self.reusable_immutable_record.borrow(), |opt| opt.as_ref()) + .unwrap(); + return Ok(IOResult::Done(Some(record_ref))); + } + if *self.parse_record_state.borrow() == ParseRecordState::Init { *self.parse_record_state.borrow_mut() = ParseRecordState::Parsing { payload: Vec::new(),