bugfix: set collation level when add cast during remove subquery

This commit is contained in:
obdev
2023-08-15 08:40:53 +00:00
committed by ob-robot
parent 7dc7844cef
commit f4aff366fd

View File

@ -2110,22 +2110,20 @@ int ObTransformSimplifyExpr::build_null_for_empty_set(const ObSelectStmt* sub_st
int ObTransformSimplifyExpr::build_null_expr_and_cast(const ObRawExpr* expr, ObRawExpr*& cast_expr) int ObTransformSimplifyExpr::build_null_expr_and_cast(const ObRawExpr* expr, ObRawExpr*& cast_expr)
{ {
int ret = OB_SUCCESS; int ret = OB_SUCCESS;
ObRawExpr* null_expr = NULL;
cast_expr = NULL; cast_expr = NULL;
if (OB_ISNULL(expr) || OB_ISNULL(ctx_)) { if (OB_ISNULL(expr) || OB_ISNULL(ctx_)) {
ret = OB_ERR_UNEXPECTED; ret = OB_ERR_UNEXPECTED;
LOG_WARN("parameters have null", K(expr), K(ctx_)); LOG_WARN("parameters have null", K(expr), K(ctx_));
} else if (OB_FAIL(ObRawExprUtils::build_null_expr(*ctx_->expr_factory_, null_expr))) { } else if (OB_FAIL(ObRawExprUtils::build_null_expr(*ctx_->expr_factory_, cast_expr))) {
LOG_WARN("failed to build null expr", K(ret)); LOG_WARN("failed to build null expr", K(ret));
} else if (OB_ISNULL(null_expr)) { } else if (OB_ISNULL(cast_expr)) {
ret = OB_ERR_UNEXPECTED; ret = OB_ERR_UNEXPECTED;
LOG_WARN("get unexpected null", K(ret)); LOG_WARN("get unexpected null", K(ret));
} else if (OB_FAIL(ObRawExprUtils::try_add_cast_expr_above(ctx_->expr_factory_, } else if (OB_FAIL(ObTransformUtils::add_cast_for_replace_if_need(*ctx_->expr_factory_,
ctx_->session_info_, expr,
*null_expr, cast_expr,
expr->get_result_type(), ctx_->session_info_))) {
cast_expr))) { LOG_WARN("failed to add cast for replace if need", K(ret));
LOG_WARN("try add cast expr above failed", K(ret));
} }
return ret; return ret;
} }
@ -2153,12 +2151,12 @@ int ObTransformSimplifyExpr::replace_expr_when_filter_is_false(ObRawExpr*& expr)
} else if (OB_ISNULL(zero_expr)) { } else if (OB_ISNULL(zero_expr)) {
ret = OB_ERR_UNEXPECTED; ret = OB_ERR_UNEXPECTED;
LOG_WARN("get unexpected null", K(ret)); LOG_WARN("get unexpected null", K(ret));
} else if (OB_FAIL(ObRawExprUtils::try_add_cast_expr_above(ctx_->expr_factory_, } else if (FALSE_IT(cast_expr = zero_expr)) {
ctx_->session_info_, } else if (OB_FAIL(ObTransformUtils::add_cast_for_replace_if_need(*ctx_->expr_factory_,
*zero_expr, expr,
expr->get_result_type(), cast_expr,
cast_expr))) { ctx_->session_info_))) {
LOG_WARN("try add cast expr above failed", K(ret)); LOG_WARN("failed to add cast for replace if need", K(ret));
} else { } else {
expr = cast_expr; expr = cast_expr;
} }