mirror of
https://github.com/aljazceru/turso.git
synced 2026-02-11 11:14:21 +01:00
fix get record
This commit is contained in:
committed by
Jussi Saurio
parent
b46852a366
commit
681df9b1eb
@@ -3973,7 +3973,10 @@ impl BTreeCursor {
|
||||
/// Return a reference to the record the cursor is currently pointing to.
|
||||
/// If record was not parsed yet, then we have to parse it and in case of I/O we yield control
|
||||
/// back.
|
||||
pub fn record(&self) -> Result<CursorResult<Ref<Option<ImmutableRecord>>>> {
|
||||
pub fn record(&self) -> Result<CursorResult<Option<Ref<ImmutableRecord>>>> {
|
||||
if !self.has_record.get() {
|
||||
return Ok(CursorResult::Ok(None));
|
||||
}
|
||||
let invalidated = self
|
||||
.reusable_immutable_record
|
||||
.borrow()
|
||||
@@ -3981,7 +3984,10 @@ impl BTreeCursor {
|
||||
.map_or(true, |record| record.is_invalidated());
|
||||
if !invalidated {
|
||||
*self.parse_record_state.borrow_mut() = ParseRecordState::Init;
|
||||
return Ok(CursorResult::Ok(self.reusable_immutable_record.borrow()));
|
||||
let record_ref =
|
||||
Ref::filter_map(self.reusable_immutable_record.borrow(), |opt| opt.as_ref())
|
||||
.unwrap();
|
||||
return Ok(CursorResult::Ok(Some(record_ref)));
|
||||
}
|
||||
if *self.parse_record_state.borrow() == ParseRecordState::Init {
|
||||
*self.parse_record_state.borrow_mut() = ParseRecordState::Parsing {
|
||||
@@ -4029,7 +4035,9 @@ impl BTreeCursor {
|
||||
};
|
||||
|
||||
*self.parse_record_state.borrow_mut() = ParseRecordState::Init;
|
||||
Ok(CursorResult::Ok(self.reusable_immutable_record.borrow()))
|
||||
let record_ref =
|
||||
Ref::filter_map(self.reusable_immutable_record.borrow(), |opt| opt.as_ref()).unwrap();
|
||||
Ok(CursorResult::Ok(Some(record_ref)))
|
||||
}
|
||||
|
||||
#[instrument(skip_all, level = Level::TRACE)]
|
||||
@@ -4291,7 +4299,7 @@ impl BTreeCursor {
|
||||
// FIXME(pere): cell index must be updated before calling `rowid` or
|
||||
// `record`
|
||||
let target_key = if page.is_index() {
|
||||
let record = match &*return_if_io!(self.record()) {
|
||||
let record = match return_if_io!(self.record()) {
|
||||
Some(record) => record.clone(),
|
||||
None => unreachable!("there should've been a record"),
|
||||
};
|
||||
@@ -6689,7 +6697,7 @@ mod tests {
|
||||
for key in keys.iter() {
|
||||
tracing::trace!("seeking key: {:?}", key);
|
||||
run_until_done(|| cursor.next(), pager.deref()).unwrap();
|
||||
let record = cursor.record();
|
||||
let record = run_until_done(|| cursor.record(), &pager).unwrap();
|
||||
let record = record.as_ref().unwrap();
|
||||
let cursor_key = record.get_values();
|
||||
assert_eq!(
|
||||
|
||||
@@ -2160,7 +2160,7 @@ pub fn op_idx_ge(
|
||||
let mut cursor = state.get_cursor(*cursor_id);
|
||||
let cursor = cursor.as_btree_mut();
|
||||
let record_from_regs = make_record(&state.registers, start_reg, num_regs);
|
||||
let pc = if let Some(ref idx_record) = *return_if_io!(cursor.record()) {
|
||||
let pc = if let Some(idx_record) = return_if_io!(cursor.record()) {
|
||||
// Compare against the same number of values
|
||||
let idx_values = idx_record.get_values();
|
||||
let idx_values = &idx_values[..record_from_regs.len()];
|
||||
@@ -2224,7 +2224,7 @@ pub fn op_idx_le(
|
||||
let mut cursor = state.get_cursor(*cursor_id);
|
||||
let cursor = cursor.as_btree_mut();
|
||||
let record_from_regs = make_record(&state.registers, start_reg, num_regs);
|
||||
let pc = if let Some(ref idx_record) = *return_if_io!(cursor.record()) {
|
||||
let pc = if let Some(ref idx_record) = return_if_io!(cursor.record()) {
|
||||
// Compare against the same number of values
|
||||
let idx_values = idx_record.get_values();
|
||||
let idx_values = &idx_values[..record_from_regs.len()];
|
||||
@@ -2270,7 +2270,7 @@ pub fn op_idx_gt(
|
||||
let mut cursor = state.get_cursor(*cursor_id);
|
||||
let cursor = cursor.as_btree_mut();
|
||||
let record_from_regs = make_record(&state.registers, start_reg, num_regs);
|
||||
let pc = if let Some(ref idx_record) = *return_if_io!(cursor.record()) {
|
||||
let pc = if let Some(ref idx_record) = return_if_io!(cursor.record()) {
|
||||
// Compare against the same number of values
|
||||
let idx_values = idx_record.get_values();
|
||||
let idx_values = &idx_values[..record_from_regs.len()];
|
||||
@@ -2316,7 +2316,7 @@ pub fn op_idx_lt(
|
||||
let mut cursor = state.get_cursor(*cursor_id);
|
||||
let cursor = cursor.as_btree_mut();
|
||||
let record_from_regs = make_record(&state.registers, start_reg, num_regs);
|
||||
let pc = if let Some(ref idx_record) = *return_if_io!(cursor.record()) {
|
||||
let pc = if let Some(ref idx_record) = return_if_io!(cursor.record()) {
|
||||
// Compare against the same number of values
|
||||
let idx_values = idx_record.get_values();
|
||||
let idx_values = &idx_values[..record_from_regs.len()];
|
||||
|
||||
Reference in New Issue
Block a user