void copyListColumn(ColumnVector destination,
                       ColumnVector source,
                       int sourceOffset,
                       int length) {
    ListColumnVector castedSource = (ListColumnVector) source;
    ListColumnVector castedDestination = (ListColumnVector) destination;
    castedDestination.isRepeating = castedSource.noNulls;
    castedDestination.noNulls = castedSource.noNulls;
    if (source.isRepeating) {
      castedDestination.isNull[0] = castedSource.isNull[0];
      castedDestination.offsets[0] = 0;
      castedDestination.lengths[0] = castedSource.lengths[0];
      copyColumn(castedDestination.child, castedSource.child,
          (int) castedSource.offsets[0], (int) castedSource.lengths[0]);
    } else {
      if (!castedSource.noNulls) {
        for (int r = 0; r < length; ++r) {
          castedDestination.isNull[r] = castedSource.isNull[sourceOffset + r];
        }
      }
      int minOffset = Integer.MAX_VALUE;
      int maxOffset = Integer.MIN_VALUE;
      for(int r=0; r < length; ++r) {
        int childOffset = (int) castedSource.offsets[r + sourceOffset];
        int childLength = (int) castedSource.lengths[r + sourceOffset];
        castedDestination.offsets[r] = childOffset;
        castedDestination.lengths[r] = childLength;
        minOffset = Math.min(minOffset, childOffset);
        maxOffset = Math.max(maxOffset, childOffset + childLength);
      }
      if (minOffset <= maxOffset) {
        castedDestination.childCount = maxOffset - minOffset + 1;
        copyColumn(castedDestination.child, castedSource.child,
            minOffset, castedDestination.childCount);
      } else {
        castedDestination.childCount = 0;
      }
    }
  }
If the current batch is empty, get a new one.
@return true if we have rows available.
@throws IOException
ql/src/java/org/apache/hadoop/hive/ql/io/orc/RecordReaderImpl.java