Skip to main content

uqa_storage/vector_index/query/
statistics.rs

1//
2// Unified Query Algebra
3//
4// Copyright (c) 2023-2026 Cognica, Inc.
5//
6
7//! Results and diagnostics share one successful physical invocation.
8
9use crate::diskann_index::{
10    format::DiskANNGeneration, search::DiskANNTraversalStats, DiskANNQueryWork,
11};
12use uqa_core::PostingList;
13
14pub use uqa_core::vector_execution::DiskANNExecutionRoute;
15
16/// Bounded observations from the same retained physical/canonical view that produced the result. Page counts describe logical storage work, not device I/O; no metadata probe or second query is needed to produce this report.
17#[derive(Debug, Clone, Copy, PartialEq, Eq)]
18pub struct DiskANNExecutionStats {
19    pub generation: DiskANNGeneration,
20    pub route: DiskANNExecutionRoute,
21    pub traversal: DiskANNTraversalStats,
22    pub work: DiskANNQueryWork,
23}
24
25/// One result with optional measured work. An unsupported index returns `None`, never fabricated zero work. Failed invocations return an error without a successful report.
26pub struct VectorQueryResult {
27    pub postings: PostingList,
28    pub diskann: Option<DiskANNExecutionStats>,
29}
30
31impl VectorQueryResult {
32    pub(crate) fn unmeasured(postings: PostingList) -> Self {
33        Self {
34            postings,
35            diskann: None,
36        }
37    }
38
39    pub(crate) fn measured(
40        result: crate::diskann_index::DiskANNQueryResult,
41        generation: DiskANNGeneration,
42        route: DiskANNExecutionRoute,
43    ) -> Self {
44        Self {
45            postings: result.postings,
46            diskann: Some(DiskANNExecutionStats {
47                generation,
48                route,
49                traversal: result.traversal,
50                work: result.work,
51            }),
52        }
53    }
54}
55
56#[cfg(test)]
57mod tests;