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 <[email protected]>
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());
         }

Reply via email to