@@ -686,24 +686,30 @@ public void splitAndTransfer(int startIndex, int length) {
686686 startIndex ,
687687 length ,
688688 valueCount );
689- final long startPoint = offsetBuffer .getLong ((long ) startIndex * OFFSET_WIDTH );
690- final long sliceLength =
691- offsetBuffer .getLong ((long ) (startIndex + length ) * OFFSET_WIDTH ) - startPoint ;
692689 to .clear ();
693- to .offsetBuffer = to .allocateOffsetBuffer ((length + 1 ) * OFFSET_WIDTH );
694- /* splitAndTransfer offset buffer */
695- for (int i = 0 ; i < length + 1 ; i ++) {
696- final long relativeOffset =
697- offsetBuffer .getLong ((long ) (startIndex + i ) * OFFSET_WIDTH ) - startPoint ;
698- to .offsetBuffer .setLong ((long ) i * OFFSET_WIDTH , relativeOffset );
690+ if (length > 0 ) {
691+ final long startPoint = offsetBuffer .getLong ((long ) startIndex * OFFSET_WIDTH );
692+ final long sliceLength =
693+ offsetBuffer .getLong ((long ) (startIndex + length ) * OFFSET_WIDTH ) - startPoint ;
694+ to .offsetBuffer = to .allocateOffsetBuffer ((length + 1 ) * OFFSET_WIDTH );
695+ /* splitAndTransfer offset buffer */
696+ for (int i = 0 ; i < length + 1 ; i ++) {
697+ final long relativeOffset =
698+ offsetBuffer .getLong ((long ) (startIndex + i ) * OFFSET_WIDTH ) - startPoint ;
699+ to .offsetBuffer .setLong ((long ) i * OFFSET_WIDTH , relativeOffset );
700+ }
701+ /* splitAndTransfer validity buffer */
702+ splitAndTransferValidityBuffer (startIndex , length , to );
703+ /* splitAndTransfer data buffer */
704+ dataTransferPair .splitAndTransfer (
705+ checkedCastToInt (startPoint ), checkedCastToInt (sliceLength ));
706+ to .lastSet = length - 1 ;
707+ to .setValueCount (length );
708+ } else {
709+ to .ensureEmptyOffsetBufferCapacity (OFFSET_WIDTH );
710+ dataTransferPair .splitAndTransfer (0 , 0 );
711+ to .setValueCount (0 );
699712 }
700- /* splitAndTransfer validity buffer */
701- splitAndTransferValidityBuffer (startIndex , length , to );
702- /* splitAndTransfer data buffer */
703- dataTransferPair .splitAndTransfer (
704- checkedCastToInt (startPoint ), checkedCastToInt (sliceLength ));
705- to .lastSet = length - 1 ;
706- to .setValueCount (length );
707713 }
708714
709715 /*
0 commit comments