fix timediff bug
This commit is contained in:
549
deps/oblib/src/lib/timezone/ob_time_convert.cpp
vendored
549
deps/oblib/src/lib/timezone/ob_time_convert.cpp
vendored
File diff suppressed because it is too large
Load Diff
@ -24,20 +24,20 @@ namespace oceanbase {
|
|||||||
using namespace common;
|
using namespace common;
|
||||||
namespace sql {
|
namespace sql {
|
||||||
|
|
||||||
ObExprTimeDiff::ObExprTimeDiff(ObIAllocator& alloc)
|
ObExprTimeDiff::ObExprTimeDiff(ObIAllocator &alloc)
|
||||||
: ObFuncExprOperator(alloc, T_FUN_SYS_TIME_DIFF, N_TIME_DIFF, 2, NOT_ROW_DIMENSION)
|
: ObFuncExprOperator(alloc, T_FUN_SYS_TIME_DIFF, N_TIME_DIFF, 2, NOT_ROW_DIMENSION)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
ObExprTimeDiff::~ObExprTimeDiff()
|
ObExprTimeDiff::~ObExprTimeDiff()
|
||||||
{}
|
{}
|
||||||
|
|
||||||
int ObExprTimeDiff::calc_result2(ObObj& result, const ObObj& left, const ObObj& right, ObExprCtx& expr_ctx) const
|
int ObExprTimeDiff::calc_result2(ObObj &result, const ObObj &left, const ObObj &right, ObExprCtx &expr_ctx) const
|
||||||
{
|
{
|
||||||
EXPR_DEFINE_CAST_CTX(expr_ctx, CM_NONE);
|
EXPR_DEFINE_CAST_CTX(expr_ctx, CM_NONE);
|
||||||
return calc(result, left, right, cast_ctx);
|
return calc(result, left, right, cast_ctx);
|
||||||
}
|
}
|
||||||
|
|
||||||
int ObExprTimeDiff::get_diff_value_with_ob_time(ObTime& ot1, ObTime& ot2, const ObTimeZoneInfo* tz_info, int64_t& diff)
|
int ObExprTimeDiff::get_diff_value_with_ob_time(ObTime &ot1, ObTime &ot2, const ObTimeZoneInfo *tz_info, int64_t &diff)
|
||||||
{
|
{
|
||||||
int ret = OB_SUCCESS;
|
int ret = OB_SUCCESS;
|
||||||
int64_t value1 = 0;
|
int64_t value1 = 0;
|
||||||
@ -63,7 +63,7 @@ int ObExprTimeDiff::get_diff_value_with_ob_time(ObTime& ot1, ObTime& ot2, const
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
int ObExprTimeDiff::get_diff_value(const ObObj& obj1, const ObObj& obj2, const ObTimeZoneInfo* tz_info, int64_t& diff)
|
int ObExprTimeDiff::get_diff_value(const ObObj &obj1, const ObObj &obj2, const ObTimeZoneInfo *tz_info, int64_t &diff)
|
||||||
{
|
{
|
||||||
int ret = OB_INVALID_DATE_VALUE;
|
int ret = OB_INVALID_DATE_VALUE;
|
||||||
ObTime ot1;
|
ObTime ot1;
|
||||||
@ -77,7 +77,7 @@ int ObExprTimeDiff::get_diff_value(const ObObj& obj1, const ObObj& obj2, const O
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
int ObExprTimeDiff::calc(ObObj& result, const ObObj& left, const ObObj& right, ObCastCtx& cast_ctx)
|
int ObExprTimeDiff::calc(ObObj &result, const ObObj &left, const ObObj &right, ObCastCtx &cast_ctx)
|
||||||
{
|
{
|
||||||
int ret = OB_SUCCESS;
|
int ret = OB_SUCCESS;
|
||||||
int64_t int64_diff = 0;
|
int64_t int64_diff = 0;
|
||||||
@ -99,7 +99,7 @@ int ObExprTimeDiff::calc(ObObj& result, const ObObj& left, const ObObj& right, O
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
int ObExprTimeDiff::cg_expr(ObExprCGCtx& op_cg_ctx, const ObRawExpr& raw_expr, ObExpr& rt_expr) const
|
int ObExprTimeDiff::cg_expr(ObExprCGCtx &op_cg_ctx, const ObRawExpr &raw_expr, ObExpr &rt_expr) const
|
||||||
{
|
{
|
||||||
UNUSED(op_cg_ctx);
|
UNUSED(op_cg_ctx);
|
||||||
UNUSED(raw_expr);
|
UNUSED(raw_expr);
|
||||||
@ -116,13 +116,13 @@ int ObExprTimeDiff::cg_expr(ObExprCGCtx& op_cg_ctx, const ObRawExpr& raw_expr, O
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
int ObExprTimeDiff::calc_timediff(const ObExpr& expr, ObEvalCtx& ctx, ObDatum& expr_datum)
|
int ObExprTimeDiff::calc_timediff(const ObExpr &expr, ObEvalCtx &ctx, ObDatum &expr_datum)
|
||||||
{
|
{
|
||||||
int ret = OB_SUCCESS;
|
int ret = OB_SUCCESS;
|
||||||
bool calc_param_failure = false;
|
bool calc_param_failure = false;
|
||||||
ObDatum* param_datum1 = NULL;
|
ObDatum *param_datum1 = NULL;
|
||||||
ObDatum* param_datum2 = NULL;
|
ObDatum *param_datum2 = NULL;
|
||||||
const ObSQLSessionInfo* session = NULL;
|
const ObSQLSessionInfo *session = NULL;
|
||||||
if (OB_ISNULL(session = ctx.exec_ctx_.get_my_session())) {
|
if (OB_ISNULL(session = ctx.exec_ctx_.get_my_session())) {
|
||||||
ret = OB_ERR_UNEXPECTED;
|
ret = OB_ERR_UNEXPECTED;
|
||||||
LOG_WARN("session is null", K(ret));
|
LOG_WARN("session is null", K(ret));
|
||||||
@ -133,8 +133,8 @@ int ObExprTimeDiff::calc_timediff(const ObExpr& expr, ObEvalCtx& ctx, ObDatum& e
|
|||||||
expr_datum.set_null();
|
expr_datum.set_null();
|
||||||
} else {
|
} else {
|
||||||
int64_t int64_diff = 0;
|
int64_t int64_diff = 0;
|
||||||
ObTime ot1;
|
ObTime ot1(DT_TYPE_TIME);
|
||||||
ObTime ot2;
|
ObTime ot2(DT_TYPE_TIME);
|
||||||
if (OB_FAIL(ob_datum_to_ob_time_without_date(
|
if (OB_FAIL(ob_datum_to_ob_time_without_date(
|
||||||
*param_datum1, expr.args_[0]->datum_meta_.type_, get_timezone_info(session), ot1))) {
|
*param_datum1, expr.args_[0]->datum_meta_.type_, get_timezone_info(session), ot1))) {
|
||||||
LOG_WARN("cast the first param failed", K(ret));
|
LOG_WARN("cast the first param failed", K(ret));
|
||||||
|
|||||||
Reference in New Issue
Block a user