@@ -361,19 +361,21 @@ trait HiveTypeCoercion {
361361 DecimalType (min(p1 - s1, p2 - s2) + max(s1, s2), max(s1, s2))
362362 )
363363
364- // Cast is no need for logical operator
365- case LessThan (e1 @ DecimalType .Expression (p1, s1), e2 @ DecimalType .Expression (p2, s2)) =>
364+ // Cast is not needed for binary comparison
365+ case LessThan (e1 @ DecimalType .Expression (p1, s1),
366+ e2 @ DecimalType .Expression (p2, s2)) if p1 != p2 || s1 != s2 =>
366367 LessThan (Cast (e1, DecimalType .Unlimited ), Cast (e2, DecimalType .Unlimited ))
367368
368369 case LessThanOrEqual (e1 @ DecimalType .Expression (p1, s1),
369- e2 @ DecimalType .Expression (p2, s2)) =>
370+ e2 @ DecimalType .Expression (p2, s2)) if p1 != p2 || s1 != s2 =>
370371 LessThanOrEqual (Cast (e1, DecimalType .Unlimited ), Cast (e2, DecimalType .Unlimited ))
371372
372- case GreaterThan (e1 @ DecimalType .Expression (p1, s1), e2 @ DecimalType .Expression (p2, s2)) =>
373+ case GreaterThan (e1 @ DecimalType .Expression (p1, s1),
374+ e2 @ DecimalType .Expression (p2, s2)) if p1 != p2 || s1 != s2 =>
373375 GreaterThan (Cast (e1, DecimalType .Unlimited ), Cast (e2, DecimalType .Unlimited ))
374376
375377 case GreaterThanOrEqual (e1 @ DecimalType .Expression (p1, s1),
376- e2 @ DecimalType .Expression (p2, s2)) =>
378+ e2 @ DecimalType .Expression (p2, s2)) if p1 != p2 || s1 != s2 =>
377379 GreaterThanOrEqual (Cast (e1, DecimalType .Unlimited ), Cast (e2, DecimalType .Unlimited ))
378380
379381 // Promote integers inside a binary expression with fixed-precision decimals to decimals,
0 commit comments