use std::sync::Arc;
use redb::Database;
use nodedb_types::TenantId;
use super::errors::into_result_err;
use crate::engine::sparse::fts_redb::RedbFtsBackend;
use crate::storage::quarantine::QuarantineRegistry;
pub struct InvertedIndex {
pub(super) inner: nodedb_fts::index::FtsIndex<RedbFtsBackend>,
}
impl InvertedIndex {
pub fn open(db: Arc<Database>) -> crate::Result<Self> {
let backend = RedbFtsBackend::open(db)?;
Ok(Self {
inner: nodedb_fts::index::FtsIndex::new(backend),
})
}
pub fn set_quarantine_registry(&mut self, registry: Arc<QuarantineRegistry>) {
self.inner.backend_mut().set_quarantine_registry(registry);
}
pub fn backend(&self) -> &RedbFtsBackend {
self.inner.backend()
}
pub fn backend_mut(&mut self) -> &mut RedbFtsBackend {
self.inner.backend_mut()
}
pub fn purge_tenant(&self, tid: TenantId) -> crate::Result<usize> {
self.inner
.purge_tenant(tid.as_u64())
.map_err(into_result_err)
}
pub fn purge_collection(&self, tid: TenantId, collection: &str) -> crate::Result<usize> {
self.inner
.purge_collection(tid.as_u64(), collection)
.map_err(into_result_err)
}
}