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(