This is an automated email from the ASF dual-hosted git repository.

soumyava pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/druid.git


The following commit(s) were added to refs/heads/master by this push:
     new b9a33949fd Fix aggregation filter expression processing in the absense 
of projection (#14893)
b9a33949fd is described below

commit b9a33949fd461bbf601fbf06eccb44fd1b2a7129
Author: Zoltan Haindrich <[email protected]>
AuthorDate: Tue Aug 22 19:17:14 2023 +0200

    Fix aggregation filter expression processing in the absense of projection 
(#14893)
    
    * test
    
    * fix
    
    * add 33 test
    
    * crap
    
    * Revert "crap"
    
    This reverts commit 2751198debdcf3ee0c0ab9f56a8dfa7477308d93.
    
    * cleanup test
    
    * celanup
    
    * rename test
---
 .../druid/sql/calcite/rule/GroupByRules.java       | 11 ++++++-----
 .../druid/sql/calcite/CalciteSelectQueryTest.java  | 23 ++++++++++++++++++++++
 2 files changed, 29 insertions(+), 5 deletions(-)

diff --git 
a/sql/src/main/java/org/apache/druid/sql/calcite/rule/GroupByRules.java 
b/sql/src/main/java/org/apache/druid/sql/calcite/rule/GroupByRules.java
index a06198e426..50bdf80771 100644
--- a/sql/src/main/java/org/apache/druid/sql/calcite/rule/GroupByRules.java
+++ b/sql/src/main/java/org/apache/druid/sql/calcite/rule/GroupByRules.java
@@ -73,12 +73,13 @@ public class GroupByRules
 
     if (call.filterArg >= 0) {
       // AGG(xxx) FILTER(WHERE yyy)
-      if (project == null) {
-        // We need some kind of projection to support filtered aggregations.
-        return null;
-      }
 
-      final RexNode expression = project.getProjects().get(call.filterArg);
+      final RexNode expression = Expressions.fromFieldAccess(
+            rexBuilder.getTypeFactory(),
+            rowSignature,
+            project,
+            call.filterArg);
+
       final DimFilter nonOptimizedFilter = Expressions.toFilter(
           plannerContext,
           rowSignature,
diff --git 
a/sql/src/test/java/org/apache/druid/sql/calcite/CalciteSelectQueryTest.java 
b/sql/src/test/java/org/apache/druid/sql/calcite/CalciteSelectQueryTest.java
index 661f5cd6ec..c90a961d96 100644
--- a/sql/src/test/java/org/apache/druid/sql/calcite/CalciteSelectQueryTest.java
+++ b/sql/src/test/java/org/apache/druid/sql/calcite/CalciteSelectQueryTest.java
@@ -32,6 +32,7 @@ import org.apache.druid.query.LookupDataSource;
 import org.apache.druid.query.QueryDataSource;
 import org.apache.druid.query.aggregation.CountAggregatorFactory;
 import org.apache.druid.query.aggregation.DoubleSumAggregatorFactory;
+import org.apache.druid.query.aggregation.FilteredAggregatorFactory;
 import org.apache.druid.query.dimension.DefaultDimensionSpec;
 import org.apache.druid.query.extraction.SubstringDimExtractionFn;
 import org.apache.druid.query.groupby.GroupByQuery;
@@ -1923,4 +1924,26 @@ public class CalciteSelectQueryTest extends 
BaseCalciteQueryTest
         )
     );
   }
+
+  @Test
+  public void testAggregateFilterInTheAbsenceOfProjection()
+  {
+    cannotVectorize();
+    testQuery(
+        "select count(1) filter (where __time > date '2023-01-01') " +
+            " from druid.foo where 'a' = 'b'",
+        ImmutableList.of(
+            Druids.newTimeseriesQueryBuilder()
+                .dataSource(InlineDataSource.fromIterable(
+                    ImmutableList.of(),
+                    RowSignature.builder().add("$f1", 
ColumnType.LONG).build()))
+                .intervals(querySegmentSpec(Filtration.eternity()))
+                .granularity(Granularities.ALL)
+                .aggregators(aggregators(
+                    new FilteredAggregatorFactory(
+                        new CountAggregatorFactory("a0"), 
expressionFilter("\"$f1\""))))
+                .context(QUERY_CONTEXT_DEFAULT)
+                .build()),
+        ImmutableList.of(new Object[] {0L}));
+  }
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to