Skip to content

Commit 9bdd638

Browse files
committed
test(cubesql): Add tests for aggregation with WHERE false
1 parent d8d8de2 commit 9bdd638

File tree

1 file changed

+103
-0
lines changed

1 file changed

+103
-0
lines changed

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

Lines changed: 103 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1523,3 +1523,106 @@ async fn wrapper_agg_dimension_over_limit() {
15231523
.sql
15241524
.contains("\"ungrouped\": true"));
15251525
}
1526+
1527+
/// Aggregation with falsy filter should NOT get pushed to CubeScan with limit=0
1528+
/// This test currently produces WrappedSelect with WHERE FALSE, which is OK for our purposes
1529+
#[tokio::test]
1530+
async fn select_agg_where_false() {
1531+
if !Rewriter::sql_push_down_enabled() {
1532+
return;
1533+
}
1534+
init_testing_logger();
1535+
1536+
let query_plan = convert_select_to_query_plan(
1537+
"SELECT SUM(sumPrice) FROM KibanaSampleDataEcommerce WHERE 1 = 0".to_string(),
1538+
DatabaseProtocol::PostgreSQL,
1539+
)
1540+
.await;
1541+
1542+
let physical_plan = query_plan.as_physical_plan().await.unwrap();
1543+
println!(
1544+
"Physical plan: {}",
1545+
displayable(physical_plan.as_ref()).indent()
1546+
);
1547+
1548+
let logical_plan = query_plan.as_logical_plan();
1549+
assert_eq!(
1550+
logical_plan.find_cube_scan().request,
1551+
V1LoadRequestQuery {
1552+
measures: Some(vec![]),
1553+
segments: Some(vec![]),
1554+
dimensions: Some(vec![]),
1555+
order: Some(vec![]),
1556+
limit: None,
1557+
ungrouped: Some(true),
1558+
..Default::default()
1559+
}
1560+
);
1561+
1562+
let sql = logical_plan
1563+
.find_cube_scan_wrapper()
1564+
.wrapped_sql
1565+
.unwrap()
1566+
.sql;
1567+
1568+
// Final query uses grouped query to Cube.js with WHERE FALSE, but without LIMIT 0
1569+
assert!(!sql.contains("\"ungrouped\":"));
1570+
assert!(sql.contains(r#"\"expr\":\"FALSE\""#));
1571+
assert!(sql.contains(r#""limit": 50000"#));
1572+
}
1573+
1574+
/// Aggregation(dimension) with falsy filter should NOT get pushed to CubeScan with limit=0
1575+
/// This test currently produces WrappedSelect with WHERE FALSE, which is OK for our purposes
1576+
#[tokio::test]
1577+
async fn wrapper_dimension_agg_where_false() {
1578+
if !Rewriter::sql_push_down_enabled() {
1579+
return;
1580+
}
1581+
init_testing_logger();
1582+
1583+
let query_plan = convert_select_to_query_plan(
1584+
// language=PostgreSQL
1585+
r#"
1586+
SELECT
1587+
MAX(customer_gender)
1588+
FROM
1589+
KibanaSampleDataEcommerce
1590+
WHERE 1 = 0
1591+
"#
1592+
.to_string(),
1593+
DatabaseProtocol::PostgreSQL,
1594+
)
1595+
.await;
1596+
1597+
let physical_plan = query_plan.as_physical_plan().await.unwrap();
1598+
println!(
1599+
"Physical plan: {}",
1600+
displayable(physical_plan.as_ref()).indent()
1601+
);
1602+
1603+
let logical_plan = query_plan.as_logical_plan();
1604+
assert_eq!(
1605+
logical_plan.find_cube_scan().request,
1606+
V1LoadRequestQuery {
1607+
measures: Some(vec![]),
1608+
dimensions: Some(vec![]),
1609+
segments: Some(vec![]),
1610+
order: Some(vec![]),
1611+
limit: None,
1612+
ungrouped: Some(true),
1613+
..Default::default()
1614+
}
1615+
);
1616+
1617+
let sql = logical_plan
1618+
.find_cube_scan_wrapper()
1619+
.wrapped_sql
1620+
.unwrap()
1621+
.sql;
1622+
1623+
// Final query uses grouped query to Cube.js with WHERE FALSE, but without LIMIT 0
1624+
assert!(!sql.contains("\"ungrouped\":"));
1625+
assert!(sql.contains(r#"\"expr\":\"FALSE\""#));
1626+
assert!(!sql.contains(r#""limit""#));
1627+
assert!(sql.contains("LIMIT 50000"));
1628+
}

0 commit comments

Comments
 (0)