use nodedb_physical::physical_plan::TextOp;
use crate::types::{DatabaseId, Lsn, TenantId, VShardId};
use crate::wal::manager::WalManager;
use super::super::wal_dispatch_fts_spatial;
pub(crate) fn wal_append_text_op(
wal: &WalManager,
tenant_id: TenantId,
vshard_id: VShardId,
database_id: DatabaseId,
op: &TextOp,
) -> crate::Result<Option<Lsn>> {
let appended = match op {
TextOp::FtsIndexDoc {
collection,
surrogate,
text,
provenance,
} => {
let doc_id = crate::engine::document::store::surrogate_to_doc_id(*surrogate);
let prov = provenance.clone().unwrap_or_default();
let payload = nodedb_wal::record::FtsIndexPayload::new(prov, collection, &doc_id, text);
Some(wal_dispatch_fts_spatial::wal_append_fts_index(
wal,
tenant_id,
vshard_id,
database_id,
&payload,
)?)
}
TextOp::FtsDeleteDoc {
collection,
surrogate,
provenance,
} => {
let doc_id = crate::engine::document::store::surrogate_to_doc_id(*surrogate);
let prov = provenance.clone().unwrap_or_default();
let payload = nodedb_wal::record::FtsDeletePayload::new(prov, collection, &doc_id);
Some(wal_dispatch_fts_spatial::wal_append_fts_delete(
wal,
tenant_id,
vshard_id,
database_id,
&payload,
)?)
}
TextOp::Search { .. }
| TextOp::BM25ScoreScan { .. }
| TextOp::PhraseSearch { .. }
| TextOp::HybridSearch { .. }
| TextOp::HybridSearchTriple { .. }
| TextOp::SetAnalyzer { .. } => None,
};
Ok(appended)
}