You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by ro...@apache.org on 2021/07/22 10:37:03 UTC

[iotdb] branch select-into updated: add tests for different kinds of queries

This is an automated email from the ASF dual-hosted git repository.

rong pushed a commit to branch select-into
in repository https://gitbox.apache.org/repos/asf/iotdb.git


The following commit(s) were added to refs/heads/select-into by this push:
     new 9067cf9  add tests for different kinds of queries
9067cf9 is described below

commit 9067cf98729c6245417327df50783b3f782974c1
Author: Steve Yurong Su <ro...@apache.org>
AuthorDate: Thu Jul 22 18:36:26 2021 +0800

    add tests for different kinds of queries
---
 .../db/qp/logical/crud/SelectIntoOperator.java     |   3 +-
 .../iotdb/db/integration/IoTDBSelectIntoIT.java    | 284 ++++++++++++---------
 2 files changed, 167 insertions(+), 120 deletions(-)

diff --git a/server/src/main/java/org/apache/iotdb/db/qp/logical/crud/SelectIntoOperator.java b/server/src/main/java/org/apache/iotdb/db/qp/logical/crud/SelectIntoOperator.java
index d9d76a5..053b921 100644
--- a/server/src/main/java/org/apache/iotdb/db/qp/logical/crud/SelectIntoOperator.java
+++ b/server/src/main/java/org/apache/iotdb/db/qp/logical/crud/SelectIntoOperator.java
@@ -71,8 +71,7 @@ public class SelectIntoOperator extends Operator {
     }
 
     if (queryOperator instanceof AggregationQueryOperator
-        && (!(queryOperator instanceof GroupByQueryOperator)
-            || !(queryOperator instanceof GroupByFillQueryOperator))) {
+        && !(queryOperator instanceof GroupByQueryOperator)) {
       throw new LogicalOperatorException("select into: aggregation queries are not supported.");
     }
 
diff --git a/server/src/test/java/org/apache/iotdb/db/integration/IoTDBSelectIntoIT.java b/server/src/test/java/org/apache/iotdb/db/integration/IoTDBSelectIntoIT.java
index e5f9401..6fa2ec6 100644
--- a/server/src/test/java/org/apache/iotdb/db/integration/IoTDBSelectIntoIT.java
+++ b/server/src/test/java/org/apache/iotdb/db/integration/IoTDBSelectIntoIT.java
@@ -137,7 +137,7 @@ public class IoTDBSelectIntoIT {
     EnvironmentUtils.cleanEnv();
   }
 
-  @Test
+  @Test // TODO: check values
   public void selectIntoSameDevice() {
     try (Statement statement =
         DriverManager.getConnection(Config.IOTDB_URL_PREFIX + "127.0.0.1:6667/", "root", "root")
@@ -145,29 +145,27 @@ public class IoTDBSelectIntoIT {
       statement.execute(
           "select s1, s2, s3, s4, s5, s6 into s7, s8, s9, s10, s11, s12 from root.sg.d1");
 
-      ResultSet resultSet =
-          statement.executeQuery("select s7, s8, s9, s10, s11, s12 from root.sg.d1");
-
-      int columnCount = resultSet.getMetaData().getColumnCount();
-      assertEquals(1 + 6, columnCount);
-
-      for (int i = 0; i < INSERTION_SQLS.length; ++i) {
-        assertTrue(resultSet.next());
-        StringBuilder stringBuilder = new StringBuilder();
-        for (int j = 0; j < 6 + 1; ++j) {
-          stringBuilder.append(resultSet.getString(j + 1)).append(',');
+      try (ResultSet resultSet =
+          statement.executeQuery("select s7, s8, s9, s10, s11, s12 from root.sg.d1")) {
+        assertEquals(1 + 6, resultSet.getMetaData().getColumnCount());
+
+        for (int i = 0; i < INSERTION_SQLS.length; ++i) {
+          assertTrue(resultSet.next());
+          StringBuilder stringBuilder = new StringBuilder();
+          for (int j = 0; j < 6 + 1; ++j) {
+            stringBuilder.append(resultSet.getString(j + 1)).append(',');
+          }
+          System.out.println(stringBuilder.toString());
         }
-        System.out.println(stringBuilder.toString());
-      }
 
-      assertFalse(resultSet.next());
-      resultSet.close();
+        assertFalse(resultSet.next());
+      }
     } catch (SQLException throwable) {
       fail(throwable.getMessage());
     }
   }
 
-  @Test
+  @Test // TODO: check values
   public void selectIntoDifferentDevices() {
     try (Statement statement =
         DriverManager.getConnection(Config.IOTDB_URL_PREFIX + "127.0.0.1:6667/", "root", "root")
@@ -175,24 +173,22 @@ public class IoTDBSelectIntoIT {
       statement.execute(
           "select s1, s2, s3, s4, s5, s6 into pre_${2}_suf.s1, pre_${2}_suf.s2, pre_${2}_suf.s3, pre_${2}_suf.s4, pre_${2}_suf.s5, pre_${2}_suf.s6 from root.sg.d1");
 
-      ResultSet resultSet =
+      try (ResultSet resultSet =
           statement.executeQuery(
-              "select pre_d1_suf.s1, pre_d1_suf.s2, pre_d1_suf.s3, pre_d1_suf.s4, pre_d1_suf.s5, pre_d1_suf.s6 from root.sg.d1");
-
-      int columnCount = resultSet.getMetaData().getColumnCount();
-      assertEquals(1 + 6, columnCount);
-
-      for (int i = 0; i < INSERTION_SQLS.length; ++i) {
-        assertTrue(resultSet.next());
-        StringBuilder stringBuilder = new StringBuilder();
-        for (int j = 0; j < 6 + 1; ++j) {
-          stringBuilder.append(resultSet.getString(j + 1)).append(',');
+              "select pre_d1_suf.s1, pre_d1_suf.s2, pre_d1_suf.s3, pre_d1_suf.s4, pre_d1_suf.s5, pre_d1_suf.s6 from root.sg.d1")) {
+        assertEquals(1 + 6, resultSet.getMetaData().getColumnCount());
+
+        for (int i = 0; i < INSERTION_SQLS.length; ++i) {
+          assertTrue(resultSet.next());
+          StringBuilder stringBuilder = new StringBuilder();
+          for (int j = 0; j < 6 + 1; ++j) {
+            stringBuilder.append(resultSet.getString(j + 1)).append(',');
+          }
+          System.out.println(stringBuilder.toString());
         }
-        System.out.println(stringBuilder.toString());
-      }
 
-      assertFalse(resultSet.next());
-      resultSet.close();
+        assertFalse(resultSet.next());
+      }
     } catch (SQLException throwable) {
       fail(throwable.getMessage());
     }
@@ -205,13 +201,11 @@ public class IoTDBSelectIntoIT {
             .createStatement()) {
       statement.execute("select empty into target from root.sg.d1");
 
-      ResultSet resultSet = statement.executeQuery("select target from root.sg.d1");
-
-      assertEquals(1, resultSet.getMetaData().getColumnCount());
-      assertFalse(resultSet.next());
-      resultSet.close();
+      try (ResultSet resultSet = statement.executeQuery("select target from root.sg.d1")) {
+        assertEquals(1, resultSet.getMetaData().getColumnCount());
+        assertFalse(resultSet.next());
+      }
     } catch (SQLException throwable) {
-      throwable.printStackTrace();
       fail(throwable.getMessage());
     }
   }
@@ -223,19 +217,144 @@ public class IoTDBSelectIntoIT {
             .createStatement()) {
       statement.execute("select s1 into root.${2}.${1}.s1 from root.sg.d1 where time>0");
 
-      ResultSet resultSet = statement.executeQuery("select sg.d1.s1, d1.sg.s1 from root");
+      try (ResultSet resultSet = statement.executeQuery("select sg.d1.s1, d1.sg.s1 from root")) {
+        assertEquals(1 + 2, resultSet.getMetaData().getColumnCount());
 
-      int columnCount = resultSet.getMetaData().getColumnCount();
-      assertEquals(1 + 2, columnCount);
+        for (int i = 0; i < INSERTION_SQLS.length - 1; ++i) {
+          assertTrue(resultSet.next());
+          assertEquals(resultSet.getString(1), String.valueOf(i + 1));
+          assertEquals(resultSet.getString(2), resultSet.getString(3));
+        }
 
-      for (int i = 0; i < INSERTION_SQLS.length - 1; ++i) {
-        assertTrue(resultSet.next());
-        assertEquals(resultSet.getString(1), String.valueOf(i + 1));
-        assertEquals(resultSet.getString(2), resultSet.getString(3));
+        assertFalse(resultSet.next());
       }
+    } catch (SQLException throwable) {
+      fail(throwable.getMessage());
+    }
+  }
 
-      assertFalse(resultSet.next());
-      resultSet.close();
+  @Test
+  public void selectSameTimeSeries() {
+    try (Statement statement =
+        DriverManager.getConnection(Config.IOTDB_URL_PREFIX + "127.0.0.1:6667/", "root", "root")
+            .createStatement()) {
+      statement.execute("select s1, s1 into s2, s3 from root.sg.d1");
+
+      try (ResultSet resultSet = statement.executeQuery("select s2, s3 from root.sg.d1")) {
+        assertEquals(1 + 2, resultSet.getMetaData().getColumnCount());
+
+        for (int i = 0; i < INSERTION_SQLS.length; ++i) {
+          assertTrue(resultSet.next());
+          for (int j = 0; j < 2 + 1; ++j) {
+            assertEquals(resultSet.getString(2), resultSet.getString(3));
+          }
+        }
+
+        assertFalse(resultSet.next());
+      }
+    } catch (SQLException throwable) {
+      fail(throwable.getMessage());
+    }
+  }
+
+  @Test
+  public void testUDFQuery() {
+    try (Statement statement =
+        DriverManager.getConnection(Config.IOTDB_URL_PREFIX + "127.0.0.1:6667/", "root", "root")
+            .createStatement()) {
+      statement.execute(
+          "select s1, sin(s1), s1 + s1 into ${2}.s2, ${2}.s3, ${2}.s4 from root.sg.d1");
+
+      try (ResultSet resultSet = statement.executeQuery("select s2, s3, s4 from root.sg.d1.d1")) {
+        assertEquals(1 + 3, resultSet.getMetaData().getColumnCount());
+
+        for (int i = 1; i < INSERTION_SQLS.length; ++i) {
+          assertTrue(resultSet.next());
+          for (int j = 0; j < 2 + 1; ++j) {
+            double s2 = Double.parseDouble(resultSet.getString(2));
+            double s3 = Double.parseDouble(resultSet.getString(3));
+            double s4 = Double.parseDouble(resultSet.getString(4));
+            assertEquals(i, s2, 0);
+            assertEquals(Math.sin(i), s3, 0);
+            assertEquals((double) i + (double) i, s4, 0);
+          }
+        }
+
+        assertFalse(resultSet.next());
+      }
+    } catch (SQLException throwable) {
+      fail(throwable.getMessage());
+    }
+  }
+
+  @Test
+  public void testGroupByQuery() {
+    try (Statement statement =
+        DriverManager.getConnection(Config.IOTDB_URL_PREFIX + "127.0.0.1:6667/", "root", "root")
+            .createStatement()) {
+      statement.execute("select count(s1) into count_s1 from root.sg.d1 group by ([1, 5),1ms);");
+
+      try (ResultSet resultSet = statement.executeQuery("select count_s1 from root.sg.d1")) {
+        assertEquals(1 + 1, resultSet.getMetaData().getColumnCount());
+
+        for (int i = 1; i < INSERTION_SQLS.length; ++i) {
+          assertTrue(resultSet.next());
+          for (int j = 0; j < 1 + 1; ++j) {
+            assertEquals(String.valueOf(i), resultSet.getString(1));
+            assertEquals("1", resultSet.getString(2));
+          }
+        }
+
+        assertFalse(resultSet.next());
+      }
+    } catch (SQLException throwable) {
+      fail(throwable.getMessage());
+    }
+  }
+
+  @Test
+  public void testGroupByFillQuery() {
+    try (Statement statement =
+        DriverManager.getConnection(Config.IOTDB_URL_PREFIX + "127.0.0.1:6667/", "root", "root")
+            .createStatement()) {
+      statement.execute(
+          "select last_value(s1) into gbf_s1 from root.sg.d1 group by ([1, 10),1ms) fill (float[PREVIOUS]);");
+
+      try (ResultSet resultSet = statement.executeQuery("select gbf_s1 from root.sg.d1")) {
+        assertEquals(1 + 1, resultSet.getMetaData().getColumnCount());
+
+        for (int i = 1; i < 10; ++i) {
+          assertTrue(resultSet.next());
+          for (int j = 0; j < 1 + 1; ++j) {
+            assertEquals(String.valueOf(i), resultSet.getString(1));
+            assertEquals(i < 5 ? String.valueOf(i) : "0", resultSet.getString(2));
+          }
+        }
+
+        assertFalse(resultSet.next());
+      }
+    } catch (SQLException throwable) {
+      fail(throwable.getMessage());
+    }
+  }
+
+  @Test
+  public void testFillQuery() {
+    try (Statement statement =
+        DriverManager.getConnection(Config.IOTDB_URL_PREFIX + "127.0.0.1:6667/", "root", "root")
+            .createStatement()) {
+      statement.execute(
+          "select s1 into fill_s1 from root.sg.d1 where time = 10 fill(float [linear, 1ms, 1ms])");
+
+      try (ResultSet resultSet = statement.executeQuery("select fill_s1 from root.sg.d1")) {
+        assertEquals(1 + 1, resultSet.getMetaData().getColumnCount());
+
+        assertTrue(resultSet.next());
+        assertEquals("10", resultSet.getString(1));
+        assertEquals("4", resultSet.getString(2));
+
+        assertFalse(resultSet.next());
+      }
     } catch (SQLException throwable) {
       fail(throwable.getMessage());
     }
@@ -304,10 +423,6 @@ public class IoTDBSelectIntoIT {
         DriverManager.getConnection(Config.IOTDB_URL_PREFIX + "127.0.0.1:6667/", "root", "root")
             .createStatement()) {
       statement.execute("select s1 into root.${100}.s1 from root.sg.d1");
-      ResultSet resultSet = statement.executeQuery("select sg.d1.s1, d1.sg.s1 from root");
-      assertEquals(1, resultSet.getMetaData().getColumnCount());
-      assertFalse(resultSet.next());
-      resultSet.close();
       fail();
     } catch (SQLException throwable) {
       assertTrue(
@@ -321,9 +436,6 @@ public class IoTDBSelectIntoIT {
         DriverManager.getConnection(Config.IOTDB_URL_PREFIX + "127.0.0.1:6667/", "root", "root")
             .createStatement()) {
       statement.execute("select s1 into root.${0}.s1 from root.sg.d1");
-      ResultSet resultSet = statement.executeQuery("select sg.d1.s1, d1.sg.s1 from root");
-      assertEquals(1, resultSet.getMetaData().getColumnCount());
-      assertFalse(resultSet.next());
       fail();
     } catch (SQLException throwable) {
       assertTrue(
@@ -405,68 +517,4 @@ public class IoTDBSelectIntoIT {
       assertTrue(throwable.getMessage().contains("desc clauses are not supported."));
     }
   }
-
-  @Test
-  public void selectSameTimeSeries() {
-    try (Statement statement =
-        DriverManager.getConnection(Config.IOTDB_URL_PREFIX + "127.0.0.1:6667/", "root", "root")
-            .createStatement()) {
-      statement.execute("select s1, s1 into s2, s3 from root.sg.d1");
-
-      ResultSet resultSet = statement.executeQuery("select s2, s3 from root.sg.d1");
-
-      int columnCount = resultSet.getMetaData().getColumnCount();
-      assertEquals(1 + 2, columnCount);
-
-      for (int i = 0; i < INSERTION_SQLS.length; ++i) {
-        assertTrue(resultSet.next());
-        StringBuilder stringBuilder = new StringBuilder();
-        for (int j = 0; j < 2 + 1; ++j) {
-          assertEquals(resultSet.getString(2), resultSet.getString(3));
-          stringBuilder.append(resultSet.getString(j + 1)).append(',');
-        }
-        System.out.println(stringBuilder.toString());
-      }
-
-      assertFalse(resultSet.next());
-      resultSet.close();
-    } catch (SQLException throwable) {
-      fail(throwable.getMessage());
-    }
-  }
-
-  @Test
-  public void testSelectUDF() {
-    try (Statement statement =
-        DriverManager.getConnection(Config.IOTDB_URL_PREFIX + "127.0.0.1:6667/", "root", "root")
-            .createStatement()) {
-      statement.execute(
-          "select s1, sin(s1), s1 + s1 into ${2}.s2, ${2}.s3, ${2}.s4 from root.sg.d1");
-
-      ResultSet resultSet = statement.executeQuery("select s2, s3, s4 from root.sg.d1.d1");
-
-      int columnCount = resultSet.getMetaData().getColumnCount();
-      assertEquals(1 + 3, columnCount);
-
-      for (int i = 1; i < INSERTION_SQLS.length; ++i) {
-        assertTrue(resultSet.next());
-        StringBuilder stringBuilder = new StringBuilder();
-        for (int j = 0; j < 2 + 1; ++j) {
-          double s2 = Double.parseDouble(resultSet.getString(2));
-          double s3 = Double.parseDouble(resultSet.getString(3));
-          double s4 = Double.parseDouble(resultSet.getString(4));
-          assertEquals(i, s2, 0);
-          assertEquals(Math.sin(i), s3, 0);
-          assertEquals((double) i + (double) i, s4, 0);
-          stringBuilder.append(resultSet.getString(j + 1)).append(',');
-        }
-        System.out.println(stringBuilder.toString());
-      }
-
-      assertFalse(resultSet.next());
-      resultSet.close();
-    } catch (SQLException throwable) {
-      fail(throwable.getMessage());
-    }
-  }
 }