1use crate::cost::{PlanCost, PlanCostBreakdown};
16use crate::properties::PhysicalProperties;
17use crate::search::{RuleEvent, SearchMode};
18use crate::stage::StageTrace;
19use hawdb_plan_cypher::{PhysicalOperatorId, PhysicalPlanKind};
20use std::collections::BTreeMap;
21
22#[derive(Debug, Clone, PartialEq, Eq)]
23pub struct OptimizerConfig {
24 pub max_groups: usize,
25}
26
27impl Default for OptimizerConfig {
28 fn default() -> Self {
29 Self { max_groups: 128 }
30 }
31}
32
33#[derive(Debug, Clone, PartialEq, Eq)]
34pub struct OptimizerTrace {
35 pub groups: usize,
36 pub search_mode: SearchMode,
37 pub query_digest: Option<String>,
38 pub selected_plan: String,
39 pub selected_plan_fingerprint: String,
41 pub selected_plan_cost: PlanCost,
42 pub selected_plan_cost_breakdown: PlanCostBreakdown,
43 pub selected_plan_properties: PhysicalProperties,
44 pub selected_plan_cardinality_estimates: Vec<OperatorCardinalityEstimate>,
46 pub selected_plan_operator_counts: BTreeMap<String, usize>,
47 pub selected_plan_class_counts: BTreeMap<String, usize>,
48 pub warnings: Vec<String>,
49 pub decisions: Vec<String>,
50 pub rule_events: Vec<RuleEvent>,
51 pub stage_events: Vec<StageTrace>,
52}
53
54#[derive(Debug, Clone, Copy, PartialEq, Eq)]
56pub struct OperatorCardinalityEstimate {
57 pub operator_id: PhysicalOperatorId,
58 pub operator: PhysicalPlanKind,
59 pub estimated_rows: u64,
60}