@@ -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