提交 09e44549 编写于 作者: O obdev 提交者: wangzelin.wzl

fix incorrect collation level bug when building null expr

上级 ea93bcc2
......@@ -1090,12 +1090,19 @@ int ObTransformJoinElimination::do_eliminate_left_outer_join(ObDMLStmt *stmt,
0, /* result_flag */
ctx_->session_info_, cm))) {
LOG_WARN("fail to get default cast mode", K(ret));
} else if (OB_FAIL(ObRawExprUtils::create_cast_expr(*ctx_->expr_factory_,
} else if (is_mysql_mode() &&
OB_FAIL(ObRawExprUtils::create_cast_expr(*ctx_->expr_factory_,
to_expr,
from_expr->get_result_type(),
cast_expr, ctx_->session_info_,
false, cm))) {
LOG_WARN("failed to cast expr", K(ret), K(*from_expr), K(*to_expr));
} else if (is_oracle_mode() &&
OB_FAIL(ObRawExprUtils::create_cast_expr(*ctx_->expr_factory_,
to_expr,
from_expr->get_result_type(),
cast_expr, ctx_->session_info_))) {
LOG_WARN("failed to cast expr", K(ret), K(*from_expr), K(*to_expr));
} else if (OB_ISNULL(cast_expr)) {
ret = OB_ERR_UNEXPECTED;
LOG_WARN("get unexpected null expr", K(ret));
......
......@@ -295,6 +295,7 @@ int ObTransformLeftJoinToAnti::trans_stmt_to_anti(ObDMLStmt *stmt, const JoinedT
ObRawExpr *from_expr = NULL;
ObRawExpr *to_expr = NULL;
ObSysFunRawExpr *cast_expr = NULL;
ObCastMode cm;
if (OB_ISNULL(col_item = stmt->get_column_item(i)) ||
OB_ISNULL(from_expr = col_item->expr_)) {
ret = OB_ERR_UNEXPECTED;
......@@ -304,12 +305,23 @@ int ObTransformLeftJoinToAnti::trans_stmt_to_anti(ObDMLStmt *stmt, const JoinedT
} else if (OB_FAIL(ObRawExprUtils::build_null_expr(*ctx_->expr_factory_,
to_expr))) {
LOG_WARN("failed to build null expr", K(ret));
} else if (OB_FAIL(ObRawExprUtils::create_cast_expr(*ctx_->expr_factory_,
to_expr,
from_expr->get_result_type(),
cast_expr,
ctx_->session_info_))) {
LOG_WARN("failed to create cast expr", K(ret));
} else if (OB_FAIL(ObSQLUtils::get_default_cast_mode(true,/* explicit_cast */
0, /* result_flag */
ctx_->session_info_, cm))) {
LOG_WARN("fail to get default cast mode", K(ret));
} else if (is_mysql_mode() &&
OB_FAIL(ObRawExprUtils::create_cast_expr(*ctx_->expr_factory_,
to_expr,
from_expr->get_result_type(),
cast_expr, ctx_->session_info_,
false, cm))) {
LOG_WARN("failed to cast expr", K(ret), K(*from_expr), K(*to_expr));
} else if (is_oracle_mode() &&
OB_FAIL(ObRawExprUtils::create_cast_expr(*ctx_->expr_factory_,
to_expr,
from_expr->get_result_type(),
cast_expr, ctx_->session_info_))) {
LOG_WARN("failed to cast expr", K(ret), K(*from_expr), K(*to_expr));
} else if (OB_ISNULL(to_expr = cast_expr)) {
ret = OB_ERR_UNEXPECTED;
LOG_WARN("get unexpected null cast expr", K(ret));
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册