Skip to main content

hawdb_optimizer/
lib.rs

1// Copyright 2026 Nowledge
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7//     http://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14
15//! Compatibility facade over the framework and domain-owned optimizer families.
16
17pub use hawdb_cascades::{context, cost, memo, properties, rule, stage};
18pub use hawdb_optimizer_graph::{graph, logical, operator, search, trace};
19pub use hawdb_optimizer_predicate::predicate;
20pub use hawdb_optimizer_relational::{
21    relational, relational_join, relational_join_hypergraph, relational_join_rewrite,
22    relational_planning, relational_profile, relational_sargability,
23};
24pub use hawdb_optimizer_vector::vector;
25
26pub use context::{
27    ExplainMode, OptimizerContext, QueryFamily, ResourceHints, StatementClass, TraceSink,
28};
29pub use cost::{PlanCost, PlanCostBreakdown};
30pub use graph::{
31    CascadesOptimizer, FastPathPhysicalPhase, FastPathPhysicalPlanRoot, LogicalPhase,
32    LogicalPlanRoot, LoweringReadyLogicalPlanRoot, LoweringReadyPhase, OptimizerCatalog,
33    OptimizerCatalogIndexes, OptimizerCatalogStatistics, OptimizerIndexStatistics, PhysicalPhase,
34    PhysicalPlanRoot, PlanPhase, PlanPhaseKind,
35};
36pub use hawdb_optimizer_graph::PhysicalPlanNode as PlanNode;
37pub use hawdb_optimizer_graph::{
38    plan_class_counts, plan_operator_counts, visit_plan, visit_plan_with_ids, PhysicalOperatorId,
39    PhysicalPlanClass, PhysicalPlanKind, PhysicalPlanNode, PlanChildren,
40};
41pub use hawdb_optimizer_relational::{
42    estimate_relational_access_cost, estimate_relational_access_path_cost,
43    estimate_relational_access_path_cost_with_context, estimate_relational_join_cost,
44    estimate_relational_join_cost_with_contexts, estimate_relational_probe_join_cost,
45    RelationalAccessCostContext, RelationalJoinCardinality, RelationalJoinCostContexts,
46    RelationalJoinRightInput, RelationalJoinSelectivity,
47};
48pub use logical::{LogicalPlanClass, LogicalPlanKind, LogicalPlanNode};
49pub use memo::{GroupId, Memo, MemoGroup};
50pub use predicate::{
51    normalize_search_enum_value, push_search_predicates, search_field_is_enum_like, SearchFieldRef,
52    SearchPredicate, SearchPredicateOp, SearchPredicateParseError, SearchPredicatePushdown,
53    SearchPredicateSet, SearchScalarValue, SearchScanPredicateSupport,
54};
55pub use properties::{
56    Distribution, MemoryBudgetClass, PhysicalProperties, RequiredProperties, ScanPruningSupport,
57    VectorPrecision,
58};
59pub use relational::{
60    estimate_relational_nested_loop_join_cost, select_relational_access_path,
61    select_relational_access_path_with_context, skyline_prune_relational_access_paths,
62    skyline_prune_relational_access_paths_with_context, RelationalAccessPathDescriptor,
63    RelationalAccessPathKind, RelationalNestedLoopJoinCost,
64};
65pub use relational_join::{
66    enumerate_relational_inner_joins, enumerate_relational_inner_joins_with_cost_contexts,
67    RelationalInnerJoinEnumeration, RelationalJoinAccessApplicability, RelationalJoinAccessPath,
68    RelationalJoinEnumerationConfig, RelationalJoinEnumerationError, RelationalJoinGraph,
69    RelationalJoinPlan, RelationalJoinPredicate, RelationalJoinPredicateId, RelationalJoinRelation,
70    RelationalJoinStep,
71};
72pub use relational_join_hypergraph::{
73    enumerate_relational_csg_cmp_joins, enumerate_relational_csg_cmp_joins_with_cost_contexts,
74    enumerate_relational_csg_cmp_joins_with_implementations,
75    enumerate_relational_csg_cmp_joins_with_right_input_policy, RelationalCsgCmpAlternative,
76    RelationalCsgCmpEnumeration, RelationalCsgCmpJoinImplementation, RelationalCsgCmpPlan,
77    RelationalCsgCmpPlanNode, RelationalCsgCmpRightInputPolicy, RelationalEquiJoinAlgorithm,
78};
79pub use relational_join_rewrite::{
80    analyze_relational_join_conflicts, enumerate_relational_join_rewrites,
81    enumerate_relational_join_rewrites_with_cost_contexts, RelationalJoinConflictAnalysis,
82    RelationalJoinConflictDescriptor, RelationalJoinConflictRule, RelationalJoinOperator,
83    RelationalJoinOperatorId, RelationalJoinOperatorKind, RelationalJoinRewriteEnumeration,
84    RelationalJoinRewriteError, RelationalJoinRewritePlan, RelationalJoinRewriteProblem,
85    RelationalJoinRewriteStep, RelationalJoinTree,
86};
87pub use relational_planning::{
88    RelationalJoinPlanningAttempt, RelationalJoinPlanningBudget, RelationalJoinPlanningCost,
89    RelationalJoinPlanningDirective, RelationalJoinPlanningFallbackClass,
90    RelationalJoinPlanningOutcome, RelationalJoinPlanningReason, RelationalJoinPlanningStatus,
91    RelationalJoinPlanningStrategy,
92};
93pub use relational_profile::{
94    RelationalOperatorCardinalityProfile, RelationalOperatorId, RelationalOperatorKind,
95};
96pub use rule::{
97    apply_rule_batch, AppliedRule, OptimizerRule, RuleApplication, RuleBatch, RuleId, RuleKind,
98    RulePromise,
99};
100pub use search::{
101    OptimizationSearchReport, OptimizerSearchDirective, OptimizerSearchDirectiveError, RuleEvent,
102    RuleOutcome, SearchMode, SelectedPlanTrace,
103};
104pub use stage::{
105    ApplyOrder, OptimizationPipeline, OptimizationStage, PipelineExecution, RuleStage,
106    StageRuleBatch, StageStats, StageTrace,
107};
108pub use trace::{OperatorCardinalityEstimate, OptimizerConfig, OptimizerTrace};
109pub use vector::{
110    plan_vector_search, select_adaptive_vector_backend, validate_vector_pipeline,
111    AdaptiveVectorBackend, AdaptiveVectorBackendDecision, AdaptiveVectorBackendInput,
112    AdaptiveVectorBackendPolicy, PlannedVectorSearch, VectorCompressionPreference, VectorPlanError,
113    VectorPlanProperties,
114};