Skip to content

Commit 3e606ea

Browse files
committed
test(cubesql): Add tests for aggregation with WHERE false
1 parent 5b10a68 commit 3e606ea

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
@@ -1383,3 +1383,106 @@ async fn wrapper_agg_dimension_over_limit() {
13831383
.sql
13841384
.contains("\"ungrouped\": true"));
13851385
}
1386+
1387+
/// Aggregation with falsy filter should NOT get pushed to CubeScan with limit=0
1388+
/// This test currently produces WrappedSelect with WHERE FALSE, which is OK for our purposes
1389+
#[tokio::test]
1390+
async fn select_agg_where_false() {
1391+
if !Rewriter::sql_push_down_enabled() {
1392+
return;
1393+
}
1394+
init_testing_logger();
1395+
1396+
let query_plan = convert_select_to_query_plan(
1397+
"SELECT SUM(sumPrice) FROM KibanaSampleDataEcommerce WHERE 1 = 0".to_string(),
1398+
DatabaseProtocol::PostgreSQL,
1399+
)
1400+
.await;
1401+
1402+
let physical_plan = query_plan.as_physical_plan().await.unwrap();
1403+
println!(
1404+
"Physical plan: {}",
1405+
displayable(physical_plan.as_ref()).indent()
1406+
);
1407+
1408+
let logical_plan = query_plan.as_logical_plan();
1409+
assert_eq!(
1410+
logical_plan.find_cube_scan().request,
1411+
V1LoadRequestQuery {
1412+
measures: Some(vec![]),
1413+
segments: Some(vec![]),
1414+
dimensions: Some(vec![]),
1415+
order: Some(vec![]),
1416+
limit: None,
1417+
ungrouped: Some(true),
1418+
..Default::default()
1419+
}
1420+
);
1421+
1422+
let sql = logical_plan
1423+
.find_cube_scan_wrapper()
1424+
.wrapped_sql
1425+
.unwrap()
1426+
.sql;
1427+
1428+
// Final query uses grouped query to Cube.js with WHERE FALSE, but without LIMIT 0
1429+
assert!(!sql.contains("\"ungrouped\":"));
1430+
assert!(sql.contains(r#"\"expr\":\"FALSE\""#));
1431+
assert!(sql.contains(r#""limit": 50000"#));
1432+
}
1433+
1434+
/// Aggregation(dimension) with falsy filter should NOT get pushed to CubeScan with limit=0
1435+
/// This test currently produces WrappedSelect with WHERE FALSE, which is OK for our purposes
1436+
#[tokio::test]
1437+
async fn wrapper_dimension_agg_where_false() {
1438+
if !Rewriter::sql_push_down_enabled() {
1439+
return;
1440+
}
1441+
init_testing_logger();
1442+
1443+
let query_plan = convert_select_to_query_plan(
1444+
// language=PostgreSQL
1445+
r#"
1446+
SELECT
1447+
MAX(customer_gender)
1448+
FROM
1449+
KibanaSampleDataEcommerce
1450+
WHERE 1 = 0
1451+
"#
1452+
.to_string(),
1453+
DatabaseProtocol::PostgreSQL,
1454+
)
1455+
.await;
1456+
1457+
let physical_plan = query_plan.as_physical_plan().await.unwrap();
1458+
println!(
1459+
"Physical plan: {}",
1460+
displayable(physical_plan.as_ref()).indent()
1461+
);
1462+
1463+
let logical_plan = query_plan.as_logical_plan();
1464+
assert_eq!(
1465+
logical_plan.find_cube_scan().request,
1466+
V1LoadRequestQuery {
1467+
measures: Some(vec![]),
1468+
dimensions: Some(vec![]),
1469+
segments: Some(vec![]),
1470+
order: Some(vec![]),
1471+
limit: None,
1472+
ungrouped: Some(true),
1473+
..Default::default()
1474+
}
1475+
);
1476+
1477+
let sql = logical_plan
1478+
.find_cube_scan_wrapper()
1479+
.wrapped_sql
1480+
.unwrap()
1481+
.sql;
1482+
1483+
// Final query uses grouped query to Cube.js with WHERE FALSE, but without LIMIT 0
1484+
assert!(!sql.contains("\"ungrouped\":"));
1485+
assert!(sql.contains(r#"\"expr\":\"FALSE\""#));
1486+
assert!(!sql.contains(r#""limit""#));
1487+
assert!(sql.contains("LIMIT 50000"));
1488+
}

0 commit comments

Comments
 (0)