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