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