This is an automated email from the ASF dual-hosted git repository.
xingtanzjr pushed a commit to branch rel/1.2
in repository https://gitbox.apache.org/repos/asf/iotdb.git
The following commit(s) were added to refs/heads/rel/1.2 by this push:
new cf930cbfb9b Revert "[To rel/1.2][IOTDB-5983] Refactor error info in
GROUP BY/ORDER BY in align by device" (#10218)
cf930cbfb9b is described below
commit cf930cbfb9b217d689b020d418ed6b0d5487530b
Author: Zhang.Jinrui <[email protected]>
AuthorDate: Tue Jun 20 00:28:59 2023 +0800
Revert "[To rel/1.2][IOTDB-5983] Refactor error info in GROUP BY/ORDER BY
in align by device" (#10218)
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());
}