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 1eb933719da13eb2b3fd850ad7592df2a3bd4e02
Author: Tian Jiang <[email protected]>
AuthorDate: Thu Jul 23 16:13:33 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/DateType.java   | 10 +++++
 .../apache/tsfile/read/common/type/DoubleType.java |  5 +++
 .../apache/tsfile/read/common/type/FloatType.java  |  5 +++
 .../apache/tsfile/read/common/type/ObjectType.java |  5 +++
 .../apache/tsfile/read/common/type/RowType.java    |  6 +++
 .../org/apache/tsfile/read/common/type/Type.java   |  5 +++
 .../apache/tsfile/read/common/type/VectorType.java |  5 +++
 .../apache/tsfile/read/common/type/TypeTest.java   | 48 ++++++++++++++++++++++
 13 files changed, 114 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 790337053..902964584 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
@@ -339,6 +339,11 @@ public abstract class AbstractIntType extends AbstractType 
{
     ((int[]) toArray)[index] = from.getInt();
   }
 
+  @Override
+  public void write(BatchData from, Object toArray, int index) {
+    ((int[]) toArray)[index] = from.getInt();
+  }
+
   @Override
   public void writeInt(ColumnBuilder builder, int value) {
     builder.writeInt(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 350244782..41bff77b0 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
@@ -338,6 +338,11 @@ public abstract class AbstractLongType extends 
AbstractType {
     ((long[]) toArray)[index] = from.getLong();
   }
 
+  @Override
+  public void write(BatchData from, Object toArray, int index) {
+    ((long[]) toArray)[index] = from.getLong();
+  }
+
   @Override
   public void writeInt(ColumnBuilder builder, int value) {
     builder.writeLong(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 26620691f..fdd2f6bae 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
@@ -300,6 +300,11 @@ public abstract class AbstractVarcharType extends 
AbstractType {
     ((Binary[]) toArray)[index] = from.getBinary();
   }
 
+  @Override
+  public void write(BatchData from, Object toArray, int index) {
+    ((Binary[]) toArray)[index] = from.getBinary();
+  }
+
   @Override
   public void writeBinary(ColumnBuilder builder, Binary value) {
     builder.writeBinary(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 373364602..53e87e86e 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
@@ -318,6 +318,11 @@ public class BlobType extends AbstractType {
     ((Binary[]) toArray)[index] = from.getBinary();
   }
 
+  @Override
+  public void write(BatchData from, Object toArray, int index) {
+    ((Binary[]) toArray)[index] = from.getBinary();
+  }
+
   @Override
   public void writeBinary(ColumnBuilder builder, Binary value) {
     builder.writeBinary(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 db8b29162..e747ded74 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
@@ -322,6 +322,11 @@ public class BooleanType extends AbstractType {
     ((boolean[]) toArray)[index] = from.getBoolean();
   }
 
+  @Override
+  public void write(BatchData from, Object toArray, int index) {
+    ((boolean[]) toArray)[index] = from.getBoolean();
+  }
+
   @Override
   public void writeBoolean(ColumnBuilder builder, boolean value) {
     builder.writeBoolean(value);
diff --git 
a/java/tsfile/src/main/java/org/apache/tsfile/read/common/type/DateType.java 
b/java/tsfile/src/main/java/org/apache/tsfile/read/common/type/DateType.java
index d823578cc..c231a6f9b 100644
--- a/java/tsfile/src/main/java/org/apache/tsfile/read/common/type/DateType.java
+++ b/java/tsfile/src/main/java/org/apache/tsfile/read/common/type/DateType.java
@@ -25,6 +25,7 @@ import org.apache.tsfile.block.column.ColumnBuilderStatus;
 import org.apache.tsfile.enums.TSDataType;
 import org.apache.tsfile.file.metadata.statistics.DateStatistics;
 import org.apache.tsfile.file.metadata.statistics.Statistics;
+import org.apache.tsfile.read.common.BatchData;
 import org.apache.tsfile.read.common.Field;
 import org.apache.tsfile.read.common.block.column.IntColumn;
 import org.apache.tsfile.read.common.block.column.IntColumnBuilder;
@@ -77,6 +78,15 @@ public class DateType extends AbstractIntType {
     ((LocalDate[]) toArray)[index] = 
DateUtils.parseIntToLocalDate(from.getInt());
   }
 
+  @Override
+  public void write(BatchData from, Object toArray, int index) {
+    if (toArray instanceof int[]) {
+      super.write(from, toArray, index);
+      return;
+    }
+    ((LocalDate[]) toArray)[index] = 
DateUtils.parseIntToLocalDate(from.getInt());
+  }
+
   @Override
   public DataPoint getDataPoint(String measurementId, String value) {
     return new IntDataPoint(measurementId, 
DateUtils.parseDateExpressionToInt(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 802e9b0a4..005a25c3f 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
@@ -348,6 +348,11 @@ public class DoubleType extends AbstractType {
     ((double[]) toArray)[index] = from.getDouble();
   }
 
+  @Override
+  public void write(BatchData from, Object toArray, int index) {
+    ((double[]) toArray)[index] = from.getDouble();
+  }
+
   @Override
   public void writeInt(ColumnBuilder builder, int value) {
     builder.writeDouble(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 fce2a6a82..b910614be 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
@@ -346,6 +346,11 @@ public class FloatType extends AbstractType {
     ((float[]) toArray)[index] = from.getFloat();
   }
 
+  @Override
+  public void write(BatchData from, Object toArray, int index) {
+    ((float[]) toArray)[index] = from.getFloat();
+  }
+
   @Override
   public void writeInt(ColumnBuilder builder, int value) {
     builder.writeFloat(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 cc6fb5197..94e20bc8a 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
@@ -308,6 +308,11 @@ public class ObjectType extends AbstractType {
     ((Binary[]) toArray)[index] = from.getBinary();
   }
 
+  @Override
+  public void write(BatchData from, Object toArray, int index) {
+    ((Binary[]) toArray)[index] = from.getBinary();
+  }
+
   @Override
   public void writeBinary(ColumnBuilder builder, Binary value) {
     builder.writeBinary(value);
diff --git 
a/java/tsfile/src/main/java/org/apache/tsfile/read/common/type/RowType.java 
b/java/tsfile/src/main/java/org/apache/tsfile/read/common/type/RowType.java
index 7b84f7a67..6123fb30b 100644
--- a/java/tsfile/src/main/java/org/apache/tsfile/read/common/type/RowType.java
+++ b/java/tsfile/src/main/java/org/apache/tsfile/read/common/type/RowType.java
@@ -20,6 +20,7 @@
 package org.apache.tsfile.read.common.type;
 
 import org.apache.tsfile.block.column.ColumnBuilder;
+import org.apache.tsfile.read.common.BatchData;
 import org.apache.tsfile.utils.TsPrimitiveType;
 
 import java.util.ArrayList;
@@ -94,6 +95,11 @@ public class RowType extends AbstractType {
     ((TsPrimitiveType[][]) toArray)[index] = from.getVector();
   }
 
+  @Override
+  public void write(BatchData from, Object toArray, int index) {
+    ((TsPrimitiveType[][]) toArray)[index] = from.getVector();
+  }
+
   public static Field field(String name, Type type) {
     return new Field(Optional.of(name), type);
   }
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 69af1231a..a29094573 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
@@ -166,6 +166,11 @@ public interface Type {
     throw new UnsupportedOperationException(getClass().getName());
   }
 
+  /** Writes the current value from {@code from} to {@code toArray} at {@code 
index}. */
+  default void write(BatchData from, Object toArray, int index) {
+    throw new UnsupportedOperationException(getClass().getName());
+  }
+
   /** Write a boolean to the current entry; */
   default void writeBoolean(ColumnBuilder builder, boolean value) {
     throw new UnsupportedOperationException(getClass().getName());
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 aab959c9c..afdfca2c3 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
@@ -93,6 +93,11 @@ public class VectorType extends AbstractLongType {
     ((TsPrimitiveType[][]) toArray)[index] = from.getVector();
   }
 
+  @Override
+  public void write(BatchData from, Object toArray, int index) {
+    ((TsPrimitiveType[][]) toArray)[index] = from.getVector();
+  }
+
   @Override
   public Object arrayCopyOf(Object array, int newLength) {
     return Arrays.copyOf((long[]) array, newLength);
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 aa323eb9e..a11d58960 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
@@ -151,6 +151,54 @@ public class TypeTest {
     }
   }
 
+  @Test
+  public void testWriteBatchDataToArray() {
+    Binary binary = new Binary("value", StandardCharsets.UTF_8);
+    TsPrimitiveType[] vector = {new TsPrimitiveType.TsInt(1), new 
TsPrimitiveType.TsLong(2L)};
+    Object[][] testCases = {
+      {TSDataType.BOOLEAN, true, new boolean[2]},
+      {TSDataType.INT32, 1, new int[2]},
+      {TSDataType.DATE, 20260723, new int[2]},
+      {TSDataType.DATE, 20260723, new LocalDate[2]},
+      {TSDataType.INT64, 2L, new long[2]},
+      {TSDataType.TIMESTAMP, 3L, new long[2]},
+      {TSDataType.FLOAT, 1.25F, new float[2]},
+      {TSDataType.DOUBLE, 2.5D, new double[2]},
+      {TSDataType.TEXT, binary, new Binary[2]},
+      {TSDataType.STRING, binary, new Binary[2]},
+      {TSDataType.BLOB, binary, new Binary[2]},
+      {TSDataType.OBJECT, binary, new Binary[2]},
+      {TSDataType.VECTOR, vector, new TsPrimitiveType[2][]}
+    };
+
+    for (Object[] testCase : testCases) {
+      TSDataType dataType = (TSDataType) testCase[0];
+      Type type = Type.fromTsDataType(dataType);
+      BatchData batchData = new BatchData(dataType);
+      batchData.putAnObject(1L, testCase[1]);
+      Object array = testCase[2];
+      type.write(batchData, array, 1);
+      TsPrimitiveType actual = type.getValueAsTsPrimitiveType(array, 1);
+      Assert.assertEquals(batchData.currentTsPrimitiveType(), actual);
+      Assert.assertEquals(batchData.currentTsPrimitiveType().getDataType(), 
actual.getDataType());
+    }
+
+    Type rowType = RowType.anonymousRow(IntType.getInstance(), 
LongType.getInstance());
+    BatchData vectorBatchData = new BatchData(TSDataType.VECTOR);
+    vectorBatchData.putAnObject(1L, vector);
+    TsPrimitiveType[][] rowArray = new TsPrimitiveType[2][];
+    rowType.write(vectorBatchData, rowArray, 1);
+    Assert.assertEquals(
+        vectorBatchData.currentTsPrimitiveType(), 
rowType.getValueAsTsPrimitiveType(rowArray, 1));
+
+    try {
+      Type.fromTsDataType(TSDataType.UNKNOWN).write((BatchData) null, new 
Object[1], 0);
+      Assert.fail("Expected UnsupportedOperationException");
+    } catch (UnsupportedOperationException ignored) {
+      // Expected.
+    }
+  }
+
   @Test
   public void testGetValueAsTsPrimitiveType() {
     Binary binary = new Binary("test", StandardCharsets.UTF_8);

Reply via email to