mirror of
https://github.com/MariaDB/server.git
synced 2025-09-26 02:49:13 +02:00

Ensure that Annotate_rows is always written direct after GTID information, before any table_map events. Before this patch, the following problems existed when mixing transactional and not transactional tables in the same statement: - Annotate rows could be written after row events or in the next GTID event. - See rpl_row_mixing_engines - Annotate_rows was not always written to binary log in case of error with a transactional table (rolled back) but a not transactional table was updated. - See sp_trans_log, binlog_row_mix_innodb_myisam Fixed by writing the Annotate_rows event into the non transactional cache if there are not transactional tables used. If not, write the event into the transactional cache.
51 lines
1.4 KiB
Text
51 lines
1.4 KiB
Text
# binlog disabled in embedded server
|
|
-- source include/not_embedded.inc
|
|
|
|
# part of sp_trans test that appeared to be sensitive to binlog format
|
|
--source include/have_innodb.inc
|
|
--source include/have_binlog_format_mixed.inc
|
|
|
|
delimiter |;
|
|
|
|
#
|
|
# Bug#13270 INSERT,UPDATE,etc that calls func with side-effect does not binlog
|
|
# Bug#23333 stored function + non-transac table + transac table =
|
|
# breaks stmt-based binlog
|
|
# Bug#27395 OPTION_STATUS_NO_TRANS_UPDATE is not preserved at the end of SF()
|
|
#
|
|
--disable_warnings
|
|
drop function if exists bug23333|
|
|
drop table if exists t1,t2|
|
|
--enable_warnings
|
|
CREATE TABLE t1 (a int NOT NULL auto_increment primary key) ENGINE=MyISAM|
|
|
CREATE TABLE t2 (a int NOT NULL auto_increment, b int, PRIMARY KEY (a)) ENGINE=InnoDB|
|
|
|
|
insert into t2 values (1,1)|
|
|
|
|
--enable_prepare_warnings
|
|
create function bug23333()
|
|
RETURNS int(11)
|
|
DETERMINISTIC
|
|
begin
|
|
insert into t1 values (null);
|
|
select count(*) from t1 into @a;
|
|
return @a;
|
|
end|
|
|
delimiter ;|
|
|
--disable_prepare_warnings
|
|
|
|
reset master;
|
|
--error ER_DUP_ENTRY
|
|
insert into t2 values (bug23333(),1);
|
|
# the following must show there are events after the query
|
|
# the binlog_limit is used to hide the differences between the mixed
|
|
# and row logging formats after BUG#53259
|
|
let $binlog_limit= 0, 5;
|
|
source include/show_binlog_events.inc;
|
|
select count(*),@a from t1 /* must be 1,1 */;
|
|
|
|
|
|
# clean-up
|
|
|
|
drop table t1,t2;
|
|
drop function if exists bug23333;
|