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

xiangweiwei pushed a commit to branch aggregateTestBug
in repository https://gitbox.apache.org/repos/asf/iotdb.git

commit 4de6174799739165b358cbcb41c146ce273b5f10
Author: Alima777 <[email protected]>
AuthorDate: Tue May 31 10:44:53 2022 +0800

    fix align by device bug:
---
 .../apache/iotdb/db/mpp/plan/analyze/ExpressionAnalyzer.java   | 10 ++++++++--
 .../apache/iotdb/db/mpp/plan/planner/LogicalPlanBuilder.java   |  6 +++---
 2 files changed, 11 insertions(+), 5 deletions(-)

diff --git 
a/server/src/main/java/org/apache/iotdb/db/mpp/plan/analyze/ExpressionAnalyzer.java
 
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/analyze/ExpressionAnalyzer.java
index 0c5cfc5b1d..7c0a6e9a54 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/mpp/plan/analyze/ExpressionAnalyzer.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/analyze/ExpressionAnalyzer.java
@@ -420,8 +420,11 @@ public class ExpressionAnalyzer {
     } else if (expression instanceof FunctionExpression) {
       List<List<Expression>> extendedExpressions = new ArrayList<>();
       for (Expression suffixExpression : expression.getExpressions()) {
-        extendedExpressions.add(
-            concatDeviceAndRemoveWildcard(suffixExpression, devicePath, 
schemaTree, typeProvider));
+        List<Expression> concatedExpression =
+            concatDeviceAndRemoveWildcard(suffixExpression, devicePath, 
schemaTree, typeProvider);
+        if (concatedExpression != null && concatedExpression.size() != 0) {
+          extendedExpressions.add(concatedExpression);
+        }
       }
       List<List<Expression>> childExpressionsList = new ArrayList<>();
       cartesianProduct(extendedExpressions, childExpressionsList, 0, new 
ArrayList<>());
@@ -431,6 +434,9 @@ public class ExpressionAnalyzer {
       PartialPath concatPath = devicePath.concatPath(measurement);
 
       List<MeasurementPath> actualPaths = 
schemaTree.searchMeasurementPaths(concatPath).left;
+      if (actualPaths.isEmpty()) {
+        return new ArrayList<>();
+      }
       List<PartialPath> noStarPaths = new ArrayList<>(actualPaths);
       noStarPaths.forEach(path -> typeProvider.setType(path.getFullPath(), 
path.getSeriesType()));
       return reconstructTimeSeriesOperands(noStarPaths);
diff --git 
a/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/LogicalPlanBuilder.java
 
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/LogicalPlanBuilder.java
index 15ae9ccc84..332434d89e 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/LogicalPlanBuilder.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/LogicalPlanBuilder.java
@@ -83,7 +83,7 @@ import java.time.ZoneId;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
-import java.util.HashMap;
+import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
@@ -176,8 +176,8 @@ public class LogicalPlanBuilder {
 
     List<PlanNode> sourceNodeList = new ArrayList<>();
     boolean needCheckAscending = groupByTimeParameter == null;
-    Map<PartialPath, List<AggregationDescriptor>> ascendingAggregations = new 
HashMap<>();
-    Map<PartialPath, List<AggregationDescriptor>> descendingAggregations = new 
HashMap<>();
+    Map<PartialPath, List<AggregationDescriptor>> ascendingAggregations = new 
LinkedHashMap<>();
+    Map<PartialPath, List<AggregationDescriptor>> descendingAggregations = new 
LinkedHashMap<>();
     for (Expression sourceExpression : sourceExpressions) {
       AggregationType aggregationFunction =
           AggregationType.valueOf(

Reply via email to