Add traversal history for index search
This commit is contained in:
parent
179b220c2e
commit
5e8a2d6c25
1 changed files with 8 additions and 5 deletions
|
@ -508,11 +508,11 @@ impl LocalRecord {
|
||||||
impl Store for LocalStore {
|
impl Store for LocalStore {
|
||||||
fn get_creds(&self, specifier: &String, key: &String) -> Option<StoreRecord> {
|
fn get_creds(&self, specifier: &String, key: &String) -> Option<StoreRecord> {
|
||||||
match self.btree_find_key(&key) {
|
match self.btree_find_key(&key) {
|
||||||
Some(x) => {
|
(Some(x), _) => {
|
||||||
println!("Found: {}", x);
|
println!("Found: {}", x);
|
||||||
todo!()
|
todo!()
|
||||||
}
|
}
|
||||||
None => return None,
|
(None, _) => return None,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -620,7 +620,7 @@ impl LocalStore {
|
||||||
node
|
node
|
||||||
}
|
}
|
||||||
|
|
||||||
fn btree_find_key(&self, key: &String) -> Option<u64> {
|
fn btree_find_key(&self, key: &String) -> (Option<u64>, Vec<u64>) {
|
||||||
let mut file: BufReader<File> =
|
let mut file: BufReader<File> =
|
||||||
BufReader::new(File::open(&self.path).expect("Cannot open file"));
|
BufReader::new(File::open(&self.path).expect("Cannot open file"));
|
||||||
|
|
||||||
|
@ -630,6 +630,8 @@ impl LocalStore {
|
||||||
hasher.finish()
|
hasher.finish()
|
||||||
};
|
};
|
||||||
|
|
||||||
|
let mut traversal_history = Vec::new();
|
||||||
|
|
||||||
let pos = file.seek(SeekFrom::Start(0x90)).unwrap();
|
let pos = file.seek(SeekFrom::Start(0x90)).unwrap();
|
||||||
let mut block = self
|
let mut block = self
|
||||||
.enc_ctx
|
.enc_ctx
|
||||||
|
@ -637,6 +639,7 @@ impl LocalStore {
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
|
||||||
loop {
|
loop {
|
||||||
|
traversal_history.push(block.stream_position().unwrap());
|
||||||
let node = self.read_node(&mut block);
|
let node = self.read_node(&mut block);
|
||||||
|
|
||||||
if node.node_type == IndexNodeType::Invalid {
|
if node.node_type == IndexNodeType::Invalid {
|
||||||
|
@ -649,10 +652,10 @@ impl LocalStore {
|
||||||
if node.node_type == IndexNodeType::Leaf {
|
if node.node_type == IndexNodeType::Leaf {
|
||||||
for child in node.children() {
|
for child in node.children() {
|
||||||
if child.key == hash {
|
if child.key == hash {
|
||||||
return Some(child.pointer);
|
return (Some(child.pointer), traversal_history);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return None;
|
return (None, traversal_history);
|
||||||
}
|
}
|
||||||
|
|
||||||
for child in node.children {
|
for child in node.children {
|
||||||
|
|
Loading…
Reference in a new issue