Skip to content

Commit 92a6181

Browse files
authored
refactor(query): add the matcher id when calling the optimizer apply (#19017)
1 parent 797c023 commit 92a6181

File tree

4 files changed

+35
-32
lines changed

4 files changed

+35
-32
lines changed

src/query/sql/src/planner/optimizer/ir/expr/m_expr.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -85,10 +85,10 @@ impl MExpr {
8585
}
8686

8787
let mut extractor = PatternExtractor::new();
88-
for pattern in rule.matchers() {
88+
for (idx, pattern) in rule.matchers().iter().enumerate() {
8989
let exprs = extractor.extract(memo, self, pattern)?;
9090
for expr in exprs.iter() {
91-
rule.apply(expr, transform_state)?;
91+
rule.apply_matcher(idx, expr, transform_state)?;
9292
}
9393
if !exprs.is_empty() {
9494
break;

src/query/sql/src/planner/optimizer/optimizers/hyper_dp/dphyp.rs

Lines changed: 13 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1121,20 +1121,19 @@ impl DPhpyOptimizer {
11211121
let rule = RuleFactory::create_rule(RuleID::PushDownFilterJoin, self.opt_ctx.clone())?;
11221122
let mut state = TransformResult::new();
11231123

1124-
if rule
1125-
.matchers()
1126-
.iter()
1127-
.any(|matcher| matcher.matches(&s_expr))
1128-
&& !s_expr.applied_rule(&rule.id())
1129-
{
1130-
s_expr.set_applied_rule(&rule.id());
1131-
rule.apply(&s_expr, &mut state)?;
1132-
1133-
if !state.results().is_empty() {
1134-
// Recursive optimize the result
1135-
let result = &state.results()[0];
1136-
let optimized_result = self.push_down_filter(result)?;
1137-
return Ok(optimized_result);
1124+
for (idx, matcher) in rule.matchers().iter().enumerate() {
1125+
if matcher.matches(&s_expr) && !s_expr.applied_rule(&rule.id()) {
1126+
s_expr.set_applied_rule(&rule.id());
1127+
rule.apply_matcher(idx, &s_expr, &mut state)?;
1128+
1129+
if !state.results().is_empty() {
1130+
// Recursive optimize the result
1131+
let result = &state.results()[0];
1132+
let optimized_result = self.push_down_filter(result)?;
1133+
return Ok(optimized_result);
1134+
}
1135+
1136+
break;
11381137
}
11391138
}
11401139

src/query/sql/src/planner/optimizer/optimizers/recursive/recursive.rs

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -128,24 +128,24 @@ impl RecursiveRuleOptimizer {
128128

129129
// Core optimization logic - exactly as original
130130
let mut state = TransformResult::new();
131-
if rule
132-
.matchers()
133-
.iter()
134-
.any(|matcher| matcher.matches(&s_expr))
135-
&& !s_expr.applied_rule(&rule.id())
136-
{
137-
s_expr.set_applied_rule(&rule.id());
138-
rule.apply(&s_expr, &mut state)?;
139-
if let Some(result) = state.results().first() {
140-
let result = result.clone();
141-
142-
// For tracing only
143-
if trace_enabled {
144-
let duration = start_time.elapsed();
145-
self.trace_rule_execution(rule.name(), duration, &before_expr, &state)?;
131+
132+
for (idx, matcher) in rule.matchers().iter().enumerate() {
133+
if matcher.matches(&s_expr) && !s_expr.applied_rule(&rule.id()) {
134+
s_expr.set_applied_rule(&rule.id());
135+
rule.apply_matcher(idx, &s_expr, &mut state)?;
136+
if let Some(result) = state.results().first() {
137+
let result = result.clone();
138+
139+
// For tracing only
140+
if trace_enabled {
141+
let duration = start_time.elapsed();
142+
self.trace_rule_execution(rule.name(), duration, &before_expr, &state)?;
143+
}
144+
145+
return Ok(Some(result));
146146
}
147147

148-
return Ok(Some(result));
148+
break;
149149
}
150150
}
151151

src/query/sql/src/planner/optimizer/optimizers/rule/rule.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,10 @@ pub trait Rule {
7676
self.id().to_string()
7777
}
7878

79+
fn apply_matcher(&self, _: usize, s_expr: &SExpr, state: &mut TransformResult) -> Result<()> {
80+
self.apply(s_expr, state)
81+
}
82+
7983
fn apply(&self, s_expr: &SExpr, state: &mut TransformResult) -> Result<()>;
8084

8185
fn matchers(&self) -> &[Matcher];

0 commit comments

Comments
 (0)