From 14341bb906c0428269f59aae6c10071da55d7608 Mon Sep 17 00:00:00 2001 From: Jason Volk Date: Wed, 18 Dec 2024 22:54:16 +0000 Subject: [PATCH] simplify and improve db iter State init interface Signed-off-by: Jason Volk --- src/database/pool.rs | 23 ----------------------- src/database/stream.rs | 14 ++++++++++++-- 2 files changed, 12 insertions(+), 25 deletions(-) diff --git a/src/database/pool.rs b/src/database/pool.rs index 28eb38bd..4f018a38 100644 --- a/src/database/pool.rs +++ b/src/database/pool.rs @@ -273,29 +273,6 @@ fn handle_iter(&self, mut cmd: Seek) { let _chan_sent = chan_result.is_ok(); } -#[implement(Pool)] -#[tracing::instrument( - name = "seek", - level = "trace", - skip_all, - fields(%cmd.map), -)] -fn _handle_seek(&self, mut cmd: Seek) { - let chan = cmd.res.take().expect("missing result channel"); - - if chan.is_canceled() { - return; - } - - match cmd.dir { - | Direction::Forward => cmd.state.seek_fwd(), - | Direction::Reverse => cmd.state.seek_rev(), - }; - - let chan_result = chan.send(into_send_seek(cmd.state)); - let _chan_sent = chan_result.is_ok(); -} - #[implement(Pool)] #[tracing::instrument( name = "get", diff --git a/src/database/stream.rs b/src/database/stream.rs index f849d08f..f8e6733d 100644 --- a/src/database/stream.rs +++ b/src/database/stream.rs @@ -56,20 +56,30 @@ impl<'a> State<'a> { } pub(super) fn init_fwd(mut self, from: From<'_>) -> Self { + debug_assert!(self.init, "init must be set to make this call"); + debug_assert!(!self.seek, "seek must not be set to make this call"); + if let Some(key) = from { self.inner.seek(key); - self.seek = true; + } else { + self.inner.seek_to_first(); } + self.seek = true; self } pub(super) fn init_rev(mut self, from: From<'_>) -> Self { + debug_assert!(self.init, "init must be set to make this call"); + debug_assert!(!self.seek, "seek must not be set to make this call"); + if let Some(key) = from { self.inner.seek_for_prev(key); - self.seek = true; + } else { + self.inner.seek_to_last(); } + self.seek = true; self }