use std::sync::Arc;
use crate::ids::VariableId;
#[derive(Clone, Copy, Debug, Eq, PartialEq, Hash)]
pub enum DataClassification {
Tabular,
Temporal,
Panel,
MultiEnvironment,
Event,
}
#[derive(Clone, Debug, Eq, PartialEq)]
pub struct LogicalAnalysisPlanRecord {
pub plan_id: Arc<str>,
pub data_classification: DataClassification,
pub discovery_algorithm: Option<Arc<str>>,
pub graph_review_required: bool,
pub identifier: Option<Arc<str>>,
pub estimator: Option<Arc<str>>,
pub validation_suite: Option<Arc<str>>,
pub query_variables: Arc<[VariableId]>,
}
#[derive(Clone, Copy, Debug, Eq, PartialEq, Hash)]
pub enum BufferMaterialization {
Borrowed,
CopiedContiguous,
Transposed,
Chunked,
}
#[derive(Clone, Copy, Debug, Eq, PartialEq, Hash)]
pub enum KernelSelection {
Scalar,
PortableOptimized,
ArchSimd,
DenseBackend,
}
#[derive(Clone, Debug, Eq, PartialEq)]
pub struct ParallelTaskSpec {
pub dimension: Arc<str>,
pub units: u32,
}
#[derive(Clone, Debug, Eq, PartialEq)]
pub struct PhysicalExecutionPlanRecord {
pub plan_id: Arc<str>,
pub materializations: Arc<[(Arc<str>, BufferMaterialization)]>,
pub kernels: Arc<[(Arc<str>, KernelSelection)]>,
pub batch_size: Option<usize>,
pub workspace_bytes: Option<u64>,
pub estimated_peak_memory_bytes: Option<u64>,
pub estimated_copy_bytes: Option<u64>,
pub task_schedule: Arc<[ParallelTaskSpec]>,
pub worker_threads: u32,
pub deterministic_reductions: bool,
pub expected_python_crossings: u32,
}
#[derive(Clone, Debug, Default, Eq, PartialEq)]
pub struct ExecutionPerformanceRecord {
pub wall_time_ns: Option<u64>,
pub peak_rss_bytes: Option<u64>,
pub copy_count: u64,
pub scalar_fallback_count: u64,
pub latency_mode: Option<Arc<str>>,
pub stage_timings_ns: Vec<(Arc<str>, u64)>,
pub bootstrap_replicates_requested: Option<u32>,
pub bootstrap_replicates_ok: Option<u32>,
pub n_draws: Option<u32>,
pub cancelled: bool,
pub early_stopped: bool,
}