use crate::db::{
commit::{PreparedIndexDeltaKind, PreparedIndexMutation, PreparedRowCommitOp},
data::canonical_row_from_stored_raw_row,
};
impl PreparedRowCommitOp {
#[must_use]
pub(crate) fn snapshot_rollback(&self) -> Self {
let mut index_ops = Vec::with_capacity(self.index_ops.len());
for index_op in &self.index_ops {
let existing = index_op.store.with_borrow(|store| store.get(&index_op.key));
index_ops.push(PreparedIndexMutation {
store: index_op.store,
key: index_op.key.clone(),
value: existing,
delta_kind: PreparedIndexDeltaKind::None,
});
}
let data_value = self
.data_store
.with_borrow(|store| store.get(&self.data_key))
.map(canonical_row_from_stored_raw_row);
Self {
index_ops,
data_store: self.data_store,
data_key: self.data_key,
data_value,
}
}
#[must_use]
pub(crate) fn snapshot_row_only_rollback(&self) -> Self {
let data_value = self
.data_store
.with_borrow(|store| store.get(&self.data_key))
.map(canonical_row_from_stored_raw_row);
Self {
index_ops: Vec::new(),
data_store: self.data_store,
data_key: self.data_key,
data_value,
}
}
}
pub(crate) fn rollback_prepared_row_ops_reverse(ops: Vec<PreparedRowCommitOp>) {
for op in ops.into_iter().rev() {
op.apply();
}
}