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());
}
}