@@ -55,9 +55,9 @@ use datafusion_common::tree_node::{
5555} ;
5656use datafusion_common:: {
5757 aggregate_functional_dependencies, internal_err, plan_err, Column , Constraints ,
58- DFSchema , DFSchemaRef , DataFusionError , Dependency , FunctionalDependence ,
59- FunctionalDependencies , ParamValues , Result , ScalarValue , Spans , TableReference ,
60- UnnestOptions ,
58+ DFSchema , DFSchemaRef , DataFusionError , Dependency , EqualityNullBehavior ,
59+ FunctionalDependence , FunctionalDependencies , ParamValues , Result , ScalarValue ,
60+ Spans , TableReference , UnnestOptions ,
6161} ;
6262use indexmap:: IndexSet ;
6363
@@ -655,7 +655,7 @@ impl LogicalPlan {
655655 join_constraint,
656656 on,
657657 schema : _,
658- null_equals_null,
658+ equality_null_behavior : null_equals_null,
659659 } ) => {
660660 let schema =
661661 build_join_schema ( left. schema ( ) , right. schema ( ) , & join_type) ?;
@@ -676,7 +676,7 @@ impl LogicalPlan {
676676 on : new_on,
677677 filter,
678678 schema : DFSchemaRef :: new ( schema) ,
679- null_equals_null,
679+ equality_null_behavior : null_equals_null,
680680 } ) )
681681 }
682682 LogicalPlan :: Subquery ( _) => Ok ( self ) ,
@@ -894,7 +894,7 @@ impl LogicalPlan {
894894 join_type,
895895 join_constraint,
896896 on,
897- null_equals_null,
897+ equality_null_behavior : null_equals_null,
898898 ..
899899 } ) => {
900900 let ( left, right) = self . only_two_inputs ( inputs) ?;
@@ -933,7 +933,7 @@ impl LogicalPlan {
933933 on : new_on,
934934 filter : filter_expr,
935935 schema : DFSchemaRef :: new ( schema) ,
936- null_equals_null : * null_equals_null,
936+ equality_null_behavior : * null_equals_null,
937937 } ) )
938938 }
939939 LogicalPlan :: Subquery ( Subquery {
@@ -3704,8 +3704,8 @@ pub struct Join {
37043704 pub join_constraint : JoinConstraint ,
37053705 /// The output schema, containing fields from the left and right inputs
37063706 pub schema : DFSchemaRef ,
3707- /// If null_equals_null is true, null == null else null != null
3708- pub null_equals_null : bool ,
3707+ /// The null handling behavior for equalities
3708+ pub equality_null_behavior : EqualityNullBehavior ,
37093709}
37103710
37113711impl Join {
@@ -3734,7 +3734,7 @@ impl Join {
37343734 filter : Option < Expr > ,
37353735 join_type : JoinType ,
37363736 join_constraint : JoinConstraint ,
3737- null_equals_null : bool ,
3737+ equality_null_behavior : EqualityNullBehavior ,
37383738 ) -> Result < Self > {
37393739 let join_schema = build_join_schema ( left. schema ( ) , right. schema ( ) , & join_type) ?;
37403740
@@ -3746,7 +3746,7 @@ impl Join {
37463746 join_type,
37473747 join_constraint,
37483748 schema : Arc :: new ( join_schema) ,
3749- null_equals_null ,
3749+ equality_null_behavior ,
37503750 } )
37513751 }
37523752
@@ -3779,7 +3779,7 @@ impl Join {
37793779 join_type : original_join. join_type ,
37803780 join_constraint : original_join. join_constraint ,
37813781 schema : Arc :: new ( join_schema) ,
3782- null_equals_null : original_join. null_equals_null ,
3782+ equality_null_behavior : original_join. equality_null_behavior ,
37833783 } )
37843784 }
37853785}
@@ -3801,8 +3801,8 @@ impl PartialOrd for Join {
38013801 pub join_type : & ' a JoinType ,
38023802 /// Join constraint
38033803 pub join_constraint : & ' a JoinConstraint ,
3804- /// If null_equals_null is true, null == null else null != null
3805- pub null_equals_null : & ' a bool ,
3804+ /// The null handling behavior for equalities
3805+ pub equality_null_behavior : & ' a EqualityNullBehavior ,
38063806 }
38073807 let comparable_self = ComparableJoin {
38083808 left : & self . left ,
@@ -3811,7 +3811,7 @@ impl PartialOrd for Join {
38113811 filter : & self . filter ,
38123812 join_type : & self . join_type ,
38133813 join_constraint : & self . join_constraint ,
3814- null_equals_null : & self . null_equals_null ,
3814+ equality_null_behavior : & self . equality_null_behavior ,
38153815 } ;
38163816 let comparable_other = ComparableJoin {
38173817 left : & other. left ,
@@ -3820,7 +3820,7 @@ impl PartialOrd for Join {
38203820 filter : & other. filter ,
38213821 join_type : & other. join_type ,
38223822 join_constraint : & other. join_constraint ,
3823- null_equals_null : & other. null_equals_null ,
3823+ equality_null_behavior : & other. equality_null_behavior ,
38243824 } ;
38253825 comparable_self. partial_cmp ( & comparable_other)
38263826 }
@@ -4891,7 +4891,7 @@ mod tests {
48914891 join_type : JoinType :: Inner ,
48924892 join_constraint : JoinConstraint :: On ,
48934893 schema : Arc :: new ( left_schema. join ( & right_schema) ?) ,
4894- null_equals_null : false ,
4894+ equality_null_behavior : EqualityNullBehavior :: NullEqualsNothing ,
48954895 } ) )
48964896 }
48974897
@@ -5002,7 +5002,7 @@ mod tests {
50025002 Some ( col ( "t1.b" ) . gt ( col ( "t2.b" ) ) ) ,
50035003 join_type,
50045004 JoinConstraint :: On ,
5005- false ,
5005+ EqualityNullBehavior :: NullEqualsNothing ,
50065006 ) ?;
50075007
50085008 match join_type {
@@ -5112,7 +5112,10 @@ mod tests {
51125112 assert_eq ! ( join. filter, Some ( col( "t1.b" ) . gt( col( "t2.b" ) ) ) ) ;
51135113 assert_eq ! ( join. join_type, join_type) ;
51145114 assert_eq ! ( join. join_constraint, JoinConstraint :: On ) ;
5115- assert ! ( !join. null_equals_null) ;
5115+ assert_eq ! (
5116+ join. equality_null_behavior,
5117+ EqualityNullBehavior :: NullEqualsNothing
5118+ ) ;
51165119 }
51175120
51185121 Ok ( ( ) )
@@ -5147,7 +5150,7 @@ mod tests {
51475150 None ,
51485151 JoinType :: Inner ,
51495152 JoinConstraint :: Using ,
5150- false ,
5153+ EqualityNullBehavior :: NullEqualsNothing ,
51515154 ) ?;
51525155
51535156 let fields = join. schema . fields ( ) ;
@@ -5198,7 +5201,7 @@ mod tests {
51985201 Some ( col ( "t1.value" ) . lt ( col ( "t2.value" ) ) ) , // Non-equi filter condition
51995202 JoinType :: Inner ,
52005203 JoinConstraint :: On ,
5201- false ,
5204+ EqualityNullBehavior :: NullEqualsNothing ,
52025205 ) ?;
52035206
52045207 let fields = join. schema . fields ( ) ;
@@ -5247,10 +5250,13 @@ mod tests {
52475250 None ,
52485251 JoinType :: Inner ,
52495252 JoinConstraint :: On ,
5250- true ,
5253+ EqualityNullBehavior :: NullEqualsNull ,
52515254 ) ?;
52525255
5253- assert ! ( join. null_equals_null) ;
5256+ assert_eq ! (
5257+ join. equality_null_behavior,
5258+ EqualityNullBehavior :: NullEqualsNull
5259+ ) ;
52545260 }
52555261
52565262 Ok ( ( ) )
@@ -5289,7 +5295,7 @@ mod tests {
52895295 Some ( col ( "t1.value" ) . gt ( lit ( 5.0 ) ) ) ,
52905296 join_type,
52915297 JoinConstraint :: On ,
5292- false ,
5298+ EqualityNullBehavior :: NullEqualsNothing ,
52935299 ) ?;
52945300
52955301 let fields = join. schema . fields ( ) ;
@@ -5328,7 +5334,7 @@ mod tests {
53285334 None ,
53295335 JoinType :: Inner ,
53305336 JoinConstraint :: Using ,
5331- false ,
5337+ EqualityNullBehavior :: NullEqualsNothing ,
53325338 ) ?;
53335339
53345340 assert_eq ! (
0 commit comments