diff --git a/java/core/src/java/org/apache/orc/impl/RecordReaderImpl.java b/java/core/src/java/org/apache/orc/impl/RecordReaderImpl.java index 5c0aec3616..393434097d 100644 --- a/java/core/src/java/org/apache/orc/impl/RecordReaderImpl.java +++ b/java/core/src/java/org/apache/orc/impl/RecordReaderImpl.java @@ -649,7 +649,8 @@ private static TruthValue evaluatePredicateMinMax(PredicateLeaf predicate, // for a single value, look through to see if that value is in the // set for (Object arg : predicate.getLiteralList()) { - if (range.compare((Comparable) arg) == Location.MIN) { + predObj = getBaseObjectForComparison(predicate.getType(), (Comparable) arg); + if (range.compare(predObj) == Location.MIN) { return range.addNull(TruthValue.YES); } } diff --git a/java/core/src/test/org/apache/orc/impl/TestRecordReaderImpl.java b/java/core/src/test/org/apache/orc/impl/TestRecordReaderImpl.java index 4375d3a2c5..4247733b10 100644 --- a/java/core/src/test/org/apache/orc/impl/TestRecordReaderImpl.java +++ b/java/core/src/test/org/apache/orc/impl/TestRecordReaderImpl.java @@ -1082,6 +1082,23 @@ public void testIn() throws Exception { evaluateInteger(createIntStats(12L, 18L), pred)); } + @Test + public void testInDatePredConversion() { + List args = new ArrayList<>(); + args.add(toDate(LocalDate.ofEpochDay(15))); + PredicateLeaf pred = createPredicateLeaf + (PredicateLeaf.Operator.IN, PredicateLeaf.Type.DATE, + "x", null, args); + assertEquals(TruthValue.YES_NULL, + evaluateInteger(createDateStats(15, 15), pred)); + assertEquals(TruthValue.YES_NO_NULL, + evaluateInteger(createDateStats(10, 30), pred)); + assertEquals(TruthValue.NO_NULL, + evaluateInteger(createDateStats(5, 10), pred)); + assertEquals(TruthValue.NO_NULL, + evaluateInteger(createDateStats(16, 30), pred)); + } + @Test public void testBetween() { List args = new ArrayList();