@@ -1644,3 +1644,98 @@ GROUP BY
16441644 let segment = & segments[ 0 ] ;
16451645 assert ! ( segment. contains( "DATE_TRUNC" ) ) ;
16461646}
1647+
1648+ /// Aggregation with falsy filter should NOT get pushed to CubeScan with limit=0
1649+ /// This test currently produces WrappedSelect with WHERE FALSE, which is OK for our purposes
1650+ #[ tokio:: test]
1651+ async fn select_agg_where_false ( ) {
1652+ if !Rewriter :: sql_push_down_enabled ( ) {
1653+ return ;
1654+ }
1655+ init_testing_logger ( ) ;
1656+
1657+ let query_plan = convert_select_to_query_plan (
1658+ "SELECT SUM(sumPrice) FROM KibanaSampleDataEcommerce WHERE 1 = 0" . to_string ( ) ,
1659+ DatabaseProtocol :: PostgreSQL ,
1660+ )
1661+ . await ;
1662+
1663+ let physical_plan = query_plan. as_physical_plan ( ) . await . unwrap ( ) ;
1664+ println ! (
1665+ "Physical plan: {}" ,
1666+ displayable( physical_plan. as_ref( ) ) . indent( )
1667+ ) ;
1668+
1669+ let logical_plan = query_plan. as_logical_plan ( ) ;
1670+ assert_eq ! (
1671+ logical_plan. find_cube_scan( ) . request,
1672+ V1LoadRequestQuery {
1673+ measures: Some ( vec![ ] ) ,
1674+ segments: Some ( vec![ ] ) ,
1675+ dimensions: Some ( vec![ ] ) ,
1676+ order: Some ( vec![ ] ) ,
1677+ limit: None ,
1678+ ungrouped: Some ( true ) ,
1679+ ..Default :: default ( )
1680+ }
1681+ ) ;
1682+
1683+ let sql = logical_plan. find_cube_scan_wrapped_sql ( ) . wrapped_sql . sql ;
1684+
1685+ // Final query uses grouped query to Cube.js with WHERE FALSE, but without LIMIT 0
1686+ assert ! ( !sql. contains( "\" ungrouped\" :" ) ) ;
1687+ assert ! ( sql. contains( r#"\"expr\":\"FALSE\""# ) ) ;
1688+ assert ! ( sql. contains( r#""limit": 50000"# ) ) ;
1689+ }
1690+
1691+ /// Aggregation(dimension) with falsy filter should NOT get pushed to CubeScan with limit=0
1692+ /// This test currently produces WrappedSelect with WHERE FALSE, which is OK for our purposes
1693+ #[ tokio:: test]
1694+ async fn wrapper_dimension_agg_where_false ( ) {
1695+ if !Rewriter :: sql_push_down_enabled ( ) {
1696+ return ;
1697+ }
1698+ init_testing_logger ( ) ;
1699+
1700+ let query_plan = convert_select_to_query_plan (
1701+ // language=PostgreSQL
1702+ r#"
1703+ SELECT
1704+ MAX(customer_gender)
1705+ FROM
1706+ KibanaSampleDataEcommerce
1707+ WHERE 1 = 0
1708+ "#
1709+ . to_string ( ) ,
1710+ DatabaseProtocol :: PostgreSQL ,
1711+ )
1712+ . await ;
1713+
1714+ let physical_plan = query_plan. as_physical_plan ( ) . await . unwrap ( ) ;
1715+ println ! (
1716+ "Physical plan: {}" ,
1717+ displayable( physical_plan. as_ref( ) ) . indent( )
1718+ ) ;
1719+
1720+ let logical_plan = query_plan. as_logical_plan ( ) ;
1721+ assert_eq ! (
1722+ logical_plan. find_cube_scan( ) . request,
1723+ V1LoadRequestQuery {
1724+ measures: Some ( vec![ ] ) ,
1725+ dimensions: Some ( vec![ ] ) ,
1726+ segments: Some ( vec![ ] ) ,
1727+ order: Some ( vec![ ] ) ,
1728+ limit: None ,
1729+ ungrouped: Some ( true ) ,
1730+ ..Default :: default ( )
1731+ }
1732+ ) ;
1733+
1734+ let sql = logical_plan. find_cube_scan_wrapped_sql ( ) . wrapped_sql . sql ;
1735+
1736+ // Final query uses grouped query to Cube.js with WHERE FALSE, but without LIMIT 0
1737+ assert ! ( !sql. contains( "\" ungrouped\" :" ) ) ;
1738+ assert ! ( sql. contains( r#"\"expr\":\"FALSE\""# ) ) ;
1739+ assert ! ( !sql. contains( r#""limit""# ) ) ;
1740+ assert ! ( sql. contains( "LIMIT 50000" ) ) ;
1741+ }
0 commit comments