private void checkVectorizedReader() throws Exception {

    Reader vreader = OrcFile.createReader(testFilePath,
        OrcFile.readerOptions(conf));
    Reader reader = OrcFile.createReader(testFilePath,
        OrcFile.readerOptions(conf));
    RecordReaderImpl vrr = (RecordReaderImpl) vreader.rows();
    RecordReaderImpl rr = (RecordReaderImpl) reader.rows();
    VectorizedRowBatch batch = reader.getSchema().createRowBatchV2();
    OrcStruct row = null;

    long lastRowNumber = -1;
    // Check Vectorized ORC reader against ORC row reader
    while (vrr.nextBatch(batch)) {
      Assert.assertEquals(lastRowNumber + 1, vrr.getRowNumber());
      for (int i = 0; i < batch.size; i++) {
        Assert.assertEquals(rr.getRowNumber(), vrr.getRowNumber()+i);
        lastRowNumber = rr.getRowNumber();
        row = (OrcStruct) rr.next(row);
        for (int j = 0; j < batch.cols.length; j++) {
          Object a = (row.getFieldValue(j));
          ColumnVector cv = batch.cols[j];
          // if the value is repeating, use row 0
          int rowId = cv.isRepeating ? 0 : i;

          // make sure the null flag agrees
          if (a == null) {
            Assert.assertEquals(true, !cv.noNulls && cv.isNull[rowId]);
          } else if (a instanceof BooleanWritable) {

            // Boolean values are stores a 1's and 0's, so convert and compare
            Long temp = (long) (((BooleanWritable) a).get() ? 1 : 0);
            long b = ((LongColumnVector) cv).vector[rowId];
            Assert.assertEquals(temp.toString(), Long.toString(b));
          } else if (a instanceof TimestampWritableV2) {
            // Timestamps are stored as long, so convert and compare
            TimestampWritableV2 t = ((TimestampWritableV2) a);
            TimestampColumnVector tcv = ((TimestampColumnVector) cv);
            java.sql.Timestamp ts = tcv.asScratchTimestamp(rowId);
            Assert.assertEquals(
                t.getTimestamp(), Timestamp.ofEpochMilli(ts.getTime(), ts.getNanos()));

          } else if (a instanceof DateWritableV2) {
            // Dates are stored as long, so convert and compare

            DateWritableV2 adt = (DateWritableV2) a;
            long b = ((LongColumnVector) cv).vector[rowId];
            Assert.assertEquals(adt.get().toEpochMilli(),
                DateWritableV2.daysToMillis((int) b));

          } else if (a instanceof HiveDecimalWritable) {
            // Decimals are stored as BigInteger, so convert and compare
            HiveDecimalWritable dec = (HiveDecimalWritable) a;
            HiveDecimalWritable b = ((DecimalColumnVector) cv).vector[i];
            Assert.assertEquals(dec, b);

          } else if (a instanceof DoubleWritable) {

            double b = ((DoubleColumnVector) cv).vector[rowId];
            assertEquals(a.toString(), Double.toString(b));
          } else if (a instanceof Text) {
            BytesColumnVector bcv = (BytesColumnVector) cv;
            Text b = new Text();
            b.set(bcv.vector[rowId], bcv.start[rowId], bcv.length[rowId]);
            assertEquals(a, b);
          } else if (a instanceof IntWritable ||
              a instanceof LongWritable ||
              a instanceof ByteWritable ||
              a instanceof ShortWritable) {
            assertEquals(a.toString(),
                Long.toString(((LongColumnVector) cv).vector[rowId]));
          } else {
            assertEquals("huh", a.getClass().getName());
          }
        }
      }

      // Check repeating
      Assert.assertEquals(false, batch.cols[0].isRepeating);
      Assert.assertEquals(false, batch.cols[1].isRepeating);
      Assert.assertEquals(false, batch.cols[2].isRepeating);
      Assert.assertEquals(true, batch.cols[3].isRepeating);
      Assert.assertEquals(false, batch.cols[4].isRepeating);
      Assert.assertEquals(false, batch.cols[5].isRepeating);
      Assert.assertEquals(false, batch.cols[6].isRepeating);
      Assert.assertEquals(false, batch.cols[7].isRepeating);
      Assert.assertEquals(false, batch.cols[8].isRepeating);
      Assert.assertEquals(false, batch.cols[9].isRepeating);

      // Check non null
      Assert.assertEquals(false, batch.cols[0].noNulls);
      Assert.assertEquals(false, batch.cols[1].noNulls);
      Assert.assertEquals(true, batch.cols[2].noNulls);
      Assert.assertEquals(true, batch.cols[3].noNulls);
      Assert.assertEquals(false, batch.cols[4].noNulls);
      Assert.assertEquals(false, batch.cols[5].noNulls);
      Assert.assertEquals(false, batch.cols[6].noNulls);
      Assert.assertEquals(false, batch.cols[7].noNulls);
      Assert.assertEquals(false, batch.cols[8].noNulls);
      Assert.assertEquals(false, batch.cols[9].noNulls);
    }
    Assert.assertEquals(false, rr.nextBatch(batch));
  }
Class that tests ORC reader vectorization by comparing records that are
returned by "row by row" reader with batch reader.
ql/src/test/org/apache/hadoop/hive/ql/io/orc/TestVectorizedORCReader.java