Cursor::set_last was panicking on empty pages

[?]
Feb 21, 2021, 7:15 PM
6BG65Y2PPKIARIAK57ZUQTA6LXW3TUD6I6FTGZH23V4J3EAMHOXQC

Dependencies

Change contents

  • replacement in sanakirja-core/src/btree/cursor.rs at line 214
    [3.68135][2.19851:19950](),[3.11688][3.68404:68443](),[2.19950][3.68404:68443](),[3.35118][3.68404:68443](),[3.8621][3.68404:68443](),[3.25312][3.68404:68443](),[3.68404][3.68404:68443](),[3.11744][3.68443:68466](),[3.68443][3.68443:68466](),[3.68466][3.11745:11830](),[3.11830][3.15584:15635](),[3.15635][3.11830:11856](),[3.11830][3.11830:11856](),[3.11916][3.68653:68672](),[3.68653][3.68653:68672]()
    let (k, v, r) = P::current(txn, current.page.as_page(), &mut current.cursor).unwrap();
    last_match = Some((k, v));
    if r > 0 {
    let page = txn.load_page(r)?;
    self.push(PageCursor {
    cursor: P::cursor_last(&page),
    page,
    })
    [3.68135]
    [3.68672]
    if let Some((k, v, r)) = P::current(txn, current.page.as_page(), &mut current.cursor) {
    last_match = Some((k, v));
    if r > 0 {
    let page = txn.load_page(r)?;
    self.push(PageCursor {
    cursor: P::cursor_last(&page),
    page,
    })
    } else {
    break;
    }
  • replacement in sanakirja-core/src/btree/cursor.rs at line 226
    [3.68693][3.68693:68716]()
    break;
    [3.68693]
    [3.68716]
    // The page is empty, meaning there's no right or left child.
    debug_assert!(P::is_init(&current.cursor));
    // Assert we're looking at the root.
    debug_assert_eq!(self.len, 1);
    // And the root has no child.
    debug_assert_eq!(P::right_child(current.page.as_page(), &current.cursor), 0);
    return Ok(None);