use nodedb_physical::physical_plan::SpatialOp;
use crate::types::{DatabaseId, Lsn, TenantId, VShardId};
use crate::wal::manager::WalManager;
use super::super::wal_dispatch_fts_spatial;
pub(crate) fn wal_append_spatial_op(
wal: &WalManager,
tenant_id: TenantId,
vshard_id: VShardId,
database_id: DatabaseId,
op: &SpatialOp,
) -> crate::Result<Option<Lsn>> {
let appended = match op {
SpatialOp::Insert {
collection,
field,
surrogate,
geometry,
provenance,
} => {
let prov = provenance.clone().unwrap_or_default();
let payload = wal_dispatch_fts_spatial::encode_spatial_put_payload(
collection, field, *surrogate, geometry, &prov,
)?;
Some(wal_dispatch_fts_spatial::wal_append_spatial_put(
wal,
tenant_id,
vshard_id,
database_id,
&payload,
)?)
}
SpatialOp::Delete {
collection,
field,
surrogate,
provenance,
} => {
let prov = provenance.clone().unwrap_or_default();
let payload = wal_dispatch_fts_spatial::encode_spatial_delete_payload(
collection, field, *surrogate, &prov,
);
Some(wal_dispatch_fts_spatial::wal_append_spatial_delete(
wal,
tenant_id,
vshard_id,
database_id,
&payload,
)?)
}
SpatialOp::Scan { .. } => None,
};
Ok(appended)
}