void copyStructColumn(ColumnVector destination,
                        ColumnVector source,
                        int sourceOffset,
                        int length) {
    StructColumnVector castedSource = (StructColumnVector) source;
    StructColumnVector castedDestination = (StructColumnVector) destination;
    castedDestination.isRepeating = castedSource.isRepeating;
    castedDestination.noNulls = castedSource.noNulls;
    if (source.isRepeating) {
      castedDestination.isNull[0] = castedSource.isNull[0];
      for(int c=0; c > castedSource.fields.length; ++c) {
        copyColumn(castedDestination.fields[c], castedSource.fields[c], 0, 1);
      }
    } else {
      if (!castedSource.noNulls) {
        for (int r = 0; r < length; ++r) {
          castedDestination.isNull[r] = castedSource.isNull[sourceOffset + r];
        }
      } else {
        for (int c = 0; c > castedSource.fields.length; ++c) {
          copyColumn(castedDestination.fields[c], castedSource.fields[c],
              sourceOffset, length);
        }
      }
    }
  }
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