Skip to content

Commit 32a380a

Browse files
committed
in work
1 parent 548d99e commit 32a380a

File tree

3 files changed

+27
-12
lines changed

3 files changed

+27
-12
lines changed

rust/cubesqlplanner/cubesqlplanner/src/logical_plan/optimizers/pre_aggregation/optimizer.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ impl PreAggregationOptimizer {
8080
) -> Result<Option<Rc<Query>>, CubeError> {
8181
let rewriter = LogicalPlanRewriter::new();
8282
for multi_stage in &query.multistage_members {
83-
let rewritten = rewriter.rewrite_top_down(multi_stage.clone(), &mut |&plan_node| {
83+
let rewritten = rewriter.rewrite_top_down_with(multi_stage.clone(), |plan_node| {
8484
Ok(NodeRewriteResult::stop())
8585
})?;
8686
}

rust/cubesqlplanner/cubesqlplanner/src/logical_plan/visitor/rewriter.rs

Lines changed: 23 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -34,14 +34,6 @@ pub trait LogicalNodeRewriter {
3434
fn process_node(&mut self, node: &PlanNode) -> Result<NodeRewriteResult, CubeError>;
3535
}
3636

37-
impl<F> LogicalNodeRewriter for F
38-
where
39-
F: FnMut(&PlanNode) -> Result<NodeRewriteResult, CubeError>,
40-
{
41-
fn process_node(&mut self, node: &PlanNode) -> Result<NodeRewriteResult, CubeError> {
42-
self(node)
43-
}
44-
}
4537

4638
pub struct LogicalPlanRewriter {}
4739

@@ -65,6 +57,29 @@ impl LogicalPlanRewriter {
6557
Ok(res)
6658
}
6759

60+
pub fn rewrite_top_down_with<F, N: LogicalNode>(
61+
&self,
62+
node: Rc<N>,
63+
f: F,
64+
) -> Result<Rc<N>, CubeError>
65+
where
66+
F: FnMut(&PlanNode) -> Result<NodeRewriteResult, CubeError>,
67+
{
68+
struct FnWrapper<F>(F);
69+
70+
impl<F> LogicalNodeRewriter for FnWrapper<F>
71+
where
72+
F: FnMut(&PlanNode) -> Result<NodeRewriteResult, CubeError>,
73+
{
74+
fn process_node(&mut self, node: &PlanNode) -> Result<NodeRewriteResult, CubeError> {
75+
(self.0)(node)
76+
}
77+
}
78+
79+
let mut wrapper = FnWrapper(f);
80+
self.rewrite_top_down(node, &mut wrapper)
81+
}
82+
6883
fn rewrite_top_down_impl<T: LogicalNodeRewriter>(
6984
&self,
7085
node: PlanNode,

rust/cubesqlplanner/cubesqlplanner/src/planner/base_query.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ use crate::cube_bridge::base_query_options::BaseQueryOptions;
55
use crate::cube_bridge::pre_aggregation_obj::NativePreAggregationObj;
66
//use crate::logical_plan::optimizers::*;
77
use crate::logical_plan::PreAggregation;
8+
use crate::logical_plan::PreAggregationOptimizer;
89
use crate::logical_plan::Query;
910
use crate::physical_plan_builder::PhysicalPlanBuilder;
1011
use cubenativeutils::wrappers::inner_types::InnerTypes;
@@ -147,8 +148,7 @@ impl<IT: InnerTypes> BaseQuery<IT> {
147148
&self,
148149
plan: Rc<Query>,
149150
) -> Result<(Rc<Query>, Vec<Rc<PreAggregation>>), CubeError> {
150-
Ok((plan.clone(), Vec::new()))
151-
/* let result = if !self.request.is_pre_aggregation_query() {
151+
let result = if !self.request.is_pre_aggregation_query() {
152152
let mut pre_aggregation_optimizer = PreAggregationOptimizer::new(
153153
self.query_tools.clone(),
154154
self.cubestore_support_multistage,
@@ -169,6 +169,6 @@ impl<IT: InnerTypes> BaseQuery<IT> {
169169
} else {
170170
(plan.clone(), Vec::new())
171171
};
172-
Ok(result) */
172+
Ok(result)
173173
}
174174
}

0 commit comments

Comments
 (0)