This is an automated email from the ASF dual-hosted git repository. jackietien pushed a commit to branch ObLenInUDF in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit 76b9eb801e0b5a4bbd1d9c46b36d663e90c88bcc Author: JackieTien97 <[email protected]> AuthorDate: Tue Dec 23 16:02:42 2025 +0800 Support objectLength in Record interface of udf-api --- .../java/org/apache/iotdb/udf/api/relational/access/Record.java | 8 ++++++++ .../execution/operator/process/function/partition/Slice.java | 9 +++++++++ .../operator/source/relational/aggregation/RecordIterator.java | 9 +++++++++ .../iotdb/db/queryengine/plan/function/RecordObjectTypeTest.java | 2 ++ 4 files changed, 28 insertions(+) diff --git a/iotdb-api/udf-api/src/main/java/org/apache/iotdb/udf/api/relational/access/Record.java b/iotdb-api/udf-api/src/main/java/org/apache/iotdb/udf/api/relational/access/Record.java index 538b8c296c1..d9a65ad654b 100644 --- a/iotdb-api/udf-api/src/main/java/org/apache/iotdb/udf/api/relational/access/Record.java +++ b/iotdb-api/udf-api/src/main/java/org/apache/iotdb/udf/api/relational/access/Record.java @@ -124,6 +124,14 @@ public interface Record { */ Optional<File> getObjectFile(int columnIndex); + /** + * Returns the OBJECT value's real file length at the specified column in this row. + * + * @param columnIndex index of the specified column + * @return length of the object + */ + long objectLength(int columnIndex); + /** * Returns the Binary representation of an object stored at the specified column in this row. * diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/process/function/partition/Slice.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/process/function/partition/Slice.java index 57f04be9e00..e05381f6de4 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/process/function/partition/Slice.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/process/function/partition/Slice.java @@ -219,6 +219,15 @@ public class Slice { return ObjectTypeUtils.getObjectPathFromBinary(getBinarySafely(columnIndex)); } + @Override + public long objectLength(int columnIndex) { + if (getDataType(columnIndex) != Type.OBJECT) { + throw new UnsupportedOperationException("current column is not object column"); + } + Binary binary = getBinarySafely(columnIndex); + return ObjectTypeUtils.getObjectLength(binary); + } + @Override public Binary readObject(int columnIndex, long offset, int length) { if (getDataType(columnIndex) != Type.OBJECT) { diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/relational/aggregation/RecordIterator.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/relational/aggregation/RecordIterator.java index 234723b229b..3f3943f9bc3 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/relational/aggregation/RecordIterator.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/relational/aggregation/RecordIterator.java @@ -164,6 +164,15 @@ public class RecordIterator implements Iterator<Record> { return ObjectTypeUtils.getObjectPathFromBinary(getBinarySafely(columnIndex)); } + @Override + public long objectLength(int columnIndex) { + if (getDataType(columnIndex) != Type.OBJECT) { + throw new UnsupportedOperationException("current column is not object column"); + } + Binary binary = getBinarySafely(columnIndex); + return ObjectTypeUtils.getObjectLength(binary); + } + @Override public Binary readObject(int columnIndex, long offset, int length) { if (getDataType(columnIndex) != Type.OBJECT) { diff --git a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/function/RecordObjectTypeTest.java b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/function/RecordObjectTypeTest.java index 876f116a2c2..64d70eb63fa 100644 --- a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/function/RecordObjectTypeTest.java +++ b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/function/RecordObjectTypeTest.java @@ -133,6 +133,8 @@ public class RecordObjectTypeTest { Optional<File> objectFile = record.getObjectFile(0); assertTrue(objectFile.isPresent()); + assertEquals(100L, record.objectLength(0)); + assertEquals("(Object) 100 B", record.getString(0)); Assert.assertFalse(recordIterator.hasNext()); }
