From 3ff2d82e7c382b39f56f310d5dfca128c627a6e9 Mon Sep 17 00:00:00 2001 From: obdev Date: Sat, 10 Feb 2024 09:55:45 +0000 Subject: [PATCH] fix:code check;json decimal rebuild --- deps/oblib/src/lib/json_type/ob_json_bin.cpp | 10 ++++++++-- src/sql/engine/expr/ob_expr_json_value.cpp | 6 +++--- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/deps/oblib/src/lib/json_type/ob_json_bin.cpp b/deps/oblib/src/lib/json_type/ob_json_bin.cpp index 3edba8685..0bcf1ed9f 100644 --- a/deps/oblib/src/lib/json_type/ob_json_bin.cpp +++ b/deps/oblib/src/lib/json_type/ob_json_bin.cpp @@ -3862,9 +3862,15 @@ int ObJsonBin::rebuild_json_value(const char *data, } case ObJsonNodeType::J_DECIMAL: case ObJsonNodeType::J_ODECIMAL: { - int64_t pos = 0; + ObPrecision prec = -1; + ObScale scale = -1; number::ObNumber temp_number; - if (OB_FAIL(temp_number.deserialize(data, length, pos))) { + int64_t pos = 0; + if (OB_FAIL(serialization::decode_i16(data, length, pos, &prec))) { + LOG_WARN("fail to deserialize decimal precision.", K(ret), K(length)); + } else if (OB_FAIL(serialization::decode_i16(data, length, pos, &scale))) { + LOG_WARN("fail to deserialize decimal scale.", K(ret), K(length), K(prec)); + } else if (OB_FAIL(temp_number.deserialize(data, length, pos))) { LOG_WARN("failed to deserialize decimal data", K(ret)); } else { ret = result.append(data, pos); diff --git a/src/sql/engine/expr/ob_expr_json_value.cpp b/src/sql/engine/expr/ob_expr_json_value.cpp index 989a0406b..33b53724e 100644 --- a/src/sql/engine/expr/ob_expr_json_value.cpp +++ b/src/sql/engine/expr/ob_expr_json_value.cpp @@ -1824,10 +1824,10 @@ int ObExprJsonValue::get_on_mismatch(const ObExpr &expr, ObObjType val_type; ObDatum *json_datum = NULL; - uint32_t expr_size = expr.arg_cnt_; - uint32_t pos = -1; + uint32_t expr_count = expr.arg_cnt_; + int32_t pos = -1; - for(uint32_t i = index; OB_SUCC(ret) && i < expr_size; i++) { + for(uint32_t i = index; OB_SUCC(ret) && i < expr_count; i++) { json_arg = expr.args_[i]; val_type = json_arg->datum_meta_.type_; if (OB_FAIL(json_arg->eval(ctx, json_datum))) {