Skip to content

Commit 68a6c46

Browse files
committed
test(cubesql): Add tests for aggregation with WHERE false
1 parent e25d5c1 commit 68a6c46

File tree

1 file changed

+95
-0
lines changed

1 file changed

+95
-0
lines changed

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

Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1644,3 +1644,98 @@ GROUP BY
16441644
let segment = &segments[0];
16451645
assert!(segment.contains("DATE_TRUNC"));
16461646
}
1647+
1648+
/// Aggregation with falsy filter should NOT get pushed to CubeScan with limit=0
1649+
/// This test currently produces WrappedSelect with WHERE FALSE, which is OK for our purposes
1650+
#[tokio::test]
1651+
async fn select_agg_where_false() {
1652+
if !Rewriter::sql_push_down_enabled() {
1653+
return;
1654+
}
1655+
init_testing_logger();
1656+
1657+
let query_plan = convert_select_to_query_plan(
1658+
"SELECT SUM(sumPrice) FROM KibanaSampleDataEcommerce WHERE 1 = 0".to_string(),
1659+
DatabaseProtocol::PostgreSQL,
1660+
)
1661+
.await;
1662+
1663+
let physical_plan = query_plan.as_physical_plan().await.unwrap();
1664+
println!(
1665+
"Physical plan: {}",
1666+
displayable(physical_plan.as_ref()).indent()
1667+
);
1668+
1669+
let logical_plan = query_plan.as_logical_plan();
1670+
assert_eq!(
1671+
logical_plan.find_cube_scan().request,
1672+
V1LoadRequestQuery {
1673+
measures: Some(vec![]),
1674+
segments: Some(vec![]),
1675+
dimensions: Some(vec![]),
1676+
order: Some(vec![]),
1677+
limit: None,
1678+
ungrouped: Some(true),
1679+
..Default::default()
1680+
}
1681+
);
1682+
1683+
let sql = logical_plan.find_cube_scan_wrapped_sql().wrapped_sql.sql;
1684+
1685+
// Final query uses grouped query to Cube.js with WHERE FALSE, but without LIMIT 0
1686+
assert!(!sql.contains("\"ungrouped\":"));
1687+
assert!(sql.contains(r#"\"expr\":\"FALSE\""#));
1688+
assert!(sql.contains(r#""limit": 50000"#));
1689+
}
1690+
1691+
/// Aggregation(dimension) with falsy filter should NOT get pushed to CubeScan with limit=0
1692+
/// This test currently produces WrappedSelect with WHERE FALSE, which is OK for our purposes
1693+
#[tokio::test]
1694+
async fn wrapper_dimension_agg_where_false() {
1695+
if !Rewriter::sql_push_down_enabled() {
1696+
return;
1697+
}
1698+
init_testing_logger();
1699+
1700+
let query_plan = convert_select_to_query_plan(
1701+
// language=PostgreSQL
1702+
r#"
1703+
SELECT
1704+
MAX(customer_gender)
1705+
FROM
1706+
KibanaSampleDataEcommerce
1707+
WHERE 1 = 0
1708+
"#
1709+
.to_string(),
1710+
DatabaseProtocol::PostgreSQL,
1711+
)
1712+
.await;
1713+
1714+
let physical_plan = query_plan.as_physical_plan().await.unwrap();
1715+
println!(
1716+
"Physical plan: {}",
1717+
displayable(physical_plan.as_ref()).indent()
1718+
);
1719+
1720+
let logical_plan = query_plan.as_logical_plan();
1721+
assert_eq!(
1722+
logical_plan.find_cube_scan().request,
1723+
V1LoadRequestQuery {
1724+
measures: Some(vec![]),
1725+
dimensions: Some(vec![]),
1726+
segments: Some(vec![]),
1727+
order: Some(vec![]),
1728+
limit: None,
1729+
ungrouped: Some(true),
1730+
..Default::default()
1731+
}
1732+
);
1733+
1734+
let sql = logical_plan.find_cube_scan_wrapped_sql().wrapped_sql.sql;
1735+
1736+
// Final query uses grouped query to Cube.js with WHERE FALSE, but without LIMIT 0
1737+
assert!(!sql.contains("\"ungrouped\":"));
1738+
assert!(sql.contains(r#"\"expr\":\"FALSE\""#));
1739+
assert!(!sql.contains(r#""limit""#));
1740+
assert!(sql.contains("LIMIT 50000"));
1741+
}

0 commit comments

Comments
 (0)