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