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:14 UTC

[iotdb] branch lmh/FixGroupByLevel created (now 871756fd20)

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

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


      at 871756fd20 add test

This branch includes the following new commits:

     new 052d1813d6 fix group by level
     new 871756fd20 add test

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



[iotdb] 01/02: fix group by level

Posted by hu...@apache.org.
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);
     }
   }
 


[iotdb] 02/02: add test

Posted by hu...@apache.org.
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 871756fd20eb52803e3465bfa415d171e8bacce9
Author: liuminghui233 <54...@qq.com>
AuthorDate: Wed Nov 23 12:28:28 2022 +0800

    add test
---
 .../db/it/aligned/IoTDBGroupByLevelQueryIT.java    | 39 ++++++++++++++++++----
 1 file changed, 32 insertions(+), 7 deletions(-)

diff --git a/integration-test/src/test/java/org/apache/iotdb/db/it/aligned/IoTDBGroupByLevelQueryIT.java b/integration-test/src/test/java/org/apache/iotdb/db/it/aligned/IoTDBGroupByLevelQueryIT.java
index 06c25d88fa..a49168f137 100644
--- a/integration-test/src/test/java/org/apache/iotdb/db/it/aligned/IoTDBGroupByLevelQueryIT.java
+++ b/integration-test/src/test/java/org/apache/iotdb/db/it/aligned/IoTDBGroupByLevelQueryIT.java
@@ -38,6 +38,7 @@ import static org.apache.iotdb.db.it.utils.TestUtils.resultSetEqualTest;
 import static org.apache.iotdb.itbase.constant.TestConstant.NULL;
 
 @RunWith(IoTDBTestRunner.class)
+@Category({LocalStandaloneIT.class, ClusterIT.class})
 public class IoTDBGroupByLevelQueryIT {
 
   protected static boolean enableSeqSpaceCompaction;
@@ -98,7 +99,6 @@ public class IoTDBGroupByLevelQueryIT {
   }
 
   @Test
-  @Category({LocalStandaloneIT.class, ClusterIT.class})
   public void countFuncByLevelTest() {
     // level = 1
     double[][] retArray1 = new double[][] {{39, 20}};
@@ -135,7 +135,6 @@ public class IoTDBGroupByLevelQueryIT {
   }
 
   @Test
-  @Category({LocalStandaloneIT.class, ClusterIT.class})
   public void sumFuncByLevelTest() {
     // level = 1
     double[][] retArray1 = new double[][] {{131111, 510}};
@@ -169,7 +168,6 @@ public class IoTDBGroupByLevelQueryIT {
   }
 
   @Test
-  @Category({LocalStandaloneIT.class, ClusterIT.class})
   public void avgFuncByLevelTest() {
     // level = 1
     double[][] retArray1 = new double[][] {{2260.53448275862, 25.5}};
@@ -203,7 +201,6 @@ public class IoTDBGroupByLevelQueryIT {
   }
 
   @Test
-  @Category({LocalStandaloneIT.class, ClusterIT.class})
   public void timeFuncGroupByLevelTest() {
     double[][] retArray1 = new double[][] {{1, 40, 1, 30}};
     String[] columnNames1 = {
@@ -217,7 +214,6 @@ public class IoTDBGroupByLevelQueryIT {
   }
 
   @Test
-  @Category({LocalStandaloneIT.class, ClusterIT.class})
   public void valueFuncGroupByLevelTest() {
     double[][] retArray1 = new double[][] {{40, 230000, 30, 30}};
     String[] columnNames1 = {
@@ -233,7 +229,6 @@ public class IoTDBGroupByLevelQueryIT {
   }
 
   @Test
-  @Category({ClusterIT.class})
   public void nestedQueryTest1() {
     // level = 1
     double[][] retArray1 = new double[][] {{40.0, 21.0}};
@@ -255,7 +250,6 @@ public class IoTDBGroupByLevelQueryIT {
   }
 
   @Test
-  @Category({ClusterIT.class})
   public void nestedQueryTest2() {
     // level = 1
     double[][] retArray1 = new double[][] {{390423.0, 449.0, 390404.0, 430.0}};
@@ -285,4 +279,35 @@ public class IoTDBGroupByLevelQueryIT {
     resultSetEqualTest(
         "select count(s1) + sum(s1) from root.*.* group by level=3", retArray3, columnNames3);
   }
+
+  @Test
+  public void caseSensitivityTest() {
+    double[][] retArray = new double[][] {{39, 20, 39, 20, 39, 20}};
+
+    String[] columnNames1 = {
+      "count(root.sg1.*.s1)",
+      "count(root.sg2.*.s1)",
+      "COUNT(root.sg1.*.s1)",
+      "COUNT(root.sg2.*.s1)",
+      "cOuNt(root.sg1.*.s1)",
+      "cOuNt(root.sg2.*.s1)"
+    };
+    resultSetEqualTest(
+        "select count(s1), COUNT(s1), cOuNt(s1) from root.*.* group by level=1",
+        retArray,
+        columnNames1);
+
+    String[] columnNames2 = {
+      "Count(root.sg1.*.s1)",
+      "Count(root.sg2.*.s1)",
+      "COUNT(root.sg1.*.s1)",
+      "COUNT(root.sg2.*.s1)",
+      "cOuNt(root.sg1.*.s1)",
+      "cOuNt(root.sg2.*.s1)"
+    };
+    resultSetEqualTest(
+        "select Count(s1), COUNT(s1), cOuNt(s1) from root.*.* group by level=1",
+        retArray,
+        columnNames2);
+  }
 }