diff --git a/presto-hive/src/test/java/com/facebook/presto/hive/TestHivePushdownFilterQueries.java b/presto-hive/src/test/java/com/facebook/presto/hive/TestHivePushdownFilterQueries.java index 93612163403d6..76626bd563a60 100644 --- a/presto-hive/src/test/java/com/facebook/presto/hive/TestHivePushdownFilterQueries.java +++ b/presto-hive/src/test/java/com/facebook/presto/hive/TestHivePushdownFilterQueries.java @@ -622,9 +622,11 @@ public void testStructs() assertQueryUsingH2Cte("SELECT info.orderkey, info.linenumber FROM lineitem_ex", rewriter); assertQueryUsingH2Cte("SELECT info.linenumber, info.shipdate.ship_year FROM lineitem_ex WHERE orderkey < 1000", rewriter); + assertQueryUsingH2Cte("SELECT info.orderkey FROM lineitem_ex WHERE orderkey = 16515", rewriter); assertQueryUsingH2Cte("SELECT info.orderkey FROM lineitem_ex WHERE info IS NULL", rewriter); assertQueryUsingH2Cte("SELECT info.orderkey FROM lineitem_ex WHERE info IS NOT NULL", rewriter); + assertQueryUsingH2Cte("SELECT info.orderkey FROM lineitem_ex WHERE info IS NOT NULL AND orderkey = 16515", rewriter); assertQueryUsingH2Cte("SELECT info, dates FROM lineitem_ex WHERE info.orderkey % 7 = 0", rewriter); assertQueryUsingH2Cte("SELECT info.orderkey, dates FROM lineitem_ex WHERE info.orderkey % 7 = 0", rewriter); @@ -641,6 +643,8 @@ public void testStructs() // filter-only struct assertQueryUsingH2Cte("SELECT orderkey FROM lineitem_ex WHERE info IS NOT NULL"); + assertQueryUsingH2Cte("SELECT orderkey FROM lineitem_ex WHERE info IS NOT NULL AND info.orderkey = 16515", rewriter); + assertQueryUsingH2Cte("SELECT orderkey FROM lineitem_ex WHERE info IS NOT NULL AND info.orderkey + 1 = 16514", rewriter); // filters on subfields assertQueryUsingH2Cte("SELECT info.orderkey, info.linenumber FROM lineitem_ex WHERE info.linenumber = 2", rewriter); diff --git a/presto-orc/src/main/java/com/facebook/presto/orc/reader/StructSelectiveStreamReader.java b/presto-orc/src/main/java/com/facebook/presto/orc/reader/StructSelectiveStreamReader.java index b8e9229a3fac0..732f1532912aa 100644 --- a/presto-orc/src/main/java/com/facebook/presto/orc/reader/StructSelectiveStreamReader.java +++ b/presto-orc/src/main/java/com/facebook/presto/orc/reader/StructSelectiveStreamReader.java @@ -153,7 +153,7 @@ else if (outputRequired || !fieldsWithFilters.isEmpty()) { StreamDescriptor nestedStream = nestedStreams.get(i); String fieldName = nestedStream.getFieldName().toLowerCase(Locale.ENGLISH); Optional fieldOutputType = nestedTypes.isPresent() ? Optional.of(nestedTypes.get().get(i)) : Optional.empty(); - boolean requiredField = requiredFields.map(names -> names.containsKey(fieldName)).orElse(true); + boolean requiredField = requiredFields.map(names -> names.containsKey(fieldName)).orElse(outputRequired); if (requiredField || fieldsWithFilters.contains(fieldName)) { Map nestedFilters = filters.entrySet().stream()