修复nanvl,第一个为null的参数如果是binary double类型,需要对第二个参数 进行取值,若转换数字失败的话报错,成功返回null值
This commit is contained in:
@ -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);
|
||||||
|
Reference in New Issue
Block a user