@@ -1523,3 +1523,106 @@ async fn wrapper_agg_dimension_over_limit() {
1523
1523
. sql
1524
1524
. contains( "\" ungrouped\" : true" ) ) ;
1525
1525
}
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