You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by hu...@apache.org on 2022/10/26 11:01:18 UTC
[iotdb] 01/01: tmp save
This is an automated email from the ASF dual-hosted git repository.
hui pushed a commit to branch lmh/cqTest
in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit cef53aa2e230bb0128dcbdfb0577d5c27bb645af
Author: Minghui Liu <li...@foxmail.com>
AuthorDate: Wed Oct 26 19:00:55 2022 +0800
tmp save
---
.../org/apache/iotdb/db/it/cq/IoTDBCQExecIT.java | 22 ++++----
.../java/org/apache/iotdb/db/it/cq/IoTDBCQIT.java | 64 ++++++++++++++--------
.../iotdb/db/mpp/plan/parser/ASTVisitor.java | 10 ++++
.../metadata/CreateContinuousQueryStatement.java | 4 +-
4 files changed, 62 insertions(+), 38 deletions(-)
diff --git a/integration-test/src/test/java/org/apache/iotdb/db/it/cq/IoTDBCQExecIT.java b/integration-test/src/test/java/org/apache/iotdb/db/it/cq/IoTDBCQExecIT.java
index 83bb55c157..5ba25c7cf7 100644
--- a/integration-test/src/test/java/org/apache/iotdb/db/it/cq/IoTDBCQExecIT.java
+++ b/integration-test/src/test/java/org/apache/iotdb/db/it/cq/IoTDBCQExecIT.java
@@ -24,7 +24,6 @@ import org.apache.iotdb.itbase.category.ClusterIT;
import org.junit.AfterClass;
import org.junit.BeforeClass;
-import org.junit.Ignore;
import org.junit.Test;
import org.junit.experimental.categories.Category;
import org.junit.runner.RunWith;
@@ -40,7 +39,6 @@ import static org.junit.Assert.fail;
@RunWith(IoTDBTestRunner.class)
@Category(ClusterIT.class)
-@Ignore
public class IoTDBCQExecIT {
@BeforeClass
@@ -93,9 +91,9 @@ public class IoTDBCQExecIT {
statement.execute(
"CREATE CONTINUOUS QUERY cq1\n"
+ "RESAMPLE EVERY 2s\n"
- + "BBOUNDARY "
+ + "BOUNDARY "
+ firstExecutionTime
- + "BEGIN \n"
+ + " BEGIN \n"
+ " SELECT max_value(s1) \n"
+ " INTO root.sg.d1(s1_max)\n"
+ " FROM root.sg.d1\n"
@@ -171,9 +169,9 @@ public class IoTDBCQExecIT {
statement.execute(
"CREATE CONTINUOUS QUERY cq2\n"
+ "RESAMPLE RANGE 4s\n"
- + "BBOUNDARY "
+ + "BOUNDARY "
+ firstExecutionTime
- + "BEGIN \n"
+ + " BEGIN \n"
+ " SELECT max_value(s1) \n"
+ " INTO root.sg.d2(s1_max)\n"
+ " FROM root.sg.d2\n"
@@ -249,9 +247,9 @@ public class IoTDBCQExecIT {
statement.execute(
"CREATE CONTINUOUS QUERY cq3\n"
+ "RESAMPLE EVERY 20s RANGE 40s\n"
- + "BBOUNDARY "
+ + "BOUNDARY "
+ firstExecutionTime
- + "BEGIN \n"
+ + " BEGIN \n"
+ " SELECT max_value(s1) \n"
+ " INTO root.sg.d3(s1_max)\n"
+ " FROM root.sg.d3\n"
@@ -333,9 +331,9 @@ public class IoTDBCQExecIT {
statement.execute(
"CREATE CONTINUOUS QUERY cq4\n"
+ "RESAMPLE EVERY 20s RANGE 20s, 10s\n"
- + "BBOUNDARY "
+ + "BOUNDARY "
+ firstExecutionTime
- + "BEGIN \n"
+ + " BEGIN \n"
+ " SELECT max_value(s1) \n"
+ " INTO root.sg.d4(s1_max)\n"
+ " FROM root.sg.d4\n"
@@ -409,9 +407,9 @@ public class IoTDBCQExecIT {
statement.execute(
"CREATE CONTINUOUS QUERY cq5\n"
+ "RESAMPLE EVERY 2s\n"
- + "BBOUNDARY "
+ + "BOUNDARY "
+ firstExecutionTime
- + "BEGIN \n"
+ + " BEGIN \n"
+ " SELECT s1 + 1 \n"
+ " INTO root.sg.d5(precalculated_s1)\n"
+ " FROM root.sg.d5\n"
diff --git a/integration-test/src/test/java/org/apache/iotdb/db/it/cq/IoTDBCQIT.java b/integration-test/src/test/java/org/apache/iotdb/db/it/cq/IoTDBCQIT.java
index 36425c7fb3..69fdb1acc2 100644
--- a/integration-test/src/test/java/org/apache/iotdb/db/it/cq/IoTDBCQIT.java
+++ b/integration-test/src/test/java/org/apache/iotdb/db/it/cq/IoTDBCQIT.java
@@ -69,7 +69,8 @@ public class IoTDBCQIT {
fail();
} catch (Exception e) {
assertEquals(
- "CQ: Specifying time range in GROUP BY TIME clause is prohibited", e.getMessage());
+ "500: CQ: Specifying time range in GROUP BY TIME clause is prohibited.",
+ e.getMessage());
}
// 2. specify time filter in where clause
@@ -86,7 +87,8 @@ public class IoTDBCQIT {
statement.execute(sql);
fail();
} catch (Exception e) {
- assertEquals("CQ: Specifying time filters in the query body is prohibited", e.getMessage());
+ assertEquals(
+ "500: CQ: Specifying time filters in the query body is prohibited.", e.getMessage());
}
// 3. no every clause meanwhile no group by time
@@ -101,7 +103,9 @@ public class IoTDBCQIT {
statement.execute(sql);
fail();
} catch (Exception e) {
- assertEquals("hh", e.getMessage());
+ assertEquals(
+ "416: CQ: At least one of the parameters `every_interval` and `group_by_interval` needs to be specified.",
+ e.getMessage());
}
// 4. no INTO clause
@@ -116,7 +120,7 @@ public class IoTDBCQIT {
statement.execute(sql);
fail();
} catch (Exception e) {
- assertEquals("hh", e.getMessage());
+ // assertEquals("500: CQ: The query body misses an INTO clause.", e.getMessage());
}
// 5. EVERY interval is less than continuous_query_min_every_interval_in_ms in
@@ -134,7 +138,9 @@ public class IoTDBCQIT {
statement.execute(sql);
fail();
} catch (Exception e) {
- assertEquals("hh", e.getMessage());
+ assertEquals(
+ "500: CQ: Every interval [50] should not be lower than the `continuous_query_minimum_every_interval` [1000] configured.",
+ e.getMessage());
}
// 6. start_time_offset < 0
@@ -151,7 +157,8 @@ public class IoTDBCQIT {
statement.execute(sql);
fail();
} catch (Exception e) {
- assertEquals("hh", e.getMessage());
+ System.out.println(e.getMessage());
+ // assertEquals("hh", e.getMessage());
}
// 7. start_time_offset == 0
@@ -160,7 +167,7 @@ public class IoTDBCQIT {
"CREATE CQ s1_count_cq_2\n"
+ "RESAMPLE RANGE 0m\n"
+ "BEGIN \n"
- + " SELECT count(s1) \n"
+ + " SELECT count(s1)\n"
+ " INTO root.sg_count.d(count_s1)\n"
+ " FROM root.sg.d\n"
+ " GROUP BY(30m)\n"
@@ -168,7 +175,8 @@ public class IoTDBCQIT {
statement.execute(sql);
fail();
} catch (Exception e) {
- assertEquals("hh", e.getMessage());
+ System.out.println(e.getMessage());
+ // assertEquals("hh", e.getMessage());
}
// 8. end_time_offset < 0
@@ -185,7 +193,8 @@ public class IoTDBCQIT {
statement.execute(sql);
fail();
} catch (Exception e) {
- assertEquals("hh", e.getMessage());
+ System.out.println(e.getMessage());
+ // assertEquals("hh", e.getMessage());
}
// 9. end_time_offset == start_time_offset
@@ -202,7 +211,9 @@ public class IoTDBCQIT {
statement.execute(sql);
fail();
} catch (Exception e) {
- assertEquals("hh", e.getMessage());
+ assertEquals(
+ "500: CQ: The start time offset should be greater than end time offset.",
+ e.getMessage());
}
// 10. end_time_offset > start_time_offset
@@ -219,7 +230,9 @@ public class IoTDBCQIT {
statement.execute(sql);
fail();
} catch (Exception e) {
- assertEquals("hh", e.getMessage());
+ assertEquals(
+ "500: CQ: The start time offset should be greater than end time offset.",
+ e.getMessage());
}
// 11. group_by_interval > start_time_offset
@@ -228,7 +241,7 @@ public class IoTDBCQIT {
"CREATE CQ s1_count_cq_2\n"
+ "RESAMPLE RANGE 30m\n"
+ "BEGIN \n"
- + " SELECT count(s1) \n"
+ + " SELECT count(s1) \n"
+ " INTO root.sg_count.d(count_s1)\n"
+ " FROM root.sg.d\n"
+ " GROUP BY(1h)\n"
@@ -236,7 +249,8 @@ public class IoTDBCQIT {
statement.execute(sql);
fail();
} catch (Exception e) {
- assertEquals("hh", e.getMessage());
+ System.out.println(e.getMessage());
+ // assertEquals("hh", e.getMessage());
}
// 12. TIMEOUT POLICY is not BLOCKED or DISCARD
@@ -254,7 +268,9 @@ public class IoTDBCQIT {
statement.execute(sql);
fail();
} catch (Exception e) {
- assertEquals("hh", e.getMessage());
+ assertEquals(
+ "401: Error occurred while parsing SQL to physical plan: line 3:0 mismatched input 'TIMEOUT' expecting ','",
+ e.getMessage());
}
// 13. create duplicated cq
@@ -271,7 +287,7 @@ public class IoTDBCQIT {
statement.execute(sql);
fail();
} catch (Exception e) {
- assertEquals("hh", e.getMessage());
+ assertEquals("932: CQ s1_count_cq has already been created.", e.getMessage());
}
} catch (Exception e) {
@@ -415,9 +431,9 @@ public class IoTDBCQIT {
int cnt = 0;
while (resultSet.next()) {
// No need to add time column for aggregation query
- assertEquals(cqIds[cnt], resultSet.getString(0));
- assertEquals(cqSQLs[cnt], resultSet.getString(1));
- assertEquals("ACTIVE", resultSet.getString(2));
+ assertEquals(cqIds[cnt], resultSet.getString(1));
+ assertEquals(cqSQLs[cnt], resultSet.getString(2));
+ assertEquals("ACTIVE", resultSet.getString(3));
cnt++;
}
assertEquals(cqIds.length, cnt);
@@ -485,9 +501,9 @@ public class IoTDBCQIT {
int cnt = 0;
while (resultSet.next()) {
// No need to add time column for aggregation query
- assertEquals(cqIds[cnt], resultSet.getString(0));
- assertEquals(cqSQLs[cnt], resultSet.getString(1));
- assertEquals("ACTIVE", resultSet.getString(2));
+ assertEquals(cqIds[cnt], resultSet.getString(1));
+ assertEquals(cqSQLs[cnt], resultSet.getString(2));
+ assertEquals("ACTIVE", resultSet.getString(3));
cnt++;
}
assertEquals(cqIds.length, cnt);
@@ -503,9 +519,9 @@ public class IoTDBCQIT {
int cnt = 0;
while (resultSet.next()) {
// No need to add time column for aggregation query
- assertEquals(cqIds[resultIndex[cnt]], resultSet.getString(0));
- assertEquals(cqSQLs[resultIndex[cnt]], resultSet.getString(1));
- assertEquals("ACTIVE", resultSet.getString(2));
+ assertEquals(cqIds[resultIndex[cnt]], resultSet.getString(1));
+ assertEquals(cqSQLs[resultIndex[cnt]], resultSet.getString(2));
+ assertEquals("ACTIVE", resultSet.getString(3));
cnt++;
}
assertEquals(resultIndex.length, cnt);
diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/plan/parser/ASTVisitor.java b/server/src/main/java/org/apache/iotdb/db/mpp/plan/parser/ASTVisitor.java
index 4ec5e58033..350d21c429 100644
--- a/server/src/main/java/org/apache/iotdb/db/mpp/plan/parser/ASTVisitor.java
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/plan/parser/ASTVisitor.java
@@ -815,6 +815,16 @@ public class ASTVisitor extends IoTDBSqlParserBaseVisitor<Statement> {
if (ctx.resampleClause() != null) {
parseResampleClause(ctx.resampleClause(), statement);
+ } else {
+ QueryStatement queryStatement = statement.getQueryBodyStatement();
+ if (!queryStatement.isGroupByTime()) {
+ throw new SemanticException(
+ "CQ: At least one of the parameters `every_interval` and `group_by_interval` needs to be specified.");
+ }
+
+ long interval = queryStatement.getGroupByTimeComponent().getInterval();
+ statement.setEveryInterval(interval);
+ statement.setStartTimeOffset(interval);
}
if (ctx.timeoutPolicyClause() != null) {
diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/plan/statement/metadata/CreateContinuousQueryStatement.java b/server/src/main/java/org/apache/iotdb/db/mpp/plan/statement/metadata/CreateContinuousQueryStatement.java
index a3e11d0d55..d8a73a3d0c 100644
--- a/server/src/main/java/org/apache/iotdb/db/mpp/plan/statement/metadata/CreateContinuousQueryStatement.java
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/plan/statement/metadata/CreateContinuousQueryStatement.java
@@ -180,12 +180,12 @@ public class CreateContinuousQueryStatement extends Statement implements IConfig
}
if (!queryBodyStatement.isSelectInto()) {
- throw new SemanticException("CQ: The query body is missing an INTO clause.");
+ throw new SemanticException("CQ: The query body misses an INTO clause.");
}
GroupByTimeComponent groupByTimeComponent = queryBodyStatement.getGroupByTimeComponent();
if (groupByTimeComponent.getStartTime() != 0 || groupByTimeComponent.getEndTime() != 0) {
throw new SemanticException(
- "CQ: Specifying time range in GROUP BY TIME clause is prohibited");
+ "CQ: Specifying time range in GROUP BY TIME clause is prohibited.");
}
if (queryBodyStatement.getWhereCondition() != null
&& ExpressionAnalyzer.checkIfTimeFilterExist(