From e78a327f06987a6fe9d31dd5da37660da3fd8a60 Mon Sep 17 00:00:00 2001 From: obdev Date: Mon, 7 Nov 2022 04:12:48 +0000 Subject: [PATCH] [CP] fix json invalid cs level bug --- src/sql/engine/expr/ob_expr_nvl.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/sql/engine/expr/ob_expr_nvl.cpp b/src/sql/engine/expr/ob_expr_nvl.cpp index 3195b5903..7bcae887b 100644 --- a/src/sql/engine/expr/ob_expr_nvl.cpp +++ b/src/sql/engine/expr/ob_expr_nvl.cpp @@ -38,8 +38,7 @@ int ObExprNvlUtil::calc_result_type(ObExprResType &type, LOG_WARN("get nvl type failed", K(ret), K(type1), K(type2)); } else if (OB_UNLIKELY(type.is_invalid())) { ret = OB_ERR_INVALID_TYPE_FOR_OP; - } - if (OB_SUCC(ret) && ob_is_string_type(type.get_type())) { + } else if (ob_is_string_type(type.get_type())) { ObCollationLevel res_cs_level = CS_LEVEL_INVALID; ObCollationType res_cs_type = CS_TYPE_INVALID; if (lib::is_oracle_mode()) { @@ -60,9 +59,11 @@ int ObExprNvlUtil::calc_result_type(ObExprResType &type, type.set_collation_level(res_cs_level); type.set_collation_type(res_cs_type); } - } else if (OB_SUCC(ret) && ob_is_raw(type.get_type())) { + } else if (ob_is_raw(type.get_type())) { type.set_collation_level(CS_LEVEL_NUMERIC); type.set_collation_type(CS_TYPE_BINARY); + } else if (ob_is_json(type.get_type())) { + type.set_collation_level(CS_LEVEL_IMPLICIT); } if (OB_SUCC(ret)) { type.set_length(MAX(type1.get_length(), type2.get_length())); -- GitLab