scampi commented on a change in pull request #6402: URL: https://github.com/apache/arrow/pull/6402#discussion_r439780145
########## File path: java/vector/src/main/java/org/apache/arrow/vector/BaseVariableWidthVector.java ########## @@ -740,10 +740,16 @@ private void splitAndTransferOffsetBuffer(int startIndex, int length, BaseVariab final int start = offsetBuffer.getInt(startIndex * OFFSET_WIDTH); final int end = offsetBuffer.getInt((startIndex + length) * OFFSET_WIDTH); final int dataLength = end - start; - target.allocateOffsetBuffer((length + 1) * OFFSET_WIDTH); - for (int i = 0; i < length + 1; i++) { - final int relativeSourceOffset = offsetBuffer.getInt((startIndex + i) * OFFSET_WIDTH) - start; - target.offsetBuffer.setInt(i * OFFSET_WIDTH, relativeSourceOffset); + + if (startIndex == 0) { + target.offsetBuffer = offsetBuffer.slice(0, (1 + length) * OFFSET_WIDTH); + target.offsetBuffer.getReferenceManager().retain(); Review comment: > If the testSplitAndTransfer tests were run with two child buffer allocators I think they would fail. @rymurr there was indeed a problem in that case where the sliced data was not transferred to the target allocator. See da7e3eacaf021580b4aae0f17492c17dbbef44a0 for a test about that. > A clearer/more complete optimization would probably to simply read the initial starting offset at the index that we're slicing from and if that is zero, don't do the allocate/copy @jacques-n I have extended the condition to include also that case of empties/nulls. See e304816f1e88609ce79a18d45c657901489e0b13 ---------------------------------------------------------------- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. For queries about this service, please contact Infrastructure at: us...@infra.apache.org