Skip to main content

uqa_planner/
lib.rs

1//
2// Unified Query Algebra
3//
4// Copyright (c) 2023-2026 Cognica, Inc.
5//
6
7//! Query optimizer: cost estimation, cardinality, join enumeration.
8//!
9//! The planner is organized into these modules:
10//!
11//! * [`cost_model`] -- per-operator cost model. Estimates a unitless
12//!   cost for scans, filters, projections, sorts, hash aggregates,
13//!   window operators, and join algorithms. Used by the join
14//!   enumerator to pick a winning plan.
15//! * [`cardinality`] -- per-relation [`RelationStats`] +
16//!   [`CardinalityEstimator`] that turn predicate selectivities into
17//!   row-count estimates. Equality, range, and `LIKE` selectivities
18//!   are all on the same scale (`0..=1`).
19//! * [`join_graph`] -- [`JoinEdge`] / [`JoinGraph`] -- the dataflow
20//!   graph the enumerator walks.
21//! * [`join_enumerator`] -- DPccp (Moerkotte/Neumann 2006). Bitmask
22//!   `u64` for relation subsets, `HashMap` for the DP cache.
23//! * [`optimizer`] -- algebraic rewrites: filter pushdown, facet additivity, Boolean simplification.
24
25#![allow(
26    clippy::enum_glob_use,
27    clippy::doc_markdown,
28    clippy::map_unwrap_or,
29    clippy::derivable_impls,
30    clippy::match_same_arms,
31    clippy::module_name_repetitions,
32    clippy::missing_panics_doc,
33    clippy::panic_in_result_fn,
34    clippy::needless_for_each,
35    clippy::manual_assert,
36    clippy::option_if_let_else,
37    clippy::similar_names,
38    clippy::needless_pass_by_value,
39    clippy::unnecessary_wraps,
40    dead_code,
41    unused_imports,
42    clippy::struct_excessive_bools,
43    clippy::only_used_in_recursion,
44    clippy::question_mark,
45    clippy::unused_self,
46    clippy::single_match_else
47)]
48
49pub mod cardinality;
50pub mod cost_model;
51pub mod join_enumerator;
52pub mod join_graph;
53pub mod join_order;
54pub mod optimizer;
55pub mod plan_cost;
56pub mod query_optimizer;
57pub mod statement_planning;
58pub mod text_top_k;
59pub mod unified_plan;
60
61pub use cardinality::{
62    column_entropy, entropy_cardinality_lower_bound, mutual_information_estimate, AccessParadigm,
63    CardinalityEstimator, ColumnStats, EdgeSample, GraphStats, GraphStoreSampler,
64    LocalAccessEstimate, RelationStats, Selectivity, GRAPH_AVG_DEGREE_DEFAULT,
65    JACCARD_JOIN_SELECTIVITY,
66};
67pub use cost_model::{CostEstimator, OperatorCost, OperatorKind};
68pub use join_enumerator::{enumerate_dpccp, enumerate_dpccp_with_cost_estimator, JoinPlan};
69pub use join_graph::{JoinEdge, JoinGraph, JoinGraphError, JoinGraphResult};
70pub use join_order::{
71    JoinAlgorithm, JoinCondition, JoinOrderOptimizer, JoinOrderResult, JoinOrderTree,
72    JoinPredicate, JoinRelation,
73};
74pub use optimizer::{
75    optimize, optimize_with_aggregates, optimize_with_aggregates_and_statistics,
76    optimize_with_statistics, ConstantEvaluator, OptimizerConfig, SourceStatistics,
77};
78pub use query_optimizer::{
79    IndexScanCandidate, OptimizerConfig as TreeOptimizerConfig, QueryOptimizer,
80};
81pub use text_top_k::{plan_text_top_k, TextTopKCapabilities};
82pub use unified_plan::{
83    rewrite_scalar_expression, AccessPathPlan, AggregateClassifier, AssignmentPlan, CommandPlan,
84    ComputePlan, ConflictActionPlan, ConflictPlan, CteCyclePlan, CtePlan, CtePlanBody,
85    CteSearchPlan, DeletePlan, ExpressionPlan, InsertPlan, JoinExecutionStrategy, MergePlan,
86    MergeWhenPlan, OrderPlan, ProjectionPlan, QueryBlockPlan, QueryPlan, RelationalPlan,
87    SourcePlan, TableFunctionPlan, UnifiedPlan, UpdatePlan, ViewCheckPlan, ViewRuleInsertPlan,
88    ViewRuleReturningPlan, ViewRuleUpdatePlan,
89};
90pub use uqa_sql::{
91    ScalarExpr, ScalarFrameBound, ScalarOrder, ScalarWindowFrame, ScalarWindowSpec, SubqueryId,
92};
93
94pub mod source_filters;
95
96pub mod filter_pushdown;
97
98pub mod explain;
99
100pub mod column_pruning;
101
102pub mod mutation_outputs;
103
104pub mod retrieval_planning;