diff --git a/vector/src/main/java/org/apache/arrow/vector/complex/ListViewVector.java b/vector/src/main/java/org/apache/arrow/vector/complex/ListViewVector.java index 9b4e6b4c0..76708aa20 100644 --- a/vector/src/main/java/org/apache/arrow/vector/complex/ListViewVector.java +++ b/vector/src/main/java/org/apache/arrow/vector/complex/ListViewVector.java @@ -956,7 +956,7 @@ public int getElementStartIndex(int index) { @Override public int getElementEndIndex(int index) { - return sizeBuffer.getInt(index * OFFSET_WIDTH); + return offsetBuffer.getInt((index + 1) * OFFSET_WIDTH); } @Override diff --git a/vector/src/test/java/org/apache/arrow/vector/TestListViewVector.java b/vector/src/test/java/org/apache/arrow/vector/TestListViewVector.java index 639585fc4..1fd77edeb 100644 --- a/vector/src/test/java/org/apache/arrow/vector/TestListViewVector.java +++ b/vector/src/test/java/org/apache/arrow/vector/TestListViewVector.java @@ -2223,4 +2223,31 @@ private void writeIntValues(UnionListViewWriter writer, int[] values) { } writer.endListView(); } + + @Test + public void testGetElementEndIndex() { + try (ListViewVector vector = ListViewVector.empty("list", allocator)) { + vector.allocateNew(); + + UnionListViewWriter writer = vector.getWriter(); + + writer.setPosition(0); + writer.startListView(); + writer.integer().writeInt(1); + writer.integer().writeInt(2); + writer.endListView(); + + writer.setPosition(1); + writer.startListView(); + writer.integer().writeInt(3); + writer.integer().writeInt(4); + writer.integer().writeInt(5); + writer.endListView(); + + vector.setValueCount(2); + + assertEquals(2, vector.getElementEndIndex(0)); + assertEquals(5, vector.getElementEndIndex(1)); + } + } }