From e2e3524d7222b713a0c0347fa6a2781e289c3b29 Mon Sep 17 00:00:00 2001 From: Igor Babaev Date: Fri, 16 Sep 2022 22:36:22 -0700 Subject: [PATCH] Another fix after the latest rebase of commits for MDEV-28883 --- mysql-test/main/derived.result | 6 ++---- sql/sql_base.cc | 6 +++--- sql/sql_delete.cc | 2 ++ sql/sql_update.cc | 7 ++++++- 4 files changed, 13 insertions(+), 8 deletions(-) diff --git a/mysql-test/main/derived.result b/mysql-test/main/derived.result index e8551957850..7203c9bf67a 100644 --- a/mysql-test/main/derived.result +++ b/mysql-test/main/derived.result @@ -1593,8 +1593,7 @@ where a = ( select * from (select a from t1) dt where dt.a > 5) returning pk, a; id select_type table type possible_keys key key_len ref rows Extra 1 PRIMARY t1 ALL NULL NULL NULL NULL 3 Using where -2 SUBQUERY ALL NULL NULL NULL NULL 3 Using where -3 DERIVED t1 ALL NULL NULL NULL NULL 3 Using where +2 SUBQUERY t1 ALL NULL NULL NULL NULL 3 Using where delete from t1 where a = ( select * from (select a from t1) dt where dt.a > 5) returning pk, a; @@ -1633,8 +1632,7 @@ where a <> ( select * from (select a from t1) dt where dt.a > 7) order by a limit 2; id select_type table type possible_keys key key_len ref rows Extra 1 PRIMARY t1 ALL NULL NULL NULL NULL 4 Using where; Using filesort -2 SUBQUERY ALL NULL NULL NULL NULL 4 Using where -3 DERIVED t1 ALL NULL NULL NULL NULL 4 Using where +2 SUBQUERY t1 ALL NULL NULL NULL NULL 4 Using where delete from t1 where a <> ( select * from (select a from t1) dt where dt.a > 7) order by a limit 2; diff --git a/sql/sql_base.cc b/sql/sql_base.cc index e37fb3bbe95..f674243219b 100644 --- a/sql/sql_base.cc +++ b/sql/sql_base.cc @@ -1205,7 +1205,7 @@ retry: if (thd->lex->sql_command == SQLCOM_UPDATE) { Sql_cmd_update *cmd= (Sql_cmd_update *) (thd->lex->m_sql_cmd); - if (cmd->is_multitable()) + if (cmd->is_multitable() || derived->derived->outer_select()) materialize= false; else if (!cmd->processing_as_multitable_update_prohibited(thd)) { @@ -1216,9 +1216,9 @@ retry: else if (thd->lex->sql_command == SQLCOM_DELETE) { Sql_cmd_delete *cmd= (Sql_cmd_delete *) (thd->lex->m_sql_cmd); - if (cmd->is_multitable()) + if (cmd->is_multitable() || derived->derived->outer_select()) materialize= false; - if (!cmd->processing_as_multitable_delete_prohibited(thd)) + else if (!cmd->processing_as_multitable_delete_prohibited(thd)) { cmd->set_as_multitable(); materialize= false; diff --git a/sql/sql_delete.cc b/sql/sql_delete.cc index be51d98e3eb..6c8be793e78 100644 --- a/sql/sql_delete.cc +++ b/sql/sql_delete.cc @@ -1507,7 +1507,9 @@ bool Sql_cmd_delete::precheck(THD *thd) return true; } +#ifdef WITH_WSREP WSREP_SYNC_WAIT(thd, WSREP_SYNC_WAIT_BEFORE_UPDATE_DELETE); +#endif return false; diff --git a/sql/sql_update.cc b/sql/sql_update.cc index d4cea5290f1..4f0659d987a 100644 --- a/sql/sql_update.cc +++ b/sql/sql_update.cc @@ -2827,7 +2827,10 @@ bool multi_update::send_eof() bool Sql_cmd_update::processing_as_multitable_update_prohibited(THD *thd) { - return false; + SELECT_LEX *const select_lex = thd->lex->first_select_lex(); + return + (select_lex->order_list.elements && + select_lex->limit_params.select_limit); } @@ -2851,7 +2854,9 @@ bool Sql_cmd_update::precheck(THD *thd) return true; } +#ifdef WITH_WSREP WSREP_SYNC_WAIT(thd, WSREP_SYNC_WAIT_BEFORE_UPDATE_DELETE); +#endif return false;