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, vector
24//!   threshold merging, facet additivity, Boolean simplification.
25//! * [`parallel`] -- rayon-backed parallel-aware split + recombine.
26//! * [`executor`] -- the planner-to-physical-operator bridge.
27
28#![allow(
29    clippy::enum_glob_use,
30    clippy::doc_markdown,
31    clippy::map_unwrap_or,
32    clippy::derivable_impls,
33    clippy::match_same_arms,
34    clippy::module_name_repetitions,
35    clippy::missing_panics_doc,
36    clippy::panic_in_result_fn,
37    clippy::needless_for_each,
38    clippy::manual_assert,
39    clippy::option_if_let_else,
40    clippy::similar_names,
41    clippy::needless_pass_by_value,
42    clippy::too_many_lines,
43    clippy::unnecessary_wraps,
44    dead_code,
45    unused_imports,
46    clippy::struct_excessive_bools,
47    clippy::only_used_in_recursion,
48    clippy::question_mark,
49    clippy::unused_self,
50    clippy::single_match_else
51)]
52
53pub mod cardinality;
54pub mod cost_model;
55pub mod executor;
56pub mod join_enumerator;
57pub mod join_graph;
58pub mod join_order;
59pub mod optimizer;
60pub mod parallel;
61pub mod query_optimizer;
62pub mod text_top_k;
63pub mod unified_plan;
64
65pub use cardinality::{
66    column_entropy, entropy_cardinality_lower_bound, mutual_information_estimate, AccessParadigm,
67    CardinalityEstimator, ColumnStats, EdgeSample, GraphStats, GraphStoreSampler,
68    LocalAccessEstimate, RelationStats, Selectivity, GRAPH_AVG_DEGREE_DEFAULT,
69    JACCARD_JOIN_SELECTIVITY,
70};
71pub use cost_model::{CostEstimator, OperatorCost, OperatorKind};
72pub use executor::{ExecutionStats, OperatorOutput, OperatorTreeDriver, PlanExecutor};
73pub use join_enumerator::{enumerate_dpccp, enumerate_dpccp_with_cost_estimator, JoinPlan};
74pub use join_graph::{JoinEdge, JoinGraph, JoinGraphError, JoinGraphResult};
75pub use join_order::{
76    JoinAlgorithm, JoinCondition, JoinOrderOptimizer, JoinOrderResult, JoinOrderTree,
77    JoinPredicate, JoinRelation,
78};
79pub use optimizer::{
80    optimize, optimize_with_aggregates, optimize_with_aggregates_and_statistics,
81    optimize_with_statistics, OptimizerConfig, SourceStatistics,
82};
83pub use parallel::{
84    run_parallel, ParallelExecutor, DEFAULT_PARALLEL_WORKERS, MIN_PARALLEL_BRANCHES,
85};
86pub use query_optimizer::{
87    IndexScanCandidate, OptimizerConfig as TreeOptimizerConfig, QueryOptimizer,
88};
89pub use text_top_k::{plan_text_top_k, TextTopKCapabilities};
90pub use unified_plan::{
91    rewrite_scalar_expression, AccessPathPlan, AggregateClassifier, AssignmentPlan, CommandPlan,
92    ComputePlan, ConflictActionPlan, ConflictPlan, CteCyclePlan, CtePlan, CteSearchPlan,
93    DeletePlan, ExpressionPlan, InsertPlan, JoinExecutionStrategy, MergePlan, MergeWhenPlan,
94    OrderPlan, ProjectionPlan, QueryBlockPlan, QueryPlan, RelationalPlan, SourcePlan,
95    TableFunctionPlan, UnifiedPlan, UpdatePlan,
96};
97pub use uqa_execution::{
98    ScalarExpr, ScalarFrameBound, ScalarOrder, ScalarWindowFrame, ScalarWindowSpec, SubqueryId,
99};