@@ -982,6 +982,35 @@ mod test {
982982 assert ! ( err. unwrap_err( ) . to_string( ) . contains(
983983 "There isn't a common type to coerce Int64 and Utf8 in LIKE expression"
984984 ) ) ;
985+
986+ // ilike
987+ let expr = Box :: new ( col ( "a" ) ) ;
988+ let pattern = Box :: new ( lit ( ScalarValue :: new_utf8 ( "abc" ) ) ) ;
989+ let ilike_expr = Expr :: ILike ( Like :: new ( false , expr, pattern, None ) ) ;
990+ let empty = empty_with_type ( DataType :: Utf8 ) ;
991+ let plan = LogicalPlan :: Projection ( Projection :: try_new ( vec ! [ ilike_expr] , empty) ?) ;
992+ let expected = "Projection: a ILIKE Utf8(\" abc\" )\n EmptyRelation" ;
993+ assert_optimized_plan_eq ( & plan, expected) ?;
994+
995+ let expr = Box :: new ( col ( "a" ) ) ;
996+ let pattern = Box :: new ( lit ( ScalarValue :: Null ) ) ;
997+ let ilike_expr = Expr :: ILike ( Like :: new ( false , expr, pattern, None ) ) ;
998+ let empty = empty_with_type ( DataType :: Utf8 ) ;
999+ let plan = LogicalPlan :: Projection ( Projection :: try_new ( vec ! [ ilike_expr] , empty) ?) ;
1000+ let expected = "Projection: a ILIKE CAST(NULL AS Utf8) AS a ILIKE NULL \
1001+ \n EmptyRelation";
1002+ assert_optimized_plan_eq ( & plan, expected) ?;
1003+
1004+ let expr = Box :: new ( col ( "a" ) ) ;
1005+ let pattern = Box :: new ( lit ( ScalarValue :: new_utf8 ( "abc" ) ) ) ;
1006+ let ilike_expr = Expr :: ILike ( Like :: new ( false , expr, pattern, None ) ) ;
1007+ let empty = empty_with_type ( DataType :: Int64 ) ;
1008+ let plan = LogicalPlan :: Projection ( Projection :: try_new ( vec ! [ ilike_expr] , empty) ?) ;
1009+ let err = assert_optimized_plan_eq ( & plan, expected) ;
1010+ assert ! ( err. is_err( ) ) ;
1011+ assert ! ( err. unwrap_err( ) . to_string( ) . contains(
1012+ "There isn't a common type to coerce Int64 and Utf8 in ILIKE expression"
1013+ ) ) ;
9851014 Ok ( ( ) )
9861015 }
9871016
@@ -1062,6 +1091,21 @@ mod test {
10621091
10631092 #[ test]
10641093 fn test_type_coercion_rewrite ( ) -> Result < ( ) > {
1094+ // gt
1095+ let schema = Arc :: new (
1096+ DFSchema :: new_with_metadata (
1097+ vec ! [ DFField :: new( None , "a" , DataType :: Int64 , true ) ] ,
1098+ std:: collections:: HashMap :: new ( ) ,
1099+ )
1100+ . unwrap ( ) ,
1101+ ) ;
1102+ let mut rewriter = TypeCoercionRewriter { schema } ;
1103+ let expr = is_true ( lit ( 12i32 ) . gt ( lit ( 13i64 ) ) ) ;
1104+ let expected = is_true ( cast ( lit ( 12i32 ) , DataType :: Int64 ) . gt ( lit ( 13i64 ) ) ) ;
1105+ let result = expr. rewrite ( & mut rewriter) ?;
1106+ assert_eq ! ( expected, result) ;
1107+
1108+ // eq
10651109 let schema = Arc :: new (
10661110 DFSchema :: new_with_metadata (
10671111 vec ! [ DFField :: new( None , "a" , DataType :: Int64 , true ) ] ,
@@ -1074,8 +1118,22 @@ mod test {
10741118 let expected = is_true ( cast ( lit ( 12i32 ) , DataType :: Int64 ) . eq ( lit ( 13i64 ) ) ) ;
10751119 let result = expr. rewrite ( & mut rewriter) ?;
10761120 assert_eq ! ( expected, result) ;
1121+
1122+ // lt
1123+ let schema = Arc :: new (
1124+ DFSchema :: new_with_metadata (
1125+ vec ! [ DFField :: new( None , "a" , DataType :: Int64 , true ) ] ,
1126+ std:: collections:: HashMap :: new ( ) ,
1127+ )
1128+ . unwrap ( ) ,
1129+ ) ;
1130+ let mut rewriter = TypeCoercionRewriter { schema } ;
1131+ let expr = is_true ( lit ( 12i32 ) . lt ( lit ( 13i64 ) ) ) ;
1132+ let expected = is_true ( cast ( lit ( 12i32 ) , DataType :: Int64 ) . lt ( lit ( 13i64 ) ) ) ;
1133+ let result = expr. rewrite ( & mut rewriter) ?;
1134+ assert_eq ! ( expected, result) ;
1135+
10771136 Ok ( ( ) )
1078- // TODO add more test for this
10791137 }
10801138
10811139 #[ test]
0 commit comments