diff options
author | Igor Babaev <igor@askmonty.org> | 2022-09-16 22:36:22 -0700 |
---|---|---|
committer | Igor Babaev <igor@askmonty.org> | 2023-03-08 14:19:08 -0800 |
commit | 4127039f960108ecac64bf385d64520013a43dcd (patch) | |
tree | 1e01d20e08307bac3490743bf1feff3c928ce909 | |
parent | ace2e99869d4b65551ec534fbab5653296421d8d (diff) | |
download | mariadb-git-4127039f960108ecac64bf385d64520013a43dcd.tar.gz |
Another fix after the latest rebase of commits for MDEV-28883
-rw-r--r-- | mysql-test/main/derived.result | 6 | ||||
-rw-r--r-- | sql/sql_base.cc | 6 | ||||
-rw-r--r-- | sql/sql_delete.cc | 2 | ||||
-rw-r--r-- | 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 97616d39812..cfddf054981 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 <derived3> 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 <derived3> 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; |