use std::sync::Arc;
use nodedb_types::{DatabaseId, Surrogate};
use crate::control::planner::sql_plan_convert::convert::db_qualified;
use crate::control::state::SharedState;
pub struct TombstoneParams<'a> {
pub state: &'a Arc<SharedState>,
pub target_db_id: DatabaseId,
pub target_collection: &'a str,
pub source_surrogate: Surrogate,
}
pub struct KvTombstoneParams<'a> {
pub state: &'a Arc<SharedState>,
pub target_db_id: DatabaseId,
pub target_collection: &'a str,
pub kv_key: String,
}
pub fn perform_kv_clone_tombstone(params: KvTombstoneParams<'_>) -> crate::Result<()> {
let KvTombstoneParams {
state,
target_db_id,
target_collection,
kv_key,
} = params;
let catalog_arc = state.credentials.catalog();
let catalog = catalog_arc.as_ref().ok_or(crate::Error::Storage {
engine: "clone_kv_tombstone".into(),
detail: "catalog unavailable".into(),
})?;
let target_coll_qualified = db_qualified(target_db_id, target_collection);
catalog
.put_kv_clone_tombstone(&target_coll_qualified, &kv_key)
.map_err(|e| crate::Error::Storage {
engine: "clone_kv_tombstone".into(),
detail: format!("put_kv_clone_tombstone failed: {e}"),
})
}
pub fn perform_clone_tombstone(params: TombstoneParams<'_>) -> crate::Result<()> {
let TombstoneParams {
state,
target_db_id,
target_collection,
source_surrogate,
} = params;
let catalog_arc = state.credentials.catalog();
let catalog = catalog_arc.as_ref().ok_or(crate::Error::Storage {
engine: "clone_tombstone".into(),
detail: "catalog unavailable".into(),
})?;
let target_coll_qualified = db_qualified(target_db_id, target_collection);
catalog
.put_clone_tombstone(&target_coll_qualified, source_surrogate.as_u32())
.map_err(|e| crate::Error::Storage {
engine: "clone_tombstone".into(),
detail: format!("put_clone_tombstone failed: {e}"),
})
}