@@ -23,11 +23,11 @@ use properties::{
23
23
} ;
24
24
use rules:: {
25
25
EliminateDuplicatedAggExprRule , EliminateDuplicatedSortExprRule , EliminateFilterRule ,
26
- EliminateJoinRule , EliminateLimitRule , FilterAggTransposeRule , FilterCrossJoinTransposeRule ,
27
- FilterInnerJoinTransposeRule , FilterMergeRule , FilterProjectTransposeRule ,
28
- FilterSortTransposeRule , HashJoinRule , JoinAssocRule , JoinCommuteRule , PhysicalConversionRule ,
29
- ProjectFilterTransposeRule , ProjectMergeRule , ProjectionPullUpJoin , SimplifyFilterRule ,
30
- SimplifyJoinCondRule ,
26
+ EliminateJoinRule , EliminateLimitRule , EliminateProjectRule , FilterAggTransposeRule ,
27
+ FilterCrossJoinTransposeRule , FilterInnerJoinTransposeRule , FilterMergeRule ,
28
+ FilterProjectTransposeRule , FilterSortTransposeRule , HashJoinRule , JoinAssocRule ,
29
+ JoinCommuteRule , PhysicalConversionRule , ProjectMergeRule , ProjectionPullUpJoin ,
30
+ SimplifyFilterRule , SimplifyJoinCondRule ,
31
31
} ;
32
32
33
33
pub use optd_core:: rel_node:: Value ;
@@ -46,7 +46,7 @@ mod testing;
46
46
// mod expand;
47
47
48
48
pub struct DatafusionOptimizer {
49
- hueristic_optimizer : HeuristicsOptimizer < OptRelNodeTyp > ,
49
+ heuristic_optimizer : HeuristicsOptimizer < OptRelNodeTyp > ,
50
50
cascades_optimizer : CascadesOptimizer < OptRelNodeTyp > ,
51
51
pub runtime_statistics : RuntimeAdaptionStorage ,
52
52
enable_adaptive : bool ,
@@ -75,7 +75,7 @@ impl DatafusionOptimizer {
75
75
}
76
76
77
77
pub fn optd_hueristic_optimizer ( & self ) -> & HeuristicsOptimizer < OptRelNodeTyp > {
78
- & self . hueristic_optimizer
78
+ & self . heuristic_optimizer
79
79
}
80
80
81
81
pub fn optd_optimizer_mut ( & mut self ) -> & mut CascadesOptimizer < OptRelNodeTyp > {
@@ -99,6 +99,8 @@ impl DatafusionOptimizer {
99
99
Arc :: new( DepJoinPastAgg :: new( ) ) ,
100
100
Arc :: new( ProjectMergeRule :: new( ) ) ,
101
101
Arc :: new( FilterMergeRule :: new( ) ) ,
102
+ // disabled due to logical properties are not implemented in heuristics
103
+ // Arc::new(EliminateProjectRule::new()),
102
104
]
103
105
}
104
106
@@ -110,9 +112,10 @@ impl DatafusionOptimizer {
110
112
rule_wrappers. push ( RuleWrapper :: new_cascades ( rule) ) ;
111
113
}
112
114
// project transpose rules
113
- rule_wrappers. push ( RuleWrapper :: new_cascades ( Arc :: new (
114
- ProjectFilterTransposeRule :: new ( ) ,
115
- ) ) ) ;
115
+ // only do filter-project one way for now to reduce search space
116
+ // rule_wrappers.push(RuleWrapper::new_cascades(Arc::new(
117
+ // ProjectFilterTransposeRule::new(),
118
+ // )));
116
119
// add all filter pushdown rules as heuristic rules
117
120
rule_wrappers. push ( RuleWrapper :: new_cascades ( Arc :: new (
118
121
FilterProjectTransposeRule :: new ( ) ,
@@ -129,13 +132,19 @@ impl DatafusionOptimizer {
129
132
rule_wrappers. push ( RuleWrapper :: new_cascades ( Arc :: new (
130
133
FilterAggTransposeRule :: new ( ) ,
131
134
) ) ) ;
132
- rule_wrappers. push ( RuleWrapper :: new_cascades ( Arc :: new ( HashJoinRule :: new ( ) ) ) ) ; // 17
133
- rule_wrappers. push ( RuleWrapper :: new_cascades ( Arc :: new ( JoinCommuteRule :: new ( ) ) ) ) ; // 18
135
+ rule_wrappers. push ( RuleWrapper :: new_cascades ( Arc :: new ( HashJoinRule :: new ( ) ) ) ) ;
136
+ rule_wrappers. push ( RuleWrapper :: new_cascades ( Arc :: new ( JoinCommuteRule :: new ( ) ) ) ) ;
134
137
rule_wrappers. push ( RuleWrapper :: new_cascades ( Arc :: new ( JoinAssocRule :: new ( ) ) ) ) ;
135
138
rule_wrappers. push ( RuleWrapper :: new_cascades ( Arc :: new (
136
139
ProjectionPullUpJoin :: new ( ) ,
137
140
) ) ) ;
138
-
141
+ rule_wrappers. push ( RuleWrapper :: new_cascades ( Arc :: new (
142
+ EliminateProjectRule :: new ( ) ,
143
+ ) ) ) ;
144
+ rule_wrappers. push ( RuleWrapper :: new_cascades ( Arc :: new ( ProjectMergeRule :: new ( ) ) ) ) ;
145
+ rule_wrappers. push ( RuleWrapper :: new_cascades ( Arc :: new (
146
+ EliminateFilterRule :: new ( ) ,
147
+ ) ) ) ;
139
148
rule_wrappers
140
149
}
141
150
@@ -167,7 +176,7 @@ impl DatafusionOptimizer {
167
176
partial_explore_space : Some ( 1 << 10 ) ,
168
177
} ,
169
178
) ,
170
- hueristic_optimizer : HeuristicsOptimizer :: new_with_rules (
179
+ heuristic_optimizer : HeuristicsOptimizer :: new_with_rules (
171
180
heuristic_rules,
172
181
ApplyOrder :: TopDown , // uhh TODO reconsider
173
182
property_builders. clone ( ) ,
@@ -215,7 +224,7 @@ impl DatafusionOptimizer {
215
224
cascades_optimizer : optimizer,
216
225
enable_adaptive : true ,
217
226
enable_heuristic : false ,
218
- hueristic_optimizer : HeuristicsOptimizer :: new_with_rules (
227
+ heuristic_optimizer : HeuristicsOptimizer :: new_with_rules (
219
228
vec ! [ ] ,
220
229
ApplyOrder :: BottomUp ,
221
230
Arc :: new ( [ ] ) ,
@@ -224,7 +233,7 @@ impl DatafusionOptimizer {
224
233
}
225
234
226
235
pub fn heuristic_optimize ( & mut self , root_rel : OptRelNodeRef ) -> OptRelNodeRef {
227
- self . hueristic_optimizer
236
+ self . heuristic_optimizer
228
237
. optimize ( root_rel)
229
238
. expect ( "heuristics returns error" )
230
239
}
0 commit comments