File tree 2 files changed +12
-10
lines changed
2 files changed +12
-10
lines changed Original file line number Diff line number Diff line change @@ -84,7 +84,7 @@ impl AnalyzerRule for TypeCoercion {
84
84
/// Assumes that children have already been optimized
85
85
fn analyze_internal (
86
86
external_schema : & DFSchema ,
87
- mut plan : LogicalPlan ,
87
+ plan : LogicalPlan ,
88
88
) -> Result < Transformed < LogicalPlan > > {
89
89
// get schema representing all available input fields. This is used for data type
90
90
// resolution only, so order does not matter here
@@ -103,15 +103,13 @@ fn analyze_internal(
103
103
// select t2.c2 from t1 where t1.c1 in (select t2.c1 from t2 where t2.c2=t1.c3)
104
104
schema. merge ( external_schema) ;
105
105
106
- if let LogicalPlan :: Filter ( filter) = & mut plan {
107
- if let Ok ( new_predicate) = filter
108
- . predicate
109
- . clone ( )
110
- . cast_to ( & DataType :: Boolean , filter. input . schema ( ) )
111
- {
112
- filter. predicate = new_predicate;
113
- }
114
- }
106
+ // Coerce filter predicates to boolean (handles `WHERE NULL`)
107
+ let plan = if let LogicalPlan :: Filter ( mut filter) = plan {
108
+ filter. predicate = filter. predicate . cast_to ( & DataType :: Boolean , & schema) ?;
109
+ LogicalPlan :: Filter ( filter)
110
+ } else {
111
+ plan
112
+ } ;
115
113
116
114
let mut expr_rewrite = TypeCoercionRewriter :: new ( & schema) ;
117
115
Original file line number Diff line number Diff line change @@ -30,6 +30,10 @@ query I
30
30
select 1 where NULL
31
31
----
32
32
33
+ # Where clause does not accept non boolean and has nice error message
34
+ query error Cannot create filter with non\-boolean predicate 'Utf8\("foo"\)' returning Utf8
35
+ select 1 where 'foo'
36
+
33
37
query I
34
38
select 1 where NULL and 1 = 1
35
39
----
You can’t perform that action at this time.
0 commit comments