Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
野花太放肆
oceanbase
提交
67d20c3f
O
oceanbase
项目概览
野花太放肆
/
oceanbase
与 Fork 源项目一致
Fork自
oceanbase / oceanbase
通知
1
Star
1
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,发现更多精彩内容 >>
提交
67d20c3f
编写于
6月 29, 2022
作者:
O
obdev
提交者:
wangzelin.wzl
6月 29, 2022
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
[CP] fix nullif replace var expr report 4016 bug
上级
3a4eeb57
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
33 addition
and
18 deletion
+33
-18
deps/oblib/src/lib/charset/ob_charset.cpp
deps/oblib/src/lib/charset/ob_charset.cpp
+3
-3
src/sql/code_generator/ob_static_engine_expr_cg.cpp
src/sql/code_generator/ob_static_engine_expr_cg.cpp
+14
-11
src/sql/engine/expr/ob_expr_nullif.cpp
src/sql/engine/expr/ob_expr_nullif.cpp
+2
-2
src/sql/engine/expr/ob_expr_quote.cpp
src/sql/engine/expr/ob_expr_quote.cpp
+14
-2
未找到文件。
deps/oblib/src/lib/charset/ob_charset.cpp
浏览文件 @
67d20c3f
...
...
@@ -1136,7 +1136,7 @@ int ObCharset::mb_wc(ObCollationType collation_type, const ObString& mb, int32_t
reinterpret_cast
<
const
unsigned
char
*>
(
mb
.
ptr
()
+
mb
.
length
()),
&
res_wc
);
if
(
tmp
<=
0
)
{
ret
=
OB_ERR
OR
;
ret
=
OB_ERR
_INCORRECT_STRING_VALUE
;
}
else
{
ret
=
OB_SUCCESS
;
wc
=
static_cast
<
int32_t
>
(
res_wc
);
...
...
@@ -1164,7 +1164,7 @@ int ObCharset::mb_wc(
int
tmp
=
cs
->
cset
->
mb_wc
(
reinterpret_cast
<
const
unsigned
char
*>
(
mb
),
reinterpret_cast
<
const
unsigned
char
*>
(
mb
+
mb_size
),
&
res_wc
);
if
(
tmp
<=
0
)
{
ret
=
OB_ERR
OR
;
ret
=
OB_ERR
_INCORRECT_STRING_VALUE
;
}
else
{
ret
=
OB_SUCCESS
;
wc
=
static_cast
<
int32_t
>
(
res_wc
);
...
...
@@ -1283,7 +1283,7 @@ int ObCharset::wc_mb(ObCollationType collation_type, int32_t wc, char* buff, int
int
tmp
=
cs
->
cset
->
wc_mb
(
wc
,
reinterpret_cast
<
unsigned
char
*>
(
buff
),
reinterpret_cast
<
unsigned
char
*>
(
buff
+
buff_len
));
if
(
tmp
<=
0
)
{
ret
=
OB_ERR
OR
;
ret
=
OB_ERR
_INCORRECT_STRING_VALUE
;
}
else
{
ret
=
OB_SUCCESS
;
length
=
tmp
;
...
...
src/sql/code_generator/ob_static_engine_expr_cg.cpp
浏览文件 @
67d20c3f
...
...
@@ -986,10 +986,6 @@ int ObStaticEngineExprCG::replace_var_rt_expr(ObExpr* origin_expr,
if
(
OB_ISNULL
(
parent_expr
)
||
OB_UNLIKELY
(
parent_expr
->
arg_cnt_
<
var_idx
+
1
))
{
ret
=
OB_ERR_UNEXPECTED
;
LOG_WARN
(
"invalid param"
,
KPC
(
parent_expr
));
}
else
if
(
OB_UNLIKELY
(
var_expr
->
datum_meta_
.
type_
!=
origin_expr
->
datum_meta_
.
type_
||
var_expr
->
datum_meta_
.
cs_type_
!=
origin_expr
->
datum_meta_
.
cs_type_
))
{
ret
=
OB_ERR_UNEXPECTED
;
LOG_WARN
(
"exec var meta diff from origin expr meta"
,
K
(
ret
),
KPC
(
origin_expr
),
KPC
(
var_expr
));
}
else
{
parent_expr
->
args_
[
var_idx
]
=
origin_expr
;
}
...
...
@@ -1015,19 +1011,26 @@ int ObStaticEngineExprCG::replace_var_rt_expr(ObExpr* origin_expr,
ret
=
OB_ERR_UNEXPECTED
;
LOG_WARN
(
"expr is null"
,
K
(
ret
),
KPC
(
parent_expr
));
}
else
if
(
T_EXEC_VAR
==
var_expr
->
type_
)
{
if
(
OB_UNLIKELY
(
var_expr
->
datum_meta_
.
type_
!=
origin_expr
->
datum_meta_
.
type_
||
var_expr
->
datum_meta_
.
cs_type_
!=
origin_expr
->
datum_meta_
.
cs_type_
))
{
ret
=
OB_ERR_UNEXPECTED
;
LOG_WARN
(
"exec var meta diff from origin expr meta"
,
K
(
ret
),
KPC
(
origin_expr
),
KPC
(
var_expr
));
}
else
{
parent_expr
->
args_
[
var_idx
]
=
origin_expr
;
}
parent_expr
->
args_
[
var_idx
]
=
origin_expr
;
break
;
}
else
{
parent_expr
=
var_expr
;
}
}
}
if
(
OB_SUCC
(
ret
)
&&
T_EXEC_VAR
==
var_expr
->
type_
)
{
if
(
OB_UNLIKELY
(
ObNullType
!=
var_expr
->
datum_meta_
.
type_
&&
ObNullType
!=
origin_expr
->
datum_meta_
.
type_
&&
ob_obj_type_class
(
var_expr
->
datum_meta_
.
type_
)
!=
ob_obj_type_class
(
origin_expr
->
datum_meta_
.
type_
)))
{
ret
=
OB_ERR_UNEXPECTED
;
LOG_WARN
(
"exec var meta diff from origin expr meta"
,
K
(
ret
),
KPC
(
origin_expr
),
KPC
(
var_expr
));
}
else
if
(
OB_UNLIKELY
(
ob_is_string_or_lob_type
(
var_expr
->
datum_meta_
.
type_
)
&&
ob_is_string_or_lob_type
(
origin_expr
->
datum_meta_
.
type_
)
&&
var_expr
->
datum_meta_
.
cs_type_
!=
origin_expr
->
datum_meta_
.
cs_type_
))
{
ret
=
OB_ERR_UNEXPECTED
;
LOG_WARN
(
"exec var collation diff from origin expr collation"
,
K
(
ret
),
KPC
(
origin_expr
),
KPC
(
var_expr
));
}
}
return
ret
;
}
...
...
src/sql/engine/expr/ob_expr_nullif.cpp
浏览文件 @
67d20c3f
...
...
@@ -230,10 +230,10 @@ int ObExprNullif::cg_expr(ObExprCGCtx& expr_cg_ctx, const ObRawExpr& raw_expr, O
for
(
int64_t
i
=
0
;
OB_SUCC
(
ret
)
&&
i
<
real_param_num
;
i
++
)
{
if
(
OB_FAIL
(
ObStaticEngineExprCG
::
replace_var_rt_expr
(
rt_expr
.
args_
[
i
],
rt_expr
.
args_
[
i
+
real_param_num
],
&
rt_expr
,
i
+
real_param_num
)))
{
LOG_WARN
(
"replace var rt expr failed"
,
K
(
ret
));
LOG_WARN
(
"replace var rt expr failed"
,
K
(
ret
)
,
K
(
i
),
K
(
raw_expr
)
);
}
else
if
(
OB_FAIL
(
ObStaticEngineExprCG
::
replace_var_rt_expr
(
rt_expr
.
args_
[
i
],
rt_expr
.
args_
[
i
+
2
*
real_param_num
],
&
rt_expr
,
i
+
2
*
real_param_num
)))
{
LOG_WARN
(
"replace var rt
expr failed"
,
K
(
ret
));
LOG_WARN
(
"replace var rt
_expr failed"
,
K
(
ret
),
K
(
i
),
K
(
raw_expr
));
}
}
if
(
OB_FAIL
(
ret
))
{
...
...
src/sql/engine/expr/ob_expr_quote.cpp
浏览文件 @
67d20c3f
...
...
@@ -78,7 +78,13 @@ int ObExprQuote::calc_result1(ObObj& result, const ObObj& obj, ObExprCtx& expr_c
ObString
str
=
obj
.
get_string
();
ObString
res_str
;
if
(
OB_FAIL
(
calc
(
res_str
,
str
,
obj
.
get_collation_type
(),
expr_ctx
.
calc_buf_
)))
{
LOG_WARN
(
"calc quote expr failed"
,
K
(
ret
),
K
(
str
));
result
.
set_null
();
// ret = OB_ERR_INCORRECT_STRING_VALUE means input string is not invalid, then output NULL.
if
(
OB_ERR_INCORRECT_STRING_VALUE
==
ret
)
{
ret
=
OB_SUCCESS
;
}
else
{
LOG_WARN
(
"calc quote expr failed"
,
K
(
ret
),
K
(
str
));
}
}
else
{
result
.
set_varchar
(
res_str
);
result
.
set_collation
(
result_type_
);
...
...
@@ -180,7 +186,13 @@ int ObExprQuote::calc_quote_expr(const ObExpr& expr, ObEvalCtx& ctx, ObDatum& re
ObString
res_str
;
ObExprStrResAlloc
res_alloc
(
expr
,
ctx
);
if
(
OB_FAIL
(
calc
(
res_str
,
str
,
expr
.
datum_meta_
.
cs_type_
,
&
res_alloc
)))
{
LOG_WARN
(
"calc quote expr failed"
,
K
(
ret
),
K
(
str
));
res_datum
.
set_null
();
// ret = OB_ERR_INCORRECT_STRING_VALUE means input string is not invalid, then output NULL.
if
(
OB_ERR_INCORRECT_STRING_VALUE
==
ret
)
{
ret
=
OB_SUCCESS
;
}
else
{
LOG_WARN
(
"calc quote expr failed"
,
K
(
ret
),
K
(
str
));
}
}
else
{
res_datum
.
set_string
(
res_str
);
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录