Skip to content

Commit

Permalink
fix(cubesql): Do not generate large graphs for large IN filters
Browse files Browse the repository at this point in the history
  • Loading branch information
MazterQyou committed May 17, 2024
1 parent 532ec0a commit f29c9e4
Showing 1 changed file with 3 additions and 26 deletions.
29 changes: 3 additions & 26 deletions rust/cubesql/cubesql/src/compile/rewrite/rules/filters.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3300,8 +3300,8 @@ impl FilterRules {

move |egraph, subst| {
let expr_id = subst[expr_val];
let (list, scalar) = match &egraph[subst[list_var]].data.constant_in_list {
Some(list) if list.len() > 0 => (list.clone(), list[0].clone()),
let scalar = match &egraph[subst[list_var]].data.constant_in_list {
Some(list) if list.len() == 1 => list[0].clone(),
_ => return false,
};

Expand All @@ -3319,35 +3319,12 @@ impl FilterRules {
));
let literal_expr = egraph.add(LogicalPlanLanguage::LiteralExpr([literal_expr]));

let mut return_binary_expr = egraph.add(LogicalPlanLanguage::BinaryExpr([
let return_binary_expr = egraph.add(LogicalPlanLanguage::BinaryExpr([
expr_id,
operator,
literal_expr,
]));

for scalar in list.into_iter().skip(1) {
let literal_expr = egraph.add(LogicalPlanLanguage::LiteralExprValue(
LiteralExprValue(scalar),
));
let literal_expr = egraph.add(LogicalPlanLanguage::LiteralExpr([literal_expr]));

let right_binary_expr = egraph.add(LogicalPlanLanguage::BinaryExpr([
expr_id,
operator,
literal_expr,
]));

let or = egraph.add(LogicalPlanLanguage::BinaryExprOp(BinaryExprOp(
Operator::Or,
)));

return_binary_expr = egraph.add(LogicalPlanLanguage::BinaryExpr([
return_binary_expr,
or,
right_binary_expr,
]));
}

subst.insert(return_binary_expr_var, return_binary_expr);

return true;
Expand Down

0 comments on commit f29c9e4

Please sign in to comment.