range scan may depend on the lifetime of session

main
Ziyang Hu 2 years ago
parent 51c9206b35
commit 7b3e0c39cf

@ -935,7 +935,7 @@ impl StoredRA {
}
}
fn iter(&self, tx: &SessionTx) -> Result<TupleIter<'_>> {
fn iter<'a>(&'a self, tx: &'a SessionTx) -> Result<TupleIter<'a>> {
let it = self.storage.scan_all(tx);
Ok(if self.filters.is_empty() {
Box::new(it)

@ -214,17 +214,17 @@ impl RelationHandle {
RelationDeserError
})?)
}
pub(crate) fn scan_all(&self, tx: &SessionTx) -> impl Iterator<Item = Result<Tuple>> {
pub(crate) fn scan_all<'a>(&self, tx: &'a SessionTx) -> impl Iterator<Item = Result<Tuple>> + 'a {
let lower = Tuple::default().encode_as_key(self.id);
let upper = Tuple::default().encode_as_key(self.id.next());
tx.tx.range_scan(&lower, &upper)
}
pub(crate) fn scan_prefix(
pub(crate) fn scan_prefix<'a>(
&self,
tx: &SessionTx,
tx: &'a SessionTx,
prefix: &Tuple,
) -> impl Iterator<Item = Result<Tuple>> {
) -> impl Iterator<Item = Result<Tuple>> + 'a {
let mut lower = prefix.0.clone();
lower.truncate(self.metadata.keys.len());
let mut upper = lower.clone();
@ -234,13 +234,13 @@ impl RelationHandle {
// RelationIterator::new(tx, &prefix_encoded, &upper_encoded)
tx.tx.range_scan(&prefix_encoded, &upper_encoded)
}
pub(crate) fn scan_bounded_prefix(
pub(crate) fn scan_bounded_prefix<'a>(
&self,
tx: &SessionTx,
tx: &'a SessionTx,
prefix: &Tuple,
lower: &[DataValue],
upper: &[DataValue],
) -> impl Iterator<Item = Result<Tuple>> {
) -> impl Iterator<Item = Result<Tuple>> + 'a {
let mut lower_t = prefix.clone();
lower_t.0.extend_from_slice(lower);
let mut upper_t = prefix.clone();

@ -25,14 +25,14 @@ pub trait StoreTx {
fn del(&mut self, key: &[u8]) -> Result<()>;
fn exists(&self, key: &[u8], for_update: bool) -> Result<bool>;
fn commit(&mut self) -> Result<()>;
fn range_scan(
&self,
fn range_scan<'a>(
&'a self,
lower: &[u8],
upper: &[u8],
) -> Box<dyn Iterator<Item = Result<Tuple>>>;
fn range_scan_raw(
&self,
) -> Box<dyn Iterator<Item = Result<Tuple>> + 'a>;
fn range_scan_raw<'a>(
&'a self,
lower: &[u8],
upper: &[u8],
) -> Box<dyn Iterator<Item = Result<(Vec<u8>, Vec<u8>)>>>;
) -> Box<dyn Iterator<Item = Result<(Vec<u8>, Vec<u8>)>> + 'a>;
}

Loading…
Cancel
Save