Skip to content

Commit cef2de0

Browse files
committed
test(cubesql): Add tests for aggregation with WHERE false
1 parent 0341c85 commit cef2de0

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
@@ -1417,3 +1417,98 @@ async fn wrapper_agg_dimension_over_limit() {
14171417
.sql
14181418
.contains("\"ungrouped\": true"));
14191419
}
1420+
1421+
/// Aggregation with falsy filter should NOT get pushed to CubeScan with limit=0
1422+
/// This test currently produces WrappedSelect with WHERE FALSE, which is OK for our purposes
1423+
#[tokio::test]
1424+
async fn select_agg_where_false() {
1425+
if !Rewriter::sql_push_down_enabled() {
1426+
return;
1427+
}
1428+
init_testing_logger();
1429+
1430+
let query_plan = convert_select_to_query_plan(
1431+
"SELECT SUM(sumPrice) FROM KibanaSampleDataEcommerce WHERE 1 = 0".to_string(),
1432+
DatabaseProtocol::PostgreSQL,
1433+
)
1434+
.await;
1435+
1436+
let physical_plan = query_plan.as_physical_plan().await.unwrap();
1437+
println!(
1438+
"Physical plan: {}",
1439+
displayable(physical_plan.as_ref()).indent()
1440+
);
1441+
1442+
let logical_plan = query_plan.as_logical_plan();
1443+
assert_eq!(
1444+
logical_plan.find_cube_scan().request,
1445+
V1LoadRequestQuery {
1446+
measures: Some(vec![]),
1447+
segments: Some(vec![]),
1448+
dimensions: Some(vec![]),
1449+
order: Some(vec![]),
1450+
limit: None,
1451+
ungrouped: Some(true),
1452+
..Default::default()
1453+
}
1454+
);
1455+
1456+
let sql = logical_plan.find_cube_scan_wrapped_sql().wrapped_sql.sql;
1457+
1458+
// Final query uses grouped query to Cube.js with WHERE FALSE, but without LIMIT 0
1459+
assert!(!sql.contains("\"ungrouped\":"));
1460+
assert!(sql.contains(r#"\"expr\":\"FALSE\""#));
1461+
assert!(sql.contains(r#""limit": 50000"#));
1462+
}
1463+
1464+
/// Aggregation(dimension) with falsy filter should NOT get pushed to CubeScan with limit=0
1465+
/// This test currently produces WrappedSelect with WHERE FALSE, which is OK for our purposes
1466+
#[tokio::test]
1467+
async fn wrapper_dimension_agg_where_false() {
1468+
if !Rewriter::sql_push_down_enabled() {
1469+
return;
1470+
}
1471+
init_testing_logger();
1472+
1473+
let query_plan = convert_select_to_query_plan(
1474+
// language=PostgreSQL
1475+
r#"
1476+
SELECT
1477+
MAX(customer_gender)
1478+
FROM
1479+
KibanaSampleDataEcommerce
1480+
WHERE 1 = 0
1481+
"#
1482+
.to_string(),
1483+
DatabaseProtocol::PostgreSQL,
1484+
)
1485+
.await;
1486+
1487+
let physical_plan = query_plan.as_physical_plan().await.unwrap();
1488+
println!(
1489+
"Physical plan: {}",
1490+
displayable(physical_plan.as_ref()).indent()
1491+
);
1492+
1493+
let logical_plan = query_plan.as_logical_plan();
1494+
assert_eq!(
1495+
logical_plan.find_cube_scan().request,
1496+
V1LoadRequestQuery {
1497+
measures: Some(vec![]),
1498+
dimensions: Some(vec![]),
1499+
segments: Some(vec![]),
1500+
order: Some(vec![]),
1501+
limit: None,
1502+
ungrouped: Some(true),
1503+
..Default::default()
1504+
}
1505+
);
1506+
1507+
let sql = logical_plan.find_cube_scan_wrapped_sql().wrapped_sql.sql;
1508+
1509+
// Final query uses grouped query to Cube.js with WHERE FALSE, but without LIMIT 0
1510+
assert!(!sql.contains("\"ungrouped\":"));
1511+
assert!(sql.contains(r#"\"expr\":\"FALSE\""#));
1512+
assert!(!sql.contains(r#""limit""#));
1513+
assert!(sql.contains("LIMIT 50000"));
1514+
}

0 commit comments

Comments
 (0)