fix for update error after transform

This commit is contained in:
hy-guo 2024-02-03 03:16:24 +00:00 committed by ob-robot
parent 36bd526106
commit 0aceccaec0
3 changed files with 9 additions and 2 deletions

View File

@ -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));

View File

@ -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

View File

@ -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);