From a857cb11ccfa26f16dc3760b48bb37d6704131b6 Mon Sep 17 00:00:00 2001 From: Ziyang Hu Date: Tue, 19 Jul 2022 19:31:29 +0800 Subject: [PATCH] change mutability for scan operations --- cozorocks/bridge/tx.h | 6 +-- cozorocks/src/bridge/mod.rs | 11 ++---- cozorocks/src/bridge/tx.rs | 20 +++++----- src/transact/query.rs | 2 +- src/transact/triple.rs | 78 ++++++++++++++++++------------------- 5 files changed, 57 insertions(+), 60 deletions(-) diff --git a/cozorocks/bridge/tx.h b/cozorocks/bridge/tx.h index 5b5d5e68..39dacabd 100644 --- a/cozorocks/bridge/tx.h +++ b/cozorocks/bridge/tx.h @@ -57,7 +57,7 @@ struct TxBridge { r_opts->fill_cache = val; } - inline unique_ptr iterator() { + inline unique_ptr iterator() const { return make_unique(&*tx); }; @@ -87,7 +87,7 @@ struct TxBridge { void start(); - inline unique_ptr get(RustBytes key, bool for_update, RocksDbStatus &status) { + inline unique_ptr get(RustBytes key, bool for_update, RocksDbStatus &status) const { Slice key_ = convert_slice(key); auto ret = make_unique(); if (for_update) { @@ -100,7 +100,7 @@ struct TxBridge { return ret; } - inline void exists(RustBytes key, bool for_update, RocksDbStatus &status) { + inline void exists(RustBytes key, bool for_update, RocksDbStatus &status) const { Slice key_ = convert_slice(key); auto ret = PinnableSlice(); if (for_update) { diff --git a/cozorocks/src/bridge/mod.rs b/cozorocks/src/bridge/mod.rs index 324b130c..d16e1f5b 100644 --- a/cozorocks/src/bridge/mod.rs +++ b/cozorocks/src/bridge/mod.rs @@ -126,17 +126,12 @@ pub(crate) mod ffi { fn set_snapshot(self: Pin<&mut TxBridge>, val: bool); fn clear_snapshot(self: Pin<&mut TxBridge>); fn get( - self: Pin<&mut TxBridge>, + self: &TxBridge, key: &[u8], for_update: bool, status: &mut RocksDbStatus, ) -> UniquePtr; - fn exists( - self: Pin<&mut TxBridge>, - key: &[u8], - for_update: bool, - status: &mut RocksDbStatus, - ); + fn exists(self: &TxBridge, key: &[u8], for_update: bool, status: &mut RocksDbStatus); fn put(self: Pin<&mut TxBridge>, key: &[u8], val: &[u8], status: &mut RocksDbStatus); fn del(self: Pin<&mut TxBridge>, key: &[u8], status: &mut RocksDbStatus); fn commit(self: Pin<&mut TxBridge>, status: &mut RocksDbStatus); @@ -144,7 +139,7 @@ pub(crate) mod ffi { fn rollback_to_savepoint(self: Pin<&mut TxBridge>, status: &mut RocksDbStatus); fn pop_savepoint(self: Pin<&mut TxBridge>, status: &mut RocksDbStatus); fn set_savepoint(self: Pin<&mut TxBridge>); - fn iterator(self: Pin<&mut TxBridge>) -> UniquePtr; + fn iterator(self: &TxBridge) -> UniquePtr; type IterBridge; fn start(self: Pin<&mut IterBridge>); diff --git a/cozorocks/src/bridge/tx.rs b/cozorocks/src/bridge/tx.rs index be2cba69..2f2ba329 100644 --- a/cozorocks/src/bridge/tx.rs +++ b/cozorocks/src/bridge/tx.rs @@ -1,9 +1,11 @@ -use crate::bridge::ffi::*; -use crate::bridge::iter::IterBuilder; -use cxx::*; use std::fmt::{Debug, Formatter}; use std::ops::Deref; +use cxx::*; + +use crate::bridge::ffi::*; +use crate::bridge::iter::IterBuilder; + pub struct TxBuilder { pub(crate) inner: UniquePtr, } @@ -102,9 +104,9 @@ impl Tx { } } #[inline] - pub fn get(&mut self, key: &[u8], for_update: bool) -> Result, RocksDbStatus> { + pub fn get(&self, key: &[u8], for_update: bool) -> Result, RocksDbStatus> { let mut status = RocksDbStatus::default(); - let ret = self.inner.pin_mut().get(key, for_update, &mut status); + let ret = self.inner.get(key, for_update, &mut status); match status.code { StatusCode::kOk => Ok(Some(PinSlice { inner: ret })), StatusCode::kNotFound => Ok(None), @@ -112,9 +114,9 @@ impl Tx { } } #[inline] - pub fn exists(&mut self, key: &[u8], for_update: bool) -> Result { + pub fn exists(&self, key: &[u8], for_update: bool) -> Result { let mut status = RocksDbStatus::default(); - self.inner.pin_mut().exists(key, for_update, &mut status); + self.inner.exists(key, for_update, &mut status); match status.code { StatusCode::kOk => Ok(true), StatusCode::kNotFound => Ok(false), @@ -166,9 +168,9 @@ impl Tx { } } #[inline] - pub fn iterator(&mut self) -> IterBuilder { + pub fn iterator(&self) -> IterBuilder { IterBuilder { - inner: self.inner.pin_mut().iterator(), + inner: self.inner.iterator(), } .auto_prefix_mode(true) } diff --git a/src/transact/query.rs b/src/transact/query.rs index 1996acb4..da975db8 100644 --- a/src/transact/query.rs +++ b/src/transact/query.rs @@ -1,6 +1,5 @@ use std::collections::BTreeMap; -use anyhow::Result; use itertools::Itertools; use crate::data::attr::Attribute; @@ -124,6 +123,7 @@ impl TripleRelation { } fn cartesian_join<'a>(&'a self, left_iter: TupleIter<'a>) -> TupleIter<'a> { // [f, f] not really a join + left_iter.map_ok(|tuple| {}); todo!() } fn ev_join<'a>( diff --git a/src/transact/triple.rs b/src/transact/triple.rs index ddf79947..224f7882 100644 --- a/src/transact/triple.rs +++ b/src/transact/triple.rs @@ -133,7 +133,7 @@ impl SessionTx { format!("{:?}", v), format!("{:?}", stored_v), ) - .into()); + .into()); } Ok(()) } @@ -225,7 +225,7 @@ impl SessionTx { attr.keyword.clone(), format!("{:?}", v), ) - .into()); + .into()); } } // fwd scan in time @@ -236,7 +236,7 @@ impl SessionTx { attr.keyword.clone(), format!("{:?}", v), ) - .into()); + .into()); } } } else if let Some(v_slice) = self.tx.get(&ave_encoded, false)? { @@ -246,7 +246,7 @@ impl SessionTx { attr.keyword.clone(), format!("{:?}", v), ) - .into()); + .into()); } } } @@ -424,7 +424,7 @@ impl SessionTx { ) } pub(crate) fn restore_bottom_value( - &mut self, + &self, eid: EntityId, aid: AttrId, vld: Validity, @@ -437,128 +437,128 @@ impl SessionTx { decode_value(&res.as_ref()[1..]) } pub(crate) fn triple_ea_scan( - &mut self, + &self, eid: EntityId, aid: AttrId, - ) -> impl Iterator> { + ) -> impl Iterator> { let lower = encode_eav_key(eid, aid, &DataValue::Null, Validity::MAX); let upper = encode_eav_key(eid, aid, &DataValue::Bottom, Validity::MIN); TripleEntityAttrIter::new(self.tx.iterator(), lower, upper) } pub(crate) fn triple_ea_before_scan( - &mut self, + &self, eid: EntityId, aid: AttrId, before: Validity, - ) -> impl Iterator> { + ) -> impl Iterator> { let lower = encode_eav_key(eid, aid, &DataValue::Null, Validity::MAX); let upper = encode_eav_key(eid, aid, &DataValue::Bottom, Validity::MIN); TripleEntityAttrBeforeIter::new(self.tx.iterator(), lower, upper, before) } pub(crate) fn triple_ae_scan( - &mut self, + &self, aid: AttrId, eid: EntityId, - ) -> impl Iterator> { + ) -> impl Iterator> { let lower = encode_aev_key(aid, eid, &DataValue::Null, Validity::MAX); let upper = encode_aev_key(aid, eid, &DataValue::Bottom, Validity::MIN); TripleAttrEntityIter::new(self.tx.iterator(), lower, upper) } pub(crate) fn triple_ae_before_scan( - &mut self, + &self, aid: AttrId, eid: EntityId, before: Validity, - ) -> impl Iterator> { + ) -> impl Iterator> { let lower = encode_aev_key(aid, eid, &DataValue::Null, Validity::MAX); let upper = encode_aev_key(aid, eid, &DataValue::Bottom, Validity::MIN); TripleAttrEntityBeforeIter::new(self.tx.iterator(), lower, upper, before) } pub(crate) fn triple_av_scan( - &mut self, + &self, aid: AttrId, v: &DataValue, - ) -> impl Iterator> { + ) -> impl Iterator> { let lower = encode_ave_key(aid, v, EntityId::MIN_PERM, Validity::MAX); let upper = encode_ave_key(aid, v, EntityId::MAX_PERM, Validity::MIN); TripleAttrValueIter::new(self.tx.iterator(), lower, upper) } pub(crate) fn triple_av_before_scan( - &mut self, + &self, aid: AttrId, v: &DataValue, before: Validity, - ) -> impl Iterator> { + ) -> impl Iterator> { let lower = encode_ave_key(aid, v, EntityId::MIN_PERM, Validity::MAX); let upper = encode_ave_key(aid, v, EntityId::MAX_PERM, Validity::MIN); TripleAttrValueBeforeIter::new(self.tx.iterator(), lower, upper, before) } pub(crate) fn triple_av_after_scan( - &mut self, + &self, aid: AttrId, v: &DataValue, after: Validity, - ) -> impl Iterator> { + ) -> impl Iterator> { let lower = encode_ave_key(aid, v, EntityId::MIN_PERM, Validity::MAX); let upper = encode_ave_key(aid, v, EntityId::MAX_PERM, Validity::MIN); TripleAttrValueAfterIter::new(self.tx.iterator(), lower, upper, after) } pub(crate) fn triple_vref_a_scan( - &mut self, + &self, v_eid: EntityId, aid: AttrId, - ) -> impl Iterator> { + ) -> impl Iterator> { let lower = encode_vae_key(v_eid, aid, EntityId::MIN_PERM, Validity::MAX); let upper = encode_vae_key(v_eid, aid, EntityId::MAX_PERM, Validity::MIN); TripleValueRefAttrIter::new(self.tx.iterator(), lower, upper) } pub(crate) fn triple_vref_a_before_scan( - &mut self, + &self, v_eid: EntityId, aid: AttrId, before: Validity, - ) -> impl Iterator> { + ) -> impl Iterator> { let lower = encode_vae_key(v_eid, aid, EntityId::MIN_PERM, Validity::MAX); let upper = encode_vae_key(v_eid, aid, EntityId::MAX_PERM, Validity::MIN); TripleValueRefAttrBeforeIter::new(self.tx.iterator(), lower, upper, before) } pub(crate) fn triple_e_scan( - &mut self, + &self, eid: EntityId, - ) -> impl Iterator> { + ) -> impl Iterator> { let lower = encode_eav_key(eid, AttrId::MIN_PERM, &DataValue::Null, Validity::MAX); let upper = encode_eav_key(eid, AttrId::MAX_PERM, &DataValue::Bottom, Validity::MIN); TripleEntityAttrIter::new(self.tx.iterator(), lower, upper) } pub(crate) fn triple_e_before_scan( - &mut self, + &self, eid: EntityId, before: Validity, - ) -> impl Iterator> { + ) -> impl Iterator> { let lower = encode_eav_key(eid, AttrId::MIN_PERM, &DataValue::Null, Validity::MAX); let upper = encode_eav_key(eid, AttrId::MAX_PERM, &DataValue::Bottom, Validity::MIN); TripleEntityAttrBeforeIter::new(self.tx.iterator(), lower, upper, before) } pub(crate) fn triple_a_scan( - &mut self, + &self, aid: AttrId, - ) -> impl Iterator> { + ) -> impl Iterator> { let lower = encode_aev_key(aid, EntityId::MIN_PERM, &DataValue::Null, Validity::MAX); let upper = encode_aev_key(aid, EntityId::MAX_PERM, &DataValue::Bottom, Validity::MIN); TripleAttrEntityIter::new(self.tx.iterator(), lower, upper) } pub(crate) fn triple_a_before_scan( - &mut self, + &self, aid: AttrId, before: Validity, - ) -> impl Iterator> { + ) -> impl Iterator> { let lower = encode_aev_key(aid, EntityId::MIN_PERM, &DataValue::Null, Validity::MAX); let upper = encode_aev_key(aid, EntityId::MAX_PERM, &DataValue::Bottom, Validity::MIN); TripleAttrEntityBeforeIter::new(self.tx.iterator(), lower, upper, before) } pub(crate) fn triple_a_scan_all( - &mut self, - ) -> impl Iterator> { + &self, + ) -> impl Iterator> { let lower = encode_aev_key( AttrId::MIN_PERM, EntityId::MIN_PERM, @@ -574,9 +574,9 @@ impl SessionTx { TripleAttrEntityIter::new(self.tx.iterator(), lower, upper) } pub(crate) fn triple_a_before_scan_all( - &mut self, + &self, before: Validity, - ) -> impl Iterator> { + ) -> impl Iterator> { let lower = encode_aev_key( AttrId::MIN_PERM, EntityId::MIN_PERM, @@ -592,18 +592,18 @@ impl SessionTx { TripleAttrEntityBeforeIter::new(self.tx.iterator(), lower, upper, before) } pub(crate) fn triple_vref_scan( - &mut self, + &self, v_eid: EntityId, - ) -> impl Iterator> { + ) -> impl Iterator> { let lower = encode_vae_key(v_eid, AttrId::MIN_PERM, EntityId::MIN_PERM, Validity::MAX); let upper = encode_vae_key(v_eid, AttrId::MAX_PERM, EntityId::MAX_PERM, Validity::MIN); TripleValueRefAttrIter::new(self.tx.iterator(), lower, upper) } pub(crate) fn triple_vref_before_scan( - &mut self, + &self, v_eid: EntityId, before: Validity, - ) -> impl Iterator> { + ) -> impl Iterator> { let lower = encode_vae_key(v_eid, AttrId::MIN_PERM, EntityId::MIN_PERM, Validity::MAX); let upper = encode_vae_key(v_eid, AttrId::MAX_PERM, EntityId::MAX_PERM, Validity::MIN); TripleValueRefAttrBeforeIter::new(self.tx.iterator(), lower, upper, before)