[CP] fix bugs of float data type in mysql mode

This commit is contained in:
obdev
2022-06-30 16:22:01 +08:00
committed by linzhigang.lzg
parent cc0f88584f
commit 576664f0d3
2 changed files with 20 additions and 1 deletions

View File

@ -3807,10 +3807,17 @@ int ObResolverUtils::resolve_data_type(const ParseNode& type_node, const ObStrin
ret = OB_ERR_TOO_BIG_SCALE;
LOG_USER_ERROR(OB_ERR_TOO_BIG_SCALE, scale, ident_name.ptr(), OB_MAX_DOUBLE_FLOAT_SCALE);
LOG_WARN("scale of double overflow", K(ret), K(scale), K(precision));
} else if (OB_UNLIKELY(precision > OB_MAX_DOUBLE_FLOAT_PRECISION)) {
} else if (OB_UNLIKELY(OB_DECIMAL_NOT_SPECIFIED == scale &&
precision > OB_MAX_DOUBLE_FLOAT_PRECISION)) {
ret = OB_ERR_COLUMN_SPEC;
LOG_USER_ERROR(OB_ERR_COLUMN_SPEC, ident_name.length(), ident_name.ptr());
LOG_WARN("precision of double overflow", K(ret), K(scale), K(precision));
} else if (OB_UNLIKELY(OB_DECIMAL_NOT_SPECIFIED != scale &&
precision > OB_MAX_DOUBLE_FLOAT_DISPLAY_WIDTH)) {
ret = OB_ERR_TOO_BIG_DISPLAYWIDTH;
LOG_USER_ERROR(OB_ERR_TOO_BIG_DISPLAYWIDTH,
ident_name.ptr(),
OB_MAX_INTEGER_DISPLAY_WIDTH);
} else if (OB_UNLIKELY(precision < scale)) {
ret = OB_ERR_M_BIGGER_THAN_D;
LOG_USER_ERROR(OB_ERR_M_BIGGER_THAN_D, to_cstring(ident_name));