use std::collections::BTreeMap;
use uqa_sql::catalog::graph_oids::GraphCatalogOids;
use uqa_storage::{CatalogFacade, StorageBackendResult};
pub const GRAPH_CATALOG_OIDS_METADATA_PREFIX: &str = "graph_catalog_oids:";
pub fn load(
catalog: &dyn CatalogFacade,
) -> StorageBackendResult<BTreeMap<String, GraphCatalogOids>> {
catalog
.metadata_with_prefix(GRAPH_CATALOG_OIDS_METADATA_PREFIX)?
.into_iter()
.map(|(key, value)| {
let graph = key
.strip_prefix(GRAPH_CATALOG_OIDS_METADATA_PREFIX)
.unwrap_or(&key)
.to_string();
Ok((graph, serde_json::from_str(&value)?))
})
.collect()
}
pub fn record(
catalog: &dyn CatalogFacade,
graph: &str,
oids: &GraphCatalogOids,
) -> StorageBackendResult<()> {
catalog.set_metadata(&metadata_key(graph), &serde_json::to_string(oids)?)
}
pub fn forget(catalog: &dyn CatalogFacade, graph: &str) -> StorageBackendResult<()> {
catalog.delete_metadata(&metadata_key(graph))
}
fn metadata_key(graph: &str) -> String {
format!("{GRAPH_CATALOG_OIDS_METADATA_PREFIX}{graph}")
}