From ae4654df37a12bea45da7180d3abe8b62866b3a1 Mon Sep 17 00:00:00 2001 From: jingtaoye35 <1255153887@qq.com> Date: Thu, 19 Oct 2023 08:17:24 +0000 Subject: [PATCH] fix bug that cause be decorrelated exprs --- .../ob_transform_where_subquery_pullup.cpp | 19 +++++++------------ 1 file changed, 7 insertions(+), 12 deletions(-) diff --git a/src/sql/rewrite/ob_transform_where_subquery_pullup.cpp b/src/sql/rewrite/ob_transform_where_subquery_pullup.cpp index a072d1b55..209a53b27 100644 --- a/src/sql/rewrite/ob_transform_where_subquery_pullup.cpp +++ b/src/sql/rewrite/ob_transform_where_subquery_pullup.cpp @@ -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;