diff --git a/src/database/map.rs b/src/database/map.rs index af22a43c..de37b8f9 100644 --- a/src/database/map.rs +++ b/src/database/map.rs @@ -77,7 +77,11 @@ impl Map { #[inline] pub fn name(&self) -> &str { &self.name } - fn cf(&self) -> impl AsColumnFamilyRef + '_ { &*self.cf } + #[inline] + pub(crate) fn db(&self) -> &Arc { &self.db } + + #[inline] + pub(crate) fn cf(&self) -> impl AsColumnFamilyRef + '_ { &*self.cf } } impl Debug for Map { diff --git a/src/database/map/keys.rs b/src/database/map/keys.rs index 7d09f3da..60742334 100644 --- a/src/database/map/keys.rs +++ b/src/database/map/keys.rs @@ -23,7 +23,7 @@ pub fn raw_keys(self: &Arc) -> impl Stream>> + Send use crate::pool::Seek; let opts = super::iter_options_default(); - let state = stream::State::new(&self.db, &self.cf, opts); + let state = stream::State::new(self, opts); if is_cached(self) { let state = state.init_fwd(None); return task::consume_budget() diff --git a/src/database/map/keys_from.rs b/src/database/map/keys_from.rs index 95c6611b..b83775ac 100644 --- a/src/database/map/keys_from.rs +++ b/src/database/map/keys_from.rs @@ -54,7 +54,7 @@ where use crate::pool::Seek; let opts = super::iter_options_default(); - let state = stream::State::new(&self.db, &self.cf, opts); + let state = stream::State::new(self, opts); if is_cached(self, from) { return stream::Keys::<'_>::from(state.init_fwd(from.as_ref().into())).boxed(); } diff --git a/src/database/map/rev_keys.rs b/src/database/map/rev_keys.rs index 0ca6ad0f..a559d04b 100644 --- a/src/database/map/rev_keys.rs +++ b/src/database/map/rev_keys.rs @@ -23,7 +23,7 @@ pub fn rev_raw_keys(self: &Arc) -> impl Stream>> + S use crate::pool::Seek; let opts = super::iter_options_default(); - let state = stream::State::new(&self.db, &self.cf, opts); + let state = stream::State::new(self, opts); if is_cached(self) { let state = state.init_rev(None); return task::consume_budget() diff --git a/src/database/map/rev_keys_from.rs b/src/database/map/rev_keys_from.rs index e208c505..5b159195 100644 --- a/src/database/map/rev_keys_from.rs +++ b/src/database/map/rev_keys_from.rs @@ -62,7 +62,7 @@ where use crate::pool::Seek; let opts = super::iter_options_default(); - let state = stream::State::new(&self.db, &self.cf, opts); + let state = stream::State::new(self, opts); if is_cached(self, from) { return stream::KeysRev::<'_>::from(state.init_rev(from.as_ref().into())).boxed(); } diff --git a/src/database/map/rev_stream.rs b/src/database/map/rev_stream.rs index d882dd91..1d5d3d10 100644 --- a/src/database/map/rev_stream.rs +++ b/src/database/map/rev_stream.rs @@ -32,7 +32,7 @@ pub fn rev_raw_stream(self: &Arc) -> impl Stream> use crate::pool::Seek; let opts = super::read_options_default(); - let state = stream::State::new(&self.db, &self.cf, opts); + let state = stream::State::new(self, opts); if is_cached(self) { let state = state.init_rev(None); return task::consume_budget() @@ -65,9 +65,9 @@ pub fn rev_raw_stream(self: &Arc) -> impl Stream> skip_all, fields(%map), )] -pub(super) fn is_cached(map: &super::Map) -> bool { +pub(super) fn is_cached(map: &Arc) -> bool { let opts = super::cache_read_options_default(); - let state = stream::State::new(&map.db, &map.cf, opts).init_rev(None); + let state = stream::State::new(map, opts).init_rev(None); !state.is_incomplete() } diff --git a/src/database/map/rev_stream_from.rs b/src/database/map/rev_stream_from.rs index 72fc739c..1b66e8cc 100644 --- a/src/database/map/rev_stream_from.rs +++ b/src/database/map/rev_stream_from.rs @@ -81,7 +81,7 @@ where use crate::pool::Seek; let opts = super::iter_options_default(); - let state = stream::State::new(&self.db, &self.cf, opts); + let state = stream::State::new(self, opts); if is_cached(self, from) { let state = state.init_rev(from.as_ref().into()); return task::consume_budget() @@ -119,7 +119,7 @@ where P: AsRef<[u8]> + ?Sized, { let cache_opts = super::cache_read_options_default(); - let cache_status = stream::State::new(&map.db, &map.cf, cache_opts) + let cache_status = stream::State::new(map, cache_opts) .init_rev(from.as_ref().into()) .status(); diff --git a/src/database/map/stream.rs b/src/database/map/stream.rs index 11b0676c..fa3b0ad7 100644 --- a/src/database/map/stream.rs +++ b/src/database/map/stream.rs @@ -31,7 +31,7 @@ pub fn raw_stream(self: &Arc) -> impl Stream>> + use crate::pool::Seek; let opts = super::read_options_default(); - let state = stream::State::new(&self.db, &self.cf, opts); + let state = stream::State::new(self, opts); if is_cached(self) { let state = state.init_fwd(None); return task::consume_budget() @@ -64,9 +64,9 @@ pub fn raw_stream(self: &Arc) -> impl Stream>> + skip_all, fields(%map), )] -pub(super) fn is_cached(map: &super::Map) -> bool { +pub(super) fn is_cached(map: &Arc) -> bool { let opts = super::cache_read_options_default(); - let state = stream::State::new(&map.db, &map.cf, opts).init_fwd(None); + let state = stream::State::new(map, opts).init_fwd(None); !state.is_incomplete() } diff --git a/src/database/map/stream_from.rs b/src/database/map/stream_from.rs index 79ea8f51..4296b6f6 100644 --- a/src/database/map/stream_from.rs +++ b/src/database/map/stream_from.rs @@ -78,7 +78,7 @@ where use crate::pool::Seek; let opts = super::read_options_default(); - let state = stream::State::new(&self.db, &self.cf, opts); + let state = stream::State::new(self, opts); if is_cached(self, from) { let state = state.init_fwd(from.as_ref().into()); return task::consume_budget() @@ -116,7 +116,7 @@ where P: AsRef<[u8]> + ?Sized, { let opts = super::cache_read_options_default(); - let state = stream::State::new(&map.db, &map.cf, opts).init_fwd(from.as_ref().into()); + let state = stream::State::new(map, opts).init_fwd(from.as_ref().into()); !state.is_incomplete() } diff --git a/src/database/stream.rs b/src/database/stream.rs index d7cb16c6..5f0fc0a1 100644 --- a/src/database/stream.rs +++ b/src/database/stream.rs @@ -6,14 +6,14 @@ mod keys_rev; use std::sync::Arc; use conduwuit::{utils::exchange, Result}; -use rocksdb::{ColumnFamily, DBRawIteratorWithThreadMode, ReadOptions}; +use rocksdb::{DBRawIteratorWithThreadMode, ReadOptions}; pub(crate) use self::{items::Items, items_rev::ItemsRev, keys::Keys, keys_rev::KeysRev}; use crate::{ engine::Db, keyval::{Key, KeyVal, Val}, util::{is_incomplete, map_err}, - Engine, Slice, + Map, Slice, }; pub(crate) struct State<'a> { @@ -45,9 +45,9 @@ type Inner<'a> = DBRawIteratorWithThreadMode<'a, Db>; type From<'a> = Option>; impl<'a> State<'a> { - pub(super) fn new(db: &'a Arc, cf: &'a Arc, opts: ReadOptions) -> Self { + pub(super) fn new(map: &'a Arc, opts: ReadOptions) -> Self { Self { - inner: db.db.raw_iterator_cf_opt(&**cf, opts), + inner: map.db().db.raw_iterator_cf_opt(&map.cf(), opts), init: true, seek: false, }