Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
soremi
oceanbase
提交
576664f0
O
oceanbase
项目概览
soremi
/
oceanbase
与 Fork 源项目一致
Fork自
oceanbase / oceanbase
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
O
oceanbase
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
576664f0
编写于
6月 30, 2022
作者:
O
obdev
提交者:
linzhigang.lzg
7月 04, 2022
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
[CP] fix bugs of float data type in mysql mode
上级
cc0f8858
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
20 addition
and
1 deletion
+20
-1
src/sql/parser/sql_parser_mysql_mode.y
src/sql/parser/sql_parser_mysql_mode.y
+12
-0
src/sql/resolver/ob_resolver_utils.cpp
src/sql/resolver/ob_resolver_utils.cpp
+8
-1
未找到文件。
src/sql/parser/sql_parser_mysql_mode.y
浏览文件 @
576664f0
...
...
@@ -4536,6 +4536,10 @@ int_type_i opt_int_length_i opt_unsigned_i opt_zerofill_i
}
| float_type_i opt_float_precision opt_unsigned_i opt_zerofill_i
{
if (T_FLOAT != $1[0] && NULL != $2 && -1 == $2->int16_values_[1]) {
yyerror(&@2, result, "double type not support double(M) syntax\n");
YYERROR;
}
malloc_terminal_node($$, result->malloc_pool_, ($3[0] || $4[0]) ? $1[0] + (T_UFLOAT - T_FLOAT) : $1[0]);
if (NULL != $2) {
$$->int16_values_[0] = $2->int16_values_[0];
...
...
@@ -4759,6 +4763,14 @@ opt_float_precision:
$$->int16_values_[0] = $2->value_;
$$->int16_values_[1] = -1;
}
| '(' DECIMAL_VAL ')'
{
malloc_terminal_node($$, result->malloc_pool_, T_LINK_NODE);
int err_no = 0;
$2->value_ = ob_strntoll($2->str_value_, $2->str_len_, 10, NULL, &err_no);
$$->int16_values_[0] = $2->value_;
$$->int16_values_[1] = -1;
}
| /*EMPTY*/
{
$$ = NULL;
...
...
src/sql/resolver/ob_resolver_utils.cpp
浏览文件 @
576664f0
...
...
@@ -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
));
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录