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

Reply via email to