This is an automated email from the ASF dual-hosted git repository. jt2594838 pushed a commit to branch add_interfaces_for_type in repository https://gitbox.apache.org/repos/asf/tsfile.git
commit 2f4ac1389167e0a84b0ced5437461fbe617a3d25 Author: Tian Jiang <[email protected]> AuthorDate: Thu Jul 23 16:18:54 2026 +0800 add Type.write --- .../tsfile/read/common/type/AbstractIntType.java | 5 +++ .../tsfile/read/common/type/AbstractLongType.java | 5 +++ .../read/common/type/AbstractVarcharType.java | 5 +++ .../apache/tsfile/read/common/type/BlobType.java | 5 +++ .../tsfile/read/common/type/BooleanType.java | 5 +++ .../apache/tsfile/read/common/type/DoubleType.java | 5 +++ .../apache/tsfile/read/common/type/FloatType.java | 5 +++ .../apache/tsfile/read/common/type/ObjectType.java | 5 +++ .../org/apache/tsfile/read/common/type/Type.java | 6 +++ .../apache/tsfile/read/common/type/VectorType.java | 6 +++ .../apache/tsfile/read/common/type/TypeTest.java | 51 ++++++++++++++++++++++ 11 files changed, 103 insertions(+) diff --git a/java/tsfile/src/main/java/org/apache/tsfile/read/common/type/AbstractIntType.java b/java/tsfile/src/main/java/org/apache/tsfile/read/common/type/AbstractIntType.java index 902964584..8294940df 100644 --- a/java/tsfile/src/main/java/org/apache/tsfile/read/common/type/AbstractIntType.java +++ b/java/tsfile/src/main/java/org/apache/tsfile/read/common/type/AbstractIntType.java @@ -289,6 +289,11 @@ public abstract class AbstractIntType extends AbstractType { writer.write(time, value.getInt()); } + @Override + public void write(ChunkWriterImpl writer, long time, BatchData data) { + writer.write(time, data.getInt()); + } + @Override public void write(ChunkWriterImpl writer, long time, Object value) { writer.write(time, (int) value); diff --git a/java/tsfile/src/main/java/org/apache/tsfile/read/common/type/AbstractLongType.java b/java/tsfile/src/main/java/org/apache/tsfile/read/common/type/AbstractLongType.java index 41bff77b0..5ae887095 100644 --- a/java/tsfile/src/main/java/org/apache/tsfile/read/common/type/AbstractLongType.java +++ b/java/tsfile/src/main/java/org/apache/tsfile/read/common/type/AbstractLongType.java @@ -288,6 +288,11 @@ public abstract class AbstractLongType extends AbstractType { writer.write(time, value.getLong()); } + @Override + public void write(ChunkWriterImpl writer, long time, BatchData data) { + writer.write(time, data.getLong()); + } + @Override public void write(ChunkWriterImpl writer, long time, Object value) { writer.write(time, (long) value); diff --git a/java/tsfile/src/main/java/org/apache/tsfile/read/common/type/AbstractVarcharType.java b/java/tsfile/src/main/java/org/apache/tsfile/read/common/type/AbstractVarcharType.java index fdd2f6bae..1c7f279ce 100644 --- a/java/tsfile/src/main/java/org/apache/tsfile/read/common/type/AbstractVarcharType.java +++ b/java/tsfile/src/main/java/org/apache/tsfile/read/common/type/AbstractVarcharType.java @@ -265,6 +265,11 @@ public abstract class AbstractVarcharType extends AbstractType { writer.write(time, value.getBinary()); } + @Override + public void write(ChunkWriterImpl writer, long time, BatchData data) { + writer.write(time, data.getBinary()); + } + @Override public void write(ChunkWriterImpl writer, long time, Object value) { writer.write(time, (Binary) value); diff --git a/java/tsfile/src/main/java/org/apache/tsfile/read/common/type/BlobType.java b/java/tsfile/src/main/java/org/apache/tsfile/read/common/type/BlobType.java index 53e87e86e..480ba6854 100644 --- a/java/tsfile/src/main/java/org/apache/tsfile/read/common/type/BlobType.java +++ b/java/tsfile/src/main/java/org/apache/tsfile/read/common/type/BlobType.java @@ -276,6 +276,11 @@ public class BlobType extends AbstractType { writer.write(time, value.getBinary()); } + @Override + public void write(ChunkWriterImpl writer, long time, BatchData data) { + writer.write(time, data.getBinary()); + } + @Override public void write(ChunkWriterImpl writer, long time, Object value) { writer.write(time, (Binary) value); diff --git a/java/tsfile/src/main/java/org/apache/tsfile/read/common/type/BooleanType.java b/java/tsfile/src/main/java/org/apache/tsfile/read/common/type/BooleanType.java index e747ded74..d4161fde4 100644 --- a/java/tsfile/src/main/java/org/apache/tsfile/read/common/type/BooleanType.java +++ b/java/tsfile/src/main/java/org/apache/tsfile/read/common/type/BooleanType.java @@ -280,6 +280,11 @@ public class BooleanType extends AbstractType { writer.write(time, value.getBoolean()); } + @Override + public void write(ChunkWriterImpl writer, long time, BatchData data) { + writer.write(time, data.getBoolean()); + } + @Override public void write(ChunkWriterImpl writer, long time, Object value) { writer.write(time, (boolean) value); diff --git a/java/tsfile/src/main/java/org/apache/tsfile/read/common/type/DoubleType.java b/java/tsfile/src/main/java/org/apache/tsfile/read/common/type/DoubleType.java index 005a25c3f..04c446f10 100644 --- a/java/tsfile/src/main/java/org/apache/tsfile/read/common/type/DoubleType.java +++ b/java/tsfile/src/main/java/org/apache/tsfile/read/common/type/DoubleType.java @@ -291,6 +291,11 @@ public class DoubleType extends AbstractType { writer.write(time, value.getDouble()); } + @Override + public void write(ChunkWriterImpl writer, long time, BatchData data) { + writer.write(time, data.getDouble()); + } + @Override public void write(ChunkWriterImpl writer, long time, Object value) { writer.write(time, (double) value); diff --git a/java/tsfile/src/main/java/org/apache/tsfile/read/common/type/FloatType.java b/java/tsfile/src/main/java/org/apache/tsfile/read/common/type/FloatType.java index b910614be..bae44ca67 100644 --- a/java/tsfile/src/main/java/org/apache/tsfile/read/common/type/FloatType.java +++ b/java/tsfile/src/main/java/org/apache/tsfile/read/common/type/FloatType.java @@ -289,6 +289,11 @@ public class FloatType extends AbstractType { writer.write(time, value.getFloat()); } + @Override + public void write(ChunkWriterImpl writer, long time, BatchData data) { + writer.write(time, data.getFloat()); + } + @Override public void write(ChunkWriterImpl writer, long time, Object value) { writer.write(time, (float) value); diff --git a/java/tsfile/src/main/java/org/apache/tsfile/read/common/type/ObjectType.java b/java/tsfile/src/main/java/org/apache/tsfile/read/common/type/ObjectType.java index 94e20bc8a..f43db6605 100644 --- a/java/tsfile/src/main/java/org/apache/tsfile/read/common/type/ObjectType.java +++ b/java/tsfile/src/main/java/org/apache/tsfile/read/common/type/ObjectType.java @@ -266,6 +266,11 @@ public class ObjectType extends AbstractType { writer.write(time, value.getBinary()); } + @Override + public void write(ChunkWriterImpl writer, long time, BatchData data) { + writer.write(time, data.getBinary()); + } + @Override public void write(ChunkWriterImpl writer, long time, Object value) { writer.write(time, (Binary) value); diff --git a/java/tsfile/src/main/java/org/apache/tsfile/read/common/type/Type.java b/java/tsfile/src/main/java/org/apache/tsfile/read/common/type/Type.java index a29094573..0b8483279 100644 --- a/java/tsfile/src/main/java/org/apache/tsfile/read/common/type/Type.java +++ b/java/tsfile/src/main/java/org/apache/tsfile/read/common/type/Type.java @@ -428,6 +428,12 @@ public interface Type { Messages.format("error.write.type_not_supported", getTypeEnum())); } + /** Writes the current value in {@code data} to a non-aligned chunk. */ + default void write(ChunkWriterImpl writer, long time, BatchData data) { + throw new UnSupportedDataTypeException( + Messages.format("error.write.type_not_supported", getTypeEnum())); + } + /** Writes a value to a non-aligned chunk. */ default void write(ChunkWriterImpl writer, long time, Object value) { throw new UnSupportedDataTypeException( diff --git a/java/tsfile/src/main/java/org/apache/tsfile/read/common/type/VectorType.java b/java/tsfile/src/main/java/org/apache/tsfile/read/common/type/VectorType.java index afdfca2c3..ea99ee9b6 100644 --- a/java/tsfile/src/main/java/org/apache/tsfile/read/common/type/VectorType.java +++ b/java/tsfile/src/main/java/org/apache/tsfile/read/common/type/VectorType.java @@ -146,6 +146,12 @@ public class VectorType extends AbstractLongType { Messages.format("error.write.type_not_supported", getTypeEnum())); } + @Override + public void write(ChunkWriterImpl writer, long time, BatchData data) { + throw new UnSupportedDataTypeException( + Messages.format("error.write.type_not_supported", getTypeEnum())); + } + @Override public void write(ChunkWriterImpl writer, long time, Object value) { throw new UnSupportedDataTypeException( diff --git a/java/tsfile/src/test/java/org/apache/tsfile/read/common/type/TypeTest.java b/java/tsfile/src/test/java/org/apache/tsfile/read/common/type/TypeTest.java index a11d58960..0703d6c85 100644 --- a/java/tsfile/src/test/java/org/apache/tsfile/read/common/type/TypeTest.java +++ b/java/tsfile/src/test/java/org/apache/tsfile/read/common/type/TypeTest.java @@ -1028,6 +1028,57 @@ public class TypeTest { } } + @Test + public void testWriteBatchDataToNonAlignedValueChunk() { + ChunkWriterImpl writer = Mockito.mock(ChunkWriterImpl.class); + + Object[][] testCases = { + {TSDataType.BOOLEAN, 1L, true}, + {TSDataType.INT32, 2L, 1}, + {TSDataType.DATE, 3L, 20260717}, + {TSDataType.INT64, 4L, 2L}, + {TSDataType.TIMESTAMP, 5L, 3L}, + {TSDataType.FLOAT, 6L, 1.25F}, + {TSDataType.DOUBLE, 7L, 2.5D} + }; + for (Object[] testCase : testCases) { + TSDataType dataType = (TSDataType) testCase[0]; + BatchData data = new BatchData(dataType); + data.putAnObject(0L, testCase[2]); + Type.fromTsDataType(dataType).write(writer, (long) testCase[1], data); + } + + Mockito.verify(writer).write(1L, true); + Mockito.verify(writer).write(2L, 1); + Mockito.verify(writer).write(3L, 20260717); + Mockito.verify(writer).write(4L, 2L); + Mockito.verify(writer).write(5L, 3L); + Mockito.verify(writer).write(6L, 1.25F); + Mockito.verify(writer).write(7L, 2.5D); + Mockito.reset(writer); + + Binary binary = new Binary("value", StandardCharsets.UTF_8); + for (TSDataType dataType : + new TSDataType[] {TSDataType.TEXT, TSDataType.STRING, TSDataType.BLOB, TSDataType.OBJECT}) { + BatchData data = new BatchData(dataType); + data.putAnObject(0L, binary); + Type.fromTsDataType(dataType).write(writer, 8L, data); + Mockito.verify(writer).write(8L, binary); + Mockito.reset(writer); + } + + BatchData vectorData = new BatchData(TSDataType.VECTOR); + vectorData.putAnObject(0L, new TsPrimitiveType[] {new TsPrimitiveType.TsLong(1L)}); + for (TSDataType dataType : new TSDataType[] {TSDataType.VECTOR, TSDataType.UNKNOWN}) { + try { + Type.fromTsDataType(dataType).write(writer, 9L, vectorData); + Assert.fail("Expected UnSupportedDataTypeException"); + } catch (UnSupportedDataTypeException ignored) { + // Expected. + } + } + } + @Test public void testToString() { Object[][] testCases = {
