Skip to main content

uqa_planner/
optimizer.rs

1//
2// Unified Query Algebra
3//
4// Copyright (c) 2023-2026 Cognica, Inc.
5//
6
7//! Plan-native algebraic and cross-paradigm rewrites.
8
9use std::collections::{BTreeMap, BTreeSet};
10
11use uqa_core::Value;
12use uqa_sql::ast::BinaryOp;
13use uqa_sql::{ScalarExpr, ScalarFrameBound};
14
15use crate::unified_plan::{
16    AccessPathPlan, AggregateClassifier, AssignmentPlan, CommandPlan, ComputePlan,
17    ConflictActionPlan, ExpressionPlan, JoinExecutionStrategy, MergeWhenPlan, ProjectionPlan,
18    QueryBlockPlan, QueryPlan, RelationalPlan, SourcePlan, UnifiedPlan,
19};
20use crate::{
21    JoinAlgorithm, JoinGraphError, JoinGraphResult, JoinOrderOptimizer, JoinOrderTree,
22    JoinPredicate, JoinRelation, RelationStats,
23};
24
25mod access_path;
26mod api;
27mod command;
28mod implicit_fusion;
29mod join_reorder;
30mod scalar;
31mod source_constants;
32mod subqueries;
33mod traversal;
34
35pub use access_path::contains_retrieval;
36pub use api::{
37    optimize, optimize_with_aggregates, optimize_with_aggregates_and_statistics,
38    optimize_with_statistics, ConstantEvaluator, OptimizerConfig, OptimizerError, OptimizerResult,
39    SourceStatistics,
40};
41pub use implicit_fusion::query_contains_implicit_hybrid_fusion;
42
43use access_path::{choose_access_path, prioritize_access_predicates};
44use command::optimize_command;
45use implicit_fusion::{rewrite_implicit_hybrid_fusion, source_allows_unqualified_signals};
46use join_reorder::reorder_unified_plan_joins;
47use scalar::{optimize_assignments, optimize_projections, optimize_scalar_slot};
48use traversal::{optimize_query, optimize_source, optimize_unified_plan};
49
50#[cfg(test)]
51mod tests;