From 2466e27bd0dd713afad58c4e820e3c96eaabdecf Mon Sep 17 00:00:00 2001 From: bronku Date: Sun, 14 Dec 2025 00:48:38 +0100 Subject: [PATCH] dump nodes --- src/btree.rs | 2 +- src/file_storage.rs | 32 ++++++++++++++++++++++++++++++++ src/main.rs | 5 +++++ src/node.rs | 2 +- 4 files changed, 39 insertions(+), 2 deletions(-) diff --git a/src/btree.rs b/src/btree.rs index ab41c77..4bc4e0c 100644 --- a/src/btree.rs +++ b/src/btree.rs @@ -4,7 +4,7 @@ use crate::record::Record; use crate::storage::Storage; pub struct BPlusTree { - storage: S, + pub storage: S, header: HeaderNode, } diff --git a/src/file_storage.rs b/src/file_storage.rs index 8dfc0cc..edf9c82 100644 --- a/src/file_storage.rs +++ b/src/file_storage.rs @@ -27,6 +27,38 @@ impl FileStorage { page_writes: 0, } } + + pub fn dump_pages(&mut self) { + let total = self.total_nodes(); + for loc in 0..total { + print!("Page {}: ", loc); + + match self.read_node(loc) { + Some(Node::Header(header)) => { + println!("Header, root: {:?}", header.root) + } + Some(Node::Leaf(leaf)) => { + println!( + "Leaf keys={:?} values={} next={:?}", + leaf.keys, + leaf.values.len(), + leaf.next + ); + } + Some(Node::Internal(internal)) => { + println!( + "Internal keys={:?} children={:?}", + internal.keys, internal.children + ); + } + None => { + println!(""); + } + } + + self.page_reads -= 1; + } + } } impl Storage for FileStorage { diff --git a/src/main.rs b/src/main.rs index a61a7f5..6055d96 100644 --- a/src/main.rs +++ b/src/main.rs @@ -56,6 +56,11 @@ fn repl(tree: &mut BPlusTree) { continue; } + if input == "nodes" { + tree.storage.dump_pages(); + continue; + } + match handle_command(tree, input) { Ok(()) => {} Err(err) => println!("Error: {}", err), diff --git a/src/node.rs b/src/node.rs index 36ba155..04d3131 100644 --- a/src/node.rs +++ b/src/node.rs @@ -18,7 +18,7 @@ pub struct HeaderNode { #[derive(Debug, Clone, Encode, Decode, PartialEq, Eq)] pub struct LeafNode { pub keys: Vec, - pub values: Vec, + pub values: Vec>, pub next: Option, }