add sqlite debug cli for nix. Fix cursor delete panic. Add tracing for cell indices in btree

This commit is contained in:
pedrocarlo 2025-05-01 16:16:59 -03:00
parent 6588004f80
commit c146877344
2 changed files with 54 additions and 8 deletions

View file

@ -756,8 +756,11 @@ impl BTreeCursor {
let mem_page = mem_page_rc.get(); let mem_page = mem_page_rc.get();
let contents = mem_page.contents.as_ref().unwrap(); let contents = mem_page.contents.as_ref().unwrap();
let cell_count = contents.cell_count();
if cell_idx == contents.cell_count() { tracing::trace!(cell_idx, cell_count, "get_next_record");
if cell_count == 0 || cell_idx == cell_count {
// do rightmost // do rightmost
let has_parent = self.stack.has_parent(); let has_parent = self.stack.has_parent();
match contents.rightmost_pointer() { match contents.rightmost_pointer() {
@ -3590,7 +3593,9 @@ impl BTreeCursor {
DeleteState::FindCell => { DeleteState::FindCell => {
let page = self.stack.top(); let page = self.stack.top();
let mut cell_idx = self.stack.current_cell_index() as usize; let mut cell_idx = self.stack.current_cell_index() as usize;
cell_idx -= 1; if cell_idx > 0 {
cell_idx -= 1;
}
let contents = page.get().contents.as_ref().unwrap(); let contents = page.get().contents.as_ref().unwrap();
if cell_idx >= contents.cell_count() { if cell_idx >= contents.cell_count() {
@ -4439,6 +4444,11 @@ impl PageStack {
/// Cell index of the current page /// Cell index of the current page
fn current_cell_index(&self) -> i32 { fn current_cell_index(&self) -> i32 {
let current = self.current(); let current = self.current();
tracing::event!(
tracing::Level::TRACE,
"current: cell_indices={:?}",
self.cell_indices
);
self.cell_indices.borrow()[current] self.cell_indices.borrow()[current]
} }
@ -4453,14 +4463,32 @@ impl PageStack {
/// We usually advance after going traversing a new page /// We usually advance after going traversing a new page
fn advance(&self) { fn advance(&self) {
let current = self.current(); let current = self.current();
tracing::trace!("pagestack::advance {}", self.cell_indices.borrow()[current],); tracing::trace!(
"pagestack::advance {}, cell_indices={:?}",
self.cell_indices.borrow()[current],
self.cell_indices
);
self.cell_indices.borrow_mut()[current] += 1; self.cell_indices.borrow_mut()[current] += 1;
tracing::event!(
tracing::Level::TRACE,
"after: cell_indices={:?}",
self.cell_indices
);
} }
fn retreat(&self) { fn retreat(&self) {
let current = self.current(); let current = self.current();
tracing::trace!("pagestack::retreat {}", self.cell_indices.borrow()[current]); tracing::trace!(
"pagestack::retreat {}, cell_indices={:?}",
self.cell_indices.borrow()[current],
self.cell_indices
);
self.cell_indices.borrow_mut()[current] -= 1; self.cell_indices.borrow_mut()[current] -= 1;
tracing::event!(
tracing::Level::TRACE,
"after: cell_indices={:?}",
self.cell_indices
);
} }
/// Move the cursor to the next cell in the current page according to the iteration direction. /// Move the cursor to the next cell in the current page according to the iteration direction.
@ -4477,7 +4505,18 @@ impl PageStack {
fn set_cell_index(&self, idx: i32) { fn set_cell_index(&self, idx: i32) {
let current = self.current(); let current = self.current();
self.cell_indices.borrow_mut()[current] = idx tracing::event!(
tracing::Level::TRACE,
"set_cell_index={} cell_indices={:?}",
idx,
self.cell_indices
);
self.cell_indices.borrow_mut()[current] = idx;
tracing::event!(
tracing::Level::TRACE,
"after: cell_indices={:?}",
self.cell_indices
);
} }
fn has_parent(&self) -> bool { fn has_parent(&self) -> bool {

View file

@ -24,10 +24,17 @@
lib = pkgs.lib; lib = pkgs.lib;
# Custom SQLite package with debug enabled
sqlite-debug = pkgs.sqlite.overrideAttrs (oldAttrs: rec {
name = "sqlite-debug-${oldAttrs.version}";
configureFlags = oldAttrs.configureFlags ++ [ "--enable-debug" ];
dontStrip = true;
separateDebugInfo = true;
});
cargoArtifacts = craneLib.buildDepsOnly { cargoArtifacts = craneLib.buildDepsOnly {
src = ./.; src = ./.;
pname = "limbo"; pname = "limbo";
stritcDeps = true;
nativeBuildInputs = with pkgs; [ python3 ]; nativeBuildInputs = with pkgs; [ python3 ];
}; };
@ -58,7 +65,7 @@
devShells.default = with pkgs; mkShell { devShells.default = with pkgs; mkShell {
nativeBuildInputs = [ nativeBuildInputs = [
clang clang
sqlite sqlite-debug # Use debug-enabled SQLite
gnumake gnumake
tcl tcl
python3 python3
@ -77,4 +84,4 @@
}; };
} }
); );
} }