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 fcd9b26..e3afa60 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 @@ -2490,7 +2490,8 @@ static TruthValue evaluatePredicateRange(PredicateLeaf predicate, Object min, return hasNull ? TruthValue.YES_NO_NULL : TruthValue.YES_NO; } case IS_NULL: - return hasNull ? TruthValue.YES : TruthValue.NO; + // min = null condition above handles the all-nulls YES case + return hasNull ? TruthValue.YES_NO : TruthValue.NO; default: return hasNull ? TruthValue.YES_NO_NULL : TruthValue.YES_NO; } 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 cab6538..a86d19f 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 @@ -750,7 +750,7 @@ public void testIsNullWithNullInStats() throws Exception { PredicateLeaf pred = TestSearchArgumentImpl.createPredicateLeaf (PredicateLeaf.Operator.IS_NULL, PredicateLeaf.Type.STRING, "x", null, null); - assertEquals(TruthValue.YES, + assertEquals(TruthValue.YES_NO, RecordReaderImpl.evaluatePredicate(createStringStats("c", "d", true), pred)); assertEquals(TruthValue.NO, RecordReaderImpl.evaluatePredicate(createStringStats("c", "d", false), pred)); diff --git ql/src/test/results/clientpositive/orc_predicate_pushdown.q.out ql/src/test/results/clientpositive/orc_predicate_pushdown.q.out index d169fbb..8b26470 100644 --- ql/src/test/results/clientpositive/orc_predicate_pushdown.q.out +++ ql/src/test/results/clientpositive/orc_predicate_pushdown.q.out @@ -747,6 +747,9 @@ POSTHOOK: query: SELECT t, si, d, s FROM orc_pred POSTHOOK: type: QUERY POSTHOOK: Input: default@orc_pred #### A masked pattern was here #### +101 327 11.48 gabriella ellison +15 334 11.12 jessica robinson +7 320 11.54 bob ellison PREHOOK: query: EXPLAIN SELECT t, si, d, s FROM orc_pred WHERE d >= ROUND(9.99) AND d < 12 @@ -943,6 +946,7 @@ POSTHOOK: query: SELECT t, si, d, s FROM orc_pred POSTHOOK: type: QUERY POSTHOOK: Input: default@orc_pred #### A masked pattern was here #### +15 334 11.12 jessica robinson PREHOOK: query: EXPLAIN SELECT t, si, d, s FROM orc_pred WHERE t > 10 AND t <> 101