Skip to content

Commit 39190e0

Browse files
authored
fix(cubesql): Fix condition for joining two date range filters (#9113)
1 parent 9ae9035 commit 39190e0

File tree

3 files changed

+65
-1
lines changed

3 files changed

+65
-1
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4224,7 +4224,7 @@ impl FilterRules {
42244224
{
42254225
swap_left_and_right = false;
42264226
} else if valid_left_filters.contains(date_range_end_op)
4227-
|| valid_right_filters.contains(date_range_start_op)
4227+
&& valid_right_filters.contains(date_range_start_op)
42284228
{
42294229
swap_left_and_right = true;
42304230
} else {

rust/cubesql/cubesql/src/compile/test/mod.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,8 @@ pub mod test_cube_join_grouped;
3434
#[cfg(test)]
3535
pub mod test_df_execution;
3636
#[cfg(test)]
37+
pub mod test_filters;
38+
#[cfg(test)]
3739
pub mod test_introspection;
3840
#[cfg(test)]
3941
pub mod test_udfs;
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
use cubeclient::models::{V1LoadRequestQuery, V1LoadRequestQueryFilterItem};
2+
use pretty_assertions::assert_eq;
3+
4+
use crate::compile::{
5+
rewrite::rewriter::Rewriter,
6+
test::{convert_select_to_query_plan, init_testing_logger, utils::LogicalPlanTestUtils},
7+
DatabaseProtocol,
8+
};
9+
10+
#[tokio::test]
11+
async fn test_filter_date_greated_and_not_null() {
12+
if !Rewriter::sql_push_down_enabled() {
13+
return;
14+
}
15+
init_testing_logger();
16+
17+
let query_plan = convert_select_to_query_plan(
18+
// language=PostgreSQL
19+
r#"
20+
SELECT
21+
dim_str0
22+
FROM MultiTypeCube
23+
WHERE
24+
(dim_date0 IS NOT NULL)
25+
AND (dim_date0 > '2019-01-01 00:00:00')
26+
GROUP BY
27+
dim_str0
28+
;
29+
"#
30+
.to_string(),
31+
DatabaseProtocol::PostgreSQL,
32+
)
33+
.await;
34+
35+
let logical_plan = query_plan.as_logical_plan();
36+
assert_eq!(
37+
logical_plan.find_cube_scan().request,
38+
V1LoadRequestQuery {
39+
measures: Some(vec![]),
40+
dimensions: Some(vec!["MultiTypeCube.dim_str0".to_string()]),
41+
segments: Some(vec![]),
42+
order: Some(vec![]),
43+
filters: Some(vec![
44+
V1LoadRequestQueryFilterItem {
45+
member: Some("MultiTypeCube.dim_date0".to_string()),
46+
operator: Some("set".to_string()),
47+
values: None,
48+
or: None,
49+
and: None,
50+
},
51+
V1LoadRequestQueryFilterItem {
52+
member: Some("MultiTypeCube.dim_date0".to_string()),
53+
operator: Some("afterDate".to_string()),
54+
values: Some(vec!["2019-01-01 00:00:00".to_string()]),
55+
or: None,
56+
and: None,
57+
},
58+
],),
59+
..Default::default()
60+
}
61+
);
62+
}

0 commit comments

Comments
 (0)