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::unnecessary_wraps,
43    dead_code,
44    unused_imports,
45    clippy::struct_excessive_bools,
46    clippy::only_used_in_recursion,
47    clippy::question_mark,
48    clippy::unused_self,
49    clippy::single_match_else
50)]
51
52pub mod cardinality;
53pub mod cost_model;
54pub mod executor;
55pub mod join_enumerator;
56pub mod join_graph;
57pub mod join_order;
58pub mod optimizer;
59pub mod parallel;
60pub mod query_optimizer;
61pub mod text_top_k;
62pub mod unified_plan;
63
64pub use cardinality::{
65    column_entropy, entropy_cardinality_lower_bound, mutual_information_estimate, AccessParadigm,
66    CardinalityEstimator, ColumnStats, EdgeSample, GraphStats, GraphStoreSampler,
67    LocalAccessEstimate, RelationStats, Selectivity, GRAPH_AVG_DEGREE_DEFAULT,
68    JACCARD_JOIN_SELECTIVITY,
69};
70pub use cost_model::{CostEstimator, OperatorCost, OperatorKind};
71pub use executor::{ExecutionStats, OperatorOutput, OperatorTreeDriver, PlanExecutor};
72pub use join_enumerator::{enumerate_dpccp, enumerate_dpccp_with_cost_estimator, JoinPlan};
73pub use join_graph::{JoinEdge, JoinGraph, JoinGraphError, JoinGraphResult};
74pub use join_order::{
75    JoinAlgorithm, JoinCondition, JoinOrderOptimizer, JoinOrderResult, JoinOrderTree,
76    JoinPredicate, JoinRelation,
77};
78pub use optimizer::{
79    optimize, optimize_with_aggregates, optimize_with_aggregates_and_statistics,
80    optimize_with_statistics, OptimizerConfig, SourceStatistics,
81};
82pub use parallel::{
83    run_parallel, ParallelExecutor, DEFAULT_PARALLEL_WORKERS, MIN_PARALLEL_BRANCHES,
84};
85pub use query_optimizer::{
86    IndexScanCandidate, OptimizerConfig as TreeOptimizerConfig, QueryOptimizer,
87};
88pub use text_top_k::{plan_text_top_k, TextTopKCapabilities};
89pub use unified_plan::{
90    rewrite_scalar_expression, AccessPathPlan, AggregateClassifier, AssignmentPlan, CommandPlan,
91    ComputePlan, ConflictActionPlan, ConflictPlan, CteCyclePlan, CtePlan, CteSearchPlan,
92    DeletePlan, ExpressionPlan, InsertPlan, JoinExecutionStrategy, MergePlan, MergeWhenPlan,
93    OrderPlan, ProjectionPlan, QueryBlockPlan, QueryPlan, RelationalPlan, SourcePlan,
94    TableFunctionPlan, UnifiedPlan, UpdatePlan, ViewCheckPlan, ViewRuleInsertPlan,
95    ViewRuleReturningPlan, ViewRuleUpdatePlan,
96};
97pub use uqa_execution::{
98    ScalarExpr, ScalarFrameBound, ScalarOrder, ScalarWindowFrame, ScalarWindowSpec, SubqueryId,
99};