diff --git a/packages/common/universaldb/src/transaction.rs b/packages/common/universaldb/src/transaction.rs index 991c069db5..7b63e90f0f 100644 --- a/packages/common/universaldb/src/transaction.rs +++ b/packages/common/universaldb/src/transaction.rs @@ -105,6 +105,11 @@ impl Transaction { self.driver.clear(&self.subspace.pack(key)); } + pub fn delete_subspace(&self, subspace: &Subspace) { + self.informal() + .clear_subspace_range(&self.subspace.join(&subspace)); + } + pub fn delete_key_subspace(&self, key: &T) { self.informal() .clear_subspace_range(&self.subspace.subspace(&self.subspace.pack(key))); @@ -176,15 +181,15 @@ impl Transaction { self.driver.get_ranges_keyvalues(opt, isolation_level) } - pub fn read_entries<'a, T: FormalKey + for<'de> TupleUnpack<'de>>( - &'a self, - opt: RangeOption<'a>, - isolation_level: IsolationLevel, - ) -> impl futures_util::Stream> { - self.driver - .get_ranges_keyvalues(opt, isolation_level) - .map(|res| self.read_entry(&res?)) - } + // TODO: Fix types + // pub fn read_entries<'a, T: FormalKey + for<'de> TupleUnpack<'de>>( + // &'a self, + // opt: RangeOption<'a>, + // isolation_level: IsolationLevel, + // ) -> impl futures_util::Stream> { + // self.read_range(opt, isolation_level) + // .map(|res| self.read_entry(&res?)) + // } // ==== TODO: Remove. all of these should only be used via `tx.informal()` ==== pub fn get<'a>( @@ -232,7 +237,7 @@ impl Transaction { self.driver.clear_range(begin, end) } - pub fn clear_subspace_range(&self, subspace: &Subspace) { + pub fn clear_subspace_range(&self, subspace: &tuple::Subspace) { let (begin, end) = subspace.range(); self.driver.clear_range(&begin, &end); } @@ -316,15 +321,11 @@ impl<'t> InformalTransaction<'t> { } /// Clear all keys in a subspace range - pub fn clear_subspace_range(&self, subspace: &Subspace) { + pub fn clear_subspace_range(&self, subspace: &tuple::Subspace) { let (begin, end) = subspace.range(); self.inner.driver.clear_range(&begin, &end); } - // pub fn commit(self: Box) -> Pin> + Send>> { - // self.inner.driver.commit() - // } - pub fn cancel(&self) { self.inner.driver.cancel() } diff --git a/packages/common/universaldb/src/utils/keys.rs b/packages/common/universaldb/src/utils/keys.rs index 4b6eb847bb..4c0a261948 100644 --- a/packages/common/universaldb/src/utils/keys.rs +++ b/packages/common/universaldb/src/utils/keys.rs @@ -122,4 +122,7 @@ define_keys! { (94, SERVERLESS, "serverless"), (95, DESIRED_SLOTS, "desired_slots"), (96, BY_VARIANT, "by_variant"), + (97, ACL, "acl"), + (98, TOKEN, "token"), + (99, SECRET, "secret"), } diff --git a/packages/common/universaldb/src/utils/subspace.rs b/packages/common/universaldb/src/utils/subspace.rs index 1c743d0fda..c29e64fbc0 100644 --- a/packages/common/universaldb/src/utils/subspace.rs +++ b/packages/common/universaldb/src/utils/subspace.rs @@ -36,6 +36,12 @@ impl Subspace { } } + pub fn join(&self, s: &Subspace) -> Self { + Self { + inner: tuple::Subspace::from_bytes([self.inner.bytes(), s.bytes()].concat()), + } + } + /// Returns the key encoding the specified Tuple with the prefix of this Subspace /// prepended. pub fn pack(&self, t: &T) -> Vec {