Skip to content

Commit 764a26b

Browse files
committed
fix(cubesql): Fix condition for joining two date range filters
1 parent 6d75c60 commit 764a26b

File tree

3 files changed

+70
-1
lines changed

3 files changed

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

0 commit comments

Comments
 (0)