From 3adc8b240719ef339000048f2543044937bbffd8 Mon Sep 17 00:00:00 2001 From: yinyj17 Date: Thu, 9 Feb 2023 14:15:34 +0000 Subject: [PATCH] fix group by pullup bug with shared subquery --- .../rewrite/ob_transform_groupby_pullup.cpp | 48 +------------------ 1 file changed, 2 insertions(+), 46 deletions(-) diff --git a/src/sql/rewrite/ob_transform_groupby_pullup.cpp b/src/sql/rewrite/ob_transform_groupby_pullup.cpp index 2840a0cdf..eae127fe0 100644 --- a/src/sql/rewrite/ob_transform_groupby_pullup.cpp +++ b/src/sql/rewrite/ob_transform_groupby_pullup.cpp @@ -682,12 +682,9 @@ int ObTransformGroupByPullup::get_trans_view(ObDMLStmt *stmt, ObSelectStmt *&vie int ObTransformGroupByPullup::do_groupby_pull_up(ObSelectStmt *stmt, PullupHelper &helper) { int ret = OB_SUCCESS; - ObSEArray view_columns; - ObSEArray stmt_columns; ObSEArray unique_exprs; ObSEArray aggr_column; ObSEArray aggr_select; - ObSEArray pullup_exprs; TableItem *table_item = NULL; ObSelectStmt *subquery = NULL; ObSqlBitSet<> ignore_tables; @@ -742,47 +739,8 @@ int ObTransformGroupByPullup::do_groupby_pull_up(ObSelectStmt *stmt, PullupHelpe } if (OB_SUCC(ret)) { - //提取select item、group by expr、having condition的column expr,在视图内创建select item - //在stmt内创建对应的column expr if (OB_FAIL(wrap_case_when_if_necessary(*subquery, helper, aggr_select))) { LOG_WARN("failed to wrap case when", K(ret)); - } else if (OB_FAIL(append(pullup_exprs, aggr_select))) { - LOG_WARN("failed to append pullup exprs", K(ret)); - } else if (OB_FAIL(append(pullup_exprs, subquery->get_group_exprs()))) { - LOG_WARN("failed to append pullup exprs", K(ret)); - } else if (OB_FAIL(append(pullup_exprs, subquery->get_aggr_items()))) { - LOG_WARN("failed to append pullup exprs", K(ret)); - } else if (OB_FAIL(append(pullup_exprs, subquery->get_having_exprs()))) { - LOG_WARN("failed to append pullup exprs", K(ret)); - } else if (OB_FAIL(ObRawExprUtils::extract_column_exprs(pullup_exprs, view_columns))) { - LOG_WARN("failed to extract column exprs", K(ret)); - } else if (OB_FAIL(ObTransformUtils::create_columns_for_view(ctx_, - *table_item, - stmt, - view_columns, - stmt_columns))) { - LOG_WARN("failed to create view columns", K(ret)); - } - } - if (OB_SUCC(ret)) { - ObRawExprCopier copier(*ctx_->expr_factory_); - //拉出select aggr items, group by exprs、aggr items、having exprs - if (OB_FAIL(copier.add_replaced_expr(view_columns, stmt_columns))) { - LOG_WARN("failed to add replaced expr", K(ret)); - } else if (OB_FAIL(copier.add_skipped_expr(subquery->get_subquery_exprs(), false))) { - LOG_WARN("failed to add direct replace exprs", K(ret)); - } else if (OB_FAIL(copier.copy_on_replace(subquery->get_group_exprs(), - subquery->get_group_exprs()))) { - LOG_WARN("failed to copy on replace group exprs", K(ret)); - } else if (OB_FAIL(copier.copy_on_replace(subquery->get_aggr_items(), - subquery->get_aggr_items()))) { - LOG_WARN("failed to copy on replace aggr items", K(ret)); - } else if (OB_FAIL(copier.copy_on_replace(subquery->get_having_exprs(), - subquery->get_having_exprs()))) { - LOG_WARN("failed to copy on replace having exprs", K(ret)); - } else if (OB_FAIL(copier.copy_on_replace(aggr_select, - aggr_select))) { - LOG_WARN("failed to copy on replace aggr select", K(ret)); } else if (OB_FAIL(stmt->replace_relation_exprs(aggr_column, aggr_select))) { LOG_WARN("failed to replace inner stmt expr", K(ret)); } else if (OB_FAIL(append(stmt->get_group_exprs(), subquery->get_group_exprs()))) { @@ -803,12 +761,10 @@ int ObTransformGroupByPullup::do_groupby_pull_up(ObSelectStmt *stmt, PullupHelpe subquery->get_having_exprs().reset(); if (OB_FAIL(subquery->adjust_subquery_list())) { LOG_WARN("failed to adjust subquery list", K(ret)); - } else if (OB_FAIL(stmt->adjust_subquery_list())) { - LOG_WARN("failed to adjust subquery list", K(ret)); + } else if (OB_FAIL(ObTransformUtils::generate_select_list(ctx_, stmt, table_item))) { + LOG_WARN("failed to generate select list", K(ret)); } else if (OB_FAIL(stmt->formalize_stmt(ctx_->session_info_))) { LOG_WARN("failed to formalize stmt", K(ret)); - } else { - //do nothing } } }