icydb_core/db/query/
diagnostics.rs1pub use crate::db::executor::trace::{QueryTraceEvent, TraceAccess, TraceExecutorKind, TracePhase};
11use crate::db::query::plan::{ExplainPlan, PlanFingerprint};
12
13#[derive(Clone, Debug, Eq, PartialEq)]
20pub struct QueryDiagnostics {
21 pub explain: ExplainPlan,
22 pub fingerprint: PlanFingerprint,
23}
24
25impl From<ExplainPlan> for QueryDiagnostics {
26 fn from(explain: ExplainPlan) -> Self {
27 let fingerprint = explain.fingerprint();
28 Self {
29 explain,
30 fingerprint,
31 }
32 }
33}
34
35#[derive(Clone, Debug, Eq, PartialEq)]
42pub struct QueryExecutionDiagnostics {
43 pub fingerprint: PlanFingerprint,
44 pub events: Vec<QueryTraceEvent>,
45}
46
47pub type QueryTraceAccess = TraceAccess;
49
50pub type QueryTraceExecutorKind = TraceExecutorKind;
52
53pub type QueryTracePhase = TracePhase;
55
56#[must_use]
57pub const fn start_event(
58 fingerprint: PlanFingerprint,
59 access: Option<TraceAccess>,
60 executor: TraceExecutorKind,
61) -> QueryTraceEvent {
62 QueryTraceEvent::Start {
63 fingerprint,
64 executor,
65 access,
66 }
67}
68
69#[must_use]
70pub const fn finish_event(
71 fingerprint: PlanFingerprint,
72 access: Option<TraceAccess>,
73 executor: TraceExecutorKind,
74 rows: u64,
75) -> QueryTraceEvent {
76 QueryTraceEvent::Finish {
77 fingerprint,
78 executor,
79 access,
80 rows,
81 }
82}