use nodedb_types::{DatabaseId, TenantId};
use redb::ReadableTable;
use super::store::{EDGES, EdgeStore, redb_err};
pub type EdgeSnapshotRecord = (DatabaseId, TenantId, String, Vec<u8>);
impl EdgeStore {
pub fn export_edges(&self) -> crate::Result<Vec<EdgeSnapshotRecord>> {
let txn = self.db.begin_read().map_err(|e| redb_err("read txn", e))?;
let table = txn
.open_table(EDGES)
.map_err(|e| redb_err("open edges", e))?;
let mut pairs = Vec::new();
for entry in table.iter().map_err(|e| redb_err("iter edges", e))? {
let (k, v) = entry.map_err(|e| redb_err("read edge", e))?;
let (db, tid, composite) = k.value();
pairs.push((
DatabaseId::new(db),
TenantId::new(tid),
composite.to_string(),
v.value().to_vec(),
));
}
Ok(pairs)
}
pub fn import_edges(&self, edges: &[EdgeSnapshotRecord]) -> crate::Result<()> {
for (db, tid, key, value) in edges {
self.put_edge_raw(db.as_u64(), *tid, key, value)?;
}
Ok(())
}
}