diff --git a/src/sql/rewrite/ob_transform_aggr_subquery.cpp b/src/sql/rewrite/ob_transform_aggr_subquery.cpp index 7fb27a4fc..b859cb0fd 100644 --- a/src/sql/rewrite/ob_transform_aggr_subquery.cpp +++ b/src/sql/rewrite/ob_transform_aggr_subquery.cpp @@ -1407,7 +1407,10 @@ int ObTransformAggrSubquery::check_stmt_valid(ObDMLStmt &stmt, bool &is_valid) int ret = OB_SUCCESS; is_valid = true; bool can_set_unique = false; - if (stmt.is_set_stmt() || stmt.is_hierarchical_query() || !stmt.is_sel_del_upd()) { + if (stmt.is_set_stmt() + || stmt.is_hierarchical_query() + || stmt.has_for_update() + || !stmt.is_sel_del_upd()) { is_valid = false; } else if (OB_FAIL(StmtUniqueKeyProvider::check_can_set_stmt_unique(&stmt, can_set_unique))) { LOG_WARN("failed to check can set stmt unque", K(ret)); diff --git a/src/sql/rewrite/ob_transform_semi_to_inner.cpp b/src/sql/rewrite/ob_transform_semi_to_inner.cpp index 2b306501b..a36c77d22 100644 --- a/src/sql/rewrite/ob_transform_semi_to_inner.cpp +++ b/src/sql/rewrite/ob_transform_semi_to_inner.cpp @@ -623,7 +623,8 @@ int ObTransformSemiToInner::check_basic_validity(ObDMLStmt *root_stmt, trans_param.need_add_gby_ = (left_exprs.count() != 0); ctx.is_multi_join_cond_ = is_multi_join_cond; need_check_cost = true; - } else { + } else if (!stmt.has_for_update()) { + // If there is FOR UPDATE, can not use TO_INNER_GBY // TO_INNER_GBY : for following cases: // 1. there are more than one compare-join-conditions // 2. non-standard correlated condition(s) exist diff --git a/src/sql/rewrite/ob_transformer_impl.cpp b/src/sql/rewrite/ob_transformer_impl.cpp index 6bc3ec5a3..c92b51144 100644 --- a/src/sql/rewrite/ob_transformer_impl.cpp +++ b/src/sql/rewrite/ob_transformer_impl.cpp @@ -428,6 +428,9 @@ int ObTransformerImpl::choose_rewrite_rules(ObDMLStmt *stmt, uint64_t &need_type ObTransformRule::add_trans_type(disable_list, WIN_MAGIC); ObTransformRule::add_trans_type(disable_list, NL_FULL_OUTER_JOIN); ObTransformRule::add_trans_type(disable_list, OR_EXPANSION); + ObTransformRule::add_trans_type(disable_list, GROUPBY_PUSHDOWN); + ObTransformRule::add_trans_type(disable_list, GROUPBY_PULLUP); + ObTransformRule::add_trans_type(disable_list, TEMP_TABLE_OPTIMIZATION); } if (func.update_global_index_) { ObTransformRule::add_trans_type(disable_list, OR_EXPANSION);