55 lines
1.9 KiB
Rust
55 lines
1.9 KiB
Rust
//!
|
|
use crate::{plumbing::DatabaseStorageTypes, Runtime};
|
|
use triomphe::Arc;
|
|
|
|
/// Stores the cached results and dependency information for all the queries
|
|
/// defined on your salsa database. Also embeds a [`Runtime`] which is used to
|
|
/// manage query execution. Every database must include a `storage:
|
|
/// Storage<Self>` field.
|
|
pub struct Storage<DB: DatabaseStorageTypes> {
|
|
query_store: Arc<DB::DatabaseStorage>,
|
|
runtime: Runtime,
|
|
}
|
|
|
|
impl<DB: DatabaseStorageTypes> Default for Storage<DB> {
|
|
fn default() -> Self {
|
|
Self { query_store: Default::default(), runtime: Default::default() }
|
|
}
|
|
}
|
|
|
|
impl<DB: DatabaseStorageTypes> Storage<DB> {
|
|
/// Gives access to the underlying salsa runtime.
|
|
pub fn salsa_runtime(&self) -> &Runtime {
|
|
&self.runtime
|
|
}
|
|
|
|
/// Gives access to the underlying salsa runtime.
|
|
pub fn salsa_runtime_mut(&mut self) -> &mut Runtime {
|
|
&mut self.runtime
|
|
}
|
|
|
|
/// Access the query storage tables. Not meant to be used directly by end
|
|
/// users.
|
|
pub fn query_store(&self) -> &DB::DatabaseStorage {
|
|
&self.query_store
|
|
}
|
|
|
|
/// Access the query storage tables. Not meant to be used directly by end
|
|
/// users.
|
|
pub fn query_store_mut(&mut self) -> (&DB::DatabaseStorage, &mut Runtime) {
|
|
(&self.query_store, &mut self.runtime)
|
|
}
|
|
|
|
/// Returns a "snapshotted" storage, suitable for use in a forked database.
|
|
/// This snapshot hold a read-lock on the global state, which means that any
|
|
/// attempt to `set` an input will block until the forked runtime is
|
|
/// dropped. See `ParallelDatabase::snapshot` for more information.
|
|
///
|
|
/// **Warning.** This second handle is intended to be used from a separate
|
|
/// thread. Using two database handles from the **same thread** can lead to
|
|
/// deadlock.
|
|
pub fn snapshot(&self) -> Self {
|
|
Storage { query_store: self.query_store.clone(), runtime: self.runtime.snapshot() }
|
|
}
|
|
}
|