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()); }
