From ae51da98ef30ace9bba5caf25ddf5ab4644789ea Mon Sep 17 00:00:00 2001 From: shuwenwei Date: Wed, 23 Apr 2025 15:10:13 +0800 Subject: [PATCH 1/2] check blank column name or table name --- .../apache/tsfile/write/v4/TsFileWriterBuilder.java | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/java/tsfile/src/main/java/org/apache/tsfile/write/v4/TsFileWriterBuilder.java b/java/tsfile/src/main/java/org/apache/tsfile/write/v4/TsFileWriterBuilder.java index 267bc8614..08f96c5f5 100644 --- a/java/tsfile/src/main/java/org/apache/tsfile/write/v4/TsFileWriterBuilder.java +++ b/java/tsfile/src/main/java/org/apache/tsfile/write/v4/TsFileWriterBuilder.java @@ -21,6 +21,9 @@ import org.apache.tsfile.annotations.TsFileApi; import org.apache.tsfile.file.metadata.TableSchema; +import org.apache.tsfile.write.schema.IMeasurementSchema; + +import org.apache.commons.lang3.StringUtils; import java.io.File; import java.io.IOException; @@ -66,5 +69,13 @@ private void validateParameters() { if (this.memoryThresholdInByte <= 0) { throw new IllegalArgumentException("Memory threshold must be > 0 bytes."); } + if (StringUtils.isBlank(this.tableSchema.getTableName())) { + throw new IllegalArgumentException("TableName must not be blank."); + } + for (IMeasurementSchema columnSchema : this.tableSchema.getColumnSchemas()) { + if (columnSchema == null || StringUtils.isBlank(columnSchema.getMeasurementName())) { + throw new IllegalArgumentException("Column name must not be blank."); + } + } } } From 1ac811815fd6f48f30c5a98bda1f5214af626fd1 Mon Sep 17 00:00:00 2001 From: shuwenwei Date: Wed, 23 Apr 2025 15:30:39 +0800 Subject: [PATCH 2/2] add ut --- .../read/TsFileV4ReadWriteInterfacesTest.java | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/java/tsfile/src/test/java/org/apache/tsfile/read/TsFileV4ReadWriteInterfacesTest.java b/java/tsfile/src/test/java/org/apache/tsfile/read/TsFileV4ReadWriteInterfacesTest.java index 0f0e9c357..d9b7147f2 100644 --- a/java/tsfile/src/test/java/org/apache/tsfile/read/TsFileV4ReadWriteInterfacesTest.java +++ b/java/tsfile/src/test/java/org/apache/tsfile/read/TsFileV4ReadWriteInterfacesTest.java @@ -119,4 +119,33 @@ public void testGetTableDeviceMethods() throws Exception { Files.deleteIfExists(Paths.get(filePath)); } } + + @Test + public void testInvalidColumnNameOrTableName() throws Exception { + String filePath = TsFileGeneratorForTest.getTestTsFilePath("db", 0, 0, 0); + + TableSchema tableSchema = + new TableSchema( + "", + Arrays.asList( + new MeasurementSchema("", TSDataType.STRING), + new MeasurementSchema("id2", TSDataType.STRING), + new MeasurementSchema("id3", TSDataType.STRING), + new MeasurementSchema("s1", TSDataType.INT32)), + Arrays.asList( + ColumnCategory.TAG, ColumnCategory.TAG, ColumnCategory.TAG, ColumnCategory.FIELD)); + try (ITsFileWriter writer = + new TsFileWriterBuilder().file(new File(filePath)).tableSchema(tableSchema).build()) { + Assert.fail(); + } catch (Exception e) { + Assert.assertTrue(e.getMessage().contains("TableName must not be blank.")); + } + tableSchema.setTableName("table1"); + try (ITsFileWriter writer = + new TsFileWriterBuilder().file(new File(filePath)).tableSchema(tableSchema).build()) { + Assert.fail(); + } catch (Exception e) { + Assert.assertTrue(e.getMessage().contains("Column name must not be blank.")); + } + } }