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

rong pushed a commit to branch iotdb-1022-v2
in repository https://gitbox.apache.org/repos/asf/iotdb.git

commit 661311f2846b10cf6556a56e38cec047798d2418
Author: SteveYurongSu <[email protected]>
AuthorDate: Tue May 18 11:19:14 2021 +0800

    fix aggregation * query tests
---
 .../iotdb/db/qp/logical/crud/SelectOperator.java    | 14 ++++++++++----
 .../iotdb/db/qp/strategy/PhysicalGenerator.java     |  9 +++++----
 .../apache/iotdb/db/qp/utils/WildcardsRemover.java  | 21 ++++++++++++++++++---
 3 files changed, 33 insertions(+), 11 deletions(-)

diff --git 
a/server/src/main/java/org/apache/iotdb/db/qp/logical/crud/SelectOperator.java 
b/server/src/main/java/org/apache/iotdb/db/qp/logical/crud/SelectOperator.java
index 14d2c24..7030161 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/qp/logical/crud/SelectOperator.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/qp/logical/crud/SelectOperator.java
@@ -96,10 +96,16 @@ public final class SelectOperator extends Operator {
       pathsCache = new ArrayList<>();
       for (ResultColumn resultColumn : resultColumns) {
         Expression expression = resultColumn.getExpression();
-        pathsCache.add(
-            expression instanceof TimeSeriesOperand
-                ? ((TimeSeriesOperand) expression).getPath()
-                : null);
+        if (expression instanceof TimeSeriesOperand) {
+          pathsCache.add(((TimeSeriesOperand) expression).getPath());
+        } else if (expression instanceof FunctionExpression
+            && expression.isAggregationFunctionExpression()) {
+          pathsCache.add(
+              ((TimeSeriesOperand) ((FunctionExpression) 
expression).getExpressions().get(0))
+                  .getPath());
+        } else {
+          pathsCache.add(null);
+        }
       }
     }
     return pathsCache;
diff --git 
a/server/src/main/java/org/apache/iotdb/db/qp/strategy/PhysicalGenerator.java 
b/server/src/main/java/org/apache/iotdb/db/qp/strategy/PhysicalGenerator.java
index 9ea5d3a..6b3e691 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/qp/strategy/PhysicalGenerator.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/qp/strategy/PhysicalGenerator.java
@@ -462,7 +462,7 @@ public class PhysicalGenerator {
 
     @Override
     public QueryPlan transform(QueryOperator queryOperator) throws 
QueryProcessException {
-      QueryPlan queryPlan;
+      AggregationPlan queryPlan;
       if (queryOperator.hasTimeSeriesGeneratingFunction()) {
         throw new QueryProcessException(
             "User-defined and built-in hybrid aggregation is not supported.");
@@ -474,8 +474,9 @@ public class PhysicalGenerator {
       } else {
         queryPlan = new AggregationPlan();
       }
-      ((AggregationPlan) queryPlan)
-          
.setAggregations(queryOperator.getSelectOperator().getAggregationFunctions());
+
+      queryPlan.setPaths(queryOperator.getSelectOperator().getPaths());
+      
queryPlan.setAggregations(queryOperator.getSelectOperator().getAggregationFunctions());
 
       if (queryOperator.isGroupByTime()) {
         GroupByTimePlan groupByTimePlan = (GroupByTimePlan) queryPlan;
@@ -500,7 +501,7 @@ public class PhysicalGenerator {
           }
         }
       } else if (queryOperator.isGroupByLevel()) {
-        ((AggregationPlan) queryPlan).setLevel(queryOperator.getLevel());
+        queryPlan.setLevel(queryOperator.getLevel());
         try {
           if (!verifyAllAggregationDataTypesEqual(queryOperator)) {
             throw new QueryProcessException("Aggregate among unmatched data 
types");
diff --git 
a/server/src/main/java/org/apache/iotdb/db/qp/utils/WildcardsRemover.java 
b/server/src/main/java/org/apache/iotdb/db/qp/utils/WildcardsRemover.java
index 41696af..580b3e4 100644
--- a/server/src/main/java/org/apache/iotdb/db/qp/utils/WildcardsRemover.java
+++ b/server/src/main/java/org/apache/iotdb/db/qp/utils/WildcardsRemover.java
@@ -65,6 +65,15 @@ public class WildcardsRemover {
     consumed = 0;
   }
 
+  public WildcardsRemover(ConcatPathOptimizer concatPathOptimizer) {
+    this.concatPathOptimizer = concatPathOptimizer;
+
+    maxDeduplicatedPathNum = Integer.MAX_VALUE - 1;
+    soffset = 0;
+    limit = maxDeduplicatedPathNum + 1;
+    consumed = 0;
+  }
+
   public List<PartialPath> removeWildcardFrom(PartialPath path) throws 
LogicalOptimizeException {
     try {
       Pair<List<PartialPath>, Integer> pair =
@@ -108,7 +117,8 @@ public class WildcardsRemover {
     boolean atLeastOneSeriesNotExisted = false;
     for (Expression originExpression : expressions) {
       List<Expression> actualExpressions = new ArrayList<>();
-      originExpression.removeWildcards(this, actualExpressions);
+      originExpression.removeWildcards(
+          new WildcardsRemover(concatPathOptimizer), actualExpressions);
       if (actualExpressions.isEmpty()) {
         atLeastOneSeriesNotExisted = true;
         break;
@@ -122,16 +132,21 @@ public class WildcardsRemover {
     List<List<Expression>> actualExpressions = new ArrayList<>();
     ConcatPathOptimizer.cartesianProduct(
         extendedExpressions, actualExpressions, 0, new ArrayList<>());
-    for (@SuppressWarnings("squid:S1481") List<Expression> ignored : 
actualExpressions) {
+
+    List<List<Expression>> splitExpressions = new ArrayList<>();
+    for (List<Expression> actualExpression : actualExpressions) {
       if (offset != 0) {
         --offset;
+        continue;
       } else if (limit != 0) {
         --limit;
       } else {
         break;
       }
+      splitExpressions.add(actualExpression);
     }
-    return actualExpressions;
+    consumed += actualExpressions.size();
+    return splitExpressions;
   }
 
   /** @return should break the loop or not */

Reply via email to