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 = {

Reply via email to