Skip to main content

contextdb_engine/
persistent_store.rs

1use crate::composite_store::CompositeStore;
2use crate::persistence::RedbPersistence;
3use contextdb_core::{Result, RowId};
4use contextdb_tx::{WriteSet, WriteSetApplicator};
5use std::sync::Arc;
6
7pub struct PersistentCompositeStore {
8    inner: CompositeStore,
9    persistence: Arc<RedbPersistence>,
10}
11
12impl PersistentCompositeStore {
13    pub fn new(inner: CompositeStore, persistence: Arc<RedbPersistence>) -> Self {
14        Self { inner, persistence }
15    }
16}
17
18impl WriteSetApplicator for PersistentCompositeStore {
19    fn apply(&self, ws: WriteSet) -> Result<()> {
20        let log_entries = self.inner.build_change_log_entries(&ws);
21        self.persistence.flush_data_with_logs(&ws, &log_entries)?;
22        self.inner.apply(ws)
23    }
24
25    fn new_row_id(&self) -> RowId {
26        self.inner.new_row_id()
27    }
28}