This is an automated email from the ASF dual-hosted git repository.

viirya pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/arrow-datafusion.git


The following commit(s) were added to refs/heads/main by this push:
     new 2cf5f5b5bb Fix panic in filter predicate (#7126)
2cf5f5b5bb is described below

commit 2cf5f5b5bb824598de185d64c541c52c930728cf
Author: Andrew Lamb <[email protected]>
AuthorDate: Sat Jul 29 15:07:29 2023 -0500

    Fix panic in filter predicate (#7126)
---
 datafusion/core/src/physical_plan/filter.rs        | 10 ++----
 .../tests/sqllogictests/test_files/predicates.slt  | 39 ++++++++++++++++++++++
 2 files changed, 42 insertions(+), 7 deletions(-)

diff --git a/datafusion/core/src/physical_plan/filter.rs 
b/datafusion/core/src/physical_plan/filter.rs
index bb45149026..29a705daf0 100644
--- a/datafusion/core/src/physical_plan/filter.rs
+++ b/datafusion/core/src/physical_plan/filter.rs
@@ -41,8 +41,7 @@ use datafusion_common::{DataFusionError, Result};
 use datafusion_execution::TaskContext;
 use datafusion_expr::Operator;
 use datafusion_physical_expr::expressions::BinaryExpr;
-use datafusion_physical_expr::intervals::is_operator_supported;
-use datafusion_physical_expr::utils::collect_columns;
+use datafusion_physical_expr::intervals::check_support;
 use datafusion_physical_expr::{
     analyze, split_conjunction, AnalysisContext, ExprBoundaries,
     OrderingEquivalenceProperties, PhysicalExpr,
@@ -191,11 +190,8 @@ impl ExecutionPlan for FilterExec {
     fn statistics(&self) -> Statistics {
         let predicate = self.predicate();
 
-        if let Some(binary) = predicate.as_any().downcast_ref::<BinaryExpr>() {
-            let columns = collect_columns(predicate);
-            if !is_operator_supported(binary.op()) || columns.is_empty() {
-                return Statistics::default();
-            }
+        if !check_support(predicate) {
+            return Statistics::default();
         }
 
         let input_stats = self.input.statistics();
diff --git a/datafusion/core/tests/sqllogictests/test_files/predicates.slt 
b/datafusion/core/tests/sqllogictests/test_files/predicates.slt
index f37495c47c..2bd20b8106 100644
--- a/datafusion/core/tests/sqllogictests/test_files/predicates.slt
+++ b/datafusion/core/tests/sqllogictests/test_files/predicates.slt
@@ -347,3 +347,42 @@ drop table alltypes_plain;
 
 statement ok
 DROP TABLE test;
+
+#########
+# Predicates on memory tables / statistics generation
+# Reproducer for https://github.com/apache/arrow-datafusion/issues/7125
+#########
+
+statement ok
+CREATE TABLE t (i integer, s string, b boolean) AS VALUES
+ (1,    'One', true),
+ (2,    'Two', false),
+ (NULL, NULL,  NULL),
+ (4,    'Four', false)
+ ;
+
+query ITB
+select * from t where (b OR b) = b;
+----
+1 One true
+2 Two false
+4 Four false
+
+query ITB
+select * from t where (s LIKE 'T%') = true;
+----
+2 Two false
+
+query ITB
+select * from t where (i & 3) = 1;
+----
+1 One true
+
+
+
+
+########
+# Clean up after the test
+########
+statement ok
+DROP TABLE t;

Reply via email to