Skip to content

Commit 74cce28

Browse files
committed
fix(cubesql): Simplify push-down-limit-filter rule to avoid double limit
1 parent 1fc36d4 commit 74cce28

File tree

1 file changed

+8
-32
lines changed
  • rust/cubesql/cubesql/src/compile/rewrite/rules

1 file changed

+8
-32
lines changed

rust/cubesql/cubesql/src/compile/rewrite/rules/filters.rs

Lines changed: 8 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,11 @@ use crate::{
1616
transforming_rewrite, transforming_rewrite_with_root, udf_expr, udf_expr_var_arg,
1717
udf_fun_expr_args, udf_fun_expr_args_empty_tail, BetweenExprNegated, BinaryExprOp,
1818
CastExprDataType, ChangeUserMemberValue, ColumnExprColumn, CubeScanAliasToCube,
19-
CubeScanLimit, FilterMemberMember, FilterMemberOp, FilterMemberValues, FilterOpOp,
19+
FilterMemberMember, FilterMemberOp, FilterMemberValues, FilterOpOp,
2020
FilterReplacerAliasToCube, FilterReplacerAliases, InListExprNegated, LikeExprEscapeChar,
21-
LikeExprNegated, LimitFetch, LimitSkip, ListPattern, ListType, LiteralExprValue,
22-
LogicalPlanLanguage, SegmentMemberMember, TimeDimensionDateRange,
23-
TimeDimensionDateRangeReplacerDateRange, TimeDimensionDateRangeReplacerMember,
24-
TimeDimensionGranularity, TimeDimensionName,
21+
LikeExprNegated, ListPattern, ListType, LiteralExprValue, LogicalPlanLanguage,
22+
SegmentMemberMember, TimeDimensionDateRange, TimeDimensionDateRangeReplacerDateRange,
23+
TimeDimensionDateRangeReplacerMember, TimeDimensionGranularity, TimeDimensionName,
2524
},
2625
config::ConfigObj,
2726
transport::{ext::V1CubeMetaExt, MemberType, MetaContext},
@@ -131,27 +130,22 @@ impl RewriteRules for FilterRules {
131130
),
132131
),
133132
limit(
134-
"?new_limit_skip",
135-
"?new_limit_fetch",
133+
"LimitSkip:None",
134+
"LimitFetch:0",
136135
cube_scan(
137136
"?source_table_name",
138137
"?members",
139138
"?filters",
140139
"?order",
141-
"?new_limit",
140+
"?limit",
142141
"?offset",
143142
"?split",
144143
"?can_pushdown_join",
145144
"?wrapped",
146145
"?ungrouped",
147146
),
148147
),
149-
self.push_down_limit_filter(
150-
"?literal_false",
151-
"?new_limit",
152-
"?new_limit_skip",
153-
"?new_limit_fetch",
154-
),
148+
self.push_down_limit_filter("?literal_false"),
155149
),
156150
// Transform Filter: Boolean(true)
157151
// It's safe to push down filter under projection, next filter-truncate-true will truncate it
@@ -2553,31 +2547,13 @@ impl FilterRules {
25532547
fn push_down_limit_filter(
25542548
&self,
25552549
literal_var: &'static str,
2556-
new_limit_var: &'static str,
2557-
new_limit_skip_var: &'static str,
2558-
new_limit_fetch_var: &'static str,
25592550
) -> impl Fn(&mut CubeEGraph, &mut Subst) -> bool {
25602551
let literal_var = var!(literal_var);
2561-
let new_limit_var = var!(new_limit_var);
2562-
let new_limit_skip_var = var!(new_limit_skip_var);
2563-
let new_limit_fetch_var = var!(new_limit_fetch_var);
25642552
move |egraph, subst| {
25652553
if let Some(ConstantFolding::Scalar(literal_value)) =
25662554
&egraph[subst[literal_var]].data.constant
25672555
{
25682556
if let ScalarValue::Boolean(Some(false)) = literal_value {
2569-
subst.insert(
2570-
new_limit_var,
2571-
egraph.add(LogicalPlanLanguage::CubeScanLimit(CubeScanLimit(Some(0)))),
2572-
);
2573-
subst.insert(
2574-
new_limit_skip_var,
2575-
egraph.add(LogicalPlanLanguage::LimitSkip(LimitSkip(Some(0)))),
2576-
);
2577-
subst.insert(
2578-
new_limit_fetch_var,
2579-
egraph.add(LogicalPlanLanguage::LimitFetch(LimitFetch(Some(0)))),
2580-
);
25812557
return true;
25822558
}
25832559
}

0 commit comments

Comments
 (0)