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]