This is an automated email from the ASF dual-hosted git repository.
jiangtian 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 481a79d3c14 Fix that failure of one row in relational InsertRows will
fail other rows (#14912)
481a79d3c14 is described below
commit 481a79d3c143ae162ac0efb00e6c55425796d70b
Author: Jiang Tian <[email protected]>
AuthorDate: Fri Feb 21 15:13:08 2025 +0800
Fix that failure of one row in relational InsertRows will fail other rows
(#14912)
* Fix that failure of one row in relational InsertRows will fail other rows
* fix it
* spotless
---
.../it/session/IoTDBSessionRelationalIT.java | 30 ++++++++++++++++++
.../iotdb/session/it/IoTDBSessionSimpleIT.java | 36 ++++++++++++++++++++++
.../plan/node/write/RelationalInsertRowNode.java | 3 --
.../plan/relational/sql/parser/AstBuilder.java | 3 +-
4 files changed, 67 insertions(+), 5 deletions(-)
diff --git
a/integration-test/src/test/java/org/apache/iotdb/relational/it/session/IoTDBSessionRelationalIT.java
b/integration-test/src/test/java/org/apache/iotdb/relational/it/session/IoTDBSessionRelationalIT.java
index b79411292f2..942d8ee2a70 100644
---
a/integration-test/src/test/java/org/apache/iotdb/relational/it/session/IoTDBSessionRelationalIT.java
+++
b/integration-test/src/test/java/org/apache/iotdb/relational/it/session/IoTDBSessionRelationalIT.java
@@ -365,6 +365,36 @@ public class IoTDBSessionRelationalIT {
"616: Unknown column category for m2. Cannot auto create column.",
e.getMessage());
}
+ session.executeNonQueryStatement("CREATE TABLE partial_insert (s1
boolean)");
+ try {
+ session.executeNonQueryStatement(
+ "insert into partial_insert(time, s1) values
(10000,true),(20000,false),(35000,-1.5),(30000,-1),(40000,0),(50000,1),(60000,1.5),(70000,'string'),(80000,'1989-06-15'),(90000,638323200000)");
+ fail("Exception expected");
+ } catch (StatementExecutionException e) {
+ assertEquals(
+ "507: Fail to insert measurements [s1] caused by [The BOOLEAN
should be true/TRUE, false/FALSE or 0/1]",
+ e.getMessage());
+ }
+
+ SessionDataSet dataSet =
+ session.executeQueryStatement("select * from partial_insert order by
time");
+ long[] timestamps =
+ new long[] {10000, 20000, 30000, 35000, 40000, 50000, 60000, 70000,
80000, 90000};
+ Boolean[] values =
+ new Boolean[] {true, false, null, null, false, true, null, null,
null, null, null};
+ int cnt = 0;
+ while (dataSet.hasNext()) {
+ RowRecord rec = dataSet.next();
+ assertEquals(timestamps[cnt], rec.getFields().get(0).getLongV());
+ if (values[cnt] != null) {
+ assertEquals(values[cnt], rec.getFields().get(1).getBoolV());
+ } else {
+ assertNull(rec.getFields().get(1).getDataType());
+ }
+ cnt++;
+ }
+ assertEquals(10, cnt);
+
} finally {
try (ISession session = EnvFactory.getEnv().getSessionConnection()) {
session.executeNonQueryStatement(
diff --git
a/integration-test/src/test/java/org/apache/iotdb/session/it/IoTDBSessionSimpleIT.java
b/integration-test/src/test/java/org/apache/iotdb/session/it/IoTDBSessionSimpleIT.java
index 095ca266081..e5bcbb169a4 100644
---
a/integration-test/src/test/java/org/apache/iotdb/session/it/IoTDBSessionSimpleIT.java
+++
b/integration-test/src/test/java/org/apache/iotdb/session/it/IoTDBSessionSimpleIT.java
@@ -1784,6 +1784,42 @@ public class IoTDBSessionSimpleIT {
}
}
+ @Test
+ @Category({LocalStandaloneIT.class, ClusterIT.class})
+ public void insertPartialSQLTest() throws IoTDBConnectionException,
StatementExecutionException {
+ try (ISession session = EnvFactory.getEnv().getSessionConnection()) {
+ session.createAlignedTimeseries(
+ "root.partial_insert.d1",
+ Collections.singletonList("s1"),
+ Collections.singletonList(TSDataType.BOOLEAN),
+ Collections.singletonList(TSEncoding.PLAIN),
+ Collections.singletonList(CompressionType.UNCOMPRESSED),
+ null);
+ try {
+ session.executeNonQueryStatement(
+ "insert into root.partial_insert.d1(time, s1) values
(10000,true),(20000,false),(35000,-1.5),(30000,-1),(40000,0),(50000,1),(60000,1.5),(70000,'string'),(80000,'1989-06-15'),(90000,638323200000)");
+ fail("Exception expected");
+ } catch (StatementExecutionException e) {
+ assertEquals(
+ "507: Fail to insert measurements [s1] caused by [The BOOLEAN
should be true/TRUE, false/FALSE or 0/1]",
+ e.getMessage());
+ }
+
+ SessionDataSet dataSet =
+ session.executeQueryStatement("select * from
root.partial_insert.d1");
+ long[] timestamps = new long[] {10000, 20000, 40000, 50000};
+ Boolean[] values = new Boolean[] {true, false, false, true};
+ int cnt = 0;
+ while (dataSet.hasNext()) {
+ RowRecord rec = dataSet.next();
+ assertEquals(timestamps[cnt], rec.getTimestamp());
+ assertEquals(values[cnt], rec.getFields().get(0).getBoolV());
+ cnt++;
+ }
+ assertEquals(4, cnt);
+ }
+ }
+
@Test
@Category({LocalStandaloneIT.class, ClusterIT.class})
public void insertBinaryAsTextTest() {
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/write/RelationalInsertRowNode.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/write/RelationalInsertRowNode.java
index d3bdea90fcc..7fe3450555f 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/write/RelationalInsertRowNode.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/write/RelationalInsertRowNode.java
@@ -249,9 +249,6 @@ public class RelationalInsertRowNode extends InsertRowNode {
@Override
public boolean allMeasurementFailed() {
- if (measurements != null && measurements.length > 0) {
- return failedMeasurementNumber >= measurements.length;
- }
return false;
}
}
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/parser/AstBuilder.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/parser/AstBuilder.java
index ecc21d0c7ee..bdf32b0b9d7 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/parser/AstBuilder.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/parser/AstBuilder.java
@@ -570,8 +570,6 @@ public class AstBuilder extends
RelationalSqlBaseVisitor<Node> {
columnNames.remove(timeColumnIndex);
}
- String[] columnNameArray = columnNames.toArray(new String[0]);
-
List<Expression> rows = queryBody.getRows();
if (timeColumnIndex == -1 && rows.size() > 1) {
throw new SemanticException("need timestamps when insert multi rows");
@@ -589,6 +587,7 @@ public class AstBuilder extends
RelationalSqlBaseVisitor<Node> {
} else {
throw new SemanticException("unexpected expression: " + r);
}
+ String[] columnNameArray = columnNames.toArray(new
String[0]);
return toInsertRowStatement(
expressions, finalTimeColumnIndex, columnNameArray,
tableName, databaseName);
})