Skip to content

Commit a6d3579

Browse files
authored
fix(cubestore): InplaceAggregate for boolean columns (#7432)
1 parent 8649bec commit a6d3579

File tree

3 files changed

+53
-1
lines changed

3 files changed

+53
-1
lines changed

rust/cubestore/Cargo.lock

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

rust/cubestore/cubestore-sql-tests/src/tests.rs

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2816,6 +2816,48 @@ async fn planning_inplace_aggregate(service: Box<dyn SqlClient>) {
28162816
\n Scan, index: default:1:[1], fields: [day, hits]\
28172817
\n Empty"
28182818
);
2819+
2820+
service
2821+
.exec_query("CREATE TABLE s.DataBool(url text, segment boolean, day int, hits int)")
2822+
.await
2823+
.unwrap();
2824+
2825+
let p = service
2826+
.plan_query(
2827+
"SELECT url, day, SUM(hits) FROM s.DataBool where segment = true GROUP BY 1, 2",
2828+
)
2829+
.await
2830+
.unwrap();
2831+
let phys_plan = pp_phys_plan(p.worker.as_ref());
2832+
assert_eq!(
2833+
phys_plan,
2834+
"Projection, [url, day, SUM(s.DataBool.hits)@2:SUM(hits)]\
2835+
\n FinalInplaceAggregate\
2836+
\n Worker\
2837+
\n PartialInplaceAggregate\
2838+
\n Filter\
2839+
\n MergeSort\
2840+
\n Scan, index: default:2:[2]:sort_on[url, segment, day], fields: *\
2841+
\n Empty"
2842+
);
2843+
let p = service
2844+
.plan_query(
2845+
"SELECT url, day, SUM(hits) FROM s.DataBool where segment = false GROUP BY 1, 2",
2846+
)
2847+
.await
2848+
.unwrap();
2849+
let phys_plan = pp_phys_plan(p.worker.as_ref());
2850+
assert_eq!(
2851+
phys_plan,
2852+
"Projection, [url, day, SUM(s.DataBool.hits)@2:SUM(hits)]\
2853+
\n FinalInplaceAggregate\
2854+
\n Worker\
2855+
\n PartialInplaceAggregate\
2856+
\n Filter\
2857+
\n MergeSort\
2858+
\n Scan, index: default:2:[2]:sort_on[url, segment, day], fields: *\
2859+
\n Empty"
2860+
);
28192861
}
28202862

28212863
async fn planning_hints(service: Box<dyn SqlClient>) {

rust/cubestore/cubestore/src/queryplanner/planning.rs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -670,6 +670,16 @@ fn single_value_filter_columns<'a>(
670670
columns.push(c);
671671
true
672672
}
673+
Expr::Not(e) => {
674+
let expr = e.as_ref();
675+
match expr {
676+
Expr::Column(c) => {
677+
columns.push(c);
678+
true
679+
}
680+
_ => false,
681+
}
682+
}
673683
Expr::Literal(_) => true,
674684
Expr::BinaryExpr { left, op, right } => match op {
675685
Operator::Eq => {

0 commit comments

Comments
 (0)