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_join_cost, estimate_relational_probe_join_cost, RelationalJoinCardinality,
44    RelationalJoinRightInput, RelationalJoinSelectivity,
45};
46pub use logical::{LogicalPlanClass, LogicalPlanKind, LogicalPlanNode};
47pub use memo::{GroupId, Memo, MemoGroup};
48pub use predicate::{
49    normalize_search_enum_value, push_search_predicates, search_field_is_enum_like, SearchFieldRef,
50    SearchPredicate, SearchPredicateOp, SearchPredicateParseError, SearchPredicatePushdown,
51    SearchPredicateSet, SearchScalarValue, SearchScanPredicateSupport,
52};
53pub use properties::{
54    Distribution, MemoryBudgetClass, PhysicalProperties, RequiredProperties, ScanPruningSupport,
55    VectorPrecision,
56};
57pub use relational::{
58    estimate_relational_nested_loop_join_cost, select_relational_access_path,
59    skyline_prune_relational_access_paths, RelationalAccessPathDescriptor,
60    RelationalAccessPathKind, RelationalNestedLoopJoinCost,
61};
62pub use relational_join::{
63    enumerate_relational_inner_joins, RelationalInnerJoinEnumeration,
64    RelationalJoinAccessApplicability, RelationalJoinAccessPath, RelationalJoinEnumerationConfig,
65    RelationalJoinEnumerationError, RelationalJoinGraph, RelationalJoinPlan,
66    RelationalJoinPredicate, RelationalJoinPredicateId, RelationalJoinRelation, RelationalJoinStep,
67};
68pub use relational_join_hypergraph::{
69    enumerate_relational_csg_cmp_joins, enumerate_relational_csg_cmp_joins_with_implementations,
70    enumerate_relational_csg_cmp_joins_with_right_input_policy, RelationalCsgCmpAlternative,
71    RelationalCsgCmpEnumeration, RelationalCsgCmpJoinImplementation, RelationalCsgCmpPlan,
72    RelationalCsgCmpPlanNode, RelationalCsgCmpRightInputPolicy, RelationalEquiJoinAlgorithm,
73};
74pub use relational_join_rewrite::{
75    analyze_relational_join_conflicts, enumerate_relational_join_rewrites,
76    RelationalJoinConflictAnalysis, RelationalJoinConflictDescriptor, RelationalJoinConflictRule,
77    RelationalJoinOperator, RelationalJoinOperatorId, RelationalJoinOperatorKind,
78    RelationalJoinRewriteEnumeration, RelationalJoinRewriteError, RelationalJoinRewritePlan,
79    RelationalJoinRewriteProblem, RelationalJoinRewriteStep, RelationalJoinTree,
80};
81pub use relational_planning::{
82    RelationalJoinPlanningAttempt, RelationalJoinPlanningBudget, RelationalJoinPlanningCost,
83    RelationalJoinPlanningDirective, RelationalJoinPlanningFallbackClass,
84    RelationalJoinPlanningOutcome, RelationalJoinPlanningReason, RelationalJoinPlanningStatus,
85    RelationalJoinPlanningStrategy,
86};
87pub use relational_profile::{
88    RelationalOperatorCardinalityProfile, RelationalOperatorId, RelationalOperatorKind,
89};
90pub use rule::{
91    apply_rule_batch, AppliedRule, OptimizerRule, RuleApplication, RuleBatch, RuleId, RuleKind,
92    RulePromise,
93};
94pub use search::{
95    OptimizationSearchReport, OptimizerSearchDirective, OptimizerSearchDirectiveError, RuleEvent,
96    RuleOutcome, SearchMode, SelectedPlanTrace,
97};
98pub use stage::{
99    ApplyOrder, OptimizationPipeline, OptimizationStage, PipelineExecution, RuleStage,
100    StageRuleBatch, StageStats, StageTrace,
101};
102pub use trace::{OperatorCardinalityEstimate, OptimizerConfig, OptimizerTrace};
103pub use vector::{
104    plan_vector_search, select_adaptive_vector_backend, validate_vector_pipeline,
105    AdaptiveVectorBackend, AdaptiveVectorBackendDecision, AdaptiveVectorBackendInput,
106    AdaptiveVectorBackendPolicy, PlannedVectorSearch, VectorCompressionPreference, VectorPlanError,
107    VectorPlanProperties,
108};