1
0
mirror of https://github.com/MariaDB/server.git synced 2025-07-29 05:21:33 +03:00

Bug #27395 OPTION_STATUS_NO_TRANS_UPDATE is not preserved at the end of SF()

thd->options' OPTION_STATUS_NO_TRANS_UPDATE bit was not restored at the end of SF() invocation, where
SF() modified non-ta table.
As the result of this artifact it was not possible to detect whether there were any side-effects when
top-level query ends. 
If the top level query table was not modified and the bit is lost there would be no binlogging.

Fixed with preserving the bit inside of thd->no_trans_update struct. The struct agregates two bool flags
telling whether the current query and the current transaction modified any non-ta table.
The flags stmt, all are dropped at the end of the query and the transaction.


mysql-test/r/sp_trans.result:
  results will be changed once again after bug#23333 will be fixed.
mysql-test/t/sp_trans.test:
  regression test added
sql/ha_ndbcluster.cc:
  replacing thd->options' OPTION_STATUS_NO_TRANS_UPDATE bit and bool thd->no_trans_update
  with thd->no_trans_update as struct
sql/handler.cc:
  replacing operations with thd->options' OPTION_STATUS_NO_TRANS_UPDATE bit
  with the member thd->no_trans_update.all;
  converting thd->no_trans_update into struct of bools.
sql/log.cc:
  replacing operations with thd->options' OPTION_STATUS_NO_TRANS_UPDATE bit
  with the member thd->no_trans_update.all;
  converting thd->no_trans_update into struct of bools.
sql/set_var.cc:
  replacing operations with thd->options' OPTION_STATUS_NO_TRANS_UPDATE bit
  with the member thd->no_trans_update.all;
  converting thd->no_trans_update into struct of bools.
sql/sp_head.cc:
  replacing operations with thd->options' OPTION_STATUS_NO_TRANS_UPDATE bit
  with the member thd->no_trans_update.all;
  converting thd->no_trans_update into struct of bools.
sql/sql_class.h:
  replacing operations with thd->options' OPTION_STATUS_NO_TRANS_UPDATE bit
  with the member thd->no_trans_update.all;
  converting thd->no_trans_update into struct of bools.
sql/sql_delete.cc:
  replacing operations with thd->options' OPTION_STATUS_NO_TRANS_UPDATE bit
  with the member thd->no_trans_update.all;
  converting thd->no_trans_update into struct of bools.
sql/sql_insert.cc:
  replacing operations with thd->options' OPTION_STATUS_NO_TRANS_UPDATE bit
  with the member thd->no_trans_update.all;
  converting thd->no_trans_update into struct of bools.
sql/sql_load.cc:
  replacing operations with thd->options' OPTION_STATUS_NO_TRANS_UPDATE bit
  with the member thd->no_trans_update.all;
  converting thd->no_trans_update into struct of bools.
sql/sql_parse.cc:
  replacing operations with thd->options' OPTION_STATUS_NO_TRANS_UPDATE bit
  with the member thd->no_trans_update.all;
  converting thd->no_trans_update into struct of bools.
sql/sql_table.cc:
  replacing operations with thd->options' OPTION_STATUS_NO_TRANS_UPDATE bit
  with the member thd->no_trans_update.all;
  converting thd->no_trans_update into struct of bools.
sql/sql_update.cc:
  replacing operations with thd->options' OPTION_STATUS_NO_TRANS_UPDATE bit
  with the member thd->no_trans_update.all;
  converting thd->no_trans_update into struct of bools.
This commit is contained in:
unknown
2007-03-23 17:12:58 +02:00
parent b444f80882
commit 4a76ac5fa6
14 changed files with 140 additions and 69 deletions

View File

@ -3968,7 +3968,7 @@ copy_data_between_tables(TABLE *from,TABLE *to,
alter_table_manage_keys(to, from->file->indexes_are_disabled(), keys_onoff);
/* We can abort alter table for any table type */
thd->no_trans_update= 0;
thd->no_trans_update.stmt= FALSE;
thd->abort_on_warning= !ignore && test(thd->variables.sql_mode &
(MODE_STRICT_TRANS_TABLES |
MODE_STRICT_ALL_TABLES));