This is an automated email from the ASF dual-hosted git repository. emkornfield pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/arrow.git
The following commit(s) were added to refs/heads/master by this push: new a2376a2 ARROW-8158: [Java] Getting length of data buffer and base variable width vector a2376a2 is described below commit a2376a22b3bad46da5a800bfeaac48977e718099 Author: tianchen <niki...@alibaba-inc.com> AuthorDate: Fri Apr 10 22:27:45 2020 -0700 ARROW-8158: [Java] Getting length of data buffer and base variable width vector For string data buffer and base variable width vector can we have a way to get length of the data? For instance, in ArrowColumnVector in StringAccessor we use stringResult.start and stringResult.end, instead we would like to get length of the data through an exposed function. Now we have getStartOffset in BaseVariableVector and getElementStartIndex/getElementEndIndex in BaseListVector. To be consistent, we add getEndOffset for BaseVariableVector. Closes #6684 from tianchen92/ARROW-8158 Authored-by: tianchen <niki...@alibaba-inc.com> Signed-off-by: Micah Kornfield <emkornfi...@gmail.com> --- .../arrow/vector/BaseVariableWidthVector.java | 9 +++++++- .../org/apache/arrow/vector/TestValueVector.java | 24 ++++++++++++++++++++++ 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/java/vector/src/main/java/org/apache/arrow/vector/BaseVariableWidthVector.java b/java/vector/src/main/java/org/apache/arrow/vector/BaseVariableWidthVector.java index 5a595cb..0b8cbb9 100644 --- a/java/vector/src/main/java/org/apache/arrow/vector/BaseVariableWidthVector.java +++ b/java/vector/src/main/java/org/apache/arrow/vector/BaseVariableWidthVector.java @@ -1215,7 +1215,7 @@ public abstract class BaseVariableWidthVector extends BaseValueVector return getStartOffset(index); } - protected final int getStartOffset(int index) { + public final int getStartOffset(int index) { return offsetBuffer.getInt(index * OFFSET_WIDTH); } @@ -1393,4 +1393,11 @@ public abstract class BaseVariableWidthVector extends BaseValueVector public <OUT, IN> OUT accept(VectorVisitor<OUT, IN> visitor, IN value) { return visitor.visit(this, value); } + + /** + * Gets the ending offset of a record, given its index. + */ + public final int getEndOffset(int index) { + return offsetBuffer.getInt((index + 1) * OFFSET_WIDTH); + } } diff --git a/java/vector/src/test/java/org/apache/arrow/vector/TestValueVector.java b/java/vector/src/test/java/org/apache/arrow/vector/TestValueVector.java index 65bc963..61cf853 100644 --- a/java/vector/src/test/java/org/apache/arrow/vector/TestValueVector.java +++ b/java/vector/src/test/java/org/apache/arrow/vector/TestValueVector.java @@ -2701,4 +2701,28 @@ public class TestValueVector { } writer.endList(); } + + @Test + public void testVariableVectorGetEndOffset() { + try (final VarCharVector vector1 = new VarCharVector("v1", allocator); + final VarBinaryVector vector2 = new VarBinaryVector("v2", allocator)) { + + setVector(vector1, STR1, null, STR2); + setVector(vector2, STR1, STR2, STR3); + + assertEquals(0, vector1.getStartOffset(0)); + assertEquals(STR1.length, vector1.getEndOffset(0)); + assertEquals(STR1.length, vector1.getStartOffset(1)); + assertEquals(STR1.length, vector1.getEndOffset(1)); + assertEquals(STR1.length, vector1.getStartOffset(2)); + assertEquals(STR1.length + STR2.length, vector1.getEndOffset(2)); + + assertEquals(0, vector2.getStartOffset(0)); + assertEquals(STR1.length, vector2.getEndOffset(0)); + assertEquals(STR1.length, vector2.getStartOffset(1)); + assertEquals(STR1.length + STR2.length, vector2.getEndOffset(1)); + assertEquals(STR1.length + STR2.length, vector2.getStartOffset(2)); + assertEquals(STR1.length + STR2.length + STR3.length, vector2.getEndOffset(2)); + } + } }