This is an automated email from the ASF dual-hosted git repository.
jiangtian pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/tsfile.git
The following commit(s) were added to refs/heads/develop by this push:
new d14d01ba Add dedicated Tablet API for object path writes. (#780)
d14d01ba is described below
commit d14d01ba1c1695dec899fb37efc96ad0e00bd78b
Author: Zhenyu Luo <[email protected]>
AuthorDate: Tue Apr 14 10:15:30 2026 +0800
Add dedicated Tablet API for object path writes. (#780)
---
.../org/apache/tsfile/write/record/Tablet.java | 43 +++++++++++++++++++++-
1 file changed, 42 insertions(+), 1 deletion(-)
diff --git
a/java/tsfile/src/main/java/org/apache/tsfile/write/record/Tablet.java
b/java/tsfile/src/main/java/org/apache/tsfile/write/record/Tablet.java
index 08142301..18a130f5 100644
--- a/java/tsfile/src/main/java/org/apache/tsfile/write/record/Tablet.java
+++ b/java/tsfile/src/main/java/org/apache/tsfile/write/record/Tablet.java
@@ -314,11 +314,12 @@ public class Tablet implements Accountable {
case TEXT:
case STRING:
case BLOB:
+ case OBJECT:
{
if (value != null && !(value instanceof Binary) && !(value
instanceof String)) {
throw new IllegalArgumentException(
String.format(
- "Expected value of type Binary for data type %s, but got
%s",
+ "Expected value of type Binary or String for data type %s,
but got %s",
dataType, value.getClass().getName()));
}
final Binary[] sensor = (Binary[]) values[indexOfSchema];
@@ -528,6 +529,41 @@ public class Tablet implements Accountable {
addValue(rowIndex, columnIndex, val);
}
+ @TsFileApi
+ public void addObjectPathValue(int rowIndex, String measurement, String
objectPath) {
+ int columnIndex = getColumnIndexByMeasurement(measurement);
+ addObjectPathValue(rowIndex, columnIndex, objectPath);
+ }
+
+ @TsFileApi
+ public void addObjectPathValue(int rowIndex, int columnIndex, String
objectPath) {
+ if (objectPath == null) {
+ return;
+ }
+ addObjectPathValue(rowIndex, columnIndex,
objectPath.getBytes(TSFileConfig.STRING_CHARSET));
+ }
+
+ @TsFileApi
+ public void addObjectPathValue(int rowIndex, String measurement, byte[]
objectPath) {
+ int columnIndex = getColumnIndexByMeasurement(measurement);
+ addObjectPathValue(rowIndex, columnIndex, objectPath);
+ }
+
+ @TsFileApi
+ public void addObjectPathValue(int rowIndex, int columnIndex, byte[]
objectPath) {
+ if (!(values[columnIndex] instanceof Binary[])
+ || schemas.get(columnIndex).getType() != TSDataType.OBJECT) {
+ throw new IllegalArgumentException(
+ "The data type of column index " + columnIndex + " is not OBJECT");
+ }
+ if (objectPath == null) {
+ return;
+ }
+ final Binary[] sensor = (Binary[]) values[columnIndex];
+ sensor[rowIndex] = new Binary(objectPath);
+ updateBitMap(rowIndex, columnIndex, false);
+ }
+
@TsFileApi
public void addValue(int rowIndex, int columnIndex, byte[] val) {
if (!(values[columnIndex] instanceof Binary[])
@@ -818,6 +854,7 @@ public class Tablet implements Accountable {
case TEXT:
case STRING:
case BLOB:
+ case OBJECT:
Binary[] binaryValues = (Binary[]) column;
for (int j = 0; j < rowSize; j++) {
ReadWriteIOUtils.write(BytesUtils.boolToByte(binaryValues[j] !=
null), stream);
@@ -964,6 +1001,7 @@ public class Tablet implements Accountable {
case TEXT:
case STRING:
case BLOB:
+ case OBJECT:
Binary[] binaryValues = new Binary[rowSize];
for (int index = 0; index < rowSize; index++) {
boolean isNotNull =
BytesUtils.byteToBool(ReadWriteIOUtils.readByte(byteBuffer));
@@ -1121,6 +1159,7 @@ public class Tablet implements Accountable {
case TEXT:
case STRING:
case BLOB:
+ case OBJECT:
Binary[] thisBinaryValues = (Binary[]) values[i];
Binary[] thatBinaryValues = (Binary[]) thatValues[i];
if (thisBinaryValues.length < rowSize || thatBinaryValues.length <
rowSize) {
@@ -1216,6 +1255,7 @@ public class Tablet implements Accountable {
case BLOB:
case TEXT:
case STRING:
+ case OBJECT:
return ((Binary[]) values[j])[i];
case INT32:
return ((int[]) values[j])[i];
@@ -1555,6 +1595,7 @@ public class Tablet implements Accountable {
case STRING:
case TEXT:
case BLOB:
+ case OBJECT:
totalSizeInBytes += RamUsageEstimator.sizeOf((Binary[])
values[column]);
break;
}