[FEAT MERGE] Support float/double(m, d) in mysql mode

This commit is contained in:
hezuojiao
2022-12-29 12:09:23 +00:00
committed by ob-robot
parent d967637528
commit 26f2754db2
58 changed files with 695 additions and 118 deletions

View File

@ -66,8 +66,8 @@ int ObExprMul::calc_result_type2(ObExprResType &type,
if (SCALE_UNKNOWN_YET == type1.get_scale() || SCALE_UNKNOWN_YET == type2.get_scale()) {
type.set_scale(SCALE_UNKNOWN_YET);
} else {
if (lib::is_oracle_mode()) {
type.set_scale(MIN(static_cast<ObScale>(scale1 + scale2), OB_MAX_NUMBER_SCALE));
if (lib::is_mysql_mode() && type.is_double()) {
type.set_scale(MAX(scale1, scale2));
} else {
type.set_scale(MIN(static_cast<ObScale>(scale1 + scale2), OB_MAX_DECIMAL_SCALE));
}
@ -79,8 +79,12 @@ int ObExprMul::calc_result_type2(ObExprResType &type,
type.set_precision(PRECISION_UNKNOWN_YET);
} else {
// estimated precision
type.set_precision(static_cast<ObPrecision>((precision1 - scale1)
+ (precision2 - scale2) + type.get_scale()));
if (lib::is_mysql_mode() && type.is_double()) {
type.set_precision(ObMySQLUtil::float_length(type.get_scale()));
} else {
type.set_precision(static_cast<ObPrecision>((precision1 - scale1)
+ (precision2 - scale2) + type.get_scale()));
}
}
}
return ret;