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

commit 7987fa536a660124474240def356fd8de97a4a10
Author: Steve Yurong Su <[email protected]>
AuthorDate: Wed Jul 21 17:18:27 2021 +0800

    add tests
---
 .../db/qp/logical/crud/SelectIntoOperator.java     |   4 -
 .../iotdb/db/integration/IoTDBSelectIntoIT.java    | 181 +++++++++++++++++++--
 2 files changed, 169 insertions(+), 16 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 7349a17..1303145 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
@@ -70,8 +70,4 @@ public class SelectIntoOperator extends Operator {
   public void setIntoPaths(List<PartialPath> intoPaths) {
     this.intoPaths = intoPaths;
   }
-
-  public List<PartialPath> getIntoPaths() {
-    return intoPaths;
-  }
 }
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 51d9661..5ef1d23 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
@@ -40,12 +40,12 @@ import java.sql.Statement;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
 
+// TODO: check null values
 public class IoTDBSelectIntoIT {
 
-  private static final double E = 0.0001;
-
   private static final String[] INSERTION_SQLS = {
     "insert into root.sg.d1(time, s2, s3, s4, s5, s6) values (0, 0, 0, 0, 
true, '0')",
     "insert into root.sg.d1(time, s1, s3, s4, s5, s6) values (1, 1, 1, 1, 
false, '1')",
@@ -64,6 +64,7 @@ public class IoTDBSelectIntoIT {
 
   private static void createTimeSeries() throws MetadataException {
     IoTDB.metaManager.setStorageGroup(new PartialPath("root.sg"));
+
     IoTDB.metaManager.createTimeseries(
         new PartialPath("root.sg.d1.s1"),
         TSDataType.INT32,
@@ -100,6 +101,20 @@ public class IoTDBSelectIntoIT {
         TSEncoding.PLAIN,
         CompressionType.UNCOMPRESSED,
         null);
+
+    IoTDB.metaManager.createTimeseries(
+        new PartialPath("root.sg.d1.empty"),
+        TSDataType.TEXT,
+        TSEncoding.PLAIN,
+        CompressionType.UNCOMPRESSED,
+        null);
+
+    IoTDB.metaManager.createTimeseries(
+        new PartialPath("root.sg.d2.s1"),
+        TSDataType.INT32,
+        TSEncoding.PLAIN,
+        CompressionType.UNCOMPRESSED,
+        null);
   }
 
   private static void generateData() {
@@ -110,6 +125,8 @@ public class IoTDBSelectIntoIT {
       for (String dataGenerationSql : INSERTION_SQLS) {
         statement.execute(dataGenerationSql);
       }
+
+      statement.execute("insert into root.sg.d2(time, s1) values (0, 0)");
     } catch (SQLException throwable) {
       fail(throwable.getMessage());
     }
@@ -135,7 +152,7 @@ public class IoTDBSelectIntoIT {
       assertEquals(1 + 6, columnCount);
 
       for (int i = 0; i < INSERTION_SQLS.length; ++i) {
-        resultSet.next();
+        assertTrue(resultSet.next());
         StringBuilder stringBuilder = new StringBuilder();
         for (int j = 0; j < 6 + 1; ++j) {
           stringBuilder.append(resultSet.getString(j + 1)).append(',');
@@ -155,16 +172,17 @@ public class IoTDBSelectIntoIT {
         DriverManager.getConnection(Config.IOTDB_URL_PREFIX + 
"127.0.0.1:6667/", "root", "root")
             .createStatement()) {
       statement.execute(
-          "select s1, s2, s3, s4, s5, s6 into s1.${2}, s2.${2}, s3.${2}, 
s4.${2}, s5.${2}, s6.${2} from root.sg.d1");
+          "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 =
-          statement.executeQuery("select s1.d1, s2.d1, s3.d1, s4.d1, s5.d1, 
s6.d1 from root.sg.d1");
+          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) {
-        resultSet.next();
+        assertTrue(resultSet.next());
         StringBuilder stringBuilder = new StringBuilder();
         for (int j = 0; j < 6 + 1; ++j) {
           stringBuilder.append(resultSet.getString(j + 1)).append(',');
@@ -178,10 +196,149 @@ public class IoTDBSelectIntoIT {
       fail(throwable.getMessage());
     }
   }
-}
 
-// usage limit: select columns, into columns, from columns
-// grammar of into clause (wrong cases and right cases)
-// supported query
-// cluster mode test
-// cq uses select-into plan
+  @Test
+  public void selectFromEmptySourcePath() {
+    try (Statement statement =
+        DriverManager.getConnection(Config.IOTDB_URL_PREFIX + 
"127.0.0.1:6667/", "root", "root")
+            .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());
+    } catch (SQLException throwable) {
+      throwable.printStackTrace();
+      fail(throwable.getMessage());
+    }
+  }
+
+  @Test
+  public void selectIntoFullTargetPath() {
+    try (Statement statement =
+        DriverManager.getConnection(Config.IOTDB_URL_PREFIX + 
"127.0.0.1:6667/", "root", "root")
+            .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");
+
+      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));
+      }
+
+      assertFalse(resultSet.next());
+    } catch (SQLException throwable) {
+      fail(throwable.getMessage());
+    }
+  }
+
+  @Test
+  public void testDifferentNumbersOfSourcePathsAndTargetPaths() {
+    try (Statement statement =
+        DriverManager.getConnection(Config.IOTDB_URL_PREFIX + 
"127.0.0.1:6667/", "root", "root")
+            .createStatement()) {
+      statement.execute("select s1, s2 into target from root.sg.d1");
+      fail();
+    } catch (SQLException throwable) {
+      assertTrue(
+          throwable
+              .getMessage()
+              .contains(
+                  "the number of source paths and the number of target paths 
should be the same"));
+    }
+
+    try (Statement statement =
+        DriverManager.getConnection(Config.IOTDB_URL_PREFIX + 
"127.0.0.1:6667/", "root", "root")
+            .createStatement()) {
+      statement.execute("select s1 into target from root.sg.*");
+      fail();
+    } catch (SQLException throwable) {
+      assertTrue(
+          throwable
+              .getMessage()
+              .contains(
+                  "the number of source paths and the number of target paths 
should be the same"));
+    }
+
+    try (Statement statement =
+        DriverManager.getConnection(Config.IOTDB_URL_PREFIX + 
"127.0.0.1:6667/", "root", "root")
+            .createStatement()) {
+      statement.execute("select * into target from root.sg.d1");
+      fail();
+    } catch (SQLException throwable) {
+      assertTrue(
+          throwable
+              .getMessage()
+              .contains(
+                  "the number of source paths and the number of target paths 
should be the same"));
+    }
+  }
+
+  @Test
+  public void testMultiPrefixPathsInFromClause() {
+    try (Statement statement =
+        DriverManager.getConnection(Config.IOTDB_URL_PREFIX + 
"127.0.0.1:6667/", "root", "root")
+            .createStatement()) {
+      statement.execute("select s1 into target from root.sg.d1, root.sg.d2");
+      fail();
+    } catch (SQLException throwable) {
+      assertTrue(
+          throwable
+              .getMessage()
+              .contains("the number of prefix paths in the from clause should 
be 1"));
+    }
+  }
+
+  @Test
+  public void testLeveledPathNodePatternLimit() {
+    try (Statement statement =
+        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());
+      fail();
+    } catch (SQLException throwable) {
+      assertTrue(
+          throwable
+              .getMessage()
+              .contains(
+                  "the x of ${x} should be greater than 0 and equal to or less 
than <level> or the length of queried path prefix."));
+    }
+
+    try (Statement statement =
+        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(
+          throwable
+              .getMessage()
+              .contains(
+                  "the x of ${x} should be greater than 0 and equal to or less 
than <level> or the length of queried path prefix."));
+    }
+
+    try (Statement statement =
+        DriverManager.getConnection(Config.IOTDB_URL_PREFIX + 
"127.0.0.1:6667/", "root", "root")
+            .createStatement()) {
+      statement.execute("select s1 into root.${wrong}.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(throwable.getMessage().contains("the x of ${x} should be an 
integer."));
+    }
+  }
+}

Reply via email to