1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
use crate::error::Result; use crate::sstable::{Key, SSTable, Value}; use crate::storage; use std::collections::BTreeMap; use std::ops::RangeInclusive; use std::sync::Arc; #[derive(Debug)] pub struct ReadTx { mem: Arc<BTreeMap<Key, Value>>, tables: Arc<[BTreeMap<Key, SSTable>]>, } impl ReadTx { pub fn new(mem: BTreeMap<Key, Value>, tables: Vec<BTreeMap<Key, SSTable>>) -> ReadTx { ReadTx { mem: Arc::new(mem), tables: Arc::from(tables.into_boxed_slice()), } } pub fn get(&self, key: &Key) -> Result<Option<Vec<u8>>> { storage::get(&self.mem, &*self.tables, key) } pub fn range( &self, range: RangeInclusive<Key>, ) -> Result<impl Iterator<Item = (Key, Vec<u8>)>> { storage::range(&self.mem, &*self.tables, range) } }