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 fc7cae41c5e8e8137004d28e771d5dff60b21232
Author: Tian Jiang <[email protected]>
AuthorDate: Thu Jul 23 15:43:52 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   |  9 +++++
 .../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    |  5 +++
 .../org/apache/tsfile/read/common/type/Type.java   |  5 +++
 .../apache/tsfile/read/common/type/VectorType.java |  5 +++
 .../java/org/apache/tsfile/utils/TypeServices.java |  6 +++
 .../apache/tsfile/read/common/type/TypeTest.java   | 44 ++++++++++++++++++++++
 14 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 d1c632257..97c7d0f1a 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
@@ -334,6 +334,11 @@ public abstract class AbstractIntType extends AbstractType 
{
     builder.writeInt(value.getInt());
   }
 
+  @Override
+  public void write(TsPrimitiveType value, Object array, int index) {
+    ((int[]) array)[index] = value.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 53f87f7c8..25da498b5 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
@@ -333,6 +333,11 @@ public abstract class AbstractLongType extends 
AbstractType {
     builder.writeLong(value.getLong());
   }
 
+  @Override
+  public void write(TsPrimitiveType value, Object array, int index) {
+    ((long[]) array)[index] = value.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 d40f4fe3f..ebee3bdc3 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
@@ -295,6 +295,11 @@ public abstract class AbstractVarcharType extends 
AbstractType {
     builder.writeBinary(value.getBinary());
   }
 
+  @Override
+  public void write(TsPrimitiveType value, Object array, int index) {
+    ((Binary[]) array)[index] = value.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 c1e1bc88a..040bdc094 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
@@ -313,6 +313,11 @@ public class BlobType extends AbstractType {
     builder.writeBinary(value.getBinary());
   }
 
+  @Override
+  public void write(TsPrimitiveType value, Object array, int index) {
+    ((Binary[]) array)[index] = value.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 ac0044c36..32fe1c037 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
@@ -317,6 +317,11 @@ public class BooleanType extends AbstractType {
     builder.writeBoolean(value.getBoolean());
   }
 
+  @Override
+  public void write(TsPrimitiveType value, Object array, int index) {
+    ((boolean[]) array)[index] = value.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 a90bf5793..1334f2f38 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
@@ -68,6 +68,15 @@ public class DateType extends AbstractIntType {
     return new TsInt(getDateInt(array, rowIndex), TSDataType.DATE);
   }
 
+  @Override
+  public void write(TsPrimitiveType value, Object array, int index) {
+    if (array instanceof int[]) {
+      super.write(value, array, index);
+      return;
+    }
+    ((LocalDate[]) array)[index] = 
DateUtils.parseIntToLocalDate(value.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 40a9b8e1f..f9093b06c 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
@@ -343,6 +343,11 @@ public class DoubleType extends AbstractType {
     builder.writeDouble(value.getDouble());
   }
 
+  @Override
+  public void write(TsPrimitiveType value, Object array, int index) {
+    ((double[]) array)[index] = value.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 d16d237d9..8d1457e05 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
@@ -341,6 +341,11 @@ public class FloatType extends AbstractType {
     builder.writeFloat(value.getFloat());
   }
 
+  @Override
+  public void write(TsPrimitiveType value, Object array, int index) {
+    ((float[]) array)[index] = value.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 b30039236..fa625dc39 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
@@ -303,6 +303,11 @@ public class ObjectType extends AbstractType {
     builder.writeBinary(value.getBinary());
   }
 
+  @Override
+  public void write(TsPrimitiveType value, Object array, int index) {
+    ((Binary[]) array)[index] = value.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 c9339afd8..5fc6faafa 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
@@ -89,6 +89,11 @@ public class RowType extends AbstractType {
     return new TsPrimitiveType.TsVector(((TsPrimitiveType[][]) 
array)[rowIndex]);
   }
 
+  @Override
+  public void write(TsPrimitiveType value, Object array, int index) {
+    ((TsPrimitiveType[][]) array)[index] = value.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 d5b1d7bb5..216a263d2 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
@@ -161,6 +161,11 @@ public interface Type {
     throw new UnsupportedOperationException(getClass().getName());
   }
 
+  /** Writes a TsPrimitiveType value to {@code array} at {@code index}. */
+  default void write(TsPrimitiveType value, Object array, 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 d72370ff1..fb783f630 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
@@ -88,6 +88,11 @@ public class VectorType extends AbstractLongType {
     throw new UnsupportedOperationException(getClass().getName());
   }
 
+  @Override
+  public void write(TsPrimitiveType value, Object array, int index) {
+    ((TsPrimitiveType[][]) array)[index] = value.getVector();
+  }
+
   @Override
   public Object arrayCopyOf(Object array, int newLength) {
     return Arrays.copyOf((long[]) array, newLength);
diff --git 
a/java/tsfile/src/main/java/org/apache/tsfile/utils/TypeServices.java 
b/java/tsfile/src/main/java/org/apache/tsfile/utils/TypeServices.java
index 18f644bba..34c5c16d6 100644
--- a/java/tsfile/src/main/java/org/apache/tsfile/utils/TypeServices.java
+++ b/java/tsfile/src/main/java/org/apache/tsfile/utils/TypeServices.java
@@ -37,6 +37,8 @@ import java.util.function.LongPredicate;
 
 public final class TypeServices {
 
+  // Page value decoding services for BatchData and TsBlock outputs.
+
   public static final TypeService<PageDataValueReader> 
READ_PAGE_VALUE_TO_BATCHDATA_SERVICE =
       type ->
           switch (type.getTypeEnum()) {
@@ -286,6 +288,8 @@ public final class TypeServices {
                 };
           };
 
+  // Value page decoding services for TsPrimitiveType and ColumnBuilder 
outputs.
+
   public static final TypeService<PageDataTsPrimitiveValueReader>
       READ_PAGE_VALUE_TO_TSPRIMITIVETYPE_SERVICE =
           type ->
@@ -426,6 +430,8 @@ public final class TypeServices {
                     };
               };
 
+  // Chunk writing services.
+
   public static final TypeService<EmptyValueChunkWriter> 
WRITE_EMPTY_VALUE_TO_CHUNK_SERVICE =
       type ->
           switch (type.getTypeEnum()) {
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 9f09057fd..aa323eb9e 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
@@ -107,6 +107,50 @@ public class TypeTest {
     }
   }
 
+  @Test
+  public void testWriteTsPrimitiveTypeToArray() {
+    Binary binary = new Binary("value", StandardCharsets.UTF_8);
+    TsPrimitiveType[] vector = {new TsPrimitiveType.TsInt(1), new 
TsPrimitiveType.TsLong(2L)};
+    Object[][] testCases = {
+      {TSDataType.BOOLEAN, new TsPrimitiveType.TsBoolean(true), new 
boolean[2]},
+      {TSDataType.INT32, new TsPrimitiveType.TsInt(1), new int[2]},
+      {TSDataType.DATE, new TsPrimitiveType.TsInt(20260723, TSDataType.DATE), 
new int[2]},
+      {TSDataType.DATE, new TsPrimitiveType.TsInt(20260723, TSDataType.DATE), 
new LocalDate[2]},
+      {TSDataType.INT64, new TsPrimitiveType.TsLong(2L), new long[2]},
+      {TSDataType.TIMESTAMP, new TsPrimitiveType.TsLong(3L), new long[2]},
+      {TSDataType.FLOAT, new TsPrimitiveType.TsFloat(1.25F), new float[2]},
+      {TSDataType.DOUBLE, new TsPrimitiveType.TsDouble(2.5D), new double[2]},
+      {TSDataType.TEXT, new TsPrimitiveType.TsBinary(binary), new Binary[2]},
+      {TSDataType.STRING, new TsPrimitiveType.TsBinary(binary), new Binary[2]},
+      {TSDataType.BLOB, new TsPrimitiveType.TsBinary(binary), new Binary[2]},
+      {TSDataType.OBJECT, new TsPrimitiveType.TsBinary(binary), new Binary[2]},
+      {TSDataType.VECTOR, new TsPrimitiveType.TsVector(vector), new 
TsPrimitiveType[2][]}
+    };
+
+    for (Object[] testCase : testCases) {
+      Type type = Type.fromTsDataType((TSDataType) testCase[0]);
+      TsPrimitiveType expected = (TsPrimitiveType) testCase[1];
+      Object array = testCase[2];
+      type.write(expected, array, 1);
+      TsPrimitiveType actual = type.getValueAsTsPrimitiveType(array, 1);
+      Assert.assertEquals(expected, actual);
+      Assert.assertEquals(expected.getDataType(), actual.getDataType());
+    }
+
+    Type rowType = RowType.anonymousRow(IntType.getInstance(), 
LongType.getInstance());
+    TsPrimitiveType rowValue = new TsPrimitiveType.TsVector(vector);
+    TsPrimitiveType[][] rowArray = new TsPrimitiveType[2][];
+    rowType.write(rowValue, rowArray, 1);
+    Assert.assertEquals(rowValue, rowType.getValueAsTsPrimitiveType(rowArray, 
1));
+
+    try {
+      Type.fromTsDataType(TSDataType.UNKNOWN).write(new 
TsPrimitiveType.TsInt(1), new int[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