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);
