Skip to content

Commit

Permalink
fix(cubesql): Fix condition for joining two date range filters (#9113)
Browse files Browse the repository at this point in the history
  • Loading branch information
mcheshkov authored Jan 20, 2025
1 parent 9ae9035 commit 39190e0
Show file tree
Hide file tree
Showing 3 changed files with 65 additions and 1 deletion.
2 changes: 1 addition & 1 deletion rust/cubesql/cubesql/src/compile/rewrite/rules/filters.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4224,7 +4224,7 @@ impl FilterRules {
{
swap_left_and_right = false;
} else if valid_left_filters.contains(date_range_end_op)
|| valid_right_filters.contains(date_range_start_op)
&& valid_right_filters.contains(date_range_start_op)
{
swap_left_and_right = true;
} else {
Expand Down
2 changes: 2 additions & 0 deletions rust/cubesql/cubesql/src/compile/test/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,8 @@ pub mod test_cube_join_grouped;
#[cfg(test)]
pub mod test_df_execution;
#[cfg(test)]
pub mod test_filters;
#[cfg(test)]
pub mod test_introspection;
#[cfg(test)]
pub mod test_udfs;
Expand Down
62 changes: 62 additions & 0 deletions rust/cubesql/cubesql/src/compile/test/test_filters.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
use cubeclient::models::{V1LoadRequestQuery, V1LoadRequestQueryFilterItem};
use pretty_assertions::assert_eq;

use crate::compile::{
rewrite::rewriter::Rewriter,
test::{convert_select_to_query_plan, init_testing_logger, utils::LogicalPlanTestUtils},
DatabaseProtocol,
};

#[tokio::test]
async fn test_filter_date_greated_and_not_null() {
if !Rewriter::sql_push_down_enabled() {
return;
}
init_testing_logger();

let query_plan = convert_select_to_query_plan(
// language=PostgreSQL
r#"
SELECT
dim_str0
FROM MultiTypeCube
WHERE
(dim_date0 IS NOT NULL)
AND (dim_date0 > '2019-01-01 00:00:00')
GROUP BY
dim_str0
;
"#
.to_string(),
DatabaseProtocol::PostgreSQL,
)
.await;

let logical_plan = query_plan.as_logical_plan();
assert_eq!(
logical_plan.find_cube_scan().request,
V1LoadRequestQuery {
measures: Some(vec![]),
dimensions: Some(vec!["MultiTypeCube.dim_str0".to_string()]),
segments: Some(vec![]),
order: Some(vec![]),
filters: Some(vec![
V1LoadRequestQueryFilterItem {
member: Some("MultiTypeCube.dim_date0".to_string()),
operator: Some("set".to_string()),
values: None,
or: None,
and: None,
},
V1LoadRequestQueryFilterItem {
member: Some("MultiTypeCube.dim_date0".to_string()),
operator: Some("afterDate".to_string()),
values: Some(vec!["2019-01-01 00:00:00".to_string()]),
or: None,
and: None,
},
],),
..Default::default()
}
);
}

0 comments on commit 39190e0

Please sign in to comment.