diff --git ql/src/java/org/apache/hadoop/hive/ql/io/orc/SerializationUtils.java ql/src/java/org/apache/hadoop/hive/ql/io/orc/SerializationUtils.java index 1cd84f9..20c8c6d 100644 --- ql/src/java/org/apache/hadoop/hive/ql/io/orc/SerializationUtils.java +++ ql/src/java/org/apache/hadoop/hive/ql/io/orc/SerializationUtils.java @@ -200,7 +200,7 @@ static BigInteger readBigInteger(InputStream input) throws IOException { */ static int findClosestNumBits(long value) { int count = 0; - while (value > 0) { + while (value != 0) { count++; value = value >>> 1; } diff --git ql/src/test/org/apache/hadoop/hive/ql/io/orc/TestNewIntegerEncoding.java ql/src/test/org/apache/hadoop/hive/ql/io/orc/TestNewIntegerEncoding.java index 6b5178a..a72070b 100644 --- ql/src/test/org/apache/hadoop/hive/ql/io/orc/TestNewIntegerEncoding.java +++ ql/src/test/org/apache/hadoop/hive/ql/io/orc/TestNewIntegerEncoding.java @@ -878,6 +878,38 @@ public void testPatchedBase511() throws Exception { } @Test + public void testDirectLargeNegatives() throws Exception { + ObjectInspector inspector; + synchronized (TestOrcFile.class) { + inspector = ObjectInspectorFactory.getReflectionObjectInspector(Long.class, + ObjectInspectorFactory.ObjectInspectorOptions.JAVA); + } + + Writer writer = OrcFile.createWriter(testFilePath, + OrcFile.writerOptions(conf).inspector(inspector).stripeSize(100000).bufferSize(10000)); + + writer.addRow(-7486502418706614742L); + writer.addRow(0L); + writer.addRow(1L); + writer.addRow(1L); + writer.addRow(-5535739865598783616L); + writer.close(); + + Reader reader = OrcFile.createReader(fs, testFilePath); + RecordReader rows = reader.rows(null); + Object row = rows.next(null); + assertEquals(-7486502418706614742L, ((LongWritable) row).get()); + row = rows.next(row); + assertEquals(0L, ((LongWritable) row).get()); + row = rows.next(row); + assertEquals(1L, ((LongWritable) row).get()); + row = rows.next(row); + assertEquals(1L, ((LongWritable) row).get()); + row = rows.next(row); + assertEquals(-5535739865598783616L, ((LongWritable) row).get()); + } + + @Test public void testSeek() throws Exception { ObjectInspector inspector; synchronized (TestOrcFile.class) {