修复nanvl,第一个为null的参数如果是binary double类型,需要对第二个参数 进行取值,若转换数字失败的话报错,成功返回null值

This commit is contained in:
obdev
2024-02-09 09:09:45 +00:00
committed by ob-robot
parent fc1019a82d
commit b7f2fcb3d6

View File

@ -495,7 +495,7 @@ int ObExprNaNvl::eval_nanvl(const ObExpr &expr, ObEvalCtx &ctx, ObDatum &expr_da
bool ret_bool = false; bool ret_bool = false;
if (OB_FAIL(expr.args_[0]->eval(ctx, param1))) { if (OB_FAIL(expr.args_[0]->eval(ctx, param1))) {
LOG_WARN("eval first param failed", K(ret)); LOG_WARN("eval first param failed", K(ret));
} else if (param1->is_null()) { } else if (param1->is_null() && ObOBinDoubleType != ob_obj_type_to_oracle_type(expr.args_[0]->datum_meta_.get_type())) {
expr_datum.set_null(); expr_datum.set_null();
} else if (OB_FAIL(expr.args_[1]->eval(ctx, param2))) { } else if (OB_FAIL(expr.args_[1]->eval(ctx, param2))) {
LOG_WARN("eval second param failed", K(ret)); LOG_WARN("eval second param failed", K(ret));
@ -530,7 +530,7 @@ int ObExprNaNvl::eval_nanvl_batch(const ObExpr &expr,
} }
ObDatum *param1 = NULL; ObDatum *param1 = NULL;
param1 = &expr.args_[0]->locate_expr_datum(ctx, i); param1 = &expr.args_[0]->locate_expr_datum(ctx, i);
if (param1->is_null()) { if (param1->is_null() && ObOBinDoubleType != ob_obj_type_to_oracle_type(expr.args_[0]->datum_meta_.get_type())) {
results[i].set_null(); results[i].set_null();
eval_flags.set(i); eval_flags.set(i);
my_skip.set(i); my_skip.set(i);