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/07/26 14:33:13 UTC

[iotdb] 02/02: add IT & bug fix

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

hui pushed a commit to branch lmh/FixGroupByLevelHeader
in repository https://gitbox.apache.org/repos/asf/iotdb.git

commit 3e6cdaf48a0bd1191dedc1bf33e3185915bfe33b
Author: Minghui Liu <li...@foxmail.com>
AuthorDate: Tue Jul 26 22:32:48 2022 +0800

    add IT & bug fix
---
 .../java/org/apache/iotdb/db/it/query/IoTDBAliasIT.java  |  8 ++++----
 .../db/mpp/plan/analyze/GroupByLevelController.java      | 16 +++++++++++++---
 2 files changed, 17 insertions(+), 7 deletions(-)

diff --git a/integration-test/src/test/java/org/apache/iotdb/db/it/query/IoTDBAliasIT.java b/integration-test/src/test/java/org/apache/iotdb/db/it/query/IoTDBAliasIT.java
index 68b988c11c..21bc7371bd 100644
--- a/integration-test/src/test/java/org/apache/iotdb/db/it/query/IoTDBAliasIT.java
+++ b/integration-test/src/test/java/org/apache/iotdb/db/it/query/IoTDBAliasIT.java
@@ -388,23 +388,23 @@ public class IoTDBAliasIT {
   public void aggregationFuncNameTest() {
     String expectedHeader =
         "count(root.sg.d1.temperature),count(root.sg.d2.temperature),"
-            + "COUNT(root.sg.d1.temperature),COUNT(root.sg.d2.temperature),"
+            + "COUNT(root.sg.d1.s2),COUNT(root.sg.d2.s2),"
             + "CoUnT(root.sg.d1.temperature),CoUnT(root.sg.d2.temperature),";
     String[] retArray = new String[] {"4,4,4,4,4,4,"};
 
     resultSetEqualTest(
-        "select count(temperature),COUNT(temperature),CoUnT(temperature) from root.sg.*",
+        "select count(temperature),COUNT(s2),CoUnT(temperature) from root.sg.*",
         expectedHeader,
         retArray);
   }
 
   @Test
   public void groupByLevelFuncNameTest() {
-    String expectedHeader = "count(root.sg.*.s2),COUNT(root.sg.*.s2),CoUnT(root.sg.*.s2),";
+    String expectedHeader = "count(root.sg.*.s2),COUNT(root.sg.*.temperature),CoUnT(root.sg.*.s2),";
     String[] retArray = new String[] {"8,8,8,"};
 
     resultSetEqualTest(
-        "select count(s2),COUNT(s2),CoUnT(s2) from root.sg.* group by level = 1",
+        "select count(s2),COUNT(temperature),CoUnT(s2) from root.sg.* group by level = 1",
         expectedHeader,
         retArray);
   }
diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/plan/analyze/GroupByLevelController.java b/server/src/main/java/org/apache/iotdb/db/mpp/plan/analyze/GroupByLevelController.java
index a583805e33..4f8da81f15 100644
--- a/server/src/main/java/org/apache/iotdb/db/mpp/plan/analyze/GroupByLevelController.java
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/plan/analyze/GroupByLevelController.java
@@ -23,6 +23,7 @@ import org.apache.iotdb.commons.conf.IoTDBConstant;
 import org.apache.iotdb.commons.path.PartialPath;
 import org.apache.iotdb.db.exception.sql.SemanticException;
 import org.apache.iotdb.db.exception.sql.StatementAnalyzeException;
+import org.apache.iotdb.db.metadata.path.MeasurementPath;
 import org.apache.iotdb.db.mpp.plan.expression.Expression;
 import org.apache.iotdb.db.mpp.plan.expression.leaf.TimeSeriesOperand;
 import org.apache.iotdb.db.mpp.plan.expression.multi.FunctionExpression;
@@ -81,7 +82,7 @@ public class GroupByLevelController {
     }
 
     PartialPath rawPath = ((TimeSeriesOperand) expression.getExpressions().get(0)).getPath();
-    PartialPath groupedPath = generatePartialPathByLevel(isCountStar, rawPath.getNodes(), levels);
+    PartialPath groupedPath = generatePartialPathByLevel(isCountStar, rawPath, levels);
 
     checkDatatypeConsistency(
         groupedPath.getFullPath(), ((FunctionExpression) expression).getFunctionName(), rawPath);
@@ -179,7 +180,8 @@ public class GroupByLevelController {
    * @return result partial path
    */
   public PartialPath generatePartialPathByLevel(
-      boolean isCountStar, String[] nodes, int[] pathLevels) {
+      boolean isCountStar, PartialPath rawPath, int[] pathLevels) {
+    String[] nodes = rawPath.getNodes();
     Set<Integer> levelSet = new HashSet<>();
     for (int level : pathLevels) {
       levelSet.add(level);
@@ -200,7 +202,15 @@ public class GroupByLevelController {
     } else {
       transformedNodes.add(nodes[nodes.length - 1]);
     }
-    return new PartialPath(transformedNodes.toArray(new String[0]));
+
+    MeasurementPath groupedPath =
+        new MeasurementPath(
+            new PartialPath(transformedNodes.toArray(new String[0])),
+            ((MeasurementPath) rawPath).getMeasurementSchema());
+    if (rawPath.isMeasurementAliasExists()) {
+      groupedPath.setMeasurementAlias(rawPath.getMeasurementAlias());
+    }
+    return groupedPath;
   }
 
   public Map<Expression, Set<Expression>> getGroupedPathMap() {