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

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


The following commit(s) were added to refs/heads/master by this push:
     new ce385ab  [IOTDB-1532] CI fails on testSelectInto() in E2E test (#3639)
ce385ab is described below

commit ce385ab72e46a49e0a6ddd927eee6b431dee789c
Author: Steve Yurong Su (宇荣) <[email protected]>
AuthorDate: Thu Jul 29 02:05:07 2021 -0500

    [IOTDB-1532] CI fails on testSelectInto() in E2E test (#3639)
    
    * modify E2E tests
    
    * split time column and value columns by rowCount if necessary
    
    * fix: time column truncated by mistake
---
 .../selectinto/InsertTabletPlanGenerator.java      | 53 ++++++++++++++++------
 .../iotdb/db/integration/IoTDBSelectIntoIT.java    | 53 ++++++++++++++++++++++
 .../test/java/org/apache/iotdb/db/sql/Cases.java   | 46 ++++++++++++++++---
 3 files changed, 132 insertions(+), 20 deletions(-)

diff --git 
a/server/src/main/java/org/apache/iotdb/db/engine/selectinto/InsertTabletPlanGenerator.java
 
b/server/src/main/java/org/apache/iotdb/db/engine/selectinto/InsertTabletPlanGenerator.java
index 4b12b26..f0e594e 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/engine/selectinto/InsertTabletPlanGenerator.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/engine/selectinto/InsertTabletPlanGenerator.java
@@ -182,8 +182,7 @@ public class InsertTabletPlanGenerator {
           break;
         default:
           throw new UnSupportedDataTypeException(
-              String.format(
-                  "data type %s is not supported when convert data at client", 
dataTypes[i]));
+              String.format("Data type %s is not supported.", dataTypes[i]));
       }
     }
   }
@@ -198,7 +197,6 @@ public class InsertTabletPlanGenerator {
       }
 
       nonEmptyColumnNames.add(targetMeasurementIds.get(i));
-      times[countOfNonEmptyColumns] = times[i];
       columns[countOfNonEmptyColumns] = columns[i];
       bitMaps[countOfNonEmptyColumns] = bitMaps[i];
       dataTypes[countOfNonEmptyColumns] = dataTypes[i];
@@ -208,22 +206,49 @@ public class InsertTabletPlanGenerator {
 
     InsertTabletPlan insertTabletPlan =
         new InsertTabletPlan(new PartialPath(targetDevice), 
nonEmptyColumnNames);
-
     insertTabletPlan.setAligned(false);
     insertTabletPlan.setRowCount(rowCount);
 
-    if (countOfNonEmptyColumns == columns.length) {
-      insertTabletPlan.setTimes(times);
-      insertTabletPlan.setColumns(columns);
-      insertTabletPlan.setBitMaps(bitMaps);
-      insertTabletPlan.setDataTypes(dataTypes);
-    } else {
-      insertTabletPlan.setTimes(Arrays.copyOf(times, countOfNonEmptyColumns));
-      insertTabletPlan.setColumns(Arrays.copyOf(columns, 
countOfNonEmptyColumns));
-      insertTabletPlan.setBitMaps(Arrays.copyOf(bitMaps, 
countOfNonEmptyColumns));
-      insertTabletPlan.setDataTypes(Arrays.copyOf(dataTypes, 
countOfNonEmptyColumns));
+    if (countOfNonEmptyColumns != columns.length) {
+      columns = Arrays.copyOf(columns, countOfNonEmptyColumns);
+      bitMaps = Arrays.copyOf(bitMaps, countOfNonEmptyColumns);
+      dataTypes = Arrays.copyOf(dataTypes, countOfNonEmptyColumns);
+    }
+
+    if (rowCount != tabletRowLimit) {
+      times = Arrays.copyOf(times, rowCount);
+      for (int i = 0; i < columns.length; ++i) {
+        switch (dataTypes[i]) {
+          case BOOLEAN:
+            columns[i] = Arrays.copyOf((boolean[]) columns[i], rowCount);
+            break;
+          case INT32:
+            columns[i] = Arrays.copyOf((int[]) columns[i], rowCount);
+            break;
+          case INT64:
+            columns[i] = Arrays.copyOf((long[]) columns[i], rowCount);
+            break;
+          case FLOAT:
+            columns[i] = Arrays.copyOf((float[]) columns[i], rowCount);
+            break;
+          case DOUBLE:
+            columns[i] = Arrays.copyOf((double[]) columns[i], rowCount);
+            break;
+          case TEXT:
+            columns[i] = Arrays.copyOf((Binary[]) columns[i], rowCount);
+            break;
+          default:
+            throw new UnSupportedDataTypeException(
+                String.format("Data type %s is not supported.", dataTypes[i]));
+        }
+      }
     }
 
+    insertTabletPlan.setTimes(times);
+    insertTabletPlan.setColumns(columns);
+    insertTabletPlan.setBitMaps(bitMaps);
+    insertTabletPlan.setDataTypes(dataTypes);
+
     return insertTabletPlan;
   }
 }
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 be5a23b..495a2ca 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
@@ -561,4 +561,57 @@ public class IoTDBSelectIntoIT {
           throwable.getMessage().contains("target paths in into clause should 
be different."));
     }
   }
+
+  @Test
+  public void testContainerCase() throws SQLException {
+    try (Statement statement =
+        DriverManager.getConnection(Config.IOTDB_URL_PREFIX + 
"127.0.0.1:6667/", "root", "root")
+            .createStatement()) {
+
+      for (int i = 0; i < 10; i++) {
+        statement.execute(
+            String.format("INSERT INTO root.sg.device%s(timestamp,s) 
VALUES(1,1)", i));
+      }
+
+      statement.execute(
+          "SELECT device0.s, device1.s, device2.s, device3.s, device4.s, 
device5.s, device6.s, device7.s, device8.s, device9.s "
+              + "INTO device0.t, device1.t, device2.t, device3.t, device4.t, 
device5.t, device6.t, device7.t, device8.t, device9.t "
+              + "FROM root.sg;");
+
+      for (int i = 0; i < 10; i++) {
+        statement.execute(
+            String.format("INSERT INTO root.sg.device%s(timestamp,s) 
VALUES(2,2)", i));
+        statement.execute(String.format("SELECT device%s.s into device%s.t 
from root.sg;", i, i));
+      }
+
+      for (int i = 0; i < 10; ++i) {
+        try (ResultSet resultSet =
+            statement.executeQuery(String.format("SELECT s, t FROM 
root.sg.device%s", i))) {
+          assertTrue(resultSet.next());
+          assertEquals(1, Double.parseDouble(resultSet.getString(1)), 0);
+          assertEquals(
+              Double.parseDouble(resultSet.getString(1)),
+              Double.parseDouble(resultSet.getString(2)),
+              0);
+          assertEquals(
+              Double.parseDouble(resultSet.getString(2)),
+              Double.parseDouble(resultSet.getString(3)),
+              0);
+
+          assertTrue(resultSet.next());
+          assertEquals(2, Double.parseDouble(resultSet.getString(1)), 0);
+          assertEquals(
+              Double.parseDouble(resultSet.getString(1)),
+              Double.parseDouble(resultSet.getString(2)),
+              0);
+          assertEquals(
+              Double.parseDouble(resultSet.getString(2)),
+              Double.parseDouble(resultSet.getString(3)),
+              0);
+
+          assertFalse(resultSet.next());
+        }
+      }
+    }
+  }
 }
diff --git a/testcontainer/src/test/java/org/apache/iotdb/db/sql/Cases.java 
b/testcontainer/src/test/java/org/apache/iotdb/db/sql/Cases.java
index fbbc3fa..2a2fd27 100644
--- a/testcontainer/src/test/java/org/apache/iotdb/db/sql/Cases.java
+++ b/testcontainer/src/test/java/org/apache/iotdb/db/sql/Cases.java
@@ -466,21 +466,55 @@ public abstract class Cases {
   public void testSelectInto() throws SQLException {
     for (int i = 0; i < 10; i++) {
       writeStatement.execute(
-          String.format("INSERT INTO root.sg.d%s(timestamp,s) VALUES(%s,%s)", 
i, i, i));
+          String.format(
+              "CREATE timeseries root.sg.device%s.s WITH datatype=DOUBLE, 
encoding=RLE, compression=SNAPPY",
+              i));
+      writeStatement.execute(
+          String.format(
+              "CREATE timeseries root.sg.device%s.t WITH datatype=DOUBLE, 
encoding=RLE, compression=SNAPPY",
+              i));
+      writeStatement.execute(
+          String.format("INSERT INTO root.sg.device%s(timestamp,s) 
VALUES(1,1)", i));
     }
 
     writeStatement.execute(
-        "SELECT d0.s, d1.s, d2.s, d3.s, d4.s into d0.t, d1.t, d2.t, d3.t, d4.t 
from root.sg;");
-    for (int i = 5; i < 10; ++i) {
-      writeStatement.execute(String.format("SELECT d%s.s into d%s.t from 
root.sg;", i, i));
+        "SELECT device0.s, device1.s, device2.s, device3.s, device4.s, 
device5.s, device6.s, device7.s, device8.s, device9.s "
+            + "INTO device0.t, device1.t, device2.t, device3.t, device4.t, 
device5.t, device6.t, device7.t, device8.t, device9.t "
+            + "FROM root.sg;");
+
+    for (int i = 0; i < 10; i++) {
+      writeStatement.execute(
+          String.format("INSERT INTO root.sg.device%s(timestamp,s) 
VALUES(2,2)", i));
+      writeStatement.execute(
+          String.format("SELECT device%s.s into device%s.t from root.sg;", i, 
i));
     }
 
     for (Statement readStatement : readStatements) {
       for (int i = 0; i < 10; ++i) {
         try (ResultSet resultSet =
-            readStatement.executeQuery(String.format("SELECT s, t FROM 
root.sg.d%s", i))) {
+            readStatement.executeQuery(String.format("SELECT s, t FROM 
root.sg.device%s", i))) {
           Assert.assertTrue(resultSet.next());
-          Assert.assertEquals(resultSet.getDouble(2), resultSet.getDouble(3), 
0);
+          Assert.assertEquals(1, Double.parseDouble(resultSet.getString(1)), 
0);
+          Assert.assertEquals(
+              Double.parseDouble(resultSet.getString(1)),
+              Double.parseDouble(resultSet.getString(2)),
+              0);
+          Assert.assertEquals(
+              Double.parseDouble(resultSet.getString(2)),
+              Double.parseDouble(resultSet.getString(3)),
+              0);
+
+          Assert.assertTrue(resultSet.next());
+          Assert.assertEquals(2, Double.parseDouble(resultSet.getString(1)), 
0);
+          Assert.assertEquals(
+              Double.parseDouble(resultSet.getString(1)),
+              Double.parseDouble(resultSet.getString(2)),
+              0);
+          Assert.assertEquals(
+              Double.parseDouble(resultSet.getString(2)),
+              Double.parseDouble(resultSet.getString(3)),
+              0);
+
           Assert.assertFalse(resultSet.next());
         }
       }

Reply via email to