diff --git ql/src/java/org/apache/hadoop/hive/ql/io/orc/RecordReaderImpl.java ql/src/java/org/apache/hadoop/hive/ql/io/orc/RecordReaderImpl.java index cfa78cb..398ad25 100644 --- ql/src/java/org/apache/hadoop/hive/ql/io/orc/RecordReaderImpl.java +++ ql/src/java/org/apache/hadoop/hive/ql/io/orc/RecordReaderImpl.java @@ -2251,7 +2251,8 @@ static TruthValue evaluatePredicateRange(PredicateLeaf predicate, Object min, Object minValue = getPrimitiveObject(predObj, min); Object maxValue = getPrimitiveObject(predObj, max); - switch (predicate.getOperator()) { + try { + switch (predicate.getOperator()) { case NULL_SAFE_EQUALS: loc = compareToRange((Comparable) predicate.getLiteral(), minValue, maxValue); @@ -2345,6 +2346,10 @@ static TruthValue evaluatePredicateRange(PredicateLeaf predicate, Object min, return TruthValue.YES_NO; default: return TruthValue.YES_NO_NULL; + } + } catch (Exception e) { + // select the row group in case of any exception + return TruthValue.YES_NO_NULL; } } diff --git ql/src/test/org/apache/hadoop/hive/ql/io/orc/TestRecordReaderImpl.java ql/src/test/org/apache/hadoop/hive/ql/io/orc/TestRecordReaderImpl.java index 3595e05..8de9d40 100644 --- ql/src/test/org/apache/hadoop/hive/ql/io/orc/TestRecordReaderImpl.java +++ ql/src/test/org/apache/hadoop/hive/ql/io/orc/TestRecordReaderImpl.java @@ -216,6 +216,15 @@ public void testEquals() throws Exception { } @Test + public void testExceptionsInEvalPred() throws Exception { + PredicateLeaf pred = TestSearchArgumentImpl.createPredicateLeaf( + PredicateLeaf.Operator.NULL_SAFE_EQUALS, PredicateLeaf.Type.INTEGER, + "x", 15L, null); + assertEquals(TruthValue.YES_NO_NULL, + RecordReaderImpl.evaluatePredicate(createStringStats("c", "d"), pred)); + } + + @Test public void testNullSafeEquals() throws Exception { PredicateLeaf pred = TestSearchArgumentImpl.createPredicateLeaf (PredicateLeaf.Operator.NULL_SAFE_EQUALS, PredicateLeaf.Type.INTEGER,