You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by xi...@apache.org on 2023/06/19 16:28:53 UTC

[iotdb] branch revert-10112-1.2groupByInfoAlignByDevice created (now 656158dc08b)

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

xingtanzjr pushed a change to branch revert-10112-1.2groupByInfoAlignByDevice
in repository https://gitbox.apache.org/repos/asf/iotdb.git


      at 656158dc08b Revert "[To rel/1.2][IOTDB-5983] Refactor error info in GROUP BY/ORDER BY in align by device"

This branch includes the following new commits:

     new 656158dc08b Revert "[To rel/1.2][IOTDB-5983] Refactor error info in GROUP BY/ORDER BY in align by device"

The 1 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/01: Revert "[To rel/1.2][IOTDB-5983] Refactor error info in GROUP BY/ORDER BY in align by device"

Posted by xi...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

xingtanzjr pushed a commit to branch revert-10112-1.2groupByInfoAlignByDevice
in repository https://gitbox.apache.org/repos/asf/iotdb.git

commit 656158dc08b2b5c677f4315d1ef5ed90a854944c
Author: Zhang.Jinrui <xi...@gmail.com>
AuthorDate: Tue Jun 20 00:28:49 2023 +0800

    Revert "[To rel/1.2][IOTDB-5983] Refactor error info in GROUP BY/ORDER BY in align by device"
    
    This reverts commit 9a07aee90d745009f279dd6859a47f59091b12de.
---
 .../db/it/groupby/IoTDBGroupByConditionIT.java     | 44 -------------
 .../iotdb/db/it/groupby/IoTDBGroupByCountIT.java   | 44 -------------
 .../db/it/groupby/IoTDBGroupByVariationIT.java     | 23 +------
 .../apache/iotdb/db/it/orderBy/IoTDBOrderByIT.java | 74 ++++++----------------
 .../iotdb/db/mpp/plan/analyze/AnalyzeVisitor.java  | 23 ++-----
 .../db/mpp/plan/statement/crud/QueryStatement.java | 24 +++----
 6 files changed, 39 insertions(+), 193 deletions(-)

diff --git a/integration-test/src/test/java/org/apache/iotdb/db/it/groupby/IoTDBGroupByConditionIT.java b/integration-test/src/test/java/org/apache/iotdb/db/it/groupby/IoTDBGroupByConditionIT.java
index f518749b032..fdbea94e8c9 100644
--- a/integration-test/src/test/java/org/apache/iotdb/db/it/groupby/IoTDBGroupByConditionIT.java
+++ b/integration-test/src/test/java/org/apache/iotdb/db/it/groupby/IoTDBGroupByConditionIT.java
@@ -407,48 +407,4 @@ public class IoTDBGroupByConditionIT {
       fail(e.getMessage());
     }
   }
-
-  private void errorTest(String sql, String error) {
-    try (Connection connection = EnvFactory.getEnv().getConnection();
-        Statement statement = connection.createStatement()) {
-      statement.executeQuery(sql);
-    } catch (Exception e) {
-      assertEquals(error, e.getMessage());
-    }
-  }
-
-  @Test
-  public void errorTest1() {
-    errorTest(
-        "select first_value(soc) from root.** group by condition(charging_status!=0,KEEP>2,ignoreNull=false)",
-        "701: root.**.charging_status != 0 in group by clause shouldn't refer to more than one timeseries.");
-  }
-
-  @Test
-  public void errorTest2() {
-    errorTest(
-        "select first_value(soc) from root.sg.beijing.car01 group by condition(count(charging_status)!=0,KEEP>2,ignoreNull=false)",
-        "701: Aggregation expression shouldn't exist in group by clause");
-  }
-
-  @Test
-  public void errorTest3() {
-    errorTest(
-        "select first_value(soc) from root.sg.beijing.car01 group by condition(s1!=0,KEEP>2,ignoreNull=false)",
-        "701: root.sg.beijing.car01.s1 != 0 in group by clause doesn't exist.");
-  }
-
-  @Test
-  public void errorTest4() {
-    errorTest(
-        "select first_value(soc) from root.sg.beijing.car01 group by condition(s1!=0,KEEP>2,ignoreNull=false) align by device",
-        "701: s1 != 0 in group by clause doesn't exist.");
-  }
-
-  @Test
-  public void errorTest5() {
-    errorTest(
-        "select first_value(soc) from root.sg.beijing.car01 group by condition(root.sg.beijing.car01.soc!=0,KEEP>2,ignoreNull=false) align by device",
-        "701: ALIGN BY DEVICE: the suffix paths can only be measurement or one-level wildcard");
-  }
 }
diff --git a/integration-test/src/test/java/org/apache/iotdb/db/it/groupby/IoTDBGroupByCountIT.java b/integration-test/src/test/java/org/apache/iotdb/db/it/groupby/IoTDBGroupByCountIT.java
index 92af9934da9..5b59486db72 100644
--- a/integration-test/src/test/java/org/apache/iotdb/db/it/groupby/IoTDBGroupByCountIT.java
+++ b/integration-test/src/test/java/org/apache/iotdb/db/it/groupby/IoTDBGroupByCountIT.java
@@ -411,48 +411,4 @@ public class IoTDBGroupByCountIT {
     normalTestWithAlignByDevice(res, sql, false);
     normalTestWithAlignByDevice(res, sql2, true);
   }
-
-  private void errorTest(String sql, String error) {
-    try (Connection connection = EnvFactory.getEnv().getConnection();
-        Statement statement = connection.createStatement()) {
-      statement.executeQuery(sql);
-    } catch (Exception e) {
-      assertEquals(error, e.getMessage());
-    }
-  }
-
-  @Test
-  public void errorTest1() {
-    errorTest(
-        "select count(temperature) from root.** group by count(soc, 2)",
-        "701: root.**.soc in group by clause shouldn't refer to more than one timeseries.");
-  }
-
-  @Test
-  public void errorTest2() {
-    errorTest(
-        "select count(soc) from root.sg.beijing.car01 group by count(count(soc),2)",
-        "701: Aggregation expression shouldn't exist in group by clause");
-  }
-
-  @Test
-  public void errorTest3() {
-    errorTest(
-        "select count(soc) from root.sg.beijing.car01 group by count(s1,2)",
-        "701: root.sg.beijing.car01.s1 in group by clause doesn't exist.");
-  }
-
-  @Test
-  public void errorTest4() {
-    errorTest(
-        "select count(soc) from root.sg.beijing.car01 group by count(s1,2) align by device",
-        "701: s1 in group by clause doesn't exist.");
-  }
-
-  @Test
-  public void errorTest5() {
-    errorTest(
-        "select count(soc) from root.sg.beijing.car01 group by count(root.sg.beijing.car01.soc,2) align by device",
-        "701: ALIGN BY DEVICE: the suffix paths can only be measurement or one-level wildcard");
-  }
 }
diff --git a/integration-test/src/test/java/org/apache/iotdb/db/it/groupby/IoTDBGroupByVariationIT.java b/integration-test/src/test/java/org/apache/iotdb/db/it/groupby/IoTDBGroupByVariationIT.java
index 090dfcaefca..ffc7b5d703f 100644
--- a/integration-test/src/test/java/org/apache/iotdb/db/it/groupby/IoTDBGroupByVariationIT.java
+++ b/integration-test/src/test/java/org/apache/iotdb/db/it/groupby/IoTDBGroupByVariationIT.java
@@ -486,7 +486,7 @@ public class IoTDBGroupByVariationIT {
   public void errorTest1() {
     errorTest(
         "select avg(temperature) from root.ln.wf01.wt01 group by variation(*)",
-        "701: root.ln.wf01.wt01.* in group by clause shouldn't refer to more than one timeseries.");
+        "701: Expression in group by should indicate one value");
   }
 
   @Test
@@ -496,27 +496,6 @@ public class IoTDBGroupByVariationIT {
         "701: Aggregation expression shouldn't exist in group by clause");
   }
 
-  @Test
-  public void errorTest3() {
-    errorTest(
-        "select avg(temperature) from root.ln.wf01.wt01 group by variation(s1,2)",
-        "701: root.ln.wf01.wt01.s1 in group by clause doesn't exist.");
-  }
-
-  @Test
-  public void errorTest4() {
-    errorTest(
-        "select avg(temperature) from root.ln.wf01.wt01 group by variation(s1,2) align by device",
-        "701: s1 in group by clause doesn't exist.");
-  }
-
-  @Test
-  public void errorTest5() {
-    errorTest(
-        "select avg(temperature) from root.ln.wf01.wt01 group by variation(root.ln.wf01.wt01.s1,2) align by device",
-        "701: ALIGN BY DEVICE: the suffix paths can only be measurement or one-level wildcard");
-  }
-
   @Test
   public void groupByVariationWithDoubleTest() {
     String[][] res =
diff --git a/integration-test/src/test/java/org/apache/iotdb/db/it/orderBy/IoTDBOrderByIT.java b/integration-test/src/test/java/org/apache/iotdb/db/it/orderBy/IoTDBOrderByIT.java
index 454879aea90..762b0bb1203 100644
--- a/integration-test/src/test/java/org/apache/iotdb/db/it/orderBy/IoTDBOrderByIT.java
+++ b/integration-test/src/test/java/org/apache/iotdb/db/it/orderBy/IoTDBOrderByIT.java
@@ -1224,62 +1224,30 @@ public class IoTDBOrderByIT {
     orderByUDFTest(sql, ans);
   }
 
-  private void errorTest(String sql, String error) {
+  @Test
+  public void errorTest1() {
+    String sql = "select num from root.sg.d order by avg(bigNum)";
     try (Connection connection = EnvFactory.getEnv().getConnection();
         Statement statement = connection.createStatement()) {
-      statement.executeQuery(sql);
+      try (ResultSet resultSet = statement.executeQuery(sql)) {
+        fail();
+      }
     } catch (Exception e) {
-      assertEquals(error, e.getMessage());
+      assertEquals("701: Raw data and aggregation hybrid query is not supported.", e.getMessage());
     }
   }
 
-  @Test
-  public void errorTest1() {
-    errorTest(
-        "select num from root.sg.d order by avg(bigNum)",
-        "701: Raw data and aggregation hybrid query is not supported.");
-  }
-
   @Test
   public void errorTest2() {
-    errorTest(
-        "select avg(num) from root.sg.d order by bigNum",
-        "701: Raw data and aggregation hybrid query is not supported.");
-  }
-
-  @Test
-  public void errorTest3() {
-    errorTest(
-        "select bigNum,floatNum from root.sg.d order by s1",
-        "701: root.sg.d.s1 in order by clause doesn't exist.");
-  }
-
-  @Test
-  public void errorTest4() {
-    errorTest(
-        "select bigNum,floatNum from root.** order by bigNum",
-        "701: root.**.bigNum in order by clause shouldn't refer to more than one timeseries.");
-  }
-
-  @Test
-  public void errorTest5() {
-    errorTest(
-        "select bigNum,floatNum from root.** order by s1 align by device",
-        "701: s1 in order by clause doesn't exist.");
-  }
-
-  @Test
-  public void errorTest6() {
-    errorTest(
-        "select bigNum,floatNum from root.** order by root.sg.d.bigNum align by device",
-        "701: ALIGN BY DEVICE: the suffix paths can only be measurement or one-level wildcard");
-  }
-
-  @Test
-  public void errorTest7() {
-    errorTest(
-        "select last bigNum,floatNum from root.** order by root.sg.d.bigNum",
-        "701: root.sg.d.bigNum in order by clause doesn't exist in the result of last query.");
+    String sql = "select avg(num) from root.sg.d order by bigNum";
+    try (Connection connection = EnvFactory.getEnv().getConnection();
+        Statement statement = connection.createStatement()) {
+      try (ResultSet resultSet = statement.executeQuery(sql)) {
+        fail();
+      }
+    } catch (Exception e) {
+      assertEquals("701: Raw data and aggregation hybrid query is not supported.", e.getMessage());
+    }
   }
 
   // last query
@@ -1311,7 +1279,7 @@ public class IoTDBOrderByIT {
 
   @Test
   public void lastQueryOrderBy() {
-    String[][] ans =
+    String ans[][] =
         new String[][] {
           {"51536000000", "51536000000", "51536000000", "51536000000"},
           {"root.sg.d.num", "root.sg.d2.num", "root.sg.d.bigNum", "root.sg.d2.bigNum"},
@@ -1324,7 +1292,7 @@ public class IoTDBOrderByIT {
 
   @Test
   public void lastQueryOrderBy2() {
-    String[][] ans =
+    String ans[][] =
         new String[][] {
           {"51536000000", "51536000000", "51536000000", "51536000000"},
           {"root.sg.d2.num", "root.sg.d2.bigNum", "root.sg.d.num", "root.sg.d.bigNum"},
@@ -1337,7 +1305,7 @@ public class IoTDBOrderByIT {
 
   @Test
   public void lastQueryOrderBy3() {
-    String[][] ans =
+    String ans[][] =
         new String[][] {
           {"51536000000", "51536000000", "51536000000", "51536000000"},
           {"root.sg.d2.num", "root.sg.d2.bigNum", "root.sg.d.num", "root.sg.d.bigNum"},
@@ -1350,7 +1318,7 @@ public class IoTDBOrderByIT {
 
   @Test
   public void lastQueryOrderBy4() {
-    String[][] ans =
+    String ans[][] =
         new String[][] {
           {"51536000000", "51536000000", "51536000000", "51536000000"},
           {"root.sg.d2.num", "root.sg.d.num", "root.sg.d2.bigNum", "root.sg.d.bigNum"},
@@ -1363,7 +1331,7 @@ public class IoTDBOrderByIT {
 
   @Test
   public void lastQueryOrderBy5() {
-    String[][] ans =
+    String ans[][] =
         new String[][] {
           {"51536000000", "51536000000", "51536000000", "51536000000"},
           {"root.sg.d2.num", "root.sg.d.num", "root.sg.d2.bigNum", "root.sg.d.bigNum"},
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 1077f471912..94d6e0a483b 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
@@ -1350,15 +1350,8 @@ public class AnalyzeVisitor extends StatementVisitor<Analysis, MPPQueryContext>
             ExpressionAnalyzer.concatDeviceAndBindSchemaForExpression(
                 expression, device, schemaTree);
 
-        if (groupByExpressionsOfOneDevice.size() == 0) {
-          throw new SemanticException(
-              String.format("%s in group by clause doesn't exist.", expression));
-        }
-        if (groupByExpressionsOfOneDevice.size() > 1) {
-          throw new SemanticException(
-              String.format(
-                  "%s in group by clause shouldn't refer to more than one timeseries.",
-                  expression));
+        if (groupByExpressionsOfOneDevice.size() != 1) {
+          throw new SemanticException("Expression in group by should indicate one value");
         }
         Expression groupByExpressionOfOneDevice = groupByExpressionsOfOneDevice.get(0);
 
@@ -1479,16 +1472,8 @@ public class AnalyzeVisitor extends StatementVisitor<Analysis, MPPQueryContext>
       // Expression in group by variation clause only indicates one column
       List<Expression> expressions =
           ExpressionAnalyzer.bindSchemaForExpression(groupByExpression, schemaTree);
-      if (expressions.size() == 0) {
-        throw new SemanticException(
-            String.format(
-                "%s in group by clause doesn't exist.", groupByExpression.getExpressionString()));
-      }
-      if (expressions.size() > 1) {
-        throw new SemanticException(
-            String.format(
-                "%s in group by clause shouldn't refer to more than one timeseries.",
-                groupByExpression.getExpressionString()));
+      if (expressions.size() != 1) {
+        throw new SemanticException("Expression in group by should indicate one value");
       }
       // Aggregation expression shouldn't exist in group by clause.
       List<Expression> aggregationExpression =
diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/plan/statement/crud/QueryStatement.java b/server/src/main/java/org/apache/iotdb/db/mpp/plan/statement/crud/QueryStatement.java
index 2f22bff1549..3b7fe31c517 100644
--- a/server/src/main/java/org/apache/iotdb/db/mpp/plan/statement/crud/QueryStatement.java
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/plan/statement/crud/QueryStatement.java
@@ -223,6 +223,10 @@ public class QueryStatement extends Statement {
     this.orderByComponent = orderByComponent;
   }
 
+  public ResultSetFormat getResultSetFormat() {
+    return resultSetFormat;
+  }
+
   public void setResultSetFormat(ResultSetFormat resultSetFormat) {
     this.resultSetFormat = resultSetFormat;
   }
@@ -307,7 +311,9 @@ public class QueryStatement extends Statement {
 
   private boolean hasAggregationFunction(Expression expression) {
     if (expression instanceof FunctionExpression) {
-      return expression.isBuiltInAggregationFunctionExpression();
+      if (!expression.isBuiltInAggregationFunctionExpression()) {
+        return false;
+      }
     } else {
       if (expression instanceof TimeSeriesOperand) {
         return false;
@@ -329,6 +335,10 @@ public class QueryStatement extends Statement {
     return !getExpressionSortItemList().isEmpty();
   }
 
+  public boolean isAlignByTime() {
+    return resultSetFormat == ResultSetFormat.ALIGN_BY_TIME;
+  }
+
   public boolean isAlignByDevice() {
     return resultSetFormat == ResultSetFormat.ALIGN_BY_DEVICE;
   }
@@ -421,7 +431,8 @@ public class QueryStatement extends Statement {
     List<SortItem> sortItems = getSortItemList();
     List<SortItem> newSortItems = new ArrayList<>();
     int expressionIndex = 0;
-    for (SortItem sortItem : sortItems) {
+    for (int i = 0; i < sortItems.size(); i++) {
+      SortItem sortItem = sortItems.get(i);
       SortItem newSortItem =
           new SortItem(sortItem.getSortKey(), sortItem.getOrdering(), sortItem.getNullOrdering());
       if (sortItem.isExpression()) {
@@ -564,15 +575,6 @@ public class QueryStatement extends Statement {
         for (ResultColumn resultColumn : selectComponent.getResultColumns()) {
           ExpressionAnalyzer.checkIsAllMeasurement(resultColumn.getExpression());
         }
-        if (hasGroupByExpression()) {
-          ExpressionAnalyzer.checkIsAllMeasurement(
-              getGroupByComponent().getControlColumnExpression());
-        }
-        if (hasOrderByExpression()) {
-          for (Expression expression : getExpressionSortItemList()) {
-            ExpressionAnalyzer.checkIsAllMeasurement(expression);
-          }
-        }
         if (getWhereCondition() != null) {
           ExpressionAnalyzer.checkIsAllMeasurement(getWhereCondition().getPredicate());
         }