contextdb_engine/
persistent_store.rs1use 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}