Hi, Andrei!

On Jun 15, Andrei Elkin wrote:
> revision-id: 4cbbc796dcc (mariadb-10.5.2-335-g4cbbc796dcc)
> parent(s): a74e724e061
> author: Andrei Elkin <andrei.el...@mariadb.com>
> committer: Andrei Elkin <andrei.el...@mariadb.com>
> timestamp: 2020-06-11 17:24:15 +0300
> message:
> 
> MDEV-22420 DDL on temporary object is prohibited when XA is in prepare state
> 
> The parser must reject DDL operations on temporary objects when
> they may modify or alter such object, including temporary tables and 
> sequences.
> The rejection is regardless (has been already in place for bin-loggable DML:s)
> of the binlogging capability of the server or connection.
> 
> The patch implements the requirement. A binlog test is added.
> 
> diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc
> index 86f81dd001a..6ac0cf96024 100644
> --- a/sql/sql_parse.cc
> +++ b/sql/sql_parse.cc
> @@ -4890,6 +4890,11 @@ mysql_execute_command(THD *thd)
>      }
>      else
>      {
> +      if (thd->transaction->xid_state.check_has_uncommitted_xa())
> +      {
> +        thd->transaction->xid_state.er_xaer_rmfail();
> +        goto error;
> +      }
>        status_var_decrement(thd->status_var.com_stat[lex->sql_command]);
>        status_var_increment(thd->status_var.com_drop_tmp_table);

Two comments.

1. Where is this checked for non-temporary tables? check_has_uncommitted_xa
is tested in open_tables(), and it's not called for DROP.
What about RENAME? What other operations are there that don't open a table?

2. check_has_uncommitted_xa() already does er_xaer_rmfail() internally,
you don't need to repeat it.

Regards,
Sergei
VP of MariaDB Server Engineering
and secur...@mariadb.org

_______________________________________________
Mailing list: https://launchpad.net/~maria-developers
Post to     : maria-developers@lists.launchpad.net
Unsubscribe : https://launchpad.net/~maria-developers
More help   : https://help.launchpad.net/ListHelp

Reply via email to