Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
soremi
oceanbase
提交
8d81ad6e
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,发现更多精彩内容 >>
提交
8d81ad6e
编写于
3月 16, 2022
作者:
S
st0
提交者:
LINGuanRen
3月 16, 2022
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
cherry-pick to opensource branch
上级
4255c905
变更
11
隐藏空白更改
内联
并排
Showing
11 changed file
with
64 addition
and
30 deletion
+64
-30
src/share/object/ob_obj_cast.cpp
src/share/object/ob_obj_cast.cpp
+15
-5
src/sql/code_generator/ob_static_engine_expr_cg.cpp
src/sql/code_generator/ob_static_engine_expr_cg.cpp
+10
-4
src/sql/code_generator/ob_static_engine_expr_cg.h
src/sql/code_generator/ob_static_engine_expr_cg.h
+2
-1
src/sql/engine/expr/ob_datum_cast.cpp
src/sql/engine/expr/ob_datum_cast.cpp
+10
-4
src/sql/engine/expr/ob_expr_from_unix_time.cpp
src/sql/engine/expr/ob_expr_from_unix_time.cpp
+2
-1
src/sql/engine/expr/ob_expr_greatest.cpp
src/sql/engine/expr/ob_expr_greatest.cpp
+5
-3
src/sql/engine/expr/ob_expr_least.cpp
src/sql/engine/expr/ob_expr_least.cpp
+2
-2
src/sql/engine/expr/ob_expr_nullif.cpp
src/sql/engine/expr/ob_expr_nullif.cpp
+2
-2
src/sql/ob_dml_stmt_printer.cpp
src/sql/ob_dml_stmt_printer.cpp
+6
-2
src/sql/resolver/dml/ob_dml_resolver.cpp
src/sql/resolver/dml/ob_dml_resolver.cpp
+3
-2
src/sql/session/ob_basic_session_info.cpp
src/sql/session/ob_basic_session_info.cpp
+7
-4
未找到文件。
src/share/object/ob_obj_cast.cpp
浏览文件 @
8d81ad6e
...
...
@@ -3447,14 +3447,21 @@ static int time_date(
int
ret
=
OB_SUCCESS
;
const
ObTimeZoneInfo
*
tz_info
=
params
.
dtc_params_
.
tz_info_
;
int32_t
value
=
0
;
int64_t
datetime_value
=
0
;
if
(
OB_UNLIKELY
(
ObTimeTC
!=
in
.
get_type_class
()
||
ObDateTC
!=
ob_obj_type_class
(
expect_type
)))
{
ret
=
OB_ERR_UNEXPECTED
;
LOG_ERROR
(
"invalid input type"
,
K
(
ret
),
K
(
in
),
K
(
expect_type
));
}
else
if
(
OB_FAIL
(
ObTimeConverter
::
datetime_to_date
(
params
.
cur_time_
,
tz_info
,
value
)))
{
LOG_WARN
(
"datetime_to_date failed"
,
K
(
ret
),
K
(
params
.
cur_time_
));
}
else
{
out
.
set_date
(
value
);
ObTimeConvertCtx
cvrt_ctx
(
tz_info
,
false
);
if
(
OB_FAIL
(
ObTimeConverter
::
time_to_datetime
(
in
.
get_time
(),
params
.
cur_time_
,
tz_info
,
datetime_value
,
ObDateTimeType
)))
{
LOG_WARN
(
"time to datetime failed"
,
K
(
ret
),
K
(
in
),
K
(
params
.
cur_time_
));
}
else
if
(
ObTimeConverter
::
datetime_to_date
(
datetime_value
,
NULL
,
value
))
{
LOG_WARN
(
"date to datetime failed"
,
K
(
ret
),
K
(
datetime_value
));
}
else
{
out
.
set_date
(
value
);
}
}
SET_RES_ACCURACY
(
DEFAULT_PRECISION_FOR_TEMPORAL
,
DEFAULT_SCALE_FOR_DATE
,
DEFAULT_LENGTH_FOR_TEMPORAL
);
UNUSED
(
cast_mode
);
...
...
@@ -4189,9 +4196,12 @@ static int string_year(
}
else
if
(
OB_FAIL
(
string_int
(
ObIntType
,
params
,
in
,
int64
,
CM_UNSET_STRING_INTEGER_TRUNC
(
CM_SET_WARN_ON_FAIL
(
cast_mode
)))))
{
}
else
if
(
0
==
int64
.
get_int
())
{
const
uint8_t
base_year
=
100
;
uint8_t
value
=
4
==
in
.
get_string
().
length
()
?
ObTimeConverter
::
ZERO_YEAR
:
base_year
;
const
uint8_t
base_year
=
100
;
uint8_t
value
=
OB_SUCCESS
==
params
.
warning_
?
(
4
==
in
.
get_string
().
length
()
?
ObTimeConverter
::
ZERO_YEAR
:
base_year
)
:
ObTimeConverter
::
ZERO_YEAR
;
SET_RES_YEAR
(
out
);
CAST_FAIL
(
params
.
warning_
);
}
else
if
(
CAST_FAIL
(
int_year
(
ObYearType
,
params
,
int64
,
out
,
cast_mode
)))
{
}
else
if
(
CAST_FAIL
(
params
.
warning_
))
{
}
...
...
src/sql/code_generator/ob_static_engine_expr_cg.cpp
浏览文件 @
8d81ad6e
...
...
@@ -972,8 +972,8 @@ int ObStaticEngineExprCG::add_so_check_expr_above(ObIArray<ObExpr>& exprs, ObExp
return
ret
;
}
int
ObStaticEngineExprCG
::
replace_var_rt_expr
(
ObExpr
*
origin_expr
,
ObExpr
*
var_expr
,
ObExpr
*
parent
_expr
,
int32_t
var_idx
)
// child pos of parent_expr
int
ObStaticEngineExprCG
::
replace_var_rt_expr
(
ObExpr
*
origin_expr
,
const
ObRawExpr
*
origin_raw
_expr
,
ObExpr
*
var_expr
,
ObExpr
*
parent_expr
,
int32_t
var_idx
)
// child pos of parent_expr
{
int
ret
=
OB_SUCCESS
;
if
(
OB_ISNULL
(
origin_expr
))
{
...
...
@@ -981,13 +981,18 @@ int ObStaticEngineExprCG::replace_var_rt_expr(ObExpr* origin_expr, ObExpr* var_e
LOG_WARN
(
"expr is null"
,
K
(
ret
),
K
(
origin_expr
));
}
else
{
while
(
OB_SUCC
(
ret
))
{
// from_unixtime may add implicit cast above origin param expr, find origin param.
if
(
T_FUN_SYS_CAST
==
origin_expr
->
type_
&&
CM_IS_EXPLICIT_CAST
(
origin_expr
->
extra_
))
{
if
(
OB_ISNULL
(
origin_raw_expr
))
{
ret
=
OB_ERR_UNEXPECTED
;
LOG_WARN
(
"origin raw expr is null"
,
K
(
ret
));
// from_unixtime may add implicit cast above origin param expr, find origin param.
}
else
if
(
T_FUN_SYS_CAST
==
origin_expr
->
type_
&&
CM_IS_IMPLICIT_CAST
(
origin_raw_expr
->
get_extra
()))
{
if
(
OB_UNLIKELY
(
origin_expr
->
arg_cnt_
<
1
)
||
OB_ISNULL
(
origin_expr
->
args_
[
0
]))
{
ret
=
OB_ERR_UNEXPECTED
;
LOG_WARN
(
"invalid param"
,
KPC
(
origin_expr
));
}
else
{
origin_expr
=
origin_expr
->
args_
[
0
];
origin_raw_expr
=
origin_raw_expr
->
get_param_expr
(
0
);
}
}
else
if
(
T_FUN_ENUM_TO_STR
==
origin_expr
->
type_
||
T_FUN_SET_TO_STR
==
origin_expr
->
type_
)
{
if
(
OB_UNLIKELY
(
origin_expr
->
arg_cnt_
<
2
)
||
OB_ISNULL
(
origin_expr
->
args_
[
1
]))
{
...
...
@@ -995,6 +1000,7 @@ int ObStaticEngineExprCG::replace_var_rt_expr(ObExpr* origin_expr, ObExpr* var_e
LOG_WARN
(
"invalid param"
,
K
(
ret
),
KPC
(
origin_expr
));
}
else
{
origin_expr
=
origin_expr
->
args_
[
1
];
origin_raw_expr
=
origin_raw_expr
->
get_param_expr
(
1
);
}
}
else
{
break
;
...
...
src/sql/code_generator/ob_static_engine_expr_cg.h
浏览文件 @
8d81ad6e
...
...
@@ -63,7 +63,8 @@ public:
static
int
generate_rt_expr
(
const
ObRawExpr
&
src
,
common
::
ObIArray
<
ObRawExpr
*>&
exprs
,
ObExpr
*&
dst
);
static
int
replace_var_rt_expr
(
ObExpr
*
origin_expr
,
ObExpr
*
var_expr
,
ObExpr
*
parent_expr
,
int32_t
var_idx
);
static
int
replace_var_rt_expr
(
ObExpr
*
origin_expr
,
const
ObRawExpr
*
origin_raw_expr
,
ObExpr
*
var_expr
,
ObExpr
*
parent_expr
,
int32_t
var_idx
);
// Attention : Please think over before you have to use this function.
// This function is different from generate_rt_expr.
...
...
src/sql/engine/expr/ob_datum_cast.cpp
浏览文件 @
8d81ad6e
...
...
@@ -835,13 +835,14 @@ static OB_INLINE int common_string_year(const ObExpr& expr, const ObString& in_s
if
(
OB_FAIL
(
common_string_int
(
expr
,
extra
,
in_str
,
is_str_int_cast
,
tmp_res
,
warning
)))
{
LOG_WARN
(
"common_string_int failed"
,
K
(
ret
),
K
(
in_str
));
}
else
if
(
0
==
tmp_int
)
{
// cast '0000' to year, result is 0. cast '0'/'00'/'00000' to year, result is 2000.
if
(
4
==
in_str
.
length
())
{
// cast '0000' to year, result is 0. cast '0'/'00'/'00000' to year, result is 2000.
if
(
OB_SUCCESS
!=
warning
||
4
==
in_str
.
length
())
{
SET_RES_YEAR
(
ObTimeConverter
::
ZERO_YEAR
);
}
else
{
const
uint8_t
base_year
=
100
;
SET_RES_YEAR
(
base_year
);
}
CAST_FAIL
(
warning
);
}
else
{
if
(
CAST_FAIL
(
common_int_year
(
expr
,
tmp_int
,
res_datum
,
warning
)))
{
LOG_WARN
(
"common_int_year failed"
,
K
(
ret
),
K
(
tmp_int
));
...
...
@@ -4283,9 +4284,14 @@ CAST_FUNC_NAME(time, date)
int32_t
out_val
=
0
;
ObPhysicalPlanCtx
*
phy_plan_ctx
=
ctx
.
exec_ctx_
.
get_physical_plan_ctx
();
int64_t
cur_time
=
phy_plan_ctx
?
phy_plan_ctx
->
get_cur_time
().
get_datetime
()
:
0
;
if
(
OB_FAIL
(
ObTimeConverter
::
datetime_to_date
(
cur_time
,
session
->
get_timezone_info
(),
out_val
)))
{
int64_t
datetime_value
=
0
;
int64_t
in_val
=
child_res
->
get_time
();
ObTimeConvertCtx
cvrt_ctx
(
session
->
get_timezone_info
(),
false
);
if
(
OB_FAIL
(
ObTimeConverter
::
time_to_datetime
(
in_val
,
cur_time
,
session
->
get_timezone_info
(),
datetime_value
,
ObDateTimeType
)))
{
LOG_WARN
(
"datetime_to_date failed"
,
K
(
ret
),
K
(
cur_time
));
}
else
if
(
ObTimeConverter
::
datetime_to_date
(
datetime_value
,
NULL
,
out_val
))
{
LOG_WARN
(
"date to datetime failed"
,
K
(
ret
),
K
(
datetime_value
));
}
else
{
res_datum
.
set_date
(
out_val
);
}
...
...
src/sql/engine/expr/ob_expr_from_unix_time.cpp
浏览文件 @
8d81ad6e
...
...
@@ -212,7 +212,8 @@ int ObExprFromUnixTime::cg_expr(ObExprCGCtx& op_cg_ctx, const ObRawExpr& raw_exp
if
(
OB_ISNULL
(
rt_expr
.
args_
[
0
])
||
OB_ISNULL
(
rt_expr
.
args_
[
1
])
||
OB_ISNULL
(
rt_expr
.
args_
[
2
]))
{
ret
=
OB_INVALID_ARGUMENT
;
LOG_WARN
(
"invalid null args"
,
K
(
ret
),
K
(
rt_expr
.
args_
[
0
]),
K
(
rt_expr
.
args_
[
1
]),
K
(
rt_expr
.
args_
[
2
]));
}
else
if
(
OB_FAIL
(
ObStaticEngineExprCG
::
replace_var_rt_expr
(
rt_expr
.
args_
[
1
],
rt_expr
.
args_
[
2
],
&
rt_expr
,
2
)))
{
}
else
if
(
OB_FAIL
(
ObStaticEngineExprCG
::
replace_var_rt_expr
(
rt_expr
.
args_
[
1
],
raw_expr
.
get_param_expr
(
1
),
rt_expr
.
args_
[
2
],
&
rt_expr
,
2
)))
{
LOG_WARN
(
"replace var rt expr failed"
,
K
(
ret
),
K
(
rt_expr
));
}
else
if
(
ob_is_string_tc
(
rt_expr
.
args_
[
2
]
->
datum_meta_
.
type_
))
{
rt_expr
.
eval_func_
=
&
eval_fromtime_normal
;
...
...
src/sql/engine/expr/ob_expr_greatest.cpp
浏览文件 @
8d81ad6e
...
...
@@ -124,10 +124,12 @@ int ObExprBaseGreatest::cg_expr(ObExprCGCtx& op_cg_ctx, const ObRawExpr& raw_exp
const
uint32_t
real_param_num
=
param_num
/
3
;
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
)))
{
rt_expr
.
args_
[
i
],
raw_expr
.
get_param_expr
(
i
),
rt_expr
.
args_
[
i
+
real_param_num
],
&
rt_expr
,
i
+
real_param_num
)))
{
LOG_WARN
(
"replace var rt expr failed"
,
K
(
ret
));
}
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
)))
{
}
else
if
(
OB_FAIL
(
ObStaticEngineExprCG
::
replace_var_rt_expr
(
rt_expr
.
args_
[
i
],
raw_expr
.
get_param_expr
(
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
));
}
}
...
...
src/sql/engine/expr/ob_expr_least.cpp
浏览文件 @
8d81ad6e
...
...
@@ -350,10 +350,10 @@ int ObExprBaseLeast::cg_expr(ObExprCGCtx& op_cg_ctx, const ObRawExpr& raw_expr,
const
uint32_t
real_param_num
=
param_num
/
3
;
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
)))
{
rt_expr
.
args_
[
i
],
r
aw_expr
.
get_param_expr
(
i
),
r
t_expr
.
args_
[
i
+
real_param_num
],
&
rt_expr
,
i
+
real_param_num
)))
{
LOG_WARN
(
"replace var rt expr failed"
,
K
(
ret
));
}
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
)))
{
rt_expr
.
args_
[
i
],
r
aw_expr
.
get_param_expr
(
i
),
r
t_expr
.
args_
[
i
+
2
*
real_param_num
],
&
rt_expr
,
i
+
2
*
real_param_num
)))
{
LOG_WARN
(
"replace var rt expr failed"
,
K
(
ret
));
}
}
...
...
src/sql/engine/expr/ob_expr_nullif.cpp
浏览文件 @
8d81ad6e
...
...
@@ -229,10 +229,10 @@ int ObExprNullif::cg_expr(ObExprCGCtx& expr_cg_ctx, const ObRawExpr& raw_expr, O
const
uint32_t
real_param_num
=
param_num
/
3
;
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
)))
{
rt_expr
.
args_
[
i
],
r
aw_expr
.
get_param_expr
(
i
),
r
t_expr
.
args_
[
i
+
real_param_num
],
&
rt_expr
,
i
+
real_param_num
)))
{
LOG_WARN
(
"replace var rt expr failed"
,
K
(
ret
));
}
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
)))
{
rt_expr
.
args_
[
i
],
r
aw_expr
.
get_param_expr
(
i
),
r
t_expr
.
args_
[
i
+
2
*
real_param_num
],
&
rt_expr
,
i
+
2
*
real_param_num
)))
{
LOG_WARN
(
"replace var rt expr failed"
,
K
(
ret
));
}
}
...
...
src/sql/ob_dml_stmt_printer.cpp
浏览文件 @
8d81ad6e
...
...
@@ -459,8 +459,12 @@ int ObDMLStmtPrinter::print_table(
ObIArray
<
ObString
>*
column_list
=
NULL
;
bool
is_set_subquery
=
false
;
bool
is_generated_table
=
true
;
const
bool
force_col_alias
=
stmt_
->
is_select_stmt
()
&&
(
static_cast
<
const
ObSelectStmt
*>
(
stmt_
)
->
is_star_select
());
// force print alias name for select item in generated table. Otherwise,
// create view v as select 1 from dual where 1 > (select `abs(c1)` from (select abs(c1) from t));
// Definition of v would be:
// CREATE VIEW `v` AS select 1 AS `1` from DUAL where (1 > (select `abs(c1)` from ((select abs(`test`.`t`.`c1`) from `test`.`t`)) ))
// `abs(c1)` would be an unknown column.
const
bool
force_col_alias
=
stmt_
->
is_select_stmt
();
ObSelectStmtPrinter
stmt_printer
(
buf_
,
buf_len_
,
pos_
,
...
...
src/sql/resolver/dml/ob_dml_resolver.cpp
浏览文件 @
8d81ad6e
...
...
@@ -417,8 +417,9 @@ int ObDMLResolver::resolve_into_variables(
if
(
OB_SUCC
(
ret
))
{
if
(
T_USER_VARIABLE_IDENTIFIER
==
ch_node
->
type_
)
{
ObString
var_name
(
ch_node
->
str_len_
,
ch_node
->
str_value_
);
OZ
(
user_vars
.
push_back
(
var_name
));
OZ
(
user_var_idx
.
add_member
(
i
));
ObCharset
::
casedn
(
CS_TYPE_UTF8MB4_GENERAL_CI
,
var_name
);
OZ
(
user_vars
.
push_back
(
var_name
));
OZ
(
user_var_idx
.
add_member
(
i
));
}
else
{
if
(
params_
.
is_prepare_protocol_
)
{
ObSEArray
<
ObQualifiedName
,
1
>
columns
;
...
...
src/sql/session/ob_basic_session_info.cpp
浏览文件 @
8d81ad6e
...
...
@@ -4405,11 +4405,14 @@ int ObBasicSessionInfo::set_time_zone(
LOG_INFO
(
"ignore unknow time zone, perhaps in remote/distribute task processer when server start_time is zero"
,
K
(
str_val
));
ret
=
OB_SUCCESS
;
if
(
OB_FAIL
(
tz_info_wrap_
.
get_tz_info_pos
().
set_tz_name
(
str_val
.
ptr
(),
no_sp_len
)))
{
LOG_WARN
(
"fail to set time zone info name"
,
K
(
str_val
),
K
(
ret
));
offset
=
0
;
if
(
OB_FAIL
(
ObTimeConverter
::
str_to_offset
(
ObString
(
"+8:00"
),
offset
,
ret_more
,
is_oralce_mode
,
check_timezone_valid
)))
{
if
(
ret
!=
OB_ERR_UNKNOWN_TIME_ZONE
)
{
LOG_WARN
(
"fail to convert time zone"
,
K
(
str_val
),
K
(
ret
));
}
}
else
{
tz_info_wrap_
.
set_tz_info_
position
(
);
tz_info_wrap_
.
set_tz_info_
offset
(
offset
);
}
}
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录