[fix](nereids) fix wrong result precision for add/sub (#25751)
This commit is contained in:
@ -49,7 +49,9 @@ public class Add extends BinaryArithmetic implements CheckOverflowNullable {
|
||||
|
||||
@Override
|
||||
public DecimalV3Type getDataTypeForDecimalV3(DecimalV3Type t1, DecimalV3Type t2) {
|
||||
return (DecimalV3Type) DecimalV3Type.widerDecimalV3Type(t1, t2, false);
|
||||
DecimalV3Type decimalV3Type = (DecimalV3Type) DecimalV3Type.widerDecimalV3Type(t1, t2, false);
|
||||
return (DecimalV3Type) DecimalV3Type.createDecimalV3Type(decimalV3Type.getPrecision() + 1,
|
||||
decimalV3Type.getScale());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@ -49,7 +49,9 @@ public class Subtract extends BinaryArithmetic implements CheckOverflowNullable
|
||||
|
||||
@Override
|
||||
public DecimalV3Type getDataTypeForDecimalV3(DecimalV3Type t1, DecimalV3Type t2) {
|
||||
return (DecimalV3Type) DecimalV3Type.widerDecimalV3Type(t1, t2, false);
|
||||
DecimalV3Type decimalV3Type = (DecimalV3Type) DecimalV3Type.widerDecimalV3Type(t1, t2, false);
|
||||
return (DecimalV3Type) DecimalV3Type.createDecimalV3Type(decimalV3Type.getPrecision() + 1,
|
||||
decimalV3Type.getScale());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@ -727,12 +727,12 @@ public class TypeCoercionUtilsTest {
|
||||
new DecimalV3Literal(new BigDecimal("123.45")));
|
||||
expression = TypeCoercionUtils.processBinaryArithmetic(add);
|
||||
Assertions.assertEquals(expression.child(0),
|
||||
new Cast(multiply.child(0), DecimalV3Type.createDecimalV3Type(9, 3)));
|
||||
new Cast(multiply.child(0), DecimalV3Type.createDecimalV3Type(10, 3)));
|
||||
|
||||
Subtract sub = new Subtract(new DecimalLiteral(new BigDecimal("987654.321")),
|
||||
new DecimalV3Literal(new BigDecimal("123.45")));
|
||||
expression = TypeCoercionUtils.processBinaryArithmetic(sub);
|
||||
Assertions.assertEquals(expression.child(0),
|
||||
new Cast(multiply.child(0), DecimalV3Type.createDecimalV3Type(9, 3)));
|
||||
new Cast(multiply.child(0), DecimalV3Type.createDecimalV3Type(10, 3)));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user