DRILL-7774: IS NOT NULL predicate fails with NPE for the case of non-existing columns with non-deterministic expression
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/expr/FilterBuilder.java b/exec/java-exec/src/main/java/org/apache/drill/exec/expr/FilterBuilder.java
index f4c19cb..a2afe12 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/expr/FilterBuilder.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/expr/FilterBuilder.java
@@ -304,7 +304,9 @@
}
LogicalExpression arg = functionHolderExpression.args.get(0);
- return IsPredicate.createIsPredicate(funcName, arg.accept(this, value));
+ LogicalExpression expression = arg.accept(this, value);
+
+ return expression == null ? null : IsPredicate.createIsPredicate(funcName, expression);
}
private static boolean isCompareFunction(String funcName) {
diff --git a/exec/java-exec/src/test/java/org/apache/drill/exec/store/parquet/TestParquetFilterPushDown.java b/exec/java-exec/src/test/java/org/apache/drill/exec/store/parquet/TestParquetFilterPushDown.java
index 25ba8fd..f530945 100644
--- a/exec/java-exec/src/test/java/org/apache/drill/exec/store/parquet/TestParquetFilterPushDown.java
+++ b/exec/java-exec/src/test/java/org/apache/drill/exec/store/parquet/TestParquetFilterPushDown.java
@@ -684,6 +684,19 @@
}
@Test
+ public void tesNonDeterministicIsNotNullWithNonExistingColumn() throws Exception {
+ String query = "select count(*) as cnt from cp.`tpch/nation.parquet`\n" +
+ "where (case when random() = 1 then true else null end * t) is not null";
+
+ testBuilder()
+ .sqlQuery(query)
+ .unOrdered()
+ .baselineColumns("cnt")
+ .baselineValues(0L)
+ .go();
+ }
+
+ @Test
public void testParquetSingleRowGroupFilterRemoving() throws Exception {
test("create table dfs.tmp.`singleRowGroupTable` as select * from cp.`tpch/nation.parquet`");