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 2021/04/15 11:11:34 UTC
[iotdb] 01/01: Fix iotdb1303 to rel/0.12
This is an automated email from the ASF dual-hosted git repository.
xiangweiwei pushed a commit to branch iotdb1303To0.12
in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit a0aae042ec9ddf16e539b928d34f6374b80df361
Author: Alima777 <wx...@gmail.com>
AuthorDate: Thu Apr 15 19:11:04 2021 +0800
Fix iotdb1303 to rel/0.12
---
.../apache/iotdb/db/qp/sql/IoTDBSqlVisitor.java | 9 +++++++++
.../iotdb/db/integration/IOTDBGroupByIT.java | 19 +++++++++++++++++++
.../iotdb/db/integration/IoTDBGroupByFillIT.java | 22 ++++++++++++++++++++++
.../aggregation/IoTDBAggregationByLevelIT.java | 19 +++++++++++++++++++
4 files changed, 69 insertions(+)
diff --git a/server/src/main/java/org/apache/iotdb/db/qp/sql/IoTDBSqlVisitor.java b/server/src/main/java/org/apache/iotdb/db/qp/sql/IoTDBSqlVisitor.java
index cfd923b..62f12d9 100644
--- a/server/src/main/java/org/apache/iotdb/db/qp/sql/IoTDBSqlVisitor.java
+++ b/server/src/main/java/org/apache/iotdb/db/qp/sql/IoTDBSqlVisitor.java
@@ -1337,6 +1337,9 @@ public class IoTDBSqlVisitor extends SqlBaseBaseVisitor<Operator> {
}
public void parseGroupByLevelClause(GroupByLevelClauseContext ctx, QueryOperator queryOp) {
+ if (queryOp.getSelectOperator().getAggregations().isEmpty()) {
+ throw new SQLParserException("There is no aggregation function with group by query");
+ }
queryOp.setGroupByLevel(true);
queryOp.setLevel(Integer.parseInt(ctx.INT().getText()));
}
@@ -1428,6 +1431,9 @@ public class IoTDBSqlVisitor extends SqlBaseBaseVisitor<Operator> {
}
private void parseGroupByTimeClause(GroupByTimeClauseContext ctx, QueryOperator queryOp) {
+ if (queryOp.getSelectOperator().getAggregations().isEmpty()) {
+ throw new SQLParserException("There is no aggregation function with group by query");
+ }
queryOp.setGroupByTime(true);
queryOp.setLeftCRightO(ctx.timeInterval().LS_BRACKET() != null);
// parse timeUnit
@@ -1453,6 +1459,9 @@ public class IoTDBSqlVisitor extends SqlBaseBaseVisitor<Operator> {
}
private void parseGroupByFillClause(GroupByFillClauseContext ctx, QueryOperator queryOp) {
+ if (queryOp.getSelectOperator().getAggregations().isEmpty()) {
+ throw new SQLParserException("There is no aggregation function with group by query");
+ }
queryOp.setGroupByTime(true);
queryOp.setFill(true);
queryOp.setLeftCRightO(ctx.timeInterval().LS_BRACKET() != null);
diff --git a/server/src/test/java/org/apache/iotdb/db/integration/IOTDBGroupByIT.java b/server/src/test/java/org/apache/iotdb/db/integration/IOTDBGroupByIT.java
index 3d16ddf..c1f8779 100644
--- a/server/src/test/java/org/apache/iotdb/db/integration/IOTDBGroupByIT.java
+++ b/server/src/test/java/org/apache/iotdb/db/integration/IOTDBGroupByIT.java
@@ -931,6 +931,25 @@ public class IOTDBGroupByIT {
}
}
+ /**
+ * Test group by without aggregation function used in select clause. The expected situation is
+ * throwing an exception.
+ */
+ @Test
+ public void TestGroupByWithoutAggregationFunc() {
+ try (Connection connection =
+ DriverManager.getConnection("jdbc:iotdb://127.0.0.1:6667/", "root", "root");
+ Statement statement = connection.createStatement()) {
+
+ statement.execute("select temperature from root.ln.wf01.wt01 group by ([0, 100), 5ms)");
+
+ fail("No expected exception thrown");
+ } catch (Exception e) {
+ Assert.assertTrue(
+ e.getMessage().contains("There is no aggregation function with group by query"));
+ }
+ }
+
private void prepareData() {
try (Connection connection =
DriverManager.getConnection(
diff --git a/server/src/test/java/org/apache/iotdb/db/integration/IoTDBGroupByFillIT.java b/server/src/test/java/org/apache/iotdb/db/integration/IoTDBGroupByFillIT.java
index 0257e0b..ba0e7c5 100644
--- a/server/src/test/java/org/apache/iotdb/db/integration/IoTDBGroupByFillIT.java
+++ b/server/src/test/java/org/apache/iotdb/db/integration/IoTDBGroupByFillIT.java
@@ -24,6 +24,7 @@ import org.apache.iotdb.jdbc.Config;
import org.apache.iotdb.jdbc.IoTDBSQLException;
import org.junit.After;
+import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
@@ -811,6 +812,27 @@ public class IoTDBGroupByFillIT {
}
}
+ /**
+ * Test group by fill without aggregation function used in select clause. The expected situation
+ * is throwing an exception.
+ */
+ @Test
+ public void TestGroupByFillWithoutAggregationFunc() {
+ try (Connection connection =
+ DriverManager.getConnection("jdbc:iotdb://127.0.0.1:6667/", "root", "root");
+ Statement statement = connection.createStatement()) {
+
+ statement.execute(
+ "select temperature from root.ln.wf01.wt01 "
+ + "group by ([0, 100), 5ms) FILL(int32[previous])");
+
+ fail("No expected exception thrown");
+ } catch (Exception e) {
+ Assert.assertTrue(
+ e.getMessage().contains("There is no aggregation function with group by query"));
+ }
+ }
+
private void prepareData() {
try (Connection connection =
DriverManager.getConnection(
diff --git a/server/src/test/java/org/apache/iotdb/db/integration/aggregation/IoTDBAggregationByLevelIT.java b/server/src/test/java/org/apache/iotdb/db/integration/aggregation/IoTDBAggregationByLevelIT.java
index c1a7e14..a374612 100644
--- a/server/src/test/java/org/apache/iotdb/db/integration/aggregation/IoTDBAggregationByLevelIT.java
+++ b/server/src/test/java/org/apache/iotdb/db/integration/aggregation/IoTDBAggregationByLevelIT.java
@@ -322,6 +322,25 @@ public class IoTDBAggregationByLevelIT {
}
}
+ /**
+ * Test group by level without aggregation function used in select clause. The expected situation
+ * is throwing an exception.
+ */
+ @Test
+ public void TestGroupByLevelWithoutAggregationFunc() {
+ try (Connection connection =
+ DriverManager.getConnection("jdbc:iotdb://127.0.0.1:6667/", "root", "root");
+ Statement statement = connection.createStatement()) {
+
+ statement.execute("select temperature from root.sg1.* group by level = 2");
+
+ Assert.fail("No expected exception thrown");
+ } catch (Exception e) {
+ Assert.assertTrue(
+ e.getMessage().contains("There is no aggregation function with group by query"));
+ }
+ }
+
private void prepareData() {
try (Connection connection =
DriverManager.getConnection(