Skip to content

Commit 03ac255

Browse files
committed
chore(query): refactor the cardinality of anti-join
1 parent 9377d17 commit 03ac255

File tree

4 files changed

+10
-77
lines changed

4 files changed

+10
-77
lines changed

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -263,14 +263,14 @@ pub async fn optimize_query(opt_ctx: Arc<OptimizerContext>, s_expr: SExpr) -> Re
263263
]))
264264
// 10. Apply DPhyp algorithm for cost-based join reordering
265265
.add(DPhpyOptimizer::new(opt_ctx.clone()))
266-
.add(RecursiveRuleOptimizer::new(
267-
opt_ctx.clone(),
268-
[RuleID::PushDownAntiJoin].as_slice(),
269-
))
270266
// 11. After join reorder, Convert some single join to inner join.
271267
.add(SingleToInnerOptimizer::new())
272268
// 12. Deduplicate join conditions.
273269
.add(DeduplicateJoinConditionOptimizer::new())
270+
.add(RecursiveRuleOptimizer::new(
271+
opt_ctx.clone(),
272+
[RuleID::PushDownAntiJoin].as_slice(),
273+
))
274274
// 13. Apply join commutativity to further optimize join ordering
275275
.add_if(
276276
opt_ctx.get_enable_join_reorder(),

src/query/sql/src/planner/optimizer/optimizers/operator/filter/infer_filter.rs

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -732,18 +732,6 @@ impl<'a> InferFilterOptimizer<'a> {
732732
arguments: vec![
733733
self.exprs[equal_indexes[i]].clone(),
734734
self.exprs[equal_indexes[j]].clone(),
735-
// ScalarExpr::FunctionCall(FunctionCall {
736-
// span: None,
737-
// func_name: "infer_predicate".to_string(),
738-
// params: vec![],
739-
// arguments: vec![self.exprs[equal_indexes[i]].clone()],
740-
// }),
741-
// ScalarExpr::FunctionCall(FunctionCall {
742-
// span: None,
743-
// func_name: "infer_predicate".to_string(),
744-
// params: vec![],
745-
// arguments: vec![self.exprs[equal_indexes[j]].clone()],
746-
// }),
747735
],
748736
}));
749737
}

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

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@ use crate::optimizer::ir::Matcher;
2121
use crate::optimizer::ir::RelExpr;
2222
use crate::optimizer::ir::SExpr;
2323
use crate::optimizer::optimizers::operator::EquivalentConstantsVisitor;
24+
use crate::optimizer::optimizers::operator::InferFilterOptimizer;
25+
use crate::optimizer::optimizers::operator::JoinProperty;
2426
use crate::optimizer::optimizers::rule::can_filter_null;
2527
use crate::optimizer::optimizers::rule::constant::false_constant;
2628
use crate::optimizer::optimizers::rule::constant::is_falsy;
@@ -240,9 +242,10 @@ pub fn try_push_down_filter_join(s_expr: &SExpr, metadata: MetadataRef) -> Resul
240242
right_push_down = vec![];
241243
}
242244
}
243-
// let join_prop = JoinProperty::new(&left_prop.output_columns, &right_prop.output_columns);
244-
// let mut infer_filter = InferFilterOptimizer::new(Some(join_prop));
245-
// push_down_predicates = infer_filter.optimize(push_down_predicates)?;
245+
246+
let join_prop = JoinProperty::new(&left_prop.output_columns, &right_prop.output_columns);
247+
let mut infer_filter = InferFilterOptimizer::new(Some(join_prop));
248+
push_down_predicates = infer_filter.optimize(push_down_predicates)?;
246249
}
247250

248251
let mut all_push_down = vec![];

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

Lines changed: 0 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -68,15 +68,6 @@ impl RulePushdownAntiJoin {
6868
.collect::<Vec<_>>();
6969

7070
if equi_conditions.iter().all(left_predicate) {
71-
// let mut new_equi_conditions = Vec::with_capacity(equi_conditions.len());
72-
73-
// for (idx, (inferred, predicate)) in equi_conditions.into_iter().enumerate() {
74-
// if !inferred || matches!(predicate, JoinPredicate::Left(_)) {
75-
// new_equi_conditions.push(join.equi_conditions[idx].clone());
76-
// }
77-
// }
78-
79-
// join.equi_conditions = new_equi_conditions;
8071
let right_prop = right_rel_expr.derive_relational_prop()?;
8172
let mut union_output_columns = ColumnSet::new();
8273
union_output_columns.extend(right_prop.output_columns.clone());
@@ -99,15 +90,6 @@ impl RulePushdownAntiJoin {
9990
return replace_inner_join(left, new_inner_join);
10091
}
10192
} else if equi_conditions.iter().all(right_predicate) {
102-
// let mut new_equi_conditions = Vec::with_capacity(equi_conditions.len());
103-
104-
// for (idx, (inferred, predicate)) in equi_conditions.into_iter().enumerate() {
105-
// if !inferred || matches!(predicate, JoinPredicate::Left(_)) {
106-
// new_equi_conditions.push(join.equi_conditions[idx].clone());
107-
// }
108-
// }
109-
110-
// join.equi_conditions = new_equi_conditions;
11193
let right_prop = right_rel_expr.derive_relational_prop()?;
11294
let mut union_output_columns = ColumnSet::new();
11395
union_output_columns.extend(right_prop.output_columns.clone());
@@ -186,46 +168,6 @@ fn extract_inner_join(expr: &SExpr) -> Result<Option<SExpr>> {
186168
}
187169
}
188170

189-
// struct ColumnMappingRewriter<'a> {
190-
// mapping: &'a HashMap<usize, ColumnBinding>,
191-
// }
192-
//
193-
// impl VisitorMut<'_> for ColumnMappingRewriter {
194-
// fn visit_bound_column_ref(&mut self, col: &mut BoundColumnRef) -> Result<()> {
195-
// if let Some(&new_index) = self.mapping.get(&col.column.index) {
196-
// col.column = new_index.clone();
197-
// }
198-
// Ok(())
199-
// }
200-
// }
201-
//
202-
// fn replace_by_equivalence(
203-
// expr: &ScalarExpr,
204-
// mapping: &HashMap<IndexType, ColumnBinding>,
205-
// ) -> Result<ScalarExpr> {
206-
// if mapping.is_empty() {
207-
// return Ok(expr.clone());
208-
// }
209-
//
210-
// let mut new_expr = expr.clone();
211-
// let mut rewriter = ColumnMappingRewriter { mapping };
212-
// rewriter.visit(&mut new_expr)?;
213-
// Ok(new_expr)
214-
// }
215-
//
216-
// fn collect_mapping(join: &Join) -> Result<Vec<(ColumnBinding, ColumnBinding)>> {
217-
// for equi_condition in &join.equi_conditions {
218-
// match equi_condition.left
219-
// }
220-
// }
221-
//
222-
// fn all_left(
223-
// conditions: &[JoinEquiCondition],
224-
// inner_join: Join,
225-
// left: Arc<RelationalProperty>,
226-
// ) -> Result<bool> {
227-
// }
228-
229171
fn left_predicate(tuple: &JoinPredicate) -> bool {
230172
matches!(&tuple, JoinPredicate::Left(_))
231173
}

0 commit comments

Comments
 (0)