fix bug that cause be decorrelated exprs

This commit is contained in:
jingtaoye35 2023-10-19 08:17:24 +00:00 committed by ob-robot
parent f46cc5847d
commit ae4654df37

View File

@ -1393,7 +1393,9 @@ int ObWhereSubQueryPullup::unnest_single_set_subquery(ObDMLStmt *stmt,
}
}
if (OB_SUCC(ret)) {
if (OB_FAIL(subquery->get_select_exprs(select_list))) {
if (OB_FAIL(ObTransformUtils::decorrelate(subquery, query_expr->get_exec_params()))) {
LOG_WARN("failed to decorrelate subquery", K(ret));
} else if (OB_FAIL(subquery->get_select_exprs(select_list))) {
LOG_WARN("failed to get select exprs", K(ret));
} else if (OB_UNLIKELY(query_refs.count() != select_list.count())) {
ret = OB_ERR_UNEXPECTED;
@ -1407,8 +1409,6 @@ int ObWhereSubQueryPullup::unnest_single_set_subquery(ObDMLStmt *stmt,
LOG_WARN("failed to merge tables to parent stmt", K(ret));
} else if (OB_FAIL(trans_from_list(stmt, subquery, param.use_outer_join_))) {
LOG_WARN("failed to transform from list", K(ret));
} else if (OB_FAIL(ObTransformUtils::decorrelate(subquery, query_expr->get_exec_params()))) {
LOG_WARN("failed to decorrelate subquery", K(ret));
} else if (OB_FAIL(append(stmt->get_part_exprs(), subquery->get_part_exprs()))) {
LOG_WARN("failed to append part expr", K(ret));
} else if (OB_FAIL(append(stmt->get_check_constraint_items(),
@ -1421,15 +1421,10 @@ int ObWhereSubQueryPullup::unnest_single_set_subquery(ObDMLStmt *stmt,
LOG_WARN("failed to merge subquery stmt hint", K(ret));
} else if (OB_FAIL(ObOptimizerUtil::remove_item(stmt->get_subquery_exprs(), query_expr))) {
LOG_WARN("remove expr failed", K(ret));
} else {
select_list.reuse();
if (OB_FAIL(subquery->get_select_exprs(select_list))) {
LOG_WARN("failed to get select exprs", K(ret));
} else if (OB_FAIL(stmt->replace_relation_exprs(query_refs, select_list))) {
LOG_WARN("failed to replace inner stmt expr", K(ret));
} else if (OB_FAIL(stmt->formalize_stmt(ctx_->session_info_))) {
LOG_WARN("failed to formalize stmt", K(ret));
}
} else if (OB_FAIL(stmt->replace_relation_exprs(query_refs, select_list))) {
LOG_WARN("failed to replace inner stmt expr", K(ret));
} else if (OB_FAIL(stmt->formalize_stmt(ctx_->session_info_))) {
LOG_WARN("failed to formalize stmt", K(ret));
}
}
return ret;