pub trait KeyValueStore: Send + Sync {
Show 28 methods
// Required methods
fn get(&self, key: &[u8]) -> StorageBackendResult<Option<Vec<u8>>>;
fn put(&self, key: &[u8], value: &[u8]) -> StorageBackendResult<()>;
fn delete(&self, key: &[u8]) -> StorageBackendResult<()>;
fn scan_prefix(
&self,
prefix: &[u8],
) -> StorageBackendResult<Vec<(Vec<u8>, Vec<u8>)>>;
fn delete_prefix(&self, prefix: &[u8]) -> StorageBackendResult<usize>;
fn batch(&self) -> Box<dyn KeyValueBatch + '_>;
fn in_transaction(&self) -> bool;
fn transaction_has_written(&self) -> StorageBackendResult<bool>;
// Provided methods
fn storage_identity(
&self,
) -> StorageBackendResult<Option<PersistentStorageIdentity>> { ... }
fn open_session(&self) -> StorageBackendResult<Arc<dyn KeyValueStore>> { ... }
fn visit_value(
&self,
_key: &[u8],
control: &StorageReadControl,
_visit: &mut ValueReadVisitor<'_>,
) -> StorageBackendResult<()> { ... }
fn visit_prefix_after(
&self,
_prefix: &[u8],
_after: Option<&[u8]>,
_limit: usize,
control: &StorageReadControl,
_visit: &mut KeyValueReadVisitor<'_>,
) -> StorageBackendResult<()> { ... }
fn contains_prefix_budgeted(
&self,
prefix: &[u8],
control: &StorageReadControl,
) -> StorageBackendResult<bool> { ... }
fn contains_key(&self, key: &[u8]) -> StorageBackendResult<bool> { ... }
fn scan_prefix_after(
&self,
prefix: &[u8],
after: Option<&[u8]>,
limit: usize,
) -> StorageBackendResult<Vec<(Vec<u8>, Vec<u8>)>> { ... }
fn scan_prefix_keys_after(
&self,
prefix: &[u8],
after: Option<&[u8]>,
limit: usize,
) -> StorageBackendResult<Vec<Vec<u8>>> { ... }
fn first_prefix_after(
&self,
prefix: &[u8],
after: Option<&[u8]>,
) -> StorageBackendResult<Option<(Vec<u8>, Vec<u8>)>> { ... }
fn begin_transaction(&self) -> StorageBackendResult<()> { ... }
fn begin_read_transaction(&self) -> StorageBackendResult<()> { ... }
fn begin_upgradeable_transaction(&self) -> StorageBackendResult<()> { ... }
fn change_version(&self) -> StorageBackendResult<Option<u64>> { ... }
fn change_version_monitor_is_nonblocking(
&self,
) -> StorageBackendResult<bool> { ... }
fn pin_transaction_snapshot(&self) -> StorageBackendResult<()> { ... }
fn commit_transaction(&self) -> StorageBackendResult<()> { ... }
fn rollback_transaction(&self) -> StorageBackendResult<()> { ... }
fn savepoint(&self, _name: &str) -> StorageBackendResult<()> { ... }
fn release_savepoint(&self, _name: &str) -> StorageBackendResult<()> { ... }
fn rollback_to_savepoint(&self, _name: &str) -> StorageBackendResult<()> { ... }
}Expand description
Ordered byte-key storage used by Key/Value catalog and index backends.
Required Methods§
fn get(&self, key: &[u8]) -> StorageBackendResult<Option<Vec<u8>>>
fn put(&self, key: &[u8], value: &[u8]) -> StorageBackendResult<()>
fn delete(&self, key: &[u8]) -> StorageBackendResult<()>
fn scan_prefix( &self, prefix: &[u8], ) -> StorageBackendResult<Vec<(Vec<u8>, Vec<u8>)>>
fn delete_prefix(&self, prefix: &[u8]) -> StorageBackendResult<usize>
fn batch(&self) -> Box<dyn KeyValueBatch + '_>
fn in_transaction(&self) -> bool
fn transaction_has_written(&self) -> StorageBackendResult<bool>
Provided Methods§
fn storage_identity( &self, ) -> StorageBackendResult<Option<PersistentStorageIdentity>>
Sourcefn open_session(&self) -> StorageBackendResult<Arc<dyn KeyValueStore>>
fn open_session(&self) -> StorageBackendResult<Arc<dyn KeyValueStore>>
Open an independent transaction session over the same logical store. The default keeps simple test/custom stores source-compatible while making the missing MVCC capability explicit when a persistent engine needs a committed reader alongside a pinned statement snapshot.
Sourcefn visit_value(
&self,
_key: &[u8],
control: &StorageReadControl,
_visit: &mut ValueReadVisitor<'_>,
) -> StorageBackendResult<()>
fn visit_value( &self, _key: &[u8], control: &StorageReadControl, _visit: &mut ValueReadVisitor<'_>, ) -> StorageBackendResult<()>
Visit one borrowed value under the retained read. Providers reserve any temporary encoded payload before fetching it; callbacks must not reenter the store.
Sourcefn visit_prefix_after(
&self,
_prefix: &[u8],
_after: Option<&[u8]>,
_limit: usize,
control: &StorageReadControl,
_visit: &mut KeyValueReadVisitor<'_>,
) -> StorageBackendResult<()>
fn visit_prefix_after( &self, _prefix: &[u8], _after: Option<&[u8]>, _limit: usize, control: &StorageReadControl, _visit: &mut KeyValueReadVisitor<'_>, ) -> StorageBackendResult<()>
Visit at most limit entries in key order, strictly after after when supplied. Encoded values remain borrowed from their provider owner and callbacks must not reenter the store.
Sourcefn contains_prefix_budgeted(
&self,
prefix: &[u8],
control: &StorageReadControl,
) -> StorageBackendResult<bool>
fn contains_prefix_budgeted( &self, prefix: &[u8], control: &StorageReadControl, ) -> StorageBackendResult<bool>
Test prefix existence under the read allowance. Providers that materialize values should implement a key-only probe.
fn contains_key(&self, key: &[u8]) -> StorageBackendResult<bool>
Sourcefn scan_prefix_after(
&self,
prefix: &[u8],
after: Option<&[u8]>,
limit: usize,
) -> StorageBackendResult<Vec<(Vec<u8>, Vec<u8>)>>
fn scan_prefix_after( &self, prefix: &[u8], after: Option<&[u8]>, limit: usize, ) -> StorageBackendResult<Vec<(Vec<u8>, Vec<u8>)>>
Return at most limit key/value pairs in key order, strictly after
after when supplied. This is the bounded value cursor used by large
format migrations and other paged consumers.
Sourcefn scan_prefix_keys_after(
&self,
prefix: &[u8],
after: Option<&[u8]>,
limit: usize,
) -> StorageBackendResult<Vec<Vec<u8>>>
fn scan_prefix_keys_after( &self, prefix: &[u8], after: Option<&[u8]>, limit: usize, ) -> StorageBackendResult<Vec<Vec<u8>>>
Return at most limit keys in key order, strictly after after when
it is present. Backends should override this method with a key-only,
bounded range scan so cursor consumers neither materialize the entire
prefix nor read values they do not need on every page.
fn first_prefix_after( &self, prefix: &[u8], after: Option<&[u8]>, ) -> StorageBackendResult<Option<(Vec<u8>, Vec<u8>)>>
fn begin_transaction(&self) -> StorageBackendResult<()>
fn begin_read_transaction(&self) -> StorageBackendResult<()>
fn begin_upgradeable_transaction(&self) -> StorageBackendResult<()>
fn change_version(&self) -> StorageBackendResult<Option<u64>>
fn change_version_monitor_is_nonblocking(&self) -> StorageBackendResult<bool>
fn pin_transaction_snapshot(&self) -> StorageBackendResult<()>
fn commit_transaction(&self) -> StorageBackendResult<()>
fn rollback_transaction(&self) -> StorageBackendResult<()>
fn savepoint(&self, _name: &str) -> StorageBackendResult<()>
fn release_savepoint(&self, _name: &str) -> StorageBackendResult<()>
fn rollback_to_savepoint(&self, _name: &str) -> StorageBackendResult<()>
Dyn Compatibility§
This trait is dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety".