mirror of
https://github.com/MariaDB/server.git
synced 2025-09-27 11:29:12 +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.
30 lines
1.1 KiB
Text
30 lines
1.1 KiB
Text
drop function if exists bug23333|
|
|
drop table if exists t1,t2|
|
|
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)|
|
|
create function bug23333()
|
|
RETURNS int(11)
|
|
DETERMINISTIC
|
|
begin
|
|
insert into t1 values (null);
|
|
select count(*) from t1 into @a;
|
|
return @a;
|
|
end|
|
|
Warnings:
|
|
Warning 1287 '<select expression> INTO <destination>;' is deprecated and will be removed in a future release. Please use 'SELECT <select list> INTO <destination> FROM...' instead
|
|
reset master;
|
|
insert into t2 values (bug23333(),1);
|
|
ERROR 23000: Duplicate entry '1' for key 'PRIMARY'
|
|
include/show_binlog_events.inc
|
|
Log_name Pos Event_type Server_id End_log_pos Info
|
|
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
|
|
master-bin.000001 # Annotate_rows # # insert into t1 values (null)
|
|
master-bin.000001 # Table_map # # table_id: # (test.t1)
|
|
master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
|
|
master-bin.000001 # Query # # COMMIT
|
|
select count(*),@a from t1 /* must be 1,1 */;
|
|
count(*) @a
|
|
1 1
|
|
drop table t1,t2;
|
|
drop function if exists bug23333;
|