This is an automated email from the ASF dual-hosted git repository. haonan pushed a commit to branch fix_null_measurement_1.3 in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit 30c6017f2fed1ad0e53bb697c2695129a48e64b5 Author: Haonan <[email protected]> AuthorDate: Fri Feb 7 15:21:54 2025 +0800 Fix null measurement name issue in insertTablet (#14795) * Fix null measurement name in Tablet * Fix null measurement name in Tablet --- .../iotdb/session/it/IoTDBSessionInsertNullIT.java | 42 ++++++++++++++++++++++ .../java/org/apache/iotdb/session/Session.java | 7 +++- 2 files changed, 48 insertions(+), 1 deletion(-) diff --git a/integration-test/src/test/java/org/apache/iotdb/session/it/IoTDBSessionInsertNullIT.java b/integration-test/src/test/java/org/apache/iotdb/session/it/IoTDBSessionInsertNullIT.java index f101a833fbb..503b61f2d7c 100644 --- a/integration-test/src/test/java/org/apache/iotdb/session/it/IoTDBSessionInsertNullIT.java +++ b/integration-test/src/test/java/org/apache/iotdb/session/it/IoTDBSessionInsertNullIT.java @@ -32,7 +32,10 @@ import org.apache.tsfile.file.metadata.enums.CompressionType; import org.apache.tsfile.file.metadata.enums.TSEncoding; import org.apache.tsfile.read.common.Field; import org.apache.tsfile.read.common.RowRecord; +import org.apache.tsfile.write.record.Tablet; +import org.apache.tsfile.write.schema.MeasurementSchema; import org.junit.After; +import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.junit.experimental.categories.Category; @@ -355,4 +358,43 @@ public class IoTDBSessionInsertNullIT { fail(e.getMessage()); } } + + @Test + public void insertTabletNullMeasurementTest() { + try (ISession session = EnvFactory.getEnv().getSessionConnection()) { + String deviceId = "root.sg1.clsu.aligned_d1"; + Tablet tablet = + new Tablet( + deviceId, + Arrays.asList( + new MeasurementSchema("s1", TSDataType.BOOLEAN), + new MeasurementSchema(null, TSDataType.INT32)), + 1); + tablet.addTimestamp(0, 300); + tablet.addValue("s1", 0, true); + tablet.addValue(null, 0, 1); + session.insertAlignedTablet(tablet); + fail(); + } catch (Exception e) { + Assert.assertEquals("measurement should be non null value", e.getMessage()); + } + + try (ISession session = EnvFactory.getEnv().getSessionConnection()) { + String deviceId = "root.sg1.clsu.aligned_d1"; + Tablet tablet = + new Tablet( + deviceId, + Arrays.asList( + new MeasurementSchema("s1", TSDataType.BOOLEAN), + new MeasurementSchema(null, TSDataType.INT32)), + 1); + tablet.addTimestamp(0, 300); + tablet.addValue("s1", 0, true); + // doesn't insert 2nd measurement + session.insertAlignedTablet(tablet); + fail(); + } catch (Exception e) { + Assert.assertEquals("measurement should be non null value", e.getMessage()); + } + } } diff --git a/iotdb-client/session/src/main/java/org/apache/iotdb/session/Session.java b/iotdb-client/session/src/main/java/org/apache/iotdb/session/Session.java index dea03f91ea7..0e078f0e0b4 100644 --- a/iotdb-client/session/src/main/java/org/apache/iotdb/session/Session.java +++ b/iotdb-client/session/src/main/java/org/apache/iotdb/session/Session.java @@ -2687,7 +2687,9 @@ public class Session implements ISession { TSInsertTabletReq request = new TSInsertTabletReq(); for (IMeasurementSchema measurementSchema : tablet.getSchemas()) { - request.addToMeasurements(measurementSchema.getMeasurementId()); + if (measurementSchema.getMeasurementId() == null) { + throw new IllegalArgumentException("measurement should be non null value"); + } request.addToTypes(measurementSchema.getType().ordinal()); } @@ -2807,6 +2809,9 @@ public class Session implements ISession { List<Integer> dataTypes = new ArrayList<>(); request.setIsAligned(isAligned); for (IMeasurementSchema measurementSchema : tablet.getSchemas()) { + if (measurementSchema.getMeasurementId() == null) { + throw new IllegalArgumentException("measurement should be non null value"); + } measurements.add(measurementSchema.getMeasurementId()); dataTypes.add(measurementSchema.getType().ordinal()); }
