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_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)); LOG_WARN("failed to get select exprs", K(ret));
} else if (OB_UNLIKELY(query_refs.count() != select_list.count())) { } else if (OB_UNLIKELY(query_refs.count() != select_list.count())) {
ret = OB_ERR_UNEXPECTED; 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)); LOG_WARN("failed to merge tables to parent stmt", K(ret));
} else if (OB_FAIL(trans_from_list(stmt, subquery, param.use_outer_join_))) { } else if (OB_FAIL(trans_from_list(stmt, subquery, param.use_outer_join_))) {
LOG_WARN("failed to transform from list", K(ret)); 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()))) { } else if (OB_FAIL(append(stmt->get_part_exprs(), subquery->get_part_exprs()))) {
LOG_WARN("failed to append part expr", K(ret)); LOG_WARN("failed to append part expr", K(ret));
} else if (OB_FAIL(append(stmt->get_check_constraint_items(), } 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)); LOG_WARN("failed to merge subquery stmt hint", K(ret));
} else if (OB_FAIL(ObOptimizerUtil::remove_item(stmt->get_subquery_exprs(), query_expr))) { } else if (OB_FAIL(ObOptimizerUtil::remove_item(stmt->get_subquery_exprs(), query_expr))) {
LOG_WARN("remove expr failed", K(ret)); LOG_WARN("remove expr failed", K(ret));
} else { } else if (OB_FAIL(stmt->replace_relation_exprs(query_refs, select_list))) {
select_list.reuse(); LOG_WARN("failed to replace inner stmt expr", K(ret));
if (OB_FAIL(subquery->get_select_exprs(select_list))) { } else if (OB_FAIL(stmt->formalize_stmt(ctx_->session_info_))) {
LOG_WARN("failed to get select exprs", K(ret)); 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; return ret;