mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-06-16 13:11:15 +00:00
Further storage iterator refactoring (#13445)
* Remove `Backend::apply_to_key_values_while` * Add `IterArgs::start_at_exclusive` * Use `start_at_exclusive` in functions which used `Backend::apply_to_key_values_while` * Remove `Backend::apply_to_keys_while` * Remove `for_keys_with_prefix`, `for_key_values_with_prefix` and `for_child_keys_with_prefix` * Remove unnecessary `to_vec` calls * Fix unused method warning in no_std * Remove unnecessary import * Also check proof sizes in the test * Iterate over both keys and values in `prove_range_read_with_size` and add a test
This commit is contained in:
@@ -87,6 +87,7 @@ where
|
||||
H: Hasher,
|
||||
{
|
||||
stop_on_incomplete_database: bool,
|
||||
skip_if_first: Option<StorageKey>,
|
||||
root: H::Out,
|
||||
child_info: Option<ChildInfo>,
|
||||
trie_iter: TrieDBRawIterator<Layout<H>>,
|
||||
@@ -144,6 +145,7 @@ where
|
||||
fn default() -> Self {
|
||||
Self {
|
||||
stop_on_incomplete_database: false,
|
||||
skip_if_first: None,
|
||||
child_info: None,
|
||||
root: Default::default(),
|
||||
trie_iter: TrieDBRawIterator::empty(),
|
||||
@@ -165,12 +167,34 @@ where
|
||||
|
||||
#[inline]
|
||||
fn next_key(&mut self, backend: &Self::Backend) -> Option<Result<StorageKey>> {
|
||||
self.prepare(&backend.essence, |trie, trie_iter| trie_iter.next_key(&trie))
|
||||
let skip_if_first = self.skip_if_first.take();
|
||||
self.prepare(&backend.essence, |trie, trie_iter| {
|
||||
let mut result = trie_iter.next_key(&trie);
|
||||
if let Some(skipped_key) = skip_if_first {
|
||||
if let Some(Ok(ref key)) = result {
|
||||
if *key == skipped_key {
|
||||
result = trie_iter.next_key(&trie);
|
||||
}
|
||||
}
|
||||
}
|
||||
result
|
||||
})
|
||||
}
|
||||
|
||||
#[inline]
|
||||
fn next_pair(&mut self, backend: &Self::Backend) -> Option<Result<(StorageKey, StorageValue)>> {
|
||||
self.prepare(&backend.essence, |trie, trie_iter| trie_iter.next_item(&trie))
|
||||
let skip_if_first = self.skip_if_first.take();
|
||||
self.prepare(&backend.essence, |trie, trie_iter| {
|
||||
let mut result = trie_iter.next_item(&trie);
|
||||
if let Some(skipped_key) = skip_if_first {
|
||||
if let Some(Ok((ref key, _))) = result {
|
||||
if *key == skipped_key {
|
||||
result = trie_iter.next_item(&trie);
|
||||
}
|
||||
}
|
||||
}
|
||||
result
|
||||
})
|
||||
}
|
||||
|
||||
fn was_complete(&self) -> bool {
|
||||
@@ -574,6 +598,11 @@ where
|
||||
|
||||
Ok(RawIter {
|
||||
stop_on_incomplete_database: args.stop_on_incomplete_database,
|
||||
skip_if_first: if args.start_at_exclusive {
|
||||
args.start_at.map(|key| key.to_vec())
|
||||
} else {
|
||||
None
|
||||
},
|
||||
child_info: args.child_info,
|
||||
root,
|
||||
trie_iter,
|
||||
|
||||
Reference in New Issue
Block a user