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
15mod cardinality_defaults;
16pub mod context;
17pub mod cost {
18    pub use hawdb_cascades::cost::*;
19}
20pub mod graph;
21pub mod logical;
22pub mod memo {
23    pub use hawdb_cascades::memo::*;
24}
25pub mod operator;
26pub mod predicate;
27pub mod properties {
28    pub use hawdb_cascades::properties::*;
29}
30pub mod relational;
31pub mod relational_join;
32mod relational_join_cost;
33pub mod relational_join_hypergraph;
34pub mod relational_join_rewrite;
35pub mod relational_planning;
36pub mod relational_profile;
37pub mod relational_sargability;
38pub mod rule {
39    pub use hawdb_cascades::rule::*;
40}
41pub mod search;
42pub mod stage {
43    pub use hawdb_cascades::stage::*;
44}
45pub mod trace;
46pub mod vector;
47
48pub use context::{
49    ExplainMode, OptimizerContext, QueryFamily, ResourceHints, StatementClass, TraceSink,
50};
51pub use cost::{PlanCost, PlanCostBreakdown};
52pub use graph::{
53    CascadesOptimizer, FastPathPhysicalPhase, FastPathPhysicalPlanRoot, LogicalPhase,
54    LogicalPlanRoot, LoweringReadyLogicalPlanRoot, LoweringReadyPhase, OptimizerCatalog,
55    OptimizerCatalogIndexes, OptimizerCatalogStatistics, OptimizerIndexStatistics, PhysicalPhase,
56    PhysicalPlanRoot, PlanPhase, PlanPhaseKind,
57};
58pub use hawdb_plan_cypher::PhysicalPlanNode as PlanNode;
59pub use hawdb_plan_cypher::{
60    plan_class_counts, plan_operator_counts, visit_plan, visit_plan_with_ids, PhysicalOperatorId,
61    PhysicalPlanClass, PhysicalPlanKind, PhysicalPlanNode, PlanChildren,
62};
63pub use logical::{LogicalPlanClass, LogicalPlanKind, LogicalPlanNode};
64pub use memo::{GroupId, Memo, MemoGroup};
65pub use predicate::{
66    normalize_search_enum_value, push_search_predicates, search_field_is_enum_like, SearchFieldRef,
67    SearchPredicate, SearchPredicateOp, SearchPredicateParseError, SearchPredicatePushdown,
68    SearchPredicateSet, SearchScalarValue, SearchScanPredicateSupport,
69};
70pub use properties::{
71    Distribution, MemoryBudgetClass, PhysicalProperties, RequiredProperties, ScanPruningSupport,
72    VectorPrecision,
73};
74pub use relational::{
75    estimate_relational_nested_loop_join_cost, select_relational_access_path,
76    skyline_prune_relational_access_paths, RelationalAccessPathDescriptor,
77    RelationalAccessPathKind, RelationalNestedLoopJoinCost,
78};
79pub use relational_join::{
80    enumerate_relational_inner_joins, RelationalInnerJoinEnumeration,
81    RelationalJoinAccessApplicability, RelationalJoinAccessPath, RelationalJoinEnumerationConfig,
82    RelationalJoinEnumerationError, RelationalJoinGraph, RelationalJoinPlan,
83    RelationalJoinPredicate, RelationalJoinPredicateId, RelationalJoinRelation, RelationalJoinStep,
84};
85pub use relational_join_cost::{
86    estimate_relational_access_cost, estimate_relational_access_path_cost,
87    estimate_relational_join_cost, estimate_relational_probe_join_cost, RelationalJoinCardinality,
88    RelationalJoinRightInput, RelationalJoinSelectivity,
89};
90pub use relational_join_hypergraph::{
91    enumerate_relational_csg_cmp_joins, enumerate_relational_csg_cmp_joins_with_implementations,
92    enumerate_relational_csg_cmp_joins_with_right_input_policy, RelationalCsgCmpAlternative,
93    RelationalCsgCmpEnumeration, RelationalCsgCmpJoinImplementation, RelationalCsgCmpPlan,
94    RelationalCsgCmpPlanNode, RelationalCsgCmpRightInputPolicy, RelationalEquiJoinAlgorithm,
95};
96pub use relational_join_rewrite::{
97    analyze_relational_join_conflicts, enumerate_relational_join_rewrites,
98    RelationalJoinConflictAnalysis, RelationalJoinConflictDescriptor, RelationalJoinConflictRule,
99    RelationalJoinOperator, RelationalJoinOperatorId, RelationalJoinOperatorKind,
100    RelationalJoinRewriteEnumeration, RelationalJoinRewriteError, RelationalJoinRewritePlan,
101    RelationalJoinRewriteProblem, RelationalJoinRewriteStep, RelationalJoinTree,
102};
103pub use relational_planning::{
104    RelationalJoinPlanningAttempt, RelationalJoinPlanningBudget, RelationalJoinPlanningCost,
105    RelationalJoinPlanningDirective, RelationalJoinPlanningFallbackClass,
106    RelationalJoinPlanningOutcome, RelationalJoinPlanningReason, RelationalJoinPlanningStatus,
107    RelationalJoinPlanningStrategy,
108};
109pub use relational_profile::{
110    RelationalOperatorCardinalityProfile, RelationalOperatorId, RelationalOperatorKind,
111};
112pub use rule::{
113    apply_rule_batch, AppliedRule, OptimizerRule, RuleApplication, RuleBatch, RuleId, RuleKind,
114    RulePromise,
115};
116pub use search::{
117    OptimizationSearchReport, OptimizerSearchDirective, OptimizerSearchDirectiveError, RuleEvent,
118    RuleOutcome, SearchMode, SelectedPlanTrace,
119};
120pub use stage::{
121    ApplyOrder, OptimizationPipeline, OptimizationStage, PipelineExecution, RuleStage,
122    StageRuleBatch, StageStats, StageTrace,
123};
124pub use trace::{OperatorCardinalityEstimate, OptimizerConfig, OptimizerTrace};
125pub use vector::{
126    plan_vector_search, select_adaptive_vector_backend, validate_vector_pipeline,
127    AdaptiveVectorBackend, AdaptiveVectorBackendDecision, AdaptiveVectorBackendInput,
128    AdaptiveVectorBackendPolicy, PlannedVectorSearch, VectorCompressionPreference, VectorPlanError,
129    VectorPlanProperties,
130};