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;