Skip to content

Commit 32a238c

Browse files
authored
Added tests for "like_for_type_coercion" and "test_type_coercion_rewrite" (#5389)
1 parent 9fd6efa commit 32a238c

File tree

1 file changed

+59
-1
lines changed

1 file changed

+59
-1
lines changed

datafusion/optimizer/src/type_coercion.rs

Lines changed: 59 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)