use crate::error::{DbError, Result};
pub async fn audit_current(conn: &libsql::Connection) -> Result<usize> {
let query = format!(
r#"
WITH materialized AS (
SELECT source_id, target_id, edge_type, valid_from,
valid_to, weight, properties, recorded_at
FROM links_current
),
projection AS ({projection})
SELECT
(SELECT COUNT(*) FROM (
SELECT * FROM materialized EXCEPT SELECT * FROM projection))
+ (SELECT COUNT(*) FROM (
SELECT * FROM projection EXCEPT SELECT * FROM materialized))
"#,
projection = super::LATEST_BELIEF_PROJECTION
);
let mut rows = conn.query(&query, ()).await?;
let count: i64 = if let Some(row) = rows.next().await? {
row.get(0).unwrap_or(0)
} else {
0
};
if count > 0 {
return Err(DbError::CurrentDrift { n: count as usize });
}
Ok(0)
}