use crate::db::query::explain::ExplainPlan;
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
pub enum TraceExecutionFamily {
PrimaryKey,
Ordered,
Grouped,
}
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
pub enum TraceReuseEvent {
Hit,
Miss,
}
impl TraceReuseEvent {
#[must_use]
pub const fn is_hit(self) -> bool {
matches!(self, Self::Hit)
}
}
#[derive(Clone, Debug, Eq, PartialEq)]
pub struct QueryTracePlan {
plan_hash: String,
access_strategy: String,
execution_family: Option<TraceExecutionFamily>,
reuse: TraceReuseEvent,
explain: ExplainPlan,
}
impl QueryTracePlan {
#[must_use]
pub const fn new(
plan_hash: String,
access_strategy: String,
execution_family: Option<TraceExecutionFamily>,
reuse: TraceReuseEvent,
explain: ExplainPlan,
) -> Self {
Self {
plan_hash,
access_strategy,
execution_family,
reuse,
explain,
}
}
#[must_use]
pub const fn plan_hash(&self) -> &str {
self.plan_hash.as_str()
}
#[must_use]
pub const fn access_strategy(&self) -> &str {
self.access_strategy.as_str()
}
#[must_use]
pub const fn execution_family(&self) -> Option<TraceExecutionFamily> {
self.execution_family
}
#[must_use]
pub const fn reuse(&self) -> TraceReuseEvent {
self.reuse
}
#[must_use]
pub const fn explain(&self) -> &ExplainPlan {
&self.explain
}
}