You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by hu...@apache.org on 2022/11/23 04:29:15 UTC
[iotdb] 01/02: fix group by level
This is an automated email from the ASF dual-hosted git repository.
hui pushed a commit to branch lmh/FixGroupByLevel
in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit 052d1813d6c421bd38acd2544cf149b82ebfd589
Author: liuminghui233 <54...@qq.com>
AuthorDate: Wed Nov 23 12:12:55 2022 +0800
fix group by level
---
.../iotdb/db/mpp/plan/analyze/AnalyzeVisitor.java | 20 +++++++++++++++++---
1 file changed, 17 insertions(+), 3 deletions(-)
diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/plan/analyze/AnalyzeVisitor.java b/server/src/main/java/org/apache/iotdb/db/mpp/plan/analyze/AnalyzeVisitor.java
index 0c49d50a4e..9bd95df7b6 100644
--- a/server/src/main/java/org/apache/iotdb/db/mpp/plan/analyze/AnalyzeVisitor.java
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/plan/analyze/AnalyzeVisitor.java
@@ -625,6 +625,7 @@ public class AnalyzeVisitor extends StatementVisitor<Analysis, MPPQueryContext>
analyzeExpression(analysis, havingExpression);
analysis.setHavingExpression(havingExpression);
updateGroupByLevelExpressions(
+ analysis,
havingExpression,
groupByLevelExpressions,
groupByLevelController.getGroupedExpressionToRawExpressionsMap());
@@ -648,7 +649,8 @@ public class AnalyzeVisitor extends StatementVisitor<Analysis, MPPQueryContext>
analyzeExpression(analysis, groupedExpressionWithoutAlias);
outputExpressions.add(outputExpression);
updateGroupByLevelExpressions(
- groupedExpressionWithoutAlias,
+ analysis,
+ groupedExpression,
groupByLevelExpressions,
groupByLevelController.getGroupedExpressionToRawExpressionsMap());
paginationController.consumeLimit();
@@ -678,14 +680,26 @@ public class AnalyzeVisitor extends StatementVisitor<Analysis, MPPQueryContext>
}
private void updateGroupByLevelExpressions(
+ Analysis analysis,
Expression expression,
Map<Expression, Set<Expression>> groupByLevelExpressions,
Map<Expression, Set<Expression>> groupedExpressionToRawExpressionsMap) {
for (Expression groupedAggregationExpression :
ExpressionAnalyzer.searchAggregationExpressions(expression)) {
+ Set<Expression> groupedExpressionSet =
+ groupedExpressionToRawExpressionsMap.get(groupedAggregationExpression).stream()
+ .map(ExpressionAnalyzer::removeAliasFromExpression)
+ .collect(Collectors.toSet());
+ Expression groupedAggregationExpressionWithoutAlias =
+ ExpressionAnalyzer.removeAliasFromExpression(groupedAggregationExpression);
+
+ analyzeExpression(analysis, groupedAggregationExpressionWithoutAlias);
+ groupedExpressionSet.forEach(
+ groupedExpression -> analyzeExpression(analysis, groupedExpression));
+
groupByLevelExpressions
- .computeIfAbsent(groupedAggregationExpression, key -> new HashSet<>())
- .addAll(groupedExpressionToRawExpressionsMap.get(groupedAggregationExpression));
+ .computeIfAbsent(groupedAggregationExpressionWithoutAlias, key -> new HashSet<>())
+ .addAll(groupedExpressionSet);
}
}