use std::collections::{BTreeMap, BTreeSet};
use uqa_core::Value;
use uqa_sql::ast::BinaryOp;
use uqa_sql::{ScalarExpr, ScalarFrameBound};
use crate::unified_plan::{
AccessPathPlan, AggregateClassifier, AssignmentPlan, CommandPlan, ComputePlan,
ConflictActionPlan, ExpressionPlan, JoinExecutionStrategy, MergeWhenPlan, ProjectionPlan,
QueryBlockPlan, QueryPlan, RelationalPlan, SourcePlan, UnifiedPlan,
};
use crate::{
JoinAlgorithm, JoinGraphError, JoinGraphResult, JoinOrderOptimizer, JoinOrderTree,
JoinPredicate, JoinRelation, RelationStats,
};
mod access_path;
mod api;
mod command;
mod implicit_fusion;
mod join_reorder;
mod scalar;
mod source_constants;
mod subqueries;
mod traversal;
pub use access_path::contains_retrieval;
pub use api::{
optimize, optimize_with_aggregates, optimize_with_aggregates_and_statistics,
optimize_with_statistics, ConstantEvaluator, OptimizerConfig, OptimizerError, OptimizerResult,
SourceStatistics,
};
pub use implicit_fusion::query_contains_implicit_hybrid_fusion;
use access_path::{choose_access_path, prioritize_access_predicates};
use command::optimize_command;
use implicit_fusion::{rewrite_implicit_hybrid_fusion, source_allows_unqualified_signals};
use join_reorder::reorder_unified_plan_joins;
use scalar::{optimize_assignments, optimize_projections, optimize_scalar_slot};
use traversal::{optimize_query, optimize_source, optimize_unified_plan};
#[cfg(test)]
mod tests;