knowledge_base_crud/write/statements/
apply.rs1use super::planner::StatementPlanner;
2use super::{ApplyStatementsOutcome, StatementBatch, StatementResultStatus, validate_batch};
3use crate::Error;
4use crate::write::execution::{MutationDisposition, PlannedMutation, execute};
5use crate::write::{StatementMutations, WriteMode};
6
7impl StatementMutations<'_> {
8 pub fn apply(&self, batch: &StatementBatch, mode: WriteMode) -> Result<ApplyStatementsOutcome, Error> {
9 validate_batch(batch)?;
10 let (mut results, disposition) = execute(self.repository, mode, || {
11 let plan = StatementPlanner::new(self.repository.root(), batch).plan()?;
12 let can_commit = plan.all_new();
13 Ok(PlannedMutation::new(plan.results, plan.edits, can_commit))
14 })?;
15 match disposition {
16 MutationDisposition::NotCommitted => Ok(ApplyStatementsOutcome::NotApplied(results)),
17 MutationDisposition::Previewed => Ok(ApplyStatementsOutcome::Previewed(results)),
18 MutationDisposition::Committed => {
19 for result in &mut results {
20 debug_assert_eq!(result.status, StatementResultStatus::WouldAdd);
21 result.status = StatementResultStatus::Added;
22 }
23 Ok(ApplyStatementsOutcome::Applied(results))
24 }
25 }
26 }
27}