From 991572d45c7de252b16f36aef351ee311ece5a61 Mon Sep 17 00:00:00 2001 From: obdev Date: Tue, 8 Nov 2022 10:10:17 +0000 Subject: [PATCH] fix update subquery coalesce bug --- .../rewrite/ob_transform_subquery_coalesce.cpp | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 deletions(-) diff --git a/src/sql/rewrite/ob_transform_subquery_coalesce.cpp b/src/sql/rewrite/ob_transform_subquery_coalesce.cpp index 174d1eb0e..c88d59147 100644 --- a/src/sql/rewrite/ob_transform_subquery_coalesce.cpp +++ b/src/sql/rewrite/ob_transform_subquery_coalesce.cpp @@ -1852,8 +1852,6 @@ int ObTransformSubqueryCoalesce::inner_coalesce_subquery(ObSelectStmt *subquery, ObStmtCompareContext context; //select items in subquery ObSEArray subquery_select_list; - //select items in subquery trans to select items in coalesce query - ObSEArray new_select_list; //select items in coalesce query ObSEArray coalesce_select_list; //column items in subquery @@ -1948,13 +1946,7 @@ int ObTransformSubqueryCoalesce::inner_coalesce_subquery(ObSelectStmt *subquery, ret = OB_ERR_UNEXPECTED; LOG_WARN("unexpect null select expr", K(ret)); } else if (!coalesce_select->same_as(*subquery_select, &context)) { - //do nothing - } else if (OB_FAIL(new_select_list.push_back(coalesce_select))) { - LOG_WARN("failed to push back expr", K(ret)); - } else if (OB_FAIL(ObTransformUtils::create_select_item(*ctx_->allocator_, - coalesce_select, - coalesce_query))) { - LOG_WARN("failed to create column for subquery", K(ret)); + // do nothing } else if (OB_FAIL(index_map.push_back(coalesce_query->get_select_item_size() - 1))) { LOG_WARN("failed to push back index", K(ret)); } else { @@ -1966,8 +1958,6 @@ int ObTransformSubqueryCoalesce::inner_coalesce_subquery(ObSelectStmt *subquery, ObSEArray win_func_exprs; if (ObTransformUtils::replace_expr(subquery_column_list, new_column_list, subquery_select)) { LOG_WARN("failed to replace expr", K(ret)); - } else if (OB_FAIL(new_select_list.push_back(subquery_select))) { - LOG_WARN("failed to push back expr", K(ret)); } else if (OB_FAIL(ObTransformUtils::extract_aggr_expr(subquery->get_current_level(), subquery_select, aggr_items))) { @@ -2070,8 +2060,10 @@ int ObTransformSubqueryCoalesce::adjust_assign_exprs(ObUpdateStmt *upd_stmt, } else { coalesce_query_expr->set_ref_stmt(coalesce_query); coalesce_query_expr->set_expr_level(upd_stmt->get_current_level()); + if (OB_FAIL(coalesce_query_expr->formalize(ctx_->session_info_))) { + LOG_WARN("failed to formalize coalesce query expr", K(ret)); + } } - for (int64_t i = 0; OB_SUCC(ret) && i < upd_stmt->get_update_table_info().count(); ++i) { ObUpdateTableInfo* table_info = upd_stmt->get_update_table_info().at(i); if (OB_ISNULL(table_info)) { @@ -2083,6 +2075,8 @@ int ObTransformSubqueryCoalesce::adjust_assign_exprs(ObUpdateStmt *upd_stmt, if (OB_ISNULL(assign.expr_)) { ret = OB_ERR_UNEXPECTED; LOG_WARN("unexpect null expr", K(ret)); + } else if (OB_FAIL(assign.expr_->extract_info())) { + LOG_WARN("failed to extract expr info", K(ret)); } else if (assign.expr_->has_flag(CNT_ALIAS)) { if (OB_FAIL(adjust_alias_assign_exprs(assign.expr_, helper,