use sqlx::{Executor, Sqlite};
pub(crate) async fn get_size_on_disk<'e, E>(executor: E) -> sqlx::Result<u64>
where
E: Executor<'e, Database = Sqlite>,
{
let size: i64 = sqlx::query_scalar("SELECT COALESCE(sum(pgsize), 0) FROM dbstat")
.fetch_one(executor)
.await?;
Ok(size as u64)
}
pub(crate) async fn get_used_size<'e, E>(executor: E) -> sqlx::Result<u64>
where
E: Executor<'e, Database = Sqlite>,
{
let size: i64 = sqlx::query_scalar("SELECT COALESCE(sum(pgsize - unused), 0) FROM dbstat")
.fetch_one(executor)
.await?;
Ok(size as u64)
}
#[cfg(test)]
mod tests {
use crate::kind::Dht;
use crate::test_open_db;
use holo_hash::DnaHash;
use std::sync::Arc;
fn dht_id() -> Dht {
Dht::new(Arc::new(DnaHash::from_raw_36(vec![0u8; 36])))
}
#[tokio::test]
async fn dbstat_reports_nonzero_sizes() {
let db = test_open_db(dht_id()).await.unwrap();
let on_disk = db.as_ref().get_size_on_disk().await.unwrap();
let used = db.as_ref().get_used_size().await.unwrap();
assert!(on_disk > 0, "expected nonzero on-disk size");
assert!(used > 0, "expected nonzero used size");
assert!(used <= on_disk);
}
}