use crate::storage::engine::StorageEngine;
#[cfg(not(target_arch = "wasm32"))]
use crate::sync::outbound::columnar::ColumnarOutbound;
#[cfg(not(target_arch = "wasm32"))]
use crate::sync::outbound::timeseries::TimeseriesOutbound;
use nodedb_columnar::mutation::MutationEngine;
use nodedb_mem::ScopedMemory;
use nodedb_types::columnar::ColumnarProfile;
use std::collections::HashMap;
use std::sync::{Arc, Mutex, RwLock};
#[derive(
Debug,
Clone,
serde::Serialize,
serde::Deserialize,
zerompk::ToMessagePack,
zerompk::FromMessagePack,
)]
pub(in crate::engine::columnar) struct SegmentMeta {
pub(in crate::engine::columnar) segment_id: u32,
pub(in crate::engine::columnar) row_count: u64,
#[serde(default)]
pub(super) system_time_from_ms: i64,
#[serde(default)]
pub(in crate::engine::columnar) fully_deleted_at_ms: Option<i64>,
}
pub(in crate::engine::columnar) struct CollectionState {
pub(in crate::engine::columnar) mutation: MutationEngine,
pub(super) profile: ColumnarProfile,
pub(super) bitemporal: bool,
pub(in crate::engine::columnar) segments: Vec<SegmentMeta>,
pub(super) next_segment_id: u32,
}
pub(super) type CollectionMap = HashMap<String, Arc<Mutex<CollectionState>>>;
pub struct ColumnarEngine<S: StorageEngine> {
pub(in crate::engine::columnar) storage: Arc<S>,
pub(super) collections: RwLock<CollectionMap>,
#[cfg(not(target_arch = "wasm32"))]
pub(super) outbound: Option<Arc<ColumnarOutbound<S>>>,
#[cfg(not(target_arch = "wasm32"))]
pub(super) timeseries_outbound: Option<Arc<TimeseriesOutbound<S>>>,
pub(super) memory: ScopedMemory,
}