List:Commits« Previous MessageNext Message »
From:Alfranio Correia Date:May 13 2009 1:57am
Subject:bzr commit into mysql-5.1-bugteam branch (alfranio.correia:2874)
Bug#40278
View as plain text  
#At file:///home/acorreia/workspace.sun/repository.mysql/bzrwork/bug-40278/mysql-5.1-bugteam/ based on revid:mats@stripped

 2874 Alfranio Correia	2009-05-13
      BUG#40278 Replication failure on RBR + MyISAM + SAVEPOINTs
            
      This is a draft of a patch and should be only used to foster discussions
      on the final approach.

    removed:
      mysql-test/suite/rpl/r/rpl_row_basic_11bugs-master.opt
      mysql-test/suite/rpl/r/rpl_row_basic_11bugs-slave.opt
    added:
      mysql-test/suite/rpl/t/rpl_mixing_engines.test
    modified:
      mysql-test/extra/rpl_tests/rpl_flsh_tbls.test
      mysql-test/extra/rpl_tests/rpl_log.test
      mysql-test/suite/binlog/r/binlog_database.result
      mysql-test/suite/binlog/r/binlog_multi_engine.result
      mysql-test/suite/binlog/r/binlog_row_binlog.result
      mysql-test/suite/binlog/r/binlog_row_ctype_ucs.result
      mysql-test/suite/binlog/r/binlog_row_insert_select.result
      mysql-test/suite/binlog/r/binlog_row_mix_innodb_myisam.result
      mysql-test/suite/binlog/r/binlog_stm_binlog.result
      mysql-test/suite/binlog/r/binlog_stm_row.result
      mysql-test/suite/rpl/r/rpl_extraCol_myisam.result
      mysql-test/suite/rpl/r/rpl_loaddata_fatal.result
      mysql-test/suite/rpl/r/rpl_log_pos.result
      mysql-test/suite/rpl/r/rpl_rbr_to_sbr.result
      mysql-test/suite/rpl/r/rpl_row_basic_11bugs.result
      mysql-test/suite/rpl/r/rpl_row_conflicts.result
      mysql-test/suite/rpl/r/rpl_row_create_table.result
      mysql-test/suite/rpl/r/rpl_row_flsh_tbls.result
      mysql-test/suite/rpl/r/rpl_row_log.result
      mysql-test/suite/rpl/r/rpl_row_log_innodb.result
      mysql-test/suite/rpl/r/rpl_stm_flsh_tbls.result
      mysql-test/suite/rpl/r/rpl_stm_log.result
      mysql-test/suite/rpl/t/disabled.def
      mysql-test/suite/rpl/t/rpl_empty_master_crash.test
      mysql-test/suite/rpl/t/rpl_loaddata_fatal.test
      mysql-test/suite/rpl/t/rpl_log_pos.test
      mysql-test/suite/rpl/t/rpl_row_basic_11bugs.test
      mysql-test/suite/rpl/t/rpl_row_flsh_tbls.test
      mysql-test/suite/rpl/t/rpl_row_until.test
      mysql-test/suite/rpl/t/rpl_slave_skip.test
      mysql-test/suite/rpl/t/rpl_stm_flsh_tbls.test
      sql/handler.cc
      sql/log.cc
      sql/log.h
      sql/log_event.cc
      sql/log_event.h
      sql/log_event_old.cc
      sql/rpl_injector.cc
      sql/sql_base.cc
      sql/sql_class.cc
      sql/sql_class.h
      sql/sql_insert.cc
      sql/sql_load.cc
=== modified file 'mysql-test/extra/rpl_tests/rpl_flsh_tbls.test'
--- a/mysql-test/extra/rpl_tests/rpl_flsh_tbls.test	2008-12-12 11:34:18 +0000
+++ b/mysql-test/extra/rpl_tests/rpl_flsh_tbls.test	2009-05-13 01:57:17 +0000
@@ -20,19 +20,13 @@ rename table t1 to t5, t2 to t1;
 # first don't write it to the binlog, to test the NO_WRITE_TO_BINLOG keyword.
 flush no_write_to_binlog tables;
 # Check that it's not in the binlog.
---replace_result $SERVER_VERSION SERVER_VERSION
---replace_column 2 # 5 #
---replace_regex /table_id: [0-9]+/table_id: #/
-eval SHOW BINLOG EVENTS FROM $rename_event_pos ;
+source include/show_binlog_events2.inc;
 # Check that the master is not confused.
 select * from t3;
 # This FLUSH should go into the binlog to not confuse the slave.
 flush tables;
 # Check that it's in the binlog.
---replace_result $SERVER_VERSION SERVER_VERSION
---replace_column 2 # 5 #
---replace_regex /table_id: [0-9]+/table_id: #/
-eval SHOW BINLOG EVENTS FROM $rename_event_pos ;
+source include/show_binlog_events2.inc;
 
 sync_slave_with_master;
 # Check that the slave is not confused.

=== modified file 'mysql-test/extra/rpl_tests/rpl_log.test'
--- a/mysql-test/extra/rpl_tests/rpl_log.test	2009-02-02 11:44:18 +0000
+++ b/mysql-test/extra/rpl_tests/rpl_log.test	2009-05-13 01:57:17 +0000
@@ -104,7 +104,7 @@ show binlog events in 'slave-bin.000001'
 --replace_column 2 # 5 #
 --replace_regex /\/\* xid=.* \*\//\/* XID *\// /table_id: [0-9]+/table_id: #/
 show binlog events in 'slave-bin.000002' from 4;
-source include/show_slave_status.inc;
+source include/show_slave_status2.inc;
 
 # Need to recode the following
 

=== modified file 'mysql-test/suite/binlog/r/binlog_database.result'
--- a/mysql-test/suite/binlog/r/binlog_database.result	2009-01-23 12:22:05 +0000
+++ b/mysql-test/suite/binlog/r/binlog_database.result	2009-05-13 01:57:17 +0000
@@ -100,15 +100,11 @@ drop table tt1, t1;
 show binlog events from <binlog_start>;
 Log_name	Pos	Event_type	Server_id	End_log_pos	Info
 master-bin.000001	#	Query	#	#	use `test`; create table t1 (a int)
-master-bin.000001	#	Query	#	#	use `test`; BEGIN
 master-bin.000001	#	Table_map	#	#	table_id: # (test.t1)
 master-bin.000001	#	Write_rows	#	#	table_id: # flags: STMT_END_F
-master-bin.000001	#	Query	#	#	use `test`; COMMIT
 master-bin.000001	#	Query	#	#	drop database if exists mysqltest1
-master-bin.000001	#	Query	#	#	use `test`; BEGIN
 master-bin.000001	#	Table_map	#	#	table_id: # (test.t1)
 master-bin.000001	#	Write_rows	#	#	table_id: # flags: STMT_END_F
-master-bin.000001	#	Query	#	#	use `test`; COMMIT
 master-bin.000001	#	Query	#	#	use `test`; DROP TABLE `t1` /* generated by server */
 FLUSH STATUS;
 show databases;

=== modified file 'mysql-test/suite/binlog/r/binlog_multi_engine.result'
--- a/mysql-test/suite/binlog/r/binlog_multi_engine.result	2008-10-24 12:51:06 +0000
+++ b/mysql-test/suite/binlog/r/binlog_multi_engine.result	2009-05-13 01:57:17 +0000
@@ -73,10 +73,8 @@ UPDATE t1n, t1b SET e = 2, b = 3 WHERE f
 ERROR HY000: Binary logging not possible. Message: Statement cannot be written atomically since more than one engine involved and at least one engine is self-logging
 show binlog events from <binlog_start>;
 Log_name	Pos	Event_type	Server_id	End_log_pos	Info
-mysqld-bin.000001	#	Query	#	#	use `test`; BEGIN
 mysqld-bin.000001	#	Table_map	#	#	table_id: # (test.t1m)
 mysqld-bin.000001	#	Write_rows	#	#	table_id: # flags: STMT_END_F
-mysqld-bin.000001	#	Query	#	#	use `test`; COMMIT
 mysqld-bin.000001	#	Query	#	#	use `test`; BEGIN
 mysqld-bin.000001	#	Table_map	#	#	table_id: # (test.t1b)
 mysqld-bin.000001	#	Write_rows	#	#	table_id: # flags: STMT_END_F

=== modified file 'mysql-test/suite/binlog/r/binlog_row_binlog.result'
--- a/mysql-test/suite/binlog/r/binlog_row_binlog.result	2009-03-25 19:41:16 +0000
+++ b/mysql-test/suite/binlog/r/binlog_row_binlog.result	2009-05-13 01:57:17 +0000
@@ -1085,11 +1085,9 @@ show binlog events from 0;
 Log_name	Pos	Event_type	Server_id	End_log_pos	Info
 master-bin.000001	4	Format_desc	1	106	Server version, Binlog ver: 4
 master-bin.000001	106	Query	1	227	use `test`; create table t1 (a bigint unsigned, b bigint(20) unsigned)
-master-bin.000001	227	Query	1	295	use `test`; BEGIN
-master-bin.000001	295	Table_map	1	337	table_id: # (test.t1)
-master-bin.000001	337	Write_rows	1	383	table_id: # flags: STMT_END_F
-master-bin.000001	383	Query	1	452	use `test`; COMMIT
-master-bin.000001	452	Query	1	528	use `test`; drop table t1
+master-bin.000001	227	Table_map	1	269	table_id: # (test.t1)
+master-bin.000001	269	Write_rows	1	315	table_id: # flags: STMT_END_F
+master-bin.000001	315	Query	1	391	use `test`; drop table t1
 reset master;
 CREATE DATABASE bug39182 DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
 USE bug39182;
@@ -1192,10 +1190,8 @@ use test;
 show binlog events from <binlog_start>;
 Log_name	Pos	Event_type	Server_id	End_log_pos	Info
 master-bin.000001	#	Query	#	#	use `test`; create table t1 (id tinyint auto_increment primary key)
-master-bin.000001	#	Query	#	#	use `test`; BEGIN
 master-bin.000001	#	Table_map	#	#	table_id: # (test.t1)
 master-bin.000001	#	Write_rows	#	#	table_id: # flags: STMT_END_F
-master-bin.000001	#	Query	#	#	use `test`; COMMIT
 master-bin.000001	#	Query	#	#	use `test`; drop table t1
 master-bin.000001	#	Query	#	#	use `test`; create table t1 (a int)
 master-bin.000001	#	Query	#	#	use `test`; BEGIN
@@ -1206,18 +1202,12 @@ master-bin.000001	#	Query	#	#	use `test`
 master-bin.000001	#	Query	#	#	use `test`; CREATE TABLE IF NOT EXISTS `t3` (
   `a` int(11) DEFAULT NULL
 )
-master-bin.000001	#	Query	#	#	use `mysql`; BEGIN
 master-bin.000001	#	Table_map	#	#	table_id: # (mysql.user)
 master-bin.000001	#	Write_rows	#	#	table_id: # flags: STMT_END_F
-master-bin.000001	#	Query	#	#	use `mysql`; COMMIT
-master-bin.000001	#	Query	#	#	use `mysql`; BEGIN
 master-bin.000001	#	Table_map	#	#	table_id: # (mysql.user)
 master-bin.000001	#	Update_rows	#	#	table_id: # flags: STMT_END_F
-master-bin.000001	#	Query	#	#	use `mysql`; COMMIT
-master-bin.000001	#	Query	#	#	use `mysql`; BEGIN
 master-bin.000001	#	Table_map	#	#	table_id: # (mysql.user)
 master-bin.000001	#	Delete_rows	#	#	table_id: # flags: STMT_END_F
-master-bin.000001	#	Query	#	#	use `mysql`; COMMIT
 drop table t1,t2,t3,tt1;
 create table t1 (a int not null auto_increment, primary key (a)) engine=myisam;
 insert delayed into t1 values (207);
@@ -1227,10 +1217,8 @@ FLUSH TABLES;
 show binlog events from <binlog_start>;
 Log_name	Pos	Event_type	Server_id	End_log_pos	Info
 master-bin.000001	#	Query	#	#	use `test`; create table t1 (id tinyint auto_increment primary key)
-master-bin.000001	#	Query	#	#	use `test`; BEGIN
 master-bin.000001	#	Table_map	#	#	table_id: # (test.t1)
 master-bin.000001	#	Write_rows	#	#	table_id: # flags: STMT_END_F
-master-bin.000001	#	Query	#	#	use `test`; COMMIT
 master-bin.000001	#	Query	#	#	use `test`; drop table t1
 master-bin.000001	#	Query	#	#	use `test`; create table t1 (a int)
 master-bin.000001	#	Query	#	#	use `test`; BEGIN
@@ -1241,32 +1229,20 @@ master-bin.000001	#	Query	#	#	use `test`
 master-bin.000001	#	Query	#	#	use `test`; CREATE TABLE IF NOT EXISTS `t3` (
   `a` int(11) DEFAULT NULL
 )
-master-bin.000001	#	Query	#	#	use `mysql`; BEGIN
 master-bin.000001	#	Table_map	#	#	table_id: # (mysql.user)
 master-bin.000001	#	Write_rows	#	#	table_id: # flags: STMT_END_F
-master-bin.000001	#	Query	#	#	use `mysql`; COMMIT
-master-bin.000001	#	Query	#	#	use `mysql`; BEGIN
 master-bin.000001	#	Table_map	#	#	table_id: # (mysql.user)
 master-bin.000001	#	Update_rows	#	#	table_id: # flags: STMT_END_F
-master-bin.000001	#	Query	#	#	use `mysql`; COMMIT
-master-bin.000001	#	Query	#	#	use `mysql`; BEGIN
 master-bin.000001	#	Table_map	#	#	table_id: # (mysql.user)
 master-bin.000001	#	Delete_rows	#	#	table_id: # flags: STMT_END_F
-master-bin.000001	#	Query	#	#	use `mysql`; COMMIT
 master-bin.000001	#	Query	#	#	use `test`; DROP TABLE `t1`,`t2`,`t3` /* generated by server */
 master-bin.000001	#	Query	#	#	use `test`; create table t1 (a int not null auto_increment, primary key (a)) engine=myisam
-master-bin.000001	#	Query	#	#	use `test`; BEGIN
 master-bin.000001	#	Table_map	#	#	table_id: # (test.t1)
 master-bin.000001	#	Write_rows	#	#	table_id: # flags: STMT_END_F
-master-bin.000001	#	Query	#	#	use `test`; COMMIT
-master-bin.000001	#	Query	#	#	use `test`; BEGIN
 master-bin.000001	#	Table_map	#	#	table_id: # (test.t1)
 master-bin.000001	#	Write_rows	#	#	table_id: # flags: STMT_END_F
-master-bin.000001	#	Query	#	#	use `test`; COMMIT
-master-bin.000001	#	Query	#	#	use `test`; BEGIN
 master-bin.000001	#	Table_map	#	#	table_id: # (test.t1)
 master-bin.000001	#	Write_rows	#	#	table_id: # flags: STMT_END_F
-master-bin.000001	#	Query	#	#	use `test`; COMMIT
 master-bin.000001	#	Query	#	#	use `test`; FLUSH TABLES
 insert delayed into t1 values (null),(null),(null),(null);
 insert delayed into t1 values (null),(null),(400),(null);

=== modified file 'mysql-test/suite/binlog/r/binlog_row_ctype_ucs.result'
--- a/mysql-test/suite/binlog/r/binlog_row_ctype_ucs.result	2008-04-02 18:47:16 +0000
+++ b/mysql-test/suite/binlog/r/binlog_row_ctype_ucs.result	2009-05-13 01:57:17 +0000
@@ -5,30 +5,13 @@ reset master;
 insert into t2 values (@v);
 show binlog events from <binlog_start>;
 Log_name	Pos	Event_type	Server_id	End_log_pos	Info
-master-bin.000001	#	Query	#	#	use `test`; BEGIN
 master-bin.000001	#	Table_map	#	#	table_id: # (test.t2)
 master-bin.000001	#	Write_rows	#	#	table_id: # flags: STMT_END_F
-master-bin.000001	#	Query	#	#	use `test`; COMMIT
 flush logs;
 /*!40019 SET @@session.max_insert_delayed_threads=0*/;
 /*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
 DELIMITER /*!*/;
 ROLLBACK/*!*/;
-use test/*!*/;
-SET TIMESTAMP=10000/*!*/;
-SET @@session.pseudo_thread_id=999999999/*!*/;
-SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.unique_checks=1, @@session.autocommit=1/*!*/;
-SET @@session.sql_mode=0/*!*/;
-SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
-/*!\C latin1 *//*!*/;
-SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=8/*!*/;
-SET @@session.lc_time_names=0/*!*/;
-SET @@session.collation_database=DEFAULT/*!*/;
-BEGIN
-/*!*/;
-SET TIMESTAMP=10000/*!*/;
-COMMIT
-/*!*/;
 DELIMITER ;
 # End of log file
 ROLLBACK /* added by mysqlbinlog */;

=== modified file 'mysql-test/suite/binlog/r/binlog_row_insert_select.result'
--- a/mysql-test/suite/binlog/r/binlog_row_insert_select.result	2008-03-28 12:16:41 +0000
+++ b/mysql-test/suite/binlog/r/binlog_row_insert_select.result	2009-05-13 01:57:17 +0000
@@ -8,10 +8,8 @@ insert into t1 select * from t2;
 ERROR 23000: Duplicate entry '2' for key 'a'
 show binlog events from <binlog_start>;
 Log_name	Pos	Event_type	Server_id	End_log_pos	Info
-master-bin.000001	#	Query	#	#	use `test`; BEGIN
 master-bin.000001	#	Table_map	#	#	table_id: # (test.t1)
 master-bin.000001	#	Write_rows	#	#	table_id: # flags: STMT_END_F
-master-bin.000001	#	Query	#	#	use `test`; ROLLBACK
 select * from t1;
 a
 1

=== modified file 'mysql-test/suite/binlog/r/binlog_row_mix_innodb_myisam.result'
--- a/mysql-test/suite/binlog/r/binlog_row_mix_innodb_myisam.result	2009-02-10 14:44:58 +0000
+++ b/mysql-test/suite/binlog/r/binlog_row_mix_innodb_myisam.result	2009-05-13 01:57:17 +0000
@@ -8,11 +8,11 @@ insert into t2 select * from t1;
 commit;
 show binlog events from <binlog_start>;
 Log_name	Pos	Event_type	Server_id	End_log_pos	Info
+master-bin.000001	#	Table_map	#	#	table_id: # (test.t2)
+master-bin.000001	#	Write_rows	#	#	table_id: # flags: STMT_END_F
 master-bin.000001	#	Query	#	#	use `test`; BEGIN
 master-bin.000001	#	Table_map	#	#	table_id: # (test.t1)
 master-bin.000001	#	Write_rows	#	#	table_id: # flags: STMT_END_F
-master-bin.000001	#	Table_map	#	#	table_id: # (test.t2)
-master-bin.000001	#	Write_rows	#	#	table_id: # flags: STMT_END_F
 master-bin.000001	#	Xid	#	#	COMMIT /* XID */
 delete from t1;
 delete from t2;
@@ -25,12 +25,8 @@ Warnings:
 Warning	1196	Some non-transactional changed tables couldn't be rolled back
 show binlog events from <binlog_start>;
 Log_name	Pos	Event_type	Server_id	End_log_pos	Info
-master-bin.000001	#	Query	#	#	use `test`; BEGIN
-master-bin.000001	#	Table_map	#	#	table_id: # (test.t1)
-master-bin.000001	#	Write_rows	#	#	table_id: # flags: STMT_END_F
 master-bin.000001	#	Table_map	#	#	table_id: # (test.t2)
 master-bin.000001	#	Write_rows	#	#	table_id: # flags: STMT_END_F
-master-bin.000001	#	Query	#	#	use `test`; ROLLBACK
 delete from t1;
 delete from t2;
 reset master;
@@ -45,14 +41,14 @@ Warning	1196	Some non-transactional chan
 commit;
 show binlog events from <binlog_start>;
 Log_name	Pos	Event_type	Server_id	End_log_pos	Info
+master-bin.000001	#	Table_map	#	#	table_id: # (test.t2)
+master-bin.000001	#	Write_rows	#	#	table_id: # flags: STMT_END_F
 master-bin.000001	#	Query	#	#	use `test`; BEGIN
 master-bin.000001	#	Table_map	#	#	table_id: # (test.t1)
 master-bin.000001	#	Write_rows	#	#	table_id: # flags: STMT_END_F
 master-bin.000001	#	Query	#	#	use `test`; savepoint my_savepoint
 master-bin.000001	#	Table_map	#	#	table_id: # (test.t1)
 master-bin.000001	#	Write_rows	#	#	table_id: # flags: STMT_END_F
-master-bin.000001	#	Table_map	#	#	table_id: # (test.t2)
-master-bin.000001	#	Write_rows	#	#	table_id: # flags: STMT_END_F
 master-bin.000001	#	Query	#	#	use `test`; rollback to savepoint my_savepoint
 master-bin.000001	#	Xid	#	#	COMMIT /* XID */
 delete from t1;
@@ -74,14 +70,14 @@ a
 7
 show binlog events from <binlog_start>;
 Log_name	Pos	Event_type	Server_id	End_log_pos	Info
+master-bin.000001	#	Table_map	#	#	table_id: # (test.t2)
+master-bin.000001	#	Write_rows	#	#	table_id: # flags: STMT_END_F
 master-bin.000001	#	Query	#	#	use `test`; BEGIN
 master-bin.000001	#	Table_map	#	#	table_id: # (test.t1)
 master-bin.000001	#	Write_rows	#	#	table_id: # flags: STMT_END_F
 master-bin.000001	#	Query	#	#	use `test`; savepoint my_savepoint
 master-bin.000001	#	Table_map	#	#	table_id: # (test.t1)
 master-bin.000001	#	Write_rows	#	#	table_id: # flags: STMT_END_F
-master-bin.000001	#	Table_map	#	#	table_id: # (test.t2)
-master-bin.000001	#	Write_rows	#	#	table_id: # flags: STMT_END_F
 master-bin.000001	#	Query	#	#	use `test`; rollback to savepoint my_savepoint
 master-bin.000001	#	Table_map	#	#	table_id: # (test.t1)
 master-bin.000001	#	Write_rows	#	#	table_id: # flags: STMT_END_F
@@ -100,12 +96,8 @@ get_lock("a",10)
 1
 show binlog events from <binlog_start>;
 Log_name	Pos	Event_type	Server_id	End_log_pos	Info
-master-bin.000001	#	Query	#	#	use `test`; BEGIN
-master-bin.000001	#	Table_map	#	#	table_id: # (test.t1)
-master-bin.000001	#	Write_rows	#	#	table_id: # flags: STMT_END_F
 master-bin.000001	#	Table_map	#	#	table_id: # (test.t2)
 master-bin.000001	#	Write_rows	#	#	table_id: # flags: STMT_END_F
-master-bin.000001	#	Query	#	#	use `test`; ROLLBACK
 delete from t1;
 delete from t2;
 reset master;
@@ -117,10 +109,8 @@ master-bin.000001	#	Query	#	#	use `test`
 master-bin.000001	#	Table_map	#	#	table_id: # (test.t1)
 master-bin.000001	#	Write_rows	#	#	table_id: # flags: STMT_END_F
 master-bin.000001	#	Xid	#	#	COMMIT /* XID */
-master-bin.000001	#	Query	#	#	use `test`; BEGIN
 master-bin.000001	#	Table_map	#	#	table_id: # (test.t2)
 master-bin.000001	#	Write_rows	#	#	table_id: # flags: STMT_END_F
-master-bin.000001	#	Query	#	#	use `test`; COMMIT
 delete from t1;
 delete from t2;
 reset master;
@@ -133,6 +123,8 @@ master-bin.000001	#	Query	#	#	use `test`
 master-bin.000001	#	Table_map	#	#	table_id: # (test.t1)
 master-bin.000001	#	Write_rows	#	#	table_id: # flags: STMT_END_F
 master-bin.000001	#	Xid	#	#	COMMIT /* XID */
+master-bin.000001	#	Table_map	#	#	table_id: # (test.t2)
+master-bin.000001	#	Write_rows	#	#	table_id: # flags: STMT_END_F
 insert into t1 values(11);
 commit;
 show binlog events from <binlog_start>;
@@ -141,9 +133,9 @@ master-bin.000001	#	Query	#	#	use `test`
 master-bin.000001	#	Table_map	#	#	table_id: # (test.t1)
 master-bin.000001	#	Write_rows	#	#	table_id: # flags: STMT_END_F
 master-bin.000001	#	Xid	#	#	COMMIT /* XID */
-master-bin.000001	#	Query	#	#	use `test`; BEGIN
 master-bin.000001	#	Table_map	#	#	table_id: # (test.t2)
 master-bin.000001	#	Write_rows	#	#	table_id: # flags: STMT_END_F
+master-bin.000001	#	Query	#	#	use `test`; BEGIN
 master-bin.000001	#	Table_map	#	#	table_id: # (test.t1)
 master-bin.000001	#	Write_rows	#	#	table_id: # flags: STMT_END_F
 master-bin.000001	#	Xid	#	#	COMMIT /* XID */
@@ -272,16 +264,14 @@ master-bin.000001	#	Query	#	#	use `test`
 master-bin.000001	#	Table_map	#	#	table_id: # (test.t1)
 master-bin.000001	#	Write_rows	#	#	table_id: # flags: STMT_END_F
 master-bin.000001	#	Xid	#	#	COMMIT /* XID */
+master-bin.000001	#	Table_map	#	#	table_id: # (test.t2)
+master-bin.000001	#	Write_rows	#	#	table_id: # flags: STMT_END_F
 master-bin.000001	#	Query	#	#	use `test`; drop table t1,t2
 master-bin.000001	#	Query	#	#	use `test`; create table t0 (n int)
-master-bin.000001	#	Query	#	#	use `test`; BEGIN
 master-bin.000001	#	Table_map	#	#	table_id: # (test.t0)
 master-bin.000001	#	Write_rows	#	#	table_id: # flags: STMT_END_F
-master-bin.000001	#	Query	#	#	use `test`; COMMIT
-master-bin.000001	#	Query	#	#	use `test`; BEGIN
 master-bin.000001	#	Table_map	#	#	table_id: # (test.t0)
 master-bin.000001	#	Write_rows	#	#	table_id: # flags: STMT_END_F
-master-bin.000001	#	Query	#	#	use `test`; COMMIT
 master-bin.000001	#	Query	#	#	use `test`; create table t2 (n int) engine=innodb
 do release_lock("lock1");
 drop table t0,t2;
@@ -364,46 +354,30 @@ a	b
 DROP TABLE t1,t2;
 show binlog events from <binlog_start>;
 Log_name	Pos	Event_type	Server_id	End_log_pos	Info
-master-bin.000001	#	Query	#	#	use `test`; BEGIN
 master-bin.000001	#	Table_map	#	#	table_id: # (test.t1)
 master-bin.000001	#	Write_rows	#	#	table_id: # flags: STMT_END_F
-master-bin.000001	#	Query	#	#	use `test`; COMMIT
 master-bin.000001	#	Query	#	#	use `test`; DROP TABLE if exists t2
-master-bin.000001	#	Query	#	#	use `test`; BEGIN
 master-bin.000001	#	Table_map	#	#	table_id: # (test.t1)
 master-bin.000001	#	Write_rows	#	#	table_id: # flags: STMT_END_F
-master-bin.000001	#	Query	#	#	use `test`; ROLLBACK
 master-bin.000001	#	Query	#	#	use `test`; DROP TABLE IF EXISTS t2
 master-bin.000001	#	Query	#	#	use `test`; CREATE TABLE t2 (a int, b int, primary key (a)) engine=innodb
-master-bin.000001	#	Query	#	#	use `test`; BEGIN
 master-bin.000001	#	Table_map	#	#	table_id: # (test.t1)
 master-bin.000001	#	Write_rows	#	#	table_id: # flags: STMT_END_F
-master-bin.000001	#	Query	#	#	use `test`; COMMIT
 master-bin.000001	#	Query	#	#	use `test`; TRUNCATE table t2
-master-bin.000001	#	Query	#	#	use `test`; BEGIN
 master-bin.000001	#	Table_map	#	#	table_id: # (test.t1)
 master-bin.000001	#	Write_rows	#	#	table_id: # flags: STMT_END_F
-master-bin.000001	#	Query	#	#	use `test`; COMMIT
 master-bin.000001	#	Query	#	#	use `test`; DROP TABLE t2
-master-bin.000001	#	Query	#	#	use `test`; BEGIN
 master-bin.000001	#	Table_map	#	#	table_id: # (test.t1)
 master-bin.000001	#	Write_rows	#	#	table_id: # flags: STMT_END_F
 master-bin.000001	#	Table_map	#	#	table_id: # (test.t1)
 master-bin.000001	#	Write_rows	#	#	table_id: # flags: STMT_END_F
-master-bin.000001	#	Query	#	#	use `test`; ROLLBACK
-master-bin.000001	#	Query	#	#	use `test`; BEGIN
 master-bin.000001	#	Table_map	#	#	table_id: # (test.t1)
 master-bin.000001	#	Write_rows	#	#	table_id: # flags: STMT_END_F
-master-bin.000001	#	Query	#	#	use `test`; COMMIT
-master-bin.000001	#	Query	#	#	use `test`; BEGIN
 master-bin.000001	#	Table_map	#	#	table_id: # (test.t1)
 master-bin.000001	#	Write_rows	#	#	table_id: # flags: STMT_END_F
-master-bin.000001	#	Query	#	#	use `test`; ROLLBACK
 master-bin.000001	#	Query	#	#	use `test`; TRUNCATE table t2
-master-bin.000001	#	Query	#	#	use `test`; BEGIN
 master-bin.000001	#	Table_map	#	#	table_id: # (test.t1)
 master-bin.000001	#	Write_rows	#	#	table_id: # flags: STMT_END_F
-master-bin.000001	#	Query	#	#	use `test`; COMMIT
 master-bin.000001	#	Query	#	#	use `test`; DROP TABLE `t1` /* generated by server */
 reset master;
 create table t1 (a int) engine=innodb;
@@ -430,7 +404,7 @@ select
 @a not like "%#%error_code=%error_code=%";
 @a like "%#%error_code=0%ROLLBACK\n/*!*/;%ROLLBACK /* added by mysqlbinlog */;%" OR
 @a like "%#%error_code=0%ROLLBACK\r\n/*!*/;%ROLLBACK /* added by mysqlbinlog */;%"	@a not like "%#%error_code=%error_code=%"
-1	1
+0	1
 drop table t1, t2;
 create temporary table tt (a int unique);
 create table ti (a int) engine=innodb;
@@ -447,12 +421,6 @@ count(*)
 2
 show binlog events from <binlog_start>;
 Log_name	Pos	Event_type	Server_id	End_log_pos	Info
-master-bin.000001	#	Query	#	#	use `test`; BEGIN
-master-bin.000001	#	Table_map	#	#	table_id: # (test.ti)
-master-bin.000001	#	Write_rows	#	#	table_id: # flags: STMT_END_F
-master-bin.000001	#	Table_map	#	#	table_id: # (test.ti)
-master-bin.000001	#	Write_rows	#	#	table_id: # flags: STMT_END_F
-master-bin.000001	#	Query	#	#	use `test`; ROLLBACK
 select count(*) from ti /* zero */;
 count(*)
 0
@@ -499,11 +467,8 @@ insert into t2 values (bug27417(2));
 ERROR 23000: Duplicate entry '2' for key 'PRIMARY'
 show binlog events from <binlog_start>;
 Log_name	Pos	Event_type	Server_id	End_log_pos	Info
-master-bin.000001	#	Query	#	#	use `test`; BEGIN
-master-bin.000001	#	Table_map	#	#	table_id: # (test.t2)
 master-bin.000001	#	Table_map	#	#	table_id: # (test.t1)
 master-bin.000001	#	Write_rows	#	#	table_id: # flags: STMT_END_F
-master-bin.000001	#	Query	#	#	use `test`; ROLLBACK
 /* only (!) with fixes for #23333 will show there is the query */;
 select count(*) from t1 /* must be 3 */;
 count(*)
@@ -518,11 +483,8 @@ count(*)
 2
 show binlog events from <binlog_start>;
 Log_name	Pos	Event_type	Server_id	End_log_pos	Info
-master-bin.000001	#	Query	#	#	use `test`; BEGIN
-master-bin.000001	#	Table_map	#	#	table_id: # (test.t2)
 master-bin.000001	#	Table_map	#	#	table_id: # (test.t1)
 master-bin.000001	#	Write_rows	#	#	table_id: # flags: STMT_END_F
-master-bin.000001	#	Query	#	#	use `test`; COMMIT
 /* the query must be in regardless of #23333 */;
 select count(*) from t1 /* must be 5 */;
 count(*)
@@ -544,11 +506,8 @@ insert into t2 values (bug27417(1));
 ERROR 23000: Duplicate entry '1' for key 'PRIMARY'
 show binlog events from <binlog_start>;
 Log_name	Pos	Event_type	Server_id	End_log_pos	Info
-master-bin.000001	#	Query	#	#	use `test`; BEGIN
-master-bin.000001	#	Table_map	#	#	table_id: # (test.t2)
 master-bin.000001	#	Table_map	#	#	table_id: # (test.t1)
 master-bin.000001	#	Write_rows	#	#	table_id: # flags: STMT_END_F
-master-bin.000001	#	Query	#	#	use `test`; ROLLBACK
 /* the output must denote there is the query */;
 select count(*) from t1 /* must be 1 */;
 count(*)
@@ -561,12 +520,8 @@ insert into t2 select bug27417(1) union 
 ERROR 23000: Duplicate entry '2' for key 'PRIMARY'
 show binlog events from <binlog_start>;
 Log_name	Pos	Event_type	Server_id	End_log_pos	Info
-master-bin.000001	#	Query	#	#	use `test`; BEGIN
-master-bin.000001	#	Table_map	#	#	table_id: # (test.t2)
 master-bin.000001	#	Table_map	#	#	table_id: # (test.t1)
-master-bin.000001	#	Write_rows	#	#	table_id: #
 master-bin.000001	#	Write_rows	#	#	table_id: # flags: STMT_END_F
-master-bin.000001	#	Query	#	#	use `test`; ROLLBACK
 /* the output must denote there is the query */;
 select count(*) from t1 /* must be 2 */;
 count(*)
@@ -578,13 +533,14 @@ update t3 set b=b+bug27417(1);
 ERROR 23000: Duplicate entry '4' for key 'b'
 show binlog events from <binlog_start>;
 Log_name	Pos	Event_type	Server_id	End_log_pos	Info
-master-bin.000001	#	Query	#	#	use `test`; BEGIN
+master-bin.000001	#	Table_map	#	#	table_id: # (test.t1)
+master-bin.000001	#	Table_map	#	#	table_id: # (test.t3)
+master-bin.000001	#	Write_rows	#	#	table_id: # flags: STMT_END_F
 master-bin.000001	#	Table_map	#	#	table_id: # (test.t3)
 master-bin.000001	#	Table_map	#	#	table_id: # (test.t1)
-master-bin.000001	#	Write_rows	#	#	table_id: #
-master-bin.000001	#	Update_rows	#	#	table_id: #
+master-bin.000001	#	Update_rows	#	#	table_id: # flags: STMT_END_F
+master-bin.000001	#	Table_map	#	#	table_id: # (test.t1)
 master-bin.000001	#	Write_rows	#	#	table_id: # flags: STMT_END_F
-master-bin.000001	#	Query	#	#	use `test`; ROLLBACK
 /* the output must denote there is the query */;
 select count(*) from t1 /* must be 2 */;
 count(*)
@@ -598,11 +554,8 @@ UPDATE t4,t3 SET t4.a=t3.a + bug27417(1)
 ERROR 23000: Duplicate entry '2' for key 'PRIMARY'
 show binlog events from <binlog_start>;
 Log_name	Pos	Event_type	Server_id	End_log_pos	Info
-master-bin.000001	#	Query	#	#	use `test`; BEGIN
-master-bin.000001	#	Table_map	#	#	table_id: # (test.t4)
 master-bin.000001	#	Table_map	#	#	table_id: # (test.t1)
 master-bin.000001	#	Write_rows	#	#	table_id: # flags: STMT_END_F
-master-bin.000001	#	Query	#	#	use `test`; ROLLBACK
 /* the output must denote there is the query */;
 select count(*) from t1 /* must be 4 */;
 count(*)
@@ -631,12 +584,8 @@ delete from t2;
 ERROR 23000: Duplicate entry '1' for key 'PRIMARY'
 show binlog events from <binlog_start>;
 Log_name	Pos	Event_type	Server_id	End_log_pos	Info
-master-bin.000001	#	Query	#	#	use `test`; BEGIN
-master-bin.000001	#	Table_map	#	#	table_id: # (test.t2)
-master-bin.000001	#	Table_map	#	#	table_id: # (test.t3)
 master-bin.000001	#	Table_map	#	#	table_id: # (test.t1)
 master-bin.000001	#	Write_rows	#	#	table_id: # flags: STMT_END_F
-master-bin.000001	#	Query	#	#	use `test`; ROLLBACK
 /* the output must denote there is the query */;
 select count(*) from t1 /* must be 1 */;
 count(*)
@@ -654,13 +603,8 @@ delete t2.* from t2,t5 where t2.a=t5.a +
 ERROR 23000: Duplicate entry '1' for key 'PRIMARY'
 show binlog events from <binlog_start>;
 Log_name	Pos	Event_type	Server_id	End_log_pos	Info
-master-bin.000001	#	Query	#	#	use `test`; BEGIN
-master-bin.000001	#	Table_map	#	#	table_id: # (test.t2)
 master-bin.000001	#	Table_map	#	#	table_id: # (test.t1)
-master-bin.000001	#	Delete_rows	#	#	table_id: #
-master-bin.000001	#	Write_rows	#	#	table_id: #
-master-bin.000001	#	Delete_rows	#	#	table_id: # flags: STMT_END_F
-master-bin.000001	#	Query	#	#	use `test`; ROLLBACK
+master-bin.000001	#	Write_rows	#	#	table_id: # flags: STMT_END_F
 /* the output must denote there is the query */;
 select count(*) from t1 /* must be 1 */;
 count(*)
@@ -679,13 +623,8 @@ count(*)
 2
 show binlog events from <binlog_start>;
 Log_name	Pos	Event_type	Server_id	End_log_pos	Info
-master-bin.000001	#	Query	#	#	use `test`; BEGIN
-master-bin.000001	#	Table_map	#	#	table_id: # (test.t4)
 master-bin.000001	#	Table_map	#	#	table_id: # (test.t1)
-master-bin.000001	#	Write_rows	#	#	table_id: #
-master-bin.000001	#	Write_rows	#	#	table_id: #
 master-bin.000001	#	Write_rows	#	#	table_id: # flags: STMT_END_F
-master-bin.000001	#	Query	#	#	use `test`; ROLLBACK
 /* the output must denote there is the query */;
 drop trigger trg_del_t2;
 drop table t1,t2,t3,t4,t5;
@@ -706,12 +645,6 @@ count(*)
 2
 show binlog events from <binlog_start>;
 Log_name	Pos	Event_type	Server_id	End_log_pos	Info
-master-bin.000001	#	Query	#	#	use `test`; BEGIN
-master-bin.000001	#	Table_map	#	#	table_id: # (test.ti)
-master-bin.000001	#	Write_rows	#	#	table_id: # flags: STMT_END_F
-master-bin.000001	#	Table_map	#	#	table_id: # (test.ti)
-master-bin.000001	#	Write_rows	#	#	table_id: # flags: STMT_END_F
-master-bin.000001	#	Query	#	#	use `test`; ROLLBACK
 select count(*) from ti /* zero */;
 count(*)
 0
@@ -795,10 +728,6 @@ insert into t2 values (bug27417(1));
 ERROR 23000: Duplicate entry '1' for key 'PRIMARY'
 show binlog events from <binlog_start>;
 Log_name	Pos	Event_type	Server_id	End_log_pos	Info
-master-bin.000001	#	Query	#	#	use `test`; BEGIN
-master-bin.000001	#	Intvar	#	#	INSERT_ID=1
-master-bin.000001	#	Query	#	#	use `test`; insert into t2 values (bug27417(1))
-master-bin.000001	#	Query	#	#	use `test`; ROLLBACK
 select count(*) from t1 /* must be 1 */;
 count(*)
 1
@@ -810,10 +739,6 @@ insert into t2 select bug27417(1) union 
 ERROR 23000: Duplicate entry '2' for key 'PRIMARY'
 show binlog events from <binlog_start>;
 Log_name	Pos	Event_type	Server_id	End_log_pos	Info
-master-bin.000001	#	Query	#	#	use `test`; BEGIN
-master-bin.000001	#	Intvar	#	#	INSERT_ID=2
-master-bin.000001	#	Query	#	#	use `test`; insert into t2 select bug27417(1) union select bug27417(2)
-master-bin.000001	#	Query	#	#	use `test`; ROLLBACK
 select count(*) from t1 /* must be 2 */;
 count(*)
 2
@@ -867,10 +792,6 @@ delete from t2;
 ERROR 23000: Duplicate entry '1' for key 'PRIMARY'
 show binlog events from <binlog_start>;
 Log_name	Pos	Event_type	Server_id	End_log_pos	Info
-master-bin.000001	#	Query	#	#	use `test`; BEGIN
-master-bin.000001	#	Intvar	#	#	INSERT_ID=9
-master-bin.000001	#	Query	#	#	use `test`; delete from t2
-master-bin.000001	#	Query	#	#	use `test`; ROLLBACK
 select count(*) from t1 /* must be 1 */;
 count(*)
 1
@@ -887,9 +808,6 @@ delete t2.* from t2,t5 where t2.a=t5.a +
 ERROR 23000: Duplicate entry '1' for key 'PRIMARY'
 show binlog events from <binlog_start>;
 Log_name	Pos	Event_type	Server_id	End_log_pos	Info
-master-bin.000001	#	Query	#	#	use `test`; BEGIN
-master-bin.000001	#	Query	#	#	use `test`; delete t2.* from t2,t5 where t2.a=t5.a + 1
-master-bin.000001	#	Query	#	#	use `test`; ROLLBACK
 select count(*) from t1 /* must be 1 */;
 count(*)
 1
@@ -907,14 +825,6 @@ count(*)
 2
 show binlog events from <binlog_start>;
 Log_name	Pos	Event_type	Server_id	End_log_pos	Info
-master-bin.000001	#	Query	#	#	use `test`; BEGIN
-master-bin.000001	#	Intvar	#	#	INSERT_ID=10
-master-bin.000001	#	User var	#	#	@`b`=_latin1 0x3135 COLLATE latin1_swedish_ci
-master-bin.000001	#	Begin_load_query	#	#	;file_id=#;block_len=#
-master-bin.000001	#	Intvar	#	#	INSERT_ID=10
-master-bin.000001	#	User var	#	#	@`b`=_latin1 0x3135 COLLATE latin1_swedish_ci
-master-bin.000001	#	Execute_load_query	#	#	use `test`; load data infile '../../std_data/rpl_loaddata.dat' into table t4 (a, @b) set b= @b + bug27417(2) ;file_id=#
-master-bin.000001	#	Query	#	#	use `test`; ROLLBACK
 drop trigger trg_del_t2;
 drop table t1,t2,t3,t4,t5;
 drop function bug27417;

=== modified file 'mysql-test/suite/binlog/r/binlog_stm_binlog.result'
--- a/mysql-test/suite/binlog/r/binlog_stm_binlog.result	2009-03-25 19:41:16 +0000
+++ b/mysql-test/suite/binlog/r/binlog_stm_binlog.result	2009-05-13 01:57:17 +0000
@@ -730,18 +730,12 @@ master-bin.000001	#	Query	#	#	use `mysql
 master-bin.000001	#	Query	#	#	use `mysql`; DELETE FROM user WHERE host='localhost' AND user='@#@'
 master-bin.000001	#	Query	#	#	use `test`; drop table t1,t2,t3,tt1
 master-bin.000001	#	Query	#	#	use `test`; create table t1 (a int not null auto_increment, primary key (a)) engine=myisam
-master-bin.000001	#	Query	#	#	use `test`; BEGIN
 master-bin.000001	#	Table_map	#	#	table_id: # (test.t1)
 master-bin.000001	#	Write_rows	#	#	table_id: # flags: STMT_END_F
-master-bin.000001	#	Query	#	#	use `test`; COMMIT
-master-bin.000001	#	Query	#	#	use `test`; BEGIN
 master-bin.000001	#	Table_map	#	#	table_id: # (test.t1)
 master-bin.000001	#	Write_rows	#	#	table_id: # flags: STMT_END_F
-master-bin.000001	#	Query	#	#	use `test`; COMMIT
-master-bin.000001	#	Query	#	#	use `test`; BEGIN
 master-bin.000001	#	Table_map	#	#	table_id: # (test.t1)
 master-bin.000001	#	Write_rows	#	#	table_id: # flags: STMT_END_F
-master-bin.000001	#	Query	#	#	use `test`; COMMIT
 master-bin.000001	#	Query	#	#	use `test`; FLUSH TABLES
 insert delayed into t1 values (null),(null),(null),(null);
 insert delayed into t1 values (null),(null),(400),(null);

=== modified file 'mysql-test/suite/binlog/r/binlog_stm_row.result'
--- a/mysql-test/suite/binlog/r/binlog_stm_row.result	2009-01-30 13:44:49 +0000
+++ b/mysql-test/suite/binlog/r/binlog_stm_row.result	2009-05-13 01:57:17 +0000
@@ -65,10 +65,8 @@ master-bin.000001	#	Query	#	#	use `test`
 master-bin.000001	#	Query	#	#	use `test`; INSERT INTO t1 SELECT * FROM t2 WHERE GET_LOCK('Bug#34306', 120)
 master-bin.000001	#	Query	#	#	use `test`; INSERT INTO t2 VALUES (3)
 master-bin.000001	#	Query	#	#	use `test`; INSERT INTO t2 VALUES (4)
-master-bin.000001	#	Query	#	#	use `test`; BEGIN
 master-bin.000001	#	Table_map	#	#	table_id: # (test.t1)
 master-bin.000001	#	Write_rows	#	#	table_id: # flags: STMT_END_F
-master-bin.000001	#	Query	#	#	use `test`; COMMIT
 DROP TABLE t1;
 DROP TABLE t2;
 SET GLOBAL BINLOG_FORMAT = @saved_global_binlog_format;

=== modified file 'mysql-test/suite/rpl/r/rpl_extraCol_myisam.result'
--- a/mysql-test/suite/rpl/r/rpl_extraCol_myisam.result	2008-11-04 07:43:21 +0000
+++ b/mysql-test/suite/rpl/r/rpl_extraCol_myisam.result	2009-05-13 01:57:17 +0000
@@ -434,7 +434,7 @@ Replicate_Ignore_Table	#
 Replicate_Wild_Do_Table	
 Replicate_Wild_Ignore_Table	
 Last_Errno	1364
-Last_Error	Could not execute Write_rows event on table test.t9; Field 'e' doesn't have a default value, Error_code: 1364; handler error HA_ERR_ROWS_EVENT_APPLY; the event's master log master-bin.000001, end_log_pos 330
+Last_Error	Could not execute Write_rows event on table test.t9; Field 'e' doesn't have a default value, Error_code: 1364; handler error HA_ERR_ROWS_EVENT_APPLY; the event's master log master-bin.000001, end_log_pos 262
 Skip_Counter	0
 Exec_Master_Log_Pos	#
 Relay_Log_Space	#
@@ -452,7 +452,7 @@ Master_SSL_Verify_Server_Cert	No
 Last_IO_Errno	#
 Last_IO_Error	#
 Last_SQL_Errno	1364
-Last_SQL_Error	Could not execute Write_rows event on table test.t9; Field 'e' doesn't have a default value, Error_code: 1364; handler error HA_ERR_ROWS_EVENT_APPLY; the event's master log master-bin.000001, end_log_pos 330
+Last_SQL_Error	Could not execute Write_rows event on table test.t9; Field 'e' doesn't have a default value, Error_code: 1364; handler error HA_ERR_ROWS_EVENT_APPLY; the event's master log master-bin.000001, end_log_pos 262
 SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2;
 START SLAVE;
 *** Create t10 on slave  ***

=== modified file 'mysql-test/suite/rpl/r/rpl_loaddata_fatal.result'
--- a/mysql-test/suite/rpl/r/rpl_loaddata_fatal.result	2007-12-12 17:19:24 +0000
+++ b/mysql-test/suite/rpl/r/rpl_loaddata_fatal.result	2009-05-13 01:57:17 +0000
@@ -13,7 +13,7 @@ Master_User	root
 Master_Port	MASTER_PORT
 Connect_Retry	1
 Master_Log_File	master-bin.000001
-Read_Master_Log_Pos	290
+Read_Master_Log_Pos	#
 Relay_Log_File	#
 Relay_Log_Pos	#
 Relay_Master_Log_File	master-bin.000001
@@ -28,7 +28,7 @@ Replicate_Wild_Ignore_Table	
 Last_Errno	0
 Last_Error	
 Skip_Counter	0
-Exec_Master_Log_Pos	290
+Exec_Master_Log_Pos	#
 Relay_Log_Space	#
 Until_Condition	None
 Until_Log_File	
@@ -53,7 +53,7 @@ Master_User	root
 Master_Port	MASTER_PORT
 Connect_Retry	1
 Master_Log_File	master-bin.000001
-Read_Master_Log_Pos	465
+Read_Master_Log_Pos	#
 Relay_Log_File	#
 Relay_Log_Pos	#
 Relay_Master_Log_File	master-bin.000001
@@ -68,7 +68,7 @@ Replicate_Wild_Ignore_Table	
 Last_Errno	1593
 Last_Error	Fatal error: Not enough memory
 Skip_Counter	0
-Exec_Master_Log_Pos	325
+Exec_Master_Log_Pos	#
 Relay_Log_Space	#
 Until_Condition	None
 Until_Log_File	

=== modified file 'mysql-test/suite/rpl/r/rpl_log_pos.result'
--- a/mysql-test/suite/rpl/r/rpl_log_pos.result	2008-07-10 16:09:39 +0000
+++ b/mysql-test/suite/rpl/r/rpl_log_pos.result	2009-05-13 01:57:17 +0000
@@ -57,7 +57,7 @@ Master_User	root
 Master_Port	MASTER_PORT
 Connect_Retry	1
 Master_Log_File	master-bin.000001
-Read_Master_Log_Pos	75
+Read_Master_Log_Pos	#
 Relay_Log_File	#
 Relay_Log_Pos	#
 Relay_Master_Log_File	master-bin.000001
@@ -72,7 +72,7 @@ Replicate_Wild_Ignore_Table	
 Last_Errno	0
 Last_Error	
 Skip_Counter	0
-Exec_Master_Log_Pos	75
+Exec_Master_Log_Pos	#
 Relay_Log_Space	#
 Until_Condition	None
 Until_Log_File	

=== modified file 'mysql-test/suite/rpl/r/rpl_rbr_to_sbr.result'
--- a/mysql-test/suite/rpl/r/rpl_rbr_to_sbr.result	2008-07-16 09:17:10 +0000
+++ b/mysql-test/suite/rpl/r/rpl_rbr_to_sbr.result	2009-05-13 01:57:17 +0000
@@ -19,10 +19,8 @@ Log_name	Pos	Event_type	Server_id	End_lo
 master-bin.000001	#	Format_desc	1	#	Server ver: VERSION, Binlog ver: 4
 master-bin.000001	#	Query	1	#	use `test`; CREATE TABLE t1 (a INT, b LONG)
 master-bin.000001	#	Query	1	#	use `test`; INSERT INTO t1 VALUES (1,1), (2,2)
-master-bin.000001	#	Query	1	#	use `test`; BEGIN
 master-bin.000001	#	Table_map	1	#	table_id: # (test.t1)
 master-bin.000001	#	Write_rows	1	#	table_id: # flags: STMT_END_F
-master-bin.000001	#	Query	1	#	use `test`; COMMIT
 **** On Slave ****
 SHOW SLAVE STATUS;
 Slave_IO_State	#
@@ -31,7 +29,7 @@ Master_User	root
 Master_Port	MASTER_PORT
 Connect_Retry	1
 Master_Log_File	master-bin.000001
-Read_Master_Log_Pos	594
+Read_Master_Log_Pos	457
 Relay_Log_File	#
 Relay_Log_Pos	#
 Relay_Master_Log_File	master-bin.000001
@@ -46,7 +44,7 @@ Replicate_Wild_Ignore_Table	
 Last_Errno	0
 Last_Error	
 Skip_Counter	0
-Exec_Master_Log_Pos	594
+Exec_Master_Log_Pos	457
 Relay_Log_Space	#
 Until_Condition	None
 Until_Log_File	
@@ -68,9 +66,7 @@ Log_name	Pos	Event_type	Server_id	End_lo
 slave-bin.000001	#	Format_desc	2	#	Server ver: VERSION, Binlog ver: 4
 slave-bin.000001	#	Query	1	#	use `test`; CREATE TABLE t1 (a INT, b LONG)
 slave-bin.000001	#	Query	1	#	use `test`; INSERT INTO t1 VALUES (1,1), (2,2)
-slave-bin.000001	#	Query	1	#	use `test`; BEGIN
 slave-bin.000001	#	Table_map	1	#	table_id: # (test.t1)
 slave-bin.000001	#	Write_rows	1	#	table_id: # flags: STMT_END_F
-slave-bin.000001	#	Query	1	#	use `test`; COMMIT
 DROP TABLE IF EXISTS t1;
 SET @@global.binlog_format= @old_binlog_format;

=== removed file 'mysql-test/suite/rpl/r/rpl_row_basic_11bugs-master.opt'
--- a/mysql-test/suite/rpl/r/rpl_row_basic_11bugs-master.opt	2007-06-27 12:28:02 +0000
+++ b/mysql-test/suite/rpl/r/rpl_row_basic_11bugs-master.opt	1970-01-01 00:00:00 +0000
@@ -1 +0,0 @@
---innodb

=== removed file 'mysql-test/suite/rpl/r/rpl_row_basic_11bugs-slave.opt'
--- a/mysql-test/suite/rpl/r/rpl_row_basic_11bugs-slave.opt	2007-06-27 12:28:02 +0000
+++ b/mysql-test/suite/rpl/r/rpl_row_basic_11bugs-slave.opt	1970-01-01 00:00:00 +0000
@@ -1 +0,0 @@
---innodb

=== modified file 'mysql-test/suite/rpl/r/rpl_row_basic_11bugs.result'
--- a/mysql-test/suite/rpl/r/rpl_row_basic_11bugs.result	2008-04-03 09:50:43 +0000
+++ b/mysql-test/suite/rpl/r/rpl_row_basic_11bugs.result	2009-05-13 01:57:17 +0000
@@ -28,10 +28,8 @@ INSERT INTO t2 VALUES (3,3), (4,4);
 show binlog events from <binlog_start>;
 Log_name	Pos	Event_type	Server_id	End_log_pos	Info
 master-bin.000001	#	Query	#	#	use `test`; CREATE TABLE t1 (a INT, b INT)
-master-bin.000001	#	Query	#	#	use `test`; BEGIN
 master-bin.000001	#	Table_map	#	#	table_id: # (test.t1)
 master-bin.000001	#	Write_rows	#	#	table_id: # flags: STMT_END_F
-master-bin.000001	#	Query	#	#	use `test`; COMMIT
 **** On Slave ****
 SHOW DATABASES;
 Database
@@ -60,10 +58,8 @@ SHOW BINLOG EVENTS;
 Log_name	Pos	Event_type	Server_id	End_log_pos	Info
 master-bin.000001	4	Format_desc	1	106	Server ver: SERVER_VERSION, Binlog ver: 4
 master-bin.000001	106	Query	1	192	use `test`; CREATE TABLE t1 (a INT)
-master-bin.000001	192	Query	1	260	use `test`; BEGIN
-master-bin.000001	260	Table_map	1	301	table_id: # (test.t1)
-master-bin.000001	301	Write_rows	1	340	table_id: # flags: STMT_END_F
-master-bin.000001	340	Query	1	409	use `test`; COMMIT
+master-bin.000001	192	Table_map	1	233	table_id: # (test.t1)
+master-bin.000001	233	Write_rows	1	272	table_id: # flags: STMT_END_F
 DROP TABLE t1;
 ================ Test for BUG#17620 ================
 drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;

=== modified file 'mysql-test/suite/rpl/r/rpl_row_conflicts.result'
--- a/mysql-test/suite/rpl/r/rpl_row_conflicts.result	2009-01-09 14:12:31 +0000
+++ b/mysql-test/suite/rpl/r/rpl_row_conflicts.result	2009-05-13 01:57:17 +0000
@@ -24,7 +24,7 @@ a
 1
 [on slave]
 ---- Wait until slave stops with an error ----
-Last_SQL_Error = Could not execute Write_rows event on table test.t1; Duplicate entry '1' for key 'PRIMARY', Error_code: 1062; handler error HA_ERR_FOUND_DUPP_KEY; the event's master log master-bin.000001, end_log_pos 346 (expected "duplicate key" error)
+Last_SQL_Error = Could not execute Write_rows event on table test.t1; Duplicate entry '1' for key 'PRIMARY', Error_code: 1062; handler error HA_ERR_FOUND_DUPP_KEY; the event's master log master-bin.000001, end_log_pos 278 (expected "duplicate key" error)
 SELECT * FROM t1;
 a
 1
@@ -50,7 +50,7 @@ SELECT * FROM t1;
 a
 [on slave]
 ---- Wait until slave stops with an error ----
-Last_SQL_Error = Could not execute Delete_rows event on table test.t1; Can't find record in 't1', Error_code: 1032; handler error HA_ERR_KEY_NOT_FOUND; the event's master log master-bin.000001, end_log_pos 982 (expected "can't find record" error)
+Last_SQL_Error = Could not execute Delete_rows event on table test.t1; Can't find record in 't1', Error_code: 1032; handler error HA_ERR_KEY_NOT_FOUND; the event's master log master-bin.000001, end_log_pos 503 (expected "can't find record" error)
 SELECT * FROM t1;
 a
 ---- Resolve the conflict on the slave and restart SQL thread ----

=== modified file 'mysql-test/suite/rpl/r/rpl_row_create_table.result'
--- a/mysql-test/suite/rpl/r/rpl_row_create_table.result	2009-01-23 12:22:05 +0000
+++ b/mysql-test/suite/rpl/r/rpl_row_create_table.result	2009-05-13 01:57:17 +0000
@@ -150,10 +150,8 @@ a	b
 SHOW BINLOG EVENTS FROM 106;
 Log_name	Pos	Event_type	Server_id	End_log_pos	Info
 #	106	Query	#	206	use `test`; CREATE TABLE t7 (a INT, b INT UNIQUE)
-#	206	Query	#	274	use `test`; BEGIN
-#	274	Table_map	#	316	table_id: # (test.t7)
-#	316	Write_rows	#	372	table_id: # flags: STMT_END_F
-#	372	Query	#	443	use `test`; ROLLBACK
+#	206	Table_map	#	248	table_id: # (test.t7)
+#	248	Write_rows	#	304	table_id: # flags: STMT_END_F
 SELECT * FROM t7 ORDER BY a,b;
 a	b
 1	2
@@ -173,10 +171,8 @@ Warnings:
 Warning	1196	Some non-transactional changed tables couldn't be rolled back
 SHOW BINLOG EVENTS FROM 106;
 Log_name	Pos	Event_type	Server_id	End_log_pos	Info
-#	106	Query	#	174	use `test`; BEGIN
-#	174	Table_map	#	216	table_id: # (test.t7)
-#	216	Write_rows	#	272	table_id: # flags: STMT_END_F
-#	272	Query	#	343	use `test`; ROLLBACK
+#	106	Table_map	#	148	table_id: # (test.t7)
+#	148	Write_rows	#	204	table_id: # flags: STMT_END_F
 SELECT * FROM t7 ORDER BY a,b;
 a	b
 1	2
@@ -299,35 +295,31 @@ a
 SHOW BINLOG EVENTS FROM 106;
 Log_name	Pos	Event_type	Server_id	End_log_pos	Info
 #	106	Query	#	192	use `test`; CREATE TABLE t1 (a INT)
-#	192	Query	#	260	use `test`; BEGIN
-#	260	Table_map	#	301	table_id: # (test.t1)
-#	301	Write_rows	#	345	table_id: # flags: STMT_END_F
-#	345	Query	#	414	use `test`; COMMIT
-#	414	Query	#	482	use `test`; BEGIN
-#	482	Query	#	607	use `test`; CREATE TABLE `t2` (
+#	192	Table_map	#	233	table_id: # (test.t1)
+#	233	Write_rows	#	277	table_id: # flags: STMT_END_F
+#	277	Query	#	345	use `test`; BEGIN
+#	345	Query	#	470	use `test`; CREATE TABLE `t2` (
   `a` int(11) DEFAULT NULL
 ) ENGINE=InnoDB
-#	607	Table_map	#	648	table_id: # (test.t2)
-#	648	Write_rows	#	692	table_id: # flags: STMT_END_F
-#	692	Xid	#	719	COMMIT /* XID */
-#	719	Query	#	787	use `test`; BEGIN
-#	787	Query	#	912	use `test`; CREATE TABLE `t3` (
+#	470	Table_map	#	511	table_id: # (test.t2)
+#	511	Write_rows	#	555	table_id: # flags: STMT_END_F
+#	555	Xid	#	582	COMMIT /* XID */
+#	582	Query	#	650	use `test`; BEGIN
+#	650	Query	#	775	use `test`; CREATE TABLE `t3` (
   `a` int(11) DEFAULT NULL
 ) ENGINE=InnoDB
-#	912	Table_map	#	953	table_id: # (test.t3)
-#	953	Write_rows	#	997	table_id: # flags: STMT_END_F
-#	997	Xid	#	1024	COMMIT /* XID */
-#	1024	Query	#	1092	use `test`; BEGIN
-#	1092	Query	#	1217	use `test`; CREATE TABLE `t4` (
+#	775	Table_map	#	816	table_id: # (test.t3)
+#	816	Write_rows	#	860	table_id: # flags: STMT_END_F
+#	860	Xid	#	887	COMMIT /* XID */
+#	887	Query	#	955	use `test`; BEGIN
+#	955	Query	#	1080	use `test`; CREATE TABLE `t4` (
   `a` int(11) DEFAULT NULL
 ) ENGINE=InnoDB
-#	1217	Table_map	#	1258	table_id: # (test.t4)
-#	1258	Write_rows	#	1302	table_id: # flags: STMT_END_F
-#	1302	Xid	#	1329	COMMIT /* XID */
-#	1329	Query	#	1397	use `test`; BEGIN
-#	1397	Table_map	#	1438	table_id: # (test.t1)
-#	1438	Write_rows	#	1482	table_id: # flags: STMT_END_F
-#	1482	Query	#	1553	use `test`; ROLLBACK
+#	1080	Table_map	#	1121	table_id: # (test.t4)
+#	1121	Write_rows	#	1165	table_id: # flags: STMT_END_F
+#	1165	Xid	#	1192	COMMIT /* XID */
+#	1192	Table_map	#	1233	table_id: # (test.t1)
+#	1233	Write_rows	#	1277	table_id: # flags: STMT_END_F
 SHOW TABLES;
 Tables_in_test
 t1
@@ -393,17 +385,15 @@ a
 SHOW BINLOG EVENTS FROM 106;
 Log_name	Pos	Event_type	Server_id	End_log_pos	Info
 #	106	Query	#	192	use `test`; CREATE TABLE t1 (a INT)
-#	192	Query	#	260	use `test`; BEGIN
-#	260	Table_map	#	301	table_id: # (test.t1)
-#	301	Write_rows	#	345	table_id: # flags: STMT_END_F
-#	345	Query	#	414	use `test`; COMMIT
-#	414	Query	#	514	use `test`; CREATE TABLE t2 (a INT) ENGINE=INNODB
-#	514	Query	#	582	use `test`; BEGIN
-#	582	Table_map	#	623	table_id: # (test.t2)
-#	623	Write_rows	#	667	table_id: # flags: STMT_END_F
-#	667	Table_map	#	708	table_id: # (test.t2)
-#	708	Write_rows	#	747	table_id: # flags: STMT_END_F
-#	747	Xid	#	774	COMMIT /* XID */
+#	192	Table_map	#	233	table_id: # (test.t1)
+#	233	Write_rows	#	277	table_id: # flags: STMT_END_F
+#	277	Query	#	377	use `test`; CREATE TABLE t2 (a INT) ENGINE=INNODB
+#	377	Query	#	445	use `test`; BEGIN
+#	445	Table_map	#	486	table_id: # (test.t2)
+#	486	Write_rows	#	530	table_id: # flags: STMT_END_F
+#	530	Table_map	#	571	table_id: # (test.t2)
+#	571	Write_rows	#	610	table_id: # flags: STMT_END_F
+#	610	Xid	#	637	COMMIT /* XID */
 SELECT * FROM t2 ORDER BY a;
 a
 1
@@ -431,12 +421,6 @@ SELECT * FROM t2 ORDER BY a;
 a
 SHOW BINLOG EVENTS FROM 106;
 Log_name	Pos	Event_type	Server_id	End_log_pos	Info
-#	106	Query	#	174	use `test`; BEGIN
-#	174	Table_map	#	215	table_id: # (test.t2)
-#	215	Write_rows	#	259	table_id: # flags: STMT_END_F
-#	259	Table_map	#	300	table_id: # (test.t2)
-#	300	Write_rows	#	339	table_id: # flags: STMT_END_F
-#	339	Query	#	410	use `test`; ROLLBACK
 SELECT * FROM t2 ORDER BY a;
 a
 DROP TABLE t1,t2;

=== modified file 'mysql-test/suite/rpl/r/rpl_row_flsh_tbls.result'
--- a/mysql-test/suite/rpl/r/rpl_row_flsh_tbls.result	2008-12-12 11:34:18 +0000
+++ b/mysql-test/suite/rpl/r/rpl_row_flsh_tbls.result	2009-05-13 01:57:17 +0000
@@ -12,14 +12,30 @@ create table t4 (a int);
 insert into t4 select * from t3;
 rename table t1 to t5, t2 to t1;
 flush no_write_to_binlog tables;
-SHOW BINLOG EVENTS FROM 897 ;
+show binlog events from <binlog_start>;
 Log_name	Pos	Event_type	Server_id	End_log_pos	Info
+master-bin.000001	#	Query	1	#	use `test`; create table t1 (a int)
+master-bin.000001	#	Table_map	1	#	table_id: # (test.t1)
+master-bin.000001	#	Write_rows	1	#	table_id: # flags: STMT_END_F
+master-bin.000001	#	Query	1	#	use `test`; create table t2 (a int)
+master-bin.000001	#	Query	1	#	use `test`; create table t3 (a int) engine=merge union(t1)
+master-bin.000001	#	Query	1	#	use `test`; create table t4 (a int)
+master-bin.000001	#	Table_map	1	#	table_id: # (test.t4)
+master-bin.000001	#	Write_rows	1	#	table_id: # flags: STMT_END_F
 master-bin.000001	#	Query	1	#	use `test`; rename table t1 to t5, t2 to t1
 select * from t3;
 a
 flush tables;
-SHOW BINLOG EVENTS FROM 897 ;
+show binlog events from <binlog_start>;
 Log_name	Pos	Event_type	Server_id	End_log_pos	Info
+master-bin.000001	#	Query	1	#	use `test`; create table t1 (a int)
+master-bin.000001	#	Table_map	1	#	table_id: # (test.t1)
+master-bin.000001	#	Write_rows	1	#	table_id: # flags: STMT_END_F
+master-bin.000001	#	Query	1	#	use `test`; create table t2 (a int)
+master-bin.000001	#	Query	1	#	use `test`; create table t3 (a int) engine=merge union(t1)
+master-bin.000001	#	Query	1	#	use `test`; create table t4 (a int)
+master-bin.000001	#	Table_map	1	#	table_id: # (test.t4)
+master-bin.000001	#	Write_rows	1	#	table_id: # flags: STMT_END_F
 master-bin.000001	#	Query	1	#	use `test`; rename table t1 to t5, t2 to t1
 master-bin.000001	#	Query	1	#	use `test`; flush tables
 select * from t3;

=== modified file 'mysql-test/suite/rpl/r/rpl_row_log.result'
--- a/mysql-test/suite/rpl/r/rpl_row_log.result	2009-02-02 11:44:18 +0000
+++ b/mysql-test/suite/rpl/r/rpl_row_log.result	2009-05-13 01:57:17 +0000
@@ -20,26 +20,22 @@ show binlog events;
 Log_name	Pos	Event_type	Server_id	End_log_pos	Info
 master-bin.000001	#	Format_desc	1	#	Server ver: VERSION, Binlog ver: 4
 master-bin.000001	#	Query	1	#	use `test`; create table t1(n int not null auto_increment primary key)ENGINE=MyISAM
-master-bin.000001	#	Query	1	#	use `test`; BEGIN
 master-bin.000001	#	Table_map	1	#	table_id: # (test.t1)
 master-bin.000001	#	Write_rows	1	#	table_id: # flags: STMT_END_F
-master-bin.000001	#	Query	1	#	use `test`; COMMIT
 master-bin.000001	#	Query	1	#	use `test`; drop table t1
 master-bin.000001	#	Query	1	#	use `test`; create table t1 (word char(20) not null)ENGINE=MyISAM
-master-bin.000001	#	Query	1	#	use `test`; BEGIN
 master-bin.000001	#	Table_map	1	#	table_id: # (test.t1)
 master-bin.000001	#	Write_rows	1	#	table_id: # flags: STMT_END_F
-master-bin.000001	#	Query	1	#	use `test`; COMMIT
 show binlog events from 106 limit 1;
 Log_name	Pos	Event_type	Server_id	End_log_pos	Info
 master-bin.000001	#	Query	1	#	use `test`; create table t1(n int not null auto_increment primary key)ENGINE=MyISAM
 show binlog events from 106 limit 2;
 Log_name	Pos	Event_type	Server_id	End_log_pos	Info
 master-bin.000001	#	Query	1	#	use `test`; create table t1(n int not null auto_increment primary key)ENGINE=MyISAM
-master-bin.000001	#	Query	1	#	use `test`; BEGIN
+master-bin.000001	#	Table_map	1	#	table_id: # (test.t1)
 show binlog events from 106 limit 2,1;
 Log_name	Pos	Event_type	Server_id	End_log_pos	Info
-master-bin.000001	#	Table_map	1	#	table_id: # (test.t1)
+master-bin.000001	#	Write_rows	1	#	table_id: # flags: STMT_END_F
 flush logs;
 create table t3 (a int)ENGINE=MyISAM;
 select * from t1 order by 1 asc;
@@ -192,26 +188,20 @@ insert into t2 values (1);
 show binlog events from <binlog_start>;
 Log_name	Pos	Event_type	Server_id	End_log_pos	Info
 master-bin.000001	#	Query	#	#	use `test`; create table t1(n int not null auto_increment primary key)ENGINE=MyISAM
-master-bin.000001	#	Query	#	#	use `test`; BEGIN
 master-bin.000001	#	Table_map	#	#	table_id: # (test.t1)
 master-bin.000001	#	Write_rows	#	#	table_id: # flags: STMT_END_F
-master-bin.000001	#	Query	#	#	use `test`; COMMIT
 master-bin.000001	#	Query	#	#	use `test`; drop table t1
 master-bin.000001	#	Query	#	#	use `test`; create table t1 (word char(20) not null)ENGINE=MyISAM
-master-bin.000001	#	Query	#	#	use `test`; BEGIN
 master-bin.000001	#	Table_map	#	#	table_id: # (test.t1)
 master-bin.000001	#	Write_rows	#	#	table_id: # flags: STMT_END_F
-master-bin.000001	#	Query	#	#	use `test`; COMMIT
 master-bin.000001	#	Rotate	#	#	master-bin.000002;pos=4
 show binlog events in 'master-bin.000002';
 Log_name	Pos	Event_type	Server_id	End_log_pos	Info
 master-bin.000002	#	Format_desc	1	#	Server ver: VERSION, Binlog ver: 4
 master-bin.000002	#	Query	1	#	use `test`; create table t3 (a int)ENGINE=MyISAM
 master-bin.000002	#	Query	1	#	use `test`; create table t2 (n int)ENGINE=MyISAM
-master-bin.000002	#	Query	1	#	use `test`; BEGIN
 master-bin.000002	#	Table_map	1	#	table_id: # (test.t2)
 master-bin.000002	#	Write_rows	1	#	table_id: # flags: STMT_END_F
-master-bin.000002	#	Query	1	#	use `test`; COMMIT
 show binary logs;
 Log_name	File_size
 master-bin.000001	#
@@ -224,26 +214,20 @@ show binlog events in 'slave-bin.000001'
 Log_name	Pos	Event_type	Server_id	End_log_pos	Info
 slave-bin.000001	#	Format_desc	2	#	Server ver: VERSION, Binlog ver: 4
 slave-bin.000001	#	Query	1	#	use `test`; create table t1(n int not null auto_increment primary key)ENGINE=MyISAM
-slave-bin.000001	#	Query	1	#	use `test`; BEGIN
 slave-bin.000001	#	Table_map	1	#	table_id: # (test.t1)
 slave-bin.000001	#	Write_rows	1	#	table_id: # flags: STMT_END_F
-slave-bin.000001	#	Query	1	#	use `test`; COMMIT
 slave-bin.000001	#	Query	1	#	use `test`; drop table t1
 slave-bin.000001	#	Query	1	#	use `test`; create table t1 (word char(20) not null)ENGINE=MyISAM
-slave-bin.000001	#	Query	1	#	use `test`; BEGIN
 slave-bin.000001	#	Table_map	1	#	table_id: # (test.t1)
 slave-bin.000001	#	Write_rows	1	#	table_id: # flags: STMT_END_F
-slave-bin.000001	#	Query	1	#	use `test`; COMMIT
 slave-bin.000001	#	Query	1	#	use `test`; create table t3 (a int)ENGINE=MyISAM
 slave-bin.000001	#	Rotate	2	#	slave-bin.000002;pos=4
 show binlog events in 'slave-bin.000002' from 4;
 Log_name	Pos	Event_type	Server_id	End_log_pos	Info
 slave-bin.000002	#	Format_desc	2	#	Server ver: VERSION, Binlog ver: 4
 slave-bin.000002	#	Query	1	#	use `test`; create table t2 (n int)ENGINE=MyISAM
-slave-bin.000002	#	Query	1	#	use `test`; BEGIN
 slave-bin.000002	#	Table_map	1	#	table_id: # (test.t2)
 slave-bin.000002	#	Write_rows	1	#	table_id: # flags: STMT_END_F
-slave-bin.000002	#	Query	1	#	use `test`; COMMIT
 SHOW SLAVE STATUS;
 Slave_IO_State	#
 Master_Host	127.0.0.1
@@ -251,7 +235,7 @@ Master_User	root
 Master_Port	MASTER_PORT
 Connect_Retry	1
 Master_Log_File	master-bin.000002
-Read_Master_Log_Pos	516
+Read_Master_Log_Pos	#
 Relay_Log_File	#
 Relay_Log_Pos	#
 Relay_Master_Log_File	master-bin.000002
@@ -266,7 +250,7 @@ Replicate_Wild_Ignore_Table	
 Last_Errno	0
 Last_Error	
 Skip_Counter	0
-Exec_Master_Log_Pos	516
+Exec_Master_Log_Pos	#
 Relay_Log_Space	#
 Until_Condition	None
 Until_Log_File	
@@ -301,14 +285,10 @@ insert into t1 values (NULL, last_insert
 show binlog events from <binlog_start>;
 Log_name	Pos	Event_type	Server_id	End_log_pos	Info
 master-bin.000001	#	Query	#	#	use `test`; create table t1(a int auto_increment primary key, b int)
-master-bin.000001	#	Query	#	#	use `test`; BEGIN
 master-bin.000001	#	Table_map	#	#	table_id: # (test.t1)
 master-bin.000001	#	Write_rows	#	#	table_id: # flags: STMT_END_F
-master-bin.000001	#	Query	#	#	use `test`; COMMIT
-master-bin.000001	#	Query	#	#	use `test`; BEGIN
 master-bin.000001	#	Table_map	#	#	table_id: # (test.t1)
 master-bin.000001	#	Write_rows	#	#	table_id: # flags: STMT_END_F
-master-bin.000001	#	Query	#	#	use `test`; COMMIT
 select * from t1;
 a	b
 1	1

=== modified file 'mysql-test/suite/rpl/r/rpl_row_log_innodb.result'
--- a/mysql-test/suite/rpl/r/rpl_row_log_innodb.result	2009-02-02 11:44:18 +0000
+++ b/mysql-test/suite/rpl/r/rpl_row_log_innodb.result	2009-05-13 01:57:17 +0000
@@ -251,7 +251,7 @@ Master_User	root
 Master_Port	MASTER_PORT
 Connect_Retry	1
 Master_Log_File	master-bin.000002
-Read_Master_Log_Pos	474
+Read_Master_Log_Pos	#
 Relay_Log_File	#
 Relay_Log_Pos	#
 Relay_Master_Log_File	master-bin.000002
@@ -266,7 +266,7 @@ Replicate_Wild_Ignore_Table	
 Last_Errno	0
 Last_Error	
 Skip_Counter	0
-Exec_Master_Log_Pos	474
+Exec_Master_Log_Pos	#
 Relay_Log_Space	#
 Until_Condition	None
 Until_Log_File	
@@ -301,14 +301,10 @@ insert into t1 values (NULL, last_insert
 show binlog events from <binlog_start>;
 Log_name	Pos	Event_type	Server_id	End_log_pos	Info
 master-bin.000001	#	Query	#	#	use `test`; create table t1(a int auto_increment primary key, b int)
-master-bin.000001	#	Query	#	#	use `test`; BEGIN
 master-bin.000001	#	Table_map	#	#	table_id: # (test.t1)
 master-bin.000001	#	Write_rows	#	#	table_id: # flags: STMT_END_F
-master-bin.000001	#	Query	#	#	use `test`; COMMIT
-master-bin.000001	#	Query	#	#	use `test`; BEGIN
 master-bin.000001	#	Table_map	#	#	table_id: # (test.t1)
 master-bin.000001	#	Write_rows	#	#	table_id: # flags: STMT_END_F
-master-bin.000001	#	Query	#	#	use `test`; COMMIT
 select * from t1;
 a	b
 1	1

=== modified file 'mysql-test/suite/rpl/r/rpl_stm_flsh_tbls.result'
--- a/mysql-test/suite/rpl/r/rpl_stm_flsh_tbls.result	2008-12-12 11:34:18 +0000
+++ b/mysql-test/suite/rpl/r/rpl_stm_flsh_tbls.result	2009-05-13 01:57:17 +0000
@@ -12,14 +12,26 @@ create table t4 (a int);
 insert into t4 select * from t3;
 rename table t1 to t5, t2 to t1;
 flush no_write_to_binlog tables;
-SHOW BINLOG EVENTS FROM 656 ;
+show binlog events from <binlog_start>;
 Log_name	Pos	Event_type	Server_id	End_log_pos	Info
+master-bin.000001	#	Query	1	#	use `test`; create table t1 (a int)
+master-bin.000001	#	Query	1	#	use `test`; insert into t1 values (10)
+master-bin.000001	#	Query	1	#	use `test`; create table t2 (a int)
+master-bin.000001	#	Query	1	#	use `test`; create table t3 (a int) engine=merge union(t1)
+master-bin.000001	#	Query	1	#	use `test`; create table t4 (a int)
+master-bin.000001	#	Query	1	#	use `test`; insert into t4 select * from t3
 master-bin.000001	#	Query	1	#	use `test`; rename table t1 to t5, t2 to t1
 select * from t3;
 a
 flush tables;
-SHOW BINLOG EVENTS FROM 656 ;
+show binlog events from <binlog_start>;
 Log_name	Pos	Event_type	Server_id	End_log_pos	Info
+master-bin.000001	#	Query	1	#	use `test`; create table t1 (a int)
+master-bin.000001	#	Query	1	#	use `test`; insert into t1 values (10)
+master-bin.000001	#	Query	1	#	use `test`; create table t2 (a int)
+master-bin.000001	#	Query	1	#	use `test`; create table t3 (a int) engine=merge union(t1)
+master-bin.000001	#	Query	1	#	use `test`; create table t4 (a int)
+master-bin.000001	#	Query	1	#	use `test`; insert into t4 select * from t3
 master-bin.000001	#	Query	1	#	use `test`; rename table t1 to t5, t2 to t1
 master-bin.000001	#	Query	1	#	use `test`; flush tables
 select * from t3;

=== modified file 'mysql-test/suite/rpl/r/rpl_stm_log.result'
--- a/mysql-test/suite/rpl/r/rpl_stm_log.result	2009-03-16 08:21:29 +0000
+++ b/mysql-test/suite/rpl/r/rpl_stm_log.result	2009-05-13 01:57:17 +0000
@@ -233,7 +233,7 @@ Master_User	root
 Master_Port	MASTER_PORT
 Connect_Retry	1
 Master_Log_File	master-bin.000002
-Read_Master_Log_Pos	392
+Read_Master_Log_Pos	#
 Relay_Log_File	#
 Relay_Log_Pos	#
 Relay_Master_Log_File	master-bin.000002
@@ -248,7 +248,7 @@ Replicate_Wild_Ignore_Table	
 Last_Errno	0
 Last_Error	
 Skip_Counter	0
-Exec_Master_Log_Pos	392
+Exec_Master_Log_Pos	#
 Relay_Log_Space	#
 Until_Condition	None
 Until_Log_File	

=== modified file 'mysql-test/suite/rpl/t/disabled.def'
--- a/mysql-test/suite/rpl/t/disabled.def	2009-04-15 11:43:17 +0000
+++ b/mysql-test/suite/rpl/t/disabled.def	2009-05-13 01:57:17 +0000
@@ -11,3 +11,5 @@
 ##############################################################################
 
 rpl_cross_version      : BUG#42311 2009-03-27 joro rpl_cross_version fails on macosx
+rpl_start_stop_slave   : Redesign it.
+rpl_slave_skip         : Redesign it.

=== modified file 'mysql-test/suite/rpl/t/rpl_empty_master_crash.test'
--- a/mysql-test/suite/rpl/t/rpl_empty_master_crash.test	2007-06-27 12:29:10 +0000
+++ b/mysql-test/suite/rpl/t/rpl_empty_master_crash.test	2009-05-13 01:57:17 +0000
@@ -1,6 +1,6 @@
 source include/master-slave.inc;
 
-source include/show_slave_status.inc;
+source include/show_slave_status2.inc;
 
 #
 # Load table should not succeed on the master as this is not a slave

=== modified file 'mysql-test/suite/rpl/t/rpl_loaddata_fatal.test'
--- a/mysql-test/suite/rpl/t/rpl_loaddata_fatal.test	2007-12-12 17:19:24 +0000
+++ b/mysql-test/suite/rpl/t/rpl_loaddata_fatal.test	2009-05-13 01:57:17 +0000
@@ -8,7 +8,7 @@ connection master;
 CREATE TABLE t1 (a INT, b INT);
 INSERT INTO t1 VALUES (1,10);
 sync_slave_with_master;
-source include/show_slave_status.inc;
+source include/show_slave_status2.inc;
 
 # Now we feed it a load data infile, which should make it stop with a
 # fatal error.
@@ -17,7 +17,7 @@ LOAD DATA INFILE '../../std_data/rpl_loa
 
 connection slave;
 wait_for_slave_to_stop;
-source include/show_slave_status.inc;
+source include/show_slave_status2.inc;
 
 connection slave;
 SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1;

=== modified file 'mysql-test/suite/rpl/t/rpl_log_pos.test'
--- a/mysql-test/suite/rpl/t/rpl_log_pos.test	2008-07-10 16:09:39 +0000
+++ b/mysql-test/suite/rpl/t/rpl_log_pos.test	2009-05-13 01:57:17 +0000
@@ -22,7 +22,7 @@ source include/wait_for_slave_sql_to_sta
 source include/wait_for_slave_io_to_stop.inc;
 source include/stop_slave.inc;
 
-source include/show_slave_status.inc;
+source include/show_slave_status2.inc;
 connection master;
 source include/show_master_status.inc;
 create table if not exists t1 (n int);

=== added file 'mysql-test/suite/rpl/t/rpl_mixing_engines.test'
--- a/mysql-test/suite/rpl/t/rpl_mixing_engines.test	1970-01-01 00:00:00 +0000
+++ b/mysql-test/suite/rpl/t/rpl_mixing_engines.test	2009-05-13 01:57:17 +0000
@@ -0,0 +1,298 @@
+###################################################################################
+# This test checks if transactions that mixes transactional and non-transactional
+# tables are correctly handled. 
+#
+# In STMT and MIXED modes, statements are copied to the binary log upon
+# commit or rollback thus preserving any semantic among the statements in a
+# transaction. In RBR, changes on non-transactional tables must be directly logged
+# into the binary log while changes on transactional tables must be put into a cache
+# and moved into the binary log upon commit. The changes in the code has impact not
+# only on simple transactions but on how concurrent statements are handled,
+# creation of tables through select, updates on multiple-tables, functions and
+# triggers.
+#
+# Thus to check the behavior provided by the current code we devide the test as
+# follows:
+#
+# 1 - MIXING TRANSACTIONAL and NON-TRANSACTIONAL TABLES
+#     1.1 - NN TT
+#     1.2 - TT NN
+#     1.3 - TT NN TT
+# 2 - CONCURRENCY:
+#     2.1 - NON-TRANSACT TABLES -  SET AUTOCOMMIT = 0  | COMMIT
+#     2.2 - NON-TRANSACT TABLES -  SET AUTOCOMMIT = 1  | START - COMMIT
+# 3 - CREATING TABLES 
+# 4 - UPDATING MULTIPLE TABLES
+# 5 - FUNCTIONS AND TRIGERS
+###################################################################################
+ 
+--echo ###################################################################################
+--echo #                                   CONFIGURATION
+--echo ###################################################################################
+--source include/master-slave.inc
+--source include/have_innodb.inc
+--source include/have_binlog_format_row.inc
+
+connection master;
+
+CREATE TABLE t2 (a text, b int, c text) ENGINE = Innodb;
+CREATE TABLE t3 (a text, b int, c text) ENGINE = Innodb;
+CREATE TABLE t4 (a text, b int, c text) ENGINE = Innodb;
+
+INSERT INTO t2 VALUES("text 1", 1, "text 1"), ("text 2", 2, "text 2"), ("text 3", 3, "text 3");
+INSERT INTO t3 VALUES("text 1", 1, "text 1"), ("text 2", 2, "text 2"), ("text 3", 3, "text 3");
+INSERT INTO t4 VALUES("text 1", 1, "text 1"), ("text 2", 2, "text 2"), ("text 3", 3, "text 3");
+
+
+
+--echo ###################################################################################
+--echo #                                1 - CREATING TABLES
+--echo ###################################################################################
+connection master;
+
+CREATE TABLE t1 SELECT * FROM t2;
+CREATE TABLE t5 SELECT * FROM t2;
+
+
+
+--echo ###################################################################################
+--echo #                 2 - MIXING TRANSACTIONAL and NON-TRANSACTIONAL TABLES
+--echo ###################################################################################
+connection master;
+
+echo ***** NN TT;
+BEGIN;
+INSERT INTO t1 VALUES ("new text 4", 4, "new text 4");
+INSERT INTO t5 VALUES ("new text 4", 4, "new text 4");
+
+INSERT INTO t2 VALUES ("new text 4", 4, "new text 4");
+INSERT INTO t3 VALUES ("new text 4", 4, "new text 4");
+COMMIT;
+
+
+echo ***** TT NN;
+BEGIN;
+INSERT INTO t2 VALUES ("new text 5", 5, "new text 5");
+INSERT INTO t3 VALUES ("new text 5", 5, "new text 5");
+
+INSERT INTO t1 VALUES ("new text 5", 5, "new text 5");
+INSERT INTO t5 VALUES ("new text 5", 5, "new text 5");
+COMMIT;
+
+echo ***** TT NN TT;
+BEGIN;
+INSERT INTO t2 VALUES ("new text 6", 6, "new text 6");
+INSERT INTO t3 VALUES ("new text 6", 6, "new text 6");
+
+INSERT INTO t1 VALUES ("new text 6", 6, "new text 6");
+INSERT INTO t5 VALUES ("new text 6", 6, "new text 6");
+
+INSERT INTO t3 VALUES ("new text 7", 7, "new text 7");
+INSERT INTO t4 VALUES ("new text 7", 7, "new text 7");
+COMMIT;
+
+echo ***** TT NN;
+BEGIN;
+INSERT INTO t2 VALUES ("new text 8", 8, "new text 8");
+INSERT INTO t3 VALUES ("new text 8", 8, "new text 8");
+
+INSERT INTO t1 VALUES ("new text 8", 8, "new text 8");
+INSERT INTO t5 VALUES ("new text 8", 8, "new text 8");
+ROLLBACK;
+
+connection master;
+sync_slave_with_master;
+
+connection master;
+select * from t1;
+select * from t2;
+select * from t3;
+select * from t4;
+select * from t5;
+connection slave;
+select * from t1;
+select * from t2;
+select * from t3;
+select * from t4;
+select * from t5;
+
+
+
+--echo ###################################################################################
+--echo #                                 3 - CONCURRENCY 
+--echo ###################################################################################
+connect (conn1, 127.0.0.1,root,,);
+connect (conn2, 127.0.0.1,root,,);
+
+echo ***** NON-TRANSACT TABLES -  SET AUTOCOMMIT = 0  |  COMMIT;
+connection master;
+
+INSERT INTO t1 VALUES ("new text 9", 9, "");
+INSERT INTO t1 VALUES ("new text 10", 10, "");
+
+echo ***** conn1: begin;
+connection conn1;
+SET AUTOCOMMIT= 0;
+
+echo ***** conn2: begin and update t1;
+connection conn2;
+SET AUTOCOMMIT= 0;
+UPDATE t1 SET a = "new text 11" WHERE b = 9;
+
+echo ***** conn1: delete from t1 and commit;
+connection conn1;
+DELETE FROM t1 WHERE b = 9;
+DELETE FROM t1 WHERE b = 10;
+COMMIT;
+
+echo ***** conn2: commit;
+connection conn2;
+COMMIT;
+
+connection master;
+sync_slave_with_master;
+
+connection master;
+select * from t1;
+connection slave;
+select * from t1;
+
+echo ***** NON-TRANSACT TABLES -  SET AUTOCOMMIT = 1 | START - COMMIT;
+connection master;
+INSERT INTO t1 VALUES ("new text 12", 12, "");
+INSERT INTO t1 VALUES ("new text 13", 13, "");
+
+echo ***** conn1: begin;
+connection conn1;
+SET AUTOCOMMIT= 1;
+BEGIN;
+
+echo ***** conn2: begin and update t1;
+connection conn2;
+SET AUTOCOMMIT= 1;
+BEGIN;
+UPDATE t1 SET a = "new text 14" WHERE b = 12;
+
+echo ***** conn1: delete from t1 and commit;
+connection conn1;
+DELETE FROM t1 WHERE b = 12;
+DELETE FROM t1 WHERE b = 13;
+COMMIT;
+
+echo ***** conn2: commit;
+connection conn2;
+COMMIT;
+
+connection master;
+sync_slave_with_master;
+
+connection master;
+select * from t1;
+connection slave;
+select * from t1;
+
+
+
+--echo ###################################################################################
+--echo #                          4 - UPDATING MULTIPLE TABLES
+--echo ###################################################################################
+connection master;
+--echo ***** NN TT;
+UPDATE t1,t5,t2,t3 SET t1.a= "new text 4", t5.a = "new text 4", t2.a = "new text 4", t3.a = "new text 4";
+--echo ***** TT NN;
+UPDATE t2,t3,t1,t5 SET t2.a= "new text 5", t3.a = "new text 5", t1.a = "new text 2", t5.a = "new text 2";
+--echo ***** TT NN TT;
+UPDATE t2,t3,t1,t5,t4 SET t2.a= "new text 6", t3.a = "new text 6", t1.a = "new text 6", t5.a = "new text 6", t4.a = "new text 6";
+
+sync_slave_with_master;
+
+connection master;
+
+--exec $MYSQL_DUMP --compact --order-by-primary --skip-extended-insert --no-create-info test > $MYSQLTEST_VARDIR/tmp/test-master.sql
+--exec $MYSQL_DUMP_SLAVE --compact --order-by-primary --skip-extended-insert --no-create-info test > $MYSQLTEST_VARDIR/tmp/test-slave.sql
+--diff_files $MYSQLTEST_VARDIR/tmp/test-master.sql $MYSQLTEST_VARDIR/tmp/test-slave.sql
+
+
+
+--echo ###################################################################################
+--echo #                               5 - FUNCTIONS AND TRIGGERS
+--echo ###################################################################################
+connection master;
+DELIMITER |;
+
+CREATE FUNCTION f1 () RETURNS VARCHAR(64)
+BEGIN
+  RETURN UUID();
+END|
+
+CREATE FUNCTION f2 () RETURNS VARCHAR(64)
+BEGIN
+  RETURN f1();
+END|
+
+CREATE PROCEDURE pc3 (IN x INT, IN y VARCHAR(64))
+BEGIN
+  INSERT IGNORE INTO t3 VALUES (y,x,x);
+END|
+
+CREATE TRIGGER tr3_i BEFORE INSERT ON t3 FOR EACH ROW
+BEGIN
+  INSERT INTO t4 VALUES (NEW.a, NEW.b, NEW.c);
+  INSERT INTO t5 VALUES (NEW.a, NEW.b, NEW.c);
+  INSERT INTO t5 VALUES (NEW.a, NEW.b, NEW.c);
+  INSERT INTO t2 VALUES (NEW.a, NEW.b, NEW.c);
+  INSERT INTO t4 VALUES (NEW.a, NEW.b, NEW.c);
+END|
+
+DELIMITER ;|
+
+let $i= 1;
+
+while (`select $i >= 0`)
+{
+  INSERT INTO t3 VALUES ("new text 15", 15, '');
+  INSERT INTO t3 VALUES("new text 16", 16, f1());
+  CALL pc3(6, UUID());
+  INSERT INTO t3 VALUES(17, 17, f2());
+
+  sync_slave_with_master;
+
+  connection master;
+
+  --exec $MYSQL_DUMP --compact --order-by-primary --skip-extended-insert --no-create-info test > $MYSQLTEST_VARDIR/tmp/test-master.sql
+  --exec $MYSQL_DUMP_SLAVE --compact --order-by-primary --skip-extended-insert --no-create-info test > $MYSQLTEST_VARDIR/tmp/test-slave.sql
+  --diff_files $MYSQLTEST_VARDIR/tmp/test-master.sql $MYSQLTEST_VARDIR/tmp/test-slave.sql
+
+  DELETE FROM t1;
+  DELETE FROM t2;
+  DELETE FROM t3;
+  DELETE FROM t4;
+  DELETE FROM t5;
+
+  sync_slave_with_master;
+
+  connection master;
+
+  dec $i;
+}
+
+
+
+--echo ###################################################################################
+--echo #                                        CLEAN
+--echo ###################################################################################
+
+connection master;
+DROP TABLE t1;
+DROP TABLE t2;
+DROP TABLE t3;
+DROP TABLE t4;
+DROP TABLE t5;
+DROP PROCEDURE pc3;
+DROP FUNCTION f1;
+DROP FUNCTION f2;
+
+sync_slave_with_master;
+
+disconnect conn1;
+disconnect conn2;

=== modified file 'mysql-test/suite/rpl/t/rpl_row_basic_11bugs.test'
--- a/mysql-test/suite/rpl/t/rpl_row_basic_11bugs.test	2007-12-12 10:14:59 +0000
+++ b/mysql-test/suite/rpl/t/rpl_row_basic_11bugs.test	2009-05-13 01:57:17 +0000
@@ -1,4 +1,5 @@
 --source include/have_binlog_format_row.inc
+--source include/have_innodb.inc
 
 let $SERVER_VERSION=`select version()`;
 

=== modified file 'mysql-test/suite/rpl/t/rpl_row_flsh_tbls.test'
--- a/mysql-test/suite/rpl/t/rpl_row_flsh_tbls.test	2008-03-28 12:16:41 +0000
+++ b/mysql-test/suite/rpl/t/rpl_row_flsh_tbls.test	2009-05-13 01:57:17 +0000
@@ -1,8 +1,6 @@
 # depends on the binlog output
 -- source include/have_binlog_format_row.inc
 
-let $rename_event_pos= 897;
-
 # Bug#18326: Do not lock table for writing during prepare of statement
 # The use of the ps protocol causes extra table maps in the binlog, so
 # we disable the ps-protocol for this statement.

=== modified file 'mysql-test/suite/rpl/t/rpl_row_until.test'
--- a/mysql-test/suite/rpl/t/rpl_row_until.test	2009-02-19 20:29:12 +0000
+++ b/mysql-test/suite/rpl/t/rpl_row_until.test	2009-05-13 01:57:17 +0000
@@ -14,18 +14,21 @@ INSERT INTO t1 VALUES (1),(2),(3),(4);
 DROP TABLE t1;
 # Save master log postion for query DROP TABLE t1
 save_master_pos;
-let $master_pos_drop_t1= query_get_value(SHOW BINLOG EVENTS, Pos, 7);
+let $master_pos_drop_t1= query_get_value(SHOW BINLOG EVENTS, Pos, 5);
+#show binlog events;
 
 CREATE TABLE t2(n INT NOT NULL AUTO_INCREMENT PRIMARY KEY);
 # Save master log postion for query CREATE TABLE t2
 save_master_pos;
-let $master_pos_create_t2= query_get_value(SHOW BINLOG EVENTS, Pos, 8);
+let $master_pos_create_t2= query_get_value(SHOW BINLOG EVENTS, Pos, 6);
+#show binlog events;
 
 INSERT INTO t2 VALUES (1),(2);
 save_master_pos;
 # Save master log postion for query INSERT INTO t2 VALUES (1),(2);
-let $master_pos_insert1_t2= query_get_value(SHOW BINLOG EVENTS, End_log_pos, 12);
+let $master_pos_insert1_t2= query_get_value(SHOW BINLOG EVENTS, End_log_pos, 8);
 sync_slave_with_master;
+#show binlog events;
 
 # Save relay log postion for query INSERT INTO t2 VALUES (1),(2);
 let $relay_pos_insert1_t2= query_get_value(show slave status, Relay_Log_Pos, 1);
@@ -34,8 +37,9 @@ connection master;
 INSERT INTO t2 VALUES (3),(4);
 DROP TABLE t2;
 # Save master log postion for query INSERT INTO t2 VALUES (1),(2);
-let $master_pos_drop_t2= query_get_value(SHOW BINLOG EVENTS, End_log_pos, 17);
+let $master_pos_drop_t2= query_get_value(SHOW BINLOG EVENTS, End_log_pos, 11);
 sync_slave_with_master;
+#show binlog events;
 
 --source include/stop_slave.inc
 # Reset slave.
@@ -45,6 +49,7 @@ eval CHANGE MASTER TO MASTER_USER='root'
 --enable_query_log
 
 # Try to replicate all queries until drop of t1
+
 connection slave;
 echo START SLAVE UNTIL MASTER_LOG_FILE='master-bin.000001', MASTER_LOG_POS=master_pos_drop_t1;
 --disable_query_log

=== modified file 'mysql-test/suite/rpl/t/rpl_slave_skip.test'
--- a/mysql-test/suite/rpl/t/rpl_slave_skip.test	2009-01-23 12:22:05 +0000
+++ b/mysql-test/suite/rpl/t/rpl_slave_skip.test	2009-05-13 01:57:17 +0000
@@ -26,7 +26,7 @@ save_master_pos;
 connection slave;
 
 # Stop when reaching the the first table map event.
-START SLAVE UNTIL MASTER_LOG_FILE='master-bin.000001', MASTER_LOG_POS=762;
+START SLAVE UNTIL MASTER_LOG_FILE='master-bin.000001', MASTER_LOG_POS=292;
 wait_for_slave_to_stop;
 --replace_result $MASTER_MYPORT MASTER_PORT
 --replace_column 1 # 8 # 9 # 23 # 33 # 35 # 36 #
@@ -58,7 +58,7 @@ save_master_pos;
 source include/show_binlog_events.inc;
 
 connection slave;
-START SLAVE UNTIL MASTER_LOG_FILE='master-bin.000001', MASTER_LOG_POS=106;
+START SLAVE UNTIL MASTER_LOG_FILE='master-bin.000001', MASTER_LOG_POS=199;
 wait_for_slave_to_stop;
 SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
 START SLAVE;

=== modified file 'mysql-test/suite/rpl/t/rpl_stm_flsh_tbls.test'
--- a/mysql-test/suite/rpl/t/rpl_stm_flsh_tbls.test	2007-06-27 12:28:02 +0000
+++ b/mysql-test/suite/rpl/t/rpl_stm_flsh_tbls.test	2009-05-13 01:57:17 +0000
@@ -1,7 +1,6 @@
 # depends on the binlog output
 --source include/have_binlog_format_mixed_or_statement.inc
 
-let $rename_event_pos= 656;
 -- source extra/rpl_tests/rpl_flsh_tbls.test
 
 # End of 4.1 tests

=== modified file 'sql/handler.cc'
--- a/sql/handler.cc	2009-03-27 09:34:24 +0000
+++ b/sql/handler.cc	2009-05-13 01:57:17 +0000
@@ -4427,7 +4427,7 @@ static bool check_table_binlog_row_based
    to the binary log.
 
    SYNOPSIS
-     write_locked_table_maps()
+     set_locked_table_maps()
        thd     Pointer to THD structure
 
    DESCRIPTION
@@ -4445,9 +4445,9 @@ static bool check_table_binlog_row_based
        THD::locked_tables
 */
 
-static int write_locked_table_maps(THD *thd)
+static int set_locked_table_maps(THD *thd, TABLE *current_table)
 {
-  DBUG_ENTER("write_locked_table_maps");
+  DBUG_ENTER("set_locked_table_maps");
   DBUG_PRINT("enter", ("thd: 0x%lx  thd->lock: 0x%lx  thd->locked_tables: 0x%lx  "
                        "thd->extra_lock: 0x%lx",
                        (long) thd, (long) thd->lock,
@@ -4457,6 +4457,7 @@ static int write_locked_table_maps(THD *
 
   if (thd->get_binlog_table_maps() == 0)
   {
+    DBUG_PRINT("info", ("Grouping table"));
     MYSQL_LOCK *locks[3];
     locks[0]= thd->extra_lock;
     locks[1]= thd->lock;
@@ -4473,12 +4474,13 @@ static int write_locked_table_maps(THD *
            ++table_ptr)
       {
         TABLE *const table= *table_ptr;
-        DBUG_PRINT("info", ("Checking table %s", table->s->table_name.str));
+        bool has_trans= table->file->has_transactions();
         if (table->current_lock == F_WRLCK &&
-            check_table_binlog_row_based(thd, table))
+            check_table_binlog_row_based(thd, table) &&
+            has_trans)
         {
-          int const has_trans= table->file->has_transactions();
-          int const error= thd->binlog_write_table_map(table, has_trans);
+          DBUG_PRINT("info", ("Table %s", table->s->table_name.str));
+          int const error= thd->binlog_set_trx_pending_table_map_events(table);
           /*
             If an error occurs, it is the responsibility of the caller to
             roll back the transaction.
@@ -4489,6 +4491,21 @@ static int write_locked_table_maps(THD *
       }
     }
   }
+
+  if (!current_table->file->has_transactions())
+  {
+    if (current_table->current_lock == F_WRLCK &&
+        check_table_binlog_row_based(thd, current_table))
+    {
+      int const has_trans= thd->lex->sql_command == SQLCOM_CREATE_TABLE;
+      int const error= 
+        (has_trans ?
+         thd->binlog_set_trx_pending_table_map_events(current_table) :
+         thd->binlog_set_notrx_pending_table_map_events(current_table));
+      if (unlikely(error))
+        DBUG_RETURN(1);
+    }
+  }
   DBUG_RETURN(0);
 }
 
@@ -4525,8 +4542,11 @@ static int binlog_log_row(TABLE* table,
                                     FALSE))))
     {
       bitmap_set_all(&cols);
-      if (likely(!(error= write_locked_table_maps(thd))))
-        error= (*log_func)(thd, table, table->file->has_transactions(),
+
+      bool is_trans= thd->lex->sql_command == SQLCOM_CREATE_TABLE ||
+                     table->file->has_transactions();
+      if (likely(!(error= set_locked_table_maps(thd, table))))
+        error= (*log_func)(thd, table, is_trans,
                            &cols, table->s->fields,
                            before_record, after_record);
 

=== modified file 'sql/log.cc'
--- a/sql/log.cc	2009-04-09 15:25:25 +0000
+++ b/sql/log.cc	2009-05-13 01:57:17 +0000
@@ -153,36 +153,136 @@ private:
 class binlog_trx_data {
 public:
   binlog_trx_data()
-    : at_least_one_stmt(0), m_pending(0), before_stmt_pos(MY_OFF_T_UNDEF)
+    : at_least_one_stmt(0), trx_row_pending(0), notrx_row_pending(0), map_pos(0),
+    before_stmt_pos(MY_OFF_T_UNDEF)
   {
     trans_log.end_of_file= max_binlog_cache_size;
+    valid= TRUE;
+    if (!(notrx_map_pending= (Table_map_log_event **)
+          my_malloc(sizeof(notrx_map_pending) * MAX_TABLE_MAP_ENTRIES,
+                    MYF(MY_WME))))
+    { 
+      valid= FALSE;
+      return;
+    }
+    memset(notrx_map_pending, 0, sizeof(notrx_map_pending) * MAX_TABLE_MAP_ENTRIES);
   }
 
   ~binlog_trx_data()
   {
-    DBUG_ASSERT(pending() == NULL);
+    DBUG_ASSERT(notrx_empty_maps());
+    DBUG_ASSERT(notrx_empty_rows());
+    DBUG_ASSERT(trx_empty_rows());
+    my_free((uchar*)notrx_map_pending, MYF(MY_ALLOW_ZERO_PTR));
     close_cached_file(&trans_log);
   }
 
-  my_off_t position() const {
-    return my_b_tell(&trans_log);
+  bool is_valid()
+  {
+    return valid;
+  }
+
+  bool trx_empty_rows() const
+  {
+    return trx_pending_rows() == NULL && my_b_tell(&trans_log) == 0;
+  }
+
+  Rows_log_event *trx_pending_rows() const
+  {
+    return trx_row_pending;
+  }
+
+  void trx_set_pending_rows(Rows_log_event *const pending)
+  {
+    trx_row_pending= pending;
   }
 
-  bool empty() const
+  bool notrx_empty_rows() const
   {
-    return pending() == NULL && my_b_tell(&trans_log) == 0;
+    return notrx_pending_rows() == NULL && notrx_empty_maps();
+  }
+
+  Rows_log_event *notrx_pending_rows() const
+  {
+    return notrx_row_pending;
+  }
+
+  void notrx_set_pending_rows(Rows_log_event *const pending)
+  {
+    notrx_row_pending= pending;
+  }
+
+  bool notrx_empty_maps() const
+  {
+    return (map_pos == 0);
+  }
+
+  int notrx_pending_maps(Table_map_log_event ***maps) const
+  {
+    *maps= notrx_map_pending;
+    return map_pos;
+  }
+
+  bool notrx_is_pending_map(ulong id)
+  {
+    for (int map= 0; map < map_pos; map++)
+    {
+      if (notrx_map_pending[map]->get_table_id() == id)
+        return (TRUE);
+    }
+    return (FALSE);
+  }
+
+  bool notrx_add_pending_maps(Table_map_log_event *pending)
+  {
+    if (map_pos >= MAX_TABLE_MAP_ENTRIES) 
+      return FALSE;
+   
+    notrx_map_pending[map_pos]= pending;
+    map_pos++;
+    return TRUE;
+  }
+
+  void notrx_clear_pending_maps()
+  {
+    for (; map_pos > 0; map_pos--)
+    {
+      delete notrx_map_pending[map_pos];
+      notrx_map_pending[map_pos]= 0;
+    }
+  }
+
+  my_off_t trx_position() const {
+    return my_b_tell(&trans_log);
+  }
+
+  /*
+    Reset the entire contents of the transaction cache, emptying it
+    completely.
+   */
+  void trx_reset() {
+    if (!trx_empty_rows())
+      trx_truncate(0);
+    before_stmt_pos= MY_OFF_T_UNDEF;
+    trans_log.end_of_file= max_binlog_cache_size;
+    DBUG_ASSERT(trx_empty_rows());
+    /*
+      TODO: Alfranio... We need to re-enable this.
+    */ 
+    //DBUG_ASSERT(notrx_empty_maps());
+    //DBUG_ASSERT(notrx_empty_rows());
   }
 
   /*
     Truncate the transaction cache to a certain position. This
-    includes deleting the pending event.
+    includes deleting the pending maps and event.
    */
-  void truncate(my_off_t pos)
+  void trx_truncate(my_off_t pos)
   {
     DBUG_PRINT("info", ("truncating to position %lu", (ulong) pos));
     DBUG_PRINT("info", ("before_stmt_pos=%lu", (ulong) pos));
-    delete pending();
-    set_pending(0);
+    delete trx_pending_rows();
+    trx_set_pending_rows(0);
     reinit_io_cache(&trans_log, WRITE_CACHE, pos, 0, 0);
     if (pos < before_stmt_pos)
       before_stmt_pos= MY_OFF_T_UNDEF;
@@ -198,28 +298,6 @@ public:
     at_least_one_stmt= (pos > 0);
   }
 
-  /*
-    Reset the entire contents of the transaction cache, emptying it
-    completely.
-   */
-  void reset() {
-    if (!empty())
-      truncate(0);
-    before_stmt_pos= MY_OFF_T_UNDEF;
-    trans_log.end_of_file= max_binlog_cache_size;
-    DBUG_ASSERT(empty());
-  }
-
-  Rows_log_event *pending() const
-  {
-    return m_pending;
-  }
-
-  void set_pending(Rows_log_event *const pending)
-  {
-    m_pending= pending;
-  }
-
   IO_CACHE trans_log;                         // The transaction cache
 
   /**
@@ -233,13 +311,18 @@ private:
     Pending binrows event. This event is the event where the rows are
     currently written.
    */
-  Rows_log_event *m_pending;
+  Rows_log_event *trx_row_pending;
+  Rows_log_event *notrx_row_pending;
+  Table_map_log_event **notrx_map_pending;
+  int map_pos;
+  bool valid;
 
 public:
   /*
     Binlog position before the start of the current statement.
   */
   my_off_t before_stmt_pos;
+  static int const MAX_TABLE_MAP_ENTRIES= 2000;
 };
 
 handlerton *binlog_hton;
@@ -1276,7 +1359,7 @@ binlog_trans_log_savepos(THD *thd, my_of
   binlog_trx_data *const trx_data=
     (binlog_trx_data*) thd_get_ha_data(thd, binlog_hton);
   DBUG_ASSERT(mysql_bin_log.is_open());
-  *pos= trx_data->position();
+  *pos= trx_data->trx_position();
   DBUG_PRINT("return", ("*pos: %lu", (ulong) *pos));
   DBUG_VOID_RETURN;
 }
@@ -1309,7 +1392,7 @@ binlog_trans_log_truncate(THD *thd, my_o
 
   binlog_trx_data *const trx_data=
     (binlog_trx_data*) thd_get_ha_data(thd, binlog_hton);
-  trx_data->truncate(pos);
+  trx_data->trx_truncate(pos);
   DBUG_VOID_RETURN;
 }
 
@@ -1340,7 +1423,9 @@ static int binlog_close_connection(handl
 {
   binlog_trx_data *const trx_data=
     (binlog_trx_data*) thd_get_ha_data(thd, binlog_hton);
-  DBUG_ASSERT(trx_data->empty());
+  DBUG_ASSERT(trx_data->trx_empty_rows());
+  DBUG_ASSERT(trx_data->notrx_empty_maps());
+  DBUG_ASSERT(trx_data->notrx_empty_rows());
   thd_set_ha_data(thd, binlog_hton, NULL);
   trx_data->~binlog_trx_data();
   my_free((uchar*)trx_data, MYF(0));
@@ -1384,6 +1469,11 @@ binlog_end_trans(THD *thd, binlog_trx_da
                       FLAGSTR(thd->options, OPTION_BEGIN)));
 
   /*
+    TODO: Alfranio... We need to check if we really need this.
+    thd->binlog_flush_notrx_pending_rows_event(TRUE);
+  */ 
+
+  /*
     NULL denotes ROLLBACK with nothing to replicate: i.e., rollback of
     only transactional tables.  If the transaction contain changes to
     any non-transactiona tables, we need write the transaction and log
@@ -1391,7 +1481,7 @@ binlog_end_trans(THD *thd, binlog_trx_da
   */
   if (end_ev != NULL)
   {
-    thd->binlog_flush_pending_rows_event(TRUE);
+    thd->binlog_flush_trx_pending_rows_event(TRUE);
     /*
       Doing a commit or a rollback including non-transactional tables,
       i.e., ending a transaction where we might write the transaction
@@ -1403,7 +1493,7 @@ binlog_end_trans(THD *thd, binlog_trx_da
       inside a stored function.
      */
     error= mysql_bin_log.write(thd, &trx_data->trans_log, end_ev);
-    trx_data->reset();
+    trx_data->trx_reset();
 
     /*
       We need to step the table map version after writing the
@@ -1426,11 +1516,11 @@ binlog_end_trans(THD *thd, binlog_trx_da
       If rolling back a statement in a transaction, we truncate the
       transaction cache to remove the statement.
      */
-    thd->binlog_remove_pending_rows_event(TRUE);
+    thd->binlog_remove_trx_pending_rows_event(TRUE);
     if (all || !(thd->options & (OPTION_BEGIN | OPTION_NOT_AUTOCOMMIT)))
-      trx_data->reset();
+      trx_data->trx_reset();
     else                                        // ...statement
-      trx_data->truncate(trx_data->before_stmt_pos);
+      trx_data->trx_truncate(trx_data->before_stmt_pos);
 
     /*
       We need to step the table map version on a rollback to ensure
@@ -1440,7 +1530,7 @@ binlog_end_trans(THD *thd, binlog_trx_da
     mysql_bin_log.update_table_map_version();
   }
 
-  DBUG_ASSERT(thd->binlog_get_pending_rows_event() == NULL);
+  DBUG_ASSERT(thd->binlog_get_trx_pending_rows_event() == NULL);
   DBUG_RETURN(error);
 }
 
@@ -1472,13 +1562,28 @@ static int binlog_commit(handlerton *hto
 {
   int error= 0;
   DBUG_ENTER("binlog_commit");
+
   binlog_trx_data *const trx_data=
     (binlog_trx_data*) thd_get_ha_data(thd, binlog_hton);
+  ulonglong const in_transaction=
+    thd->options & (OPTION_NOT_AUTOCOMMIT | OPTION_BEGIN);
+
+  DBUG_PRINT("debug",
+             ("all: %d, in_transaction: %s, all.modified_non_trans_table: %s, "
+              "stmt.modified_non_trans_table: %s",
+              all,
+              YESNO(in_transaction),
+              YESNO(thd->transaction.all.modified_non_trans_table),
+              YESNO(thd->transaction.stmt.modified_non_trans_table)));
+
+  thd->binlog_flush_notrx_pending_rows_event(TRUE);
 
-  if (trx_data->empty())
+  if (trx_data->trx_empty_rows())
   {
-    // we're here because trans_log was flushed in MYSQL_BIN_LOG::log_xid()
-    trx_data->reset();
+    /* 
+      we're here because trans_log was flushed in MYSQL_BIN_LOG::log_xid()
+    */
+    trx_data->trx_reset();
     DBUG_RETURN(0);
   }
 
@@ -1491,15 +1596,6 @@ static int binlog_commit(handlerton *hto
 
     Otherwise, we accumulate the statement
   */
-  ulonglong const in_transaction=
-    thd->options & (OPTION_NOT_AUTOCOMMIT | OPTION_BEGIN);
-  DBUG_PRINT("debug",
-             ("all: %d, empty: %s, in_transaction: %s, all.modified_non_trans_table: %s, stmt.modified_non_trans_table: %s",
-              all,
-              YESNO(trx_data->empty()),
-              YESNO(in_transaction),
-              YESNO(thd->transaction.all.modified_non_trans_table),
-              YESNO(thd->transaction.stmt.modified_non_trans_table)));
   if (!in_transaction || all)
   {
     Query_log_event qev(thd, STRING_WITH_LEN("COMMIT"), TRUE, FALSE);
@@ -1533,44 +1629,55 @@ static int binlog_rollback(handlerton *h
 {
   DBUG_ENTER("binlog_rollback");
   int error=0;
+
   binlog_trx_data *const trx_data=
     (binlog_trx_data*) thd_get_ha_data(thd, binlog_hton);
 
-  if (trx_data->empty()) {
-    trx_data->reset();
-    DBUG_RETURN(0);
-  }
-
   DBUG_PRINT("debug", ("all: %s, all.modified_non_trans_table: %s, stmt.modified_non_trans_table: %s",
                        YESNO(all),
                        YESNO(thd->transaction.all.modified_non_trans_table),
                        YESNO(thd->transaction.stmt.modified_non_trans_table)));
-  if (all && thd->transaction.all.modified_non_trans_table ||
-      !all && thd->transaction.stmt.modified_non_trans_table ||
-      (thd->options & OPTION_KEEP_LOG))
+
+  thd->binlog_flush_notrx_pending_rows_event(TRUE);
+
+  if (trx_data->trx_empty_rows()) 
   {
-    /*
-      We write the transaction cache with a rollback last if we have
-      modified any non-transactional table. We do this even if we are
-      committing a single statement that has modified a
-      non-transactional table since it can have modified a
-      transactional table in that statement as well, which needs to be
-      rolled back on the slave.
-    */
-    Query_log_event qev(thd, STRING_WITH_LEN("ROLLBACK"), TRUE, FALSE);
-    qev.error_code= 0; // see comment in MYSQL_LOG::write(THD, IO_CACHE)
-    error= binlog_end_trans(thd, trx_data, &qev, all);
+    trx_data->trx_reset();
+    DBUG_RETURN(0);
   }
-  else if (all && !thd->transaction.all.modified_non_trans_table ||
-           !all && !thd->transaction.stmt.modified_non_trans_table)
+
+  if (thd->variables.binlog_format != BINLOG_FORMAT_ROW)
   {
-    /*
-      If we have modified only transactional tables, we can truncate
-      the transaction cache without writing anything to the binary
-      log.
-     */
-    error= binlog_end_trans(thd, trx_data, 0, all);
+    if (all && thd->transaction.all.modified_non_trans_table ||
+       !all && thd->transaction.stmt.modified_non_trans_table ||
+       (thd->options & OPTION_KEEP_LOG))
+    {
+      /*
+        We write the transaction cache with a rollback last if we have
+        modified any non-transactional table. We do this even if we are
+        committing a single statement that has modified a
+        non-transactional table since it can have modified a
+        transactional table in that statement as well, which needs to be
+        rolled back on the slave.
+      */
+      Query_log_event qev(thd, STRING_WITH_LEN("ROLLBACK"), TRUE, FALSE);
+      qev.error_code= 0; // see comment in MYSQL_LOG::write(THD, IO_CACHE)
+      error= binlog_end_trans(thd, trx_data, &qev, all);
+    }
+    else if (all && !thd->transaction.all.modified_non_trans_table ||
+             !all && !thd->transaction.stmt.modified_non_trans_table)
+    {
+      /*
+        If we have modified only transactional tables, we can truncate
+        the transaction cache without writing anything to the binary
+        log.
+      */
+      error= binlog_end_trans(thd, trx_data, 0, all);
+    }
   }
+  else 
+    error= binlog_end_trans(thd, trx_data, 0, all);
+  
   if (!all)
     trx_data->before_stmt_pos = MY_OFF_T_UNDEF; // part of the stmt rollback
   DBUG_RETURN(error);
@@ -3639,6 +3746,10 @@ int THD::binlog_setup_trx_data()
 
   trx_data= new (thd_get_ha_data(this, binlog_hton)) binlog_trx_data;
 
+  /*
+    TODO: Alfranio: We need to verify if trx_data is valid.
+  */
+
   DBUG_RETURN(0);
 }
 
@@ -3664,8 +3775,8 @@ int THD::binlog_setup_trx_data()
       We only update the saved position if the old one was undefined,
       the reason is that there are some cases (e.g., for CREATE-SELECT)
       where the position is saved twice (e.g., both in
-      select_create::prepare() and THD::binlog_write_table_map()) , but
-      we should use the first. This means that calls to this function
+      select_create::prepare() and THD::binlog_set_pending_table_map_events()),
+      but we should use the first. This means that calls to this function
       can be used to start the statement before the first table map
       event, to include some extra events.
  */
@@ -3722,10 +3833,10 @@ void THD::binlog_set_stmt_begin() {
   Write a table map to the binary log.
  */
 
-int THD::binlog_write_table_map(TABLE *table, bool is_trans)
+int THD::binlog_set_trx_pending_table_map_events(TABLE *table)
 {
   int error;
-  DBUG_ENTER("THD::binlog_write_table_map");
+  DBUG_ENTER("THD::binlog_trx_set_pending_table_map_events");
   DBUG_PRINT("enter", ("table: 0x%lx  (%s: #%lu)",
                        (long) table, table->s->table_name.str,
                        table->s->table_map_id));
@@ -3737,22 +3848,56 @@ int THD::binlog_write_table_map(TABLE *t
   Table_map_log_event::flag_set const
     flags= Table_map_log_event::TM_NO_FLAGS;
 
-  Table_map_log_event
-    the_event(this, table, table->s->table_map_id, is_trans, flags);
-
-  if (is_trans && binlog_table_maps == 0)
+  if (binlog_table_maps == 0)
     binlog_start_trans_and_stmt();
 
+  Table_map_log_event
+    the_event(this, table, table->s->table_map_id, TRUE, flags);
+
   if ((error= mysql_bin_log.write(&the_event)))
     DBUG_RETURN(error);
 
   binlog_table_maps++;
   table->s->table_map_version= mysql_bin_log.table_map_version();
+
+  DBUG_RETURN(0);
+}
+
+int THD::binlog_set_notrx_pending_table_map_events(TABLE *table)
+{
+  DBUG_ENTER("THD::binlog_set_pending_table_map_events");
+  DBUG_PRINT("enter", ("table: 0x%lx  (%s: #%lu)",
+                       (long) table, table->s->table_name.str,
+                       table->s->table_map_id));
+
+  /* Pre-conditions */
+  DBUG_ASSERT(current_stmt_binlog_row_based && mysql_bin_log.is_open());
+  DBUG_ASSERT(table->s->table_map_id != ULONG_MAX);
+
+  Table_map_log_event::flag_set const
+    flags= Table_map_log_event::TM_NO_FLAGS;
+
+  if (binlog_table_maps == 0)
+    binlog_start_trans_and_stmt();
+
+  binlog_trx_data *const trx_data=
+    (binlog_trx_data*) thd_get_ha_data(this, binlog_hton);
+
+  if (!trx_data->notrx_is_pending_map(table->s->table_map_id))
+  {
+    Table_map_log_event *the_event=
+      new Table_map_log_event(this, table, table->s->table_map_id, FALSE,
+                            flags);
+    trx_data->notrx_add_pending_maps(the_event);
+    binlog_table_maps++;
+    table->s->table_map_version= mysql_bin_log.table_map_version();
+  }
+
   DBUG_RETURN(0);
 }
 
 Rows_log_event*
-THD::binlog_get_pending_rows_event() const
+THD::binlog_get_trx_pending_rows_event() const
 {
   binlog_trx_data *const trx_data=
     (binlog_trx_data*) thd_get_ha_data(this, binlog_hton);
@@ -3762,11 +3907,25 @@ THD::binlog_get_pending_rows_event() con
     (since the trx_data is set up there). In that case, we just return
     NULL.
    */
-  return trx_data ? trx_data->pending() : NULL;
+  return trx_data ? trx_data->trx_pending_rows() : NULL;
+}
+
+Rows_log_event*
+THD::binlog_get_notrx_pending_rows_event() const
+{
+  binlog_trx_data *const trx_data=
+    (binlog_trx_data*) thd_get_ha_data(this, binlog_hton);
+  /*
+    This is less than ideal, but here's the story: If there is no
+    trx_data, prepare_pending_rows_event() has never been called
+    (since the trx_data is set up there). In that case, we just return
+    NULL.
+   */
+  return trx_data ? trx_data->notrx_pending_rows() : NULL;
 }
 
 void
-THD::binlog_set_pending_rows_event(Rows_log_event* ev)
+THD::binlog_set_trx_pending_rows_event(Rows_log_event* ev)
 {
   if (thd_get_ha_data(this, binlog_hton) == NULL)
     binlog_setup_trx_data();
@@ -3775,9 +3934,21 @@ THD::binlog_set_pending_rows_event(Rows_
     (binlog_trx_data*) thd_get_ha_data(this, binlog_hton);
 
   DBUG_ASSERT(trx_data);
-  trx_data->set_pending(ev);
+  trx_data->trx_set_pending_rows(ev);
 }
 
+void
+THD::binlog_set_notrx_pending_rows_event(Rows_log_event* ev)
+{
+  if (thd_get_ha_data(this, binlog_hton) == NULL)
+    binlog_setup_trx_data();
+
+  binlog_trx_data *const trx_data=
+    (binlog_trx_data*) thd_get_ha_data(this, binlog_hton);
+
+  DBUG_ASSERT(trx_data);
+  trx_data->notrx_set_pending_rows(ev);
+}
 
 /**
   Remove the pending rows event, discarding any outstanding rows.
@@ -3786,7 +3957,7 @@ THD::binlog_set_pending_rows_event(Rows_
   no-op.
  */
 int
-MYSQL_BIN_LOG::remove_pending_rows_event(THD *thd)
+MYSQL_BIN_LOG::remove_trx_pending_rows_event(THD *thd)
 {
   DBUG_ENTER("MYSQL_BIN_LOG::remove_pending_rows_event");
 
@@ -3795,10 +3966,10 @@ MYSQL_BIN_LOG::remove_pending_rows_event
 
   DBUG_ASSERT(trx_data);
 
-  if (Rows_log_event* pending= trx_data->pending())
+  if (Rows_log_event* pending= trx_data->trx_pending_rows())
   {
     delete pending;
-    trx_data->set_pending(NULL);
+    trx_data->trx_set_pending_rows(NULL);
   }
 
   DBUG_RETURN(0);
@@ -3810,8 +3981,8 @@ MYSQL_BIN_LOG::remove_pending_rows_event
   event.
 */
 int
-MYSQL_BIN_LOG::flush_and_set_pending_rows_event(THD *thd,
-                                                Rows_log_event* event)
+MYSQL_BIN_LOG::flush_and_set_trx_pending_rows_event(THD *thd,
+                                                    Rows_log_event* event)
 {
   DBUG_ENTER("MYSQL_BIN_LOG::flush_and_set_pending_rows_event(event)");
   DBUG_ASSERT(mysql_bin_log.is_open());
@@ -3824,18 +3995,12 @@ MYSQL_BIN_LOG::flush_and_set_pending_row
 
   DBUG_ASSERT(trx_data);
 
-  DBUG_PRINT("info", ("trx_data->pending(): 0x%lx", (long) trx_data->pending()));
+  DBUG_PRINT("info", ("trx_data->trx_pending_rows(): 0x%lx", 
+             (long) trx_data->trx_pending_rows()));
 
-  if (Rows_log_event* pending= trx_data->pending())
+  if (Rows_log_event* pending= trx_data->trx_pending_rows())
   {
-    IO_CACHE *file= &log_file;
-
-    /*
-      Decide if we should write to the log file directly or to the
-      transaction log.
-    */
-    if (pending->get_cache_stmt() || my_b_tell(&trx_data->trans_log))
-      file= &trx_data->trans_log;
+    IO_CACHE *file= &trx_data->trans_log;
 
     /*
       If we are writing to the log file directly, we could avoid
@@ -3846,15 +4011,6 @@ MYSQL_BIN_LOG::flush_and_set_pending_row
     pthread_mutex_lock(&LOCK_log);
 
     /*
-      Write pending event to log file or transaction cache
-    */
-    if (pending->write(file))
-    {
-      pthread_mutex_unlock(&LOCK_log);
-      DBUG_RETURN(1);
-    }
-
-    /*
       We step the table map version if we are writing an event
       representing the end of a statement.  We do this regardless of
       wheather we write to the transaction cache or to directly to the
@@ -3868,26 +4024,101 @@ MYSQL_BIN_LOG::flush_and_set_pending_row
 
       TODO: Find a solution so that table maps does not have to be
       written several times within a transaction.
-     */
+    */
     if (pending->get_flags(Rows_log_event::STMT_END_F))
       ++m_table_map_version;
 
+    /*
+      Write pending event to log file or transaction cache
+    */
+    if (pending->write(file))
+    {
+      pthread_mutex_unlock(&LOCK_log);
+      DBUG_RETURN(1);
+    }
+
     delete pending;
 
-    if (file == &log_file)
+    pthread_mutex_unlock(&LOCK_log);
+  }
+
+  thd->binlog_set_trx_pending_rows_event(event);
+
+  DBUG_RETURN(error);
+}
+
+int
+MYSQL_BIN_LOG::flush_and_set_notrx_pending_rows_event(THD *thd,
+                                                      Rows_log_event* event)
+{
+  DBUG_ENTER("MYSQL_BIN_LOG::flush_and_set_pending_rows_event(event)");
+  DBUG_ASSERT(mysql_bin_log.is_open());
+  DBUG_PRINT("enter", ("event: 0x%lx", (long) event));
+
+  int error= 0;
+
+  binlog_trx_data *const trx_data=
+    (binlog_trx_data*) thd_get_ha_data(thd, binlog_hton);
+
+  DBUG_ASSERT(trx_data);
+
+  DBUG_PRINT("info", ("trx_data->notrx_pending_rows(): 0x%lx", 
+             (long) trx_data->notrx_pending_rows()));
+
+  if (Rows_log_event* pending= trx_data->notrx_pending_rows())
+  {
+    IO_CACHE *file= &log_file;
+
+    /*
+      If we are writing to the log file directly, we could avoid
+      locking the log. This does not work since we need to step the
+      m_table_map_version below, and that change has to be protected
+      by the LOCK_log mutex.
+    */
+    pthread_mutex_lock(&LOCK_log);
+
+    int pos_map;
+    Table_map_log_event **maps;
+    int tot_maps= trx_data->notrx_pending_maps(&maps);
+    for (pos_map= 0; pos_map < tot_maps; pos_map++)
     {
-      error= flush_and_sync();
-      if (!error)
-      {
-        signal_update();
-        rotate_and_purge(RP_LOCK_LOG_IS_ALREADY_LOCKED);
-      }
+      maps[pos_map]->write(file);
+    }
+    trx_data->notrx_clear_pending_maps();
+
+    /*
+      The comment above is not valid for what follows.
+      We need to find the right place to put this and see if we
+      are missing any flag. Remember that functions and multiple
+      table updates do not set this correctly.
+    */
+    /*
+      TODO: Alfranio... We need to check if you really need this.
+    */
+    pending->set_flags(Rows_log_event::STMT_END_F);
+
+    /*
+      Write pending event to log file or transaction cache
+    */
+    if (pending->write(file))
+    {
+      pthread_mutex_unlock(&LOCK_log);
+      DBUG_RETURN(1);
+    }
+
+    delete pending;
+
+    error= flush_and_sync();
+    if (!error)
+    {
+      signal_update();
+      rotate_and_purge(RP_LOCK_LOG_IS_ALREADY_LOCKED);
     }
 
     pthread_mutex_unlock(&LOCK_log);
   }
 
-  thd->binlog_set_pending_rows_event(event);
+  thd->binlog_set_notrx_pending_rows_event(event);
 
   DBUG_RETURN(error);
 }
@@ -3925,7 +4156,8 @@ bool MYSQL_BIN_LOG::write(Log_event *eve
   */
   bool const end_stmt=
     thd->prelocked_mode && thd->lex->requires_prelocking();
-  thd->binlog_flush_pending_rows_event(end_stmt);
+  thd->binlog_flush_notrx_pending_rows_event(end_stmt);
+  thd->binlog_flush_trx_pending_rows_event(end_stmt);
 
   pthread_mutex_lock(&LOCK_log);
 
@@ -3971,7 +4203,9 @@ bool MYSQL_BIN_LOG::write(Log_event *eve
         (binlog_trx_data*) thd_get_ha_data(thd, binlog_hton);
       IO_CACHE *trans_log= &trx_data->trans_log;
       my_off_t trans_log_pos= my_b_tell(trans_log);
-      if (event_info->get_cache_stmt() || trans_log_pos != 0)
+      if (event_info->get_cache_stmt() ||
+         (!thd->current_stmt_binlog_row_based &&
+          trans_log_pos != 0))
       {
         DBUG_PRINT("info", ("Using trans_log: cache: %d, trans_log_pos: %lu",
                             event_info->get_cache_stmt(),

=== modified file 'sql/log.h'
--- a/sql/log.h	2009-01-23 12:22:05 +0000
+++ b/sql/log.h	2009-05-13 01:57:17 +0000
@@ -317,8 +317,11 @@ public:
   ulonglong table_map_version() const { return m_table_map_version; }
   void update_table_map_version() { ++m_table_map_version; }
 
-  int flush_and_set_pending_rows_event(THD *thd, Rows_log_event* event);
+  int flush_and_set_trx_pending_rows_event(THD *thd, Rows_log_event* event);
+  int flush_and_set_notrx_pending_rows_event(THD *thd, Rows_log_event* event);
   int remove_pending_rows_event(THD *thd);
+  int remove_trx_pending_rows_event(THD *thd);
+  int remove_notrx_pending_rows_event(THD *thd);
 
 #endif /* !defined(MYSQL_CLIENT) */
   void reset_bytes_written()

=== modified file 'sql/log_event.cc'
--- a/sql/log_event.cc	2009-05-11 11:32:38 +0000
+++ b/sql/log_event.cc	2009-05-13 01:57:17 +0000
@@ -7535,7 +7535,8 @@ static int rows_event_stmt_cleanup(Relay
       (assume the last master's transaction is ignored by the slave because of
       replicate-ignore rules).
     */
-    thd->binlog_flush_pending_rows_event(true);
+    thd->binlog_flush_notrx_pending_rows_event(TRUE);
+    thd->binlog_flush_trx_pending_rows_event(TRUE);
 
     /*
       If this event is not in a transaction, the call below will, if some
@@ -7792,7 +7793,7 @@ int Table_map_log_event::save_field_meta
 #if !defined(MYSQL_CLIENT)
 Table_map_log_event::Table_map_log_event(THD *thd, TABLE *tbl, ulong tid,
                                          bool is_transactional, uint16 flags)
-  : Log_event(thd, 0, true),
+  : Log_event(thd, 0, is_transactional),
     m_table(tbl),
     m_dbnam(tbl->s->db.str),
     m_dblen(m_dbnam ? tbl->s->db.length : 0),

=== modified file 'sql/log_event.h'
--- a/sql/log_event.h	2009-04-08 23:42:51 +0000
+++ b/sql/log_event.h	2009-05-13 01:57:17 +0000
@@ -3308,10 +3308,11 @@ public:
     return new table_def(m_coltype, m_colcnt, m_field_metadata,
                          m_field_metadata_size, m_null_bits);
   }
+#endif
+
   ulong get_table_id() const        { return m_table_id; }
   const char *get_table_name() const { return m_tblnam; }
   const char *get_db_name() const    { return m_dbnam; }
-#endif
 
   virtual Log_event_type get_type_code() { return TABLE_MAP_EVENT; }
   virtual bool is_valid() const { return m_memory != NULL; /* we check malloc */ }

=== modified file 'sql/log_event_old.cc'
--- a/sql/log_event_old.cc	2009-02-13 16:41:47 +0000
+++ b/sql/log_event_old.cc	2009-05-13 01:57:17 +0000
@@ -1541,7 +1541,8 @@ int Old_rows_log_event::do_apply_event(R
         NOTE: For this new scheme there should be no pending event:
         need to add code to assert that is the case.
        */
-      thd->binlog_flush_pending_rows_event(false);
+      thd->binlog_flush_notrx_pending_rows_event(FALSE);
+      thd->binlog_flush_trx_pending_rows_event(FALSE);
       TABLE_LIST *tables= rli->tables_to_lock;
       close_tables_for_reopen(thd, &tables);
 
@@ -1858,7 +1859,8 @@ Old_rows_log_event::do_update_pos(Relay_
       (assume the last master's transaction is ignored by the slave because of
       replicate-ignore rules).
     */
-    thd->binlog_flush_pending_rows_event(true);
+    thd->binlog_flush_notrx_pending_rows_event(TRUE);
+    thd->binlog_flush_trx_pending_rows_event(TRUE);
 
     /*
       If this event is not in a transaction, the call below will, if some

=== modified file 'sql/rpl_injector.cc'
--- a/sql/rpl_injector.cc	2008-02-19 11:43:01 +0000
+++ b/sql/rpl_injector.cc	2009-05-13 01:57:17 +0000
@@ -61,7 +61,8 @@ injector::transaction::~transaction()
 int injector::transaction::commit()
 {
    DBUG_ENTER("injector::transaction::commit()");
-   m_thd->binlog_flush_pending_rows_event(true);
+   m_thd->binlog_flush_notrx_pending_rows_event(TRUE);
+   m_thd->binlog_flush_trx_pending_rows_event(TRUE);
    /*
      Cluster replication does not preserve statement or
      transaction boundaries of the master.  Instead, a new
@@ -97,8 +98,12 @@ int injector::transaction::use_table(ser
 
   server_id_type save_id= m_thd->server_id;
   m_thd->set_server_id(sid);
-  error= m_thd->binlog_write_table_map(tbl.get_table(),
-                                       tbl.is_transactional());
+
+  if (tbl.is_transactional())
+    error= m_thd->binlog_set_trx_pending_table_map_events(tbl.get_table());
+  else 
+    error= m_thd->binlog_set_notrx_pending_table_map_events(tbl.get_table());
+
   m_thd->set_server_id(save_id);
   DBUG_RETURN(error);
 }

=== modified file 'sql/sql_base.cc'
--- a/sql/sql_base.cc	2009-04-17 05:51:51 +0000
+++ b/sql/sql_base.cc	2009-05-13 01:57:17 +0000
@@ -1332,7 +1332,8 @@ void close_thread_tables(THD *thd)
       handled either before writing a query log event (inside
       binlog_query()) or when preparing a pending event.
      */
-    thd->binlog_flush_pending_rows_event(TRUE);
+    thd->binlog_flush_notrx_pending_rows_event(TRUE);
+    thd->binlog_flush_trx_pending_rows_event(TRUE);
     mysql_unlock_tables(thd, thd->lock);
     thd->lock=0;
   }

=== modified file 'sql/sql_class.cc'
--- a/sql/sql_class.cc	2009-05-10 16:20:35 +0000
+++ b/sql/sql_class.cc	2009-05-13 01:57:17 +0000
@@ -3197,7 +3197,9 @@ THD::binlog_prepare_pending_rows_event(T
   if (binlog_setup_trx_data())
     DBUG_RETURN(NULL);
 
-  Rows_log_event* pending= binlog_get_pending_rows_event();
+  Rows_log_event* pending= (is_transactional ?
+                            binlog_get_trx_pending_rows_event() :
+                            binlog_get_notrx_pending_rows_event());
 
   if (unlikely(pending && !pending->is_valid()))
     DBUG_RETURN(NULL);
@@ -3231,11 +3233,32 @@ THD::binlog_prepare_pending_rows_event(T
       flush the pending event and replace it with the newly created
       event...
     */
-    if (unlikely(mysql_bin_log.flush_and_set_pending_rows_event(this, ev)))
+    if (!is_transactional)
     {
-      delete ev;
-      DBUG_RETURN(NULL);
+      if (unlikely(mysql_bin_log.flush_and_set_notrx_pending_rows_event(this, ev)))
+      {
+        delete ev;
+        DBUG_RETURN(NULL);
+      }
+
+      /*
+        This may be simplified if we use a non-transactional cache.
+      */
+      bool has_trans= lex->sql_command == SQLCOM_CREATE_TABLE;
+      int const error= (has_trans ? binlog_set_trx_pending_table_map_events(table) :
+                        binlog_set_notrx_pending_table_map_events(table));
+      if (unlikely(error)) 
+      {
+        delete ev;
+        DBUG_RETURN(NULL);
+      }
     }
+    else 
+      if (unlikely(mysql_bin_log.flush_and_set_trx_pending_rows_event(this, ev)))
+      {
+        delete ev;
+        DBUG_RETURN(NULL);
+      }
 
     DBUG_RETURN(ev);               /* This is the new pending event */
   }
@@ -3554,15 +3577,14 @@ int THD::binlog_delete_row(TABLE* table,
   return ev->add_row_data(row_data, len);
 }
 
-
-int THD::binlog_remove_pending_rows_event(bool clear_maps)
+int THD::binlog_remove_trx_pending_rows_event(bool clear_maps)
 {
   DBUG_ENTER("THD::binlog_remove_pending_rows_event");
 
   if (!mysql_bin_log.is_open())
     DBUG_RETURN(0);
 
-  mysql_bin_log.remove_pending_rows_event(this);
+  mysql_bin_log.remove_trx_pending_rows_event(this);
 
   if (clear_maps)
     binlog_table_maps= 0;
@@ -3570,9 +3592,9 @@ int THD::binlog_remove_pending_rows_even
   DBUG_RETURN(0);
 }
 
-int THD::binlog_flush_pending_rows_event(bool stmt_end)
+int THD::binlog_flush_trx_pending_rows_event(bool stmt_end)
 {
-  DBUG_ENTER("THD::binlog_flush_pending_rows_event");
+  DBUG_ENTER("THD::binlog_flush_trx_pending_rows_event");
   /*
     We shall flush the pending event even if we are not in row-based
     mode: it might be the case that we left row-based mode before
@@ -3586,7 +3608,7 @@ int THD::binlog_flush_pending_rows_event
     flag is set.
   */
   int error= 0;
-  if (Rows_log_event *pending= binlog_get_pending_rows_event())
+  if (Rows_log_event *pending= binlog_get_trx_pending_rows_event())
   {
     if (stmt_end)
     {
@@ -3595,12 +3617,42 @@ int THD::binlog_flush_pending_rows_event
       binlog_table_maps= 0;
     }
 
-    error= mysql_bin_log.flush_and_set_pending_rows_event(this, 0);
+    error= mysql_bin_log.flush_and_set_trx_pending_rows_event(this, 0);
   }
 
   DBUG_RETURN(error);
 }
 
+int THD::binlog_flush_notrx_pending_rows_event(bool stmt_end)
+{
+  DBUG_ENTER("THD::binlog_flush_notrx_pending_rows_event");
+  /*
+    We shall flush the pending event even if we are not in row-based
+    mode: it might be the case that we left row-based mode before
+    flushing anything (e.g., if we have explicitly locked tables).
+   */
+  if (!mysql_bin_log.is_open())
+    DBUG_RETURN(0);
+
+  /*
+    Mark the event as the last event of a statement if the stmt_end
+    flag is set.
+  */
+  int error= 0;
+  if (Rows_log_event *pending= binlog_get_notrx_pending_rows_event())
+  {
+    if (stmt_end)
+    {
+      pending->set_flags(Rows_log_event::STMT_END_F);
+      pending->flags|= LOG_EVENT_UPDATE_TABLE_MAP_VERSION_F;
+      binlog_table_maps= 0;
+    }
+
+    error= mysql_bin_log.flush_and_set_notrx_pending_rows_event(this, 0);
+  }
+
+  DBUG_RETURN(error);
+}
 
 #if !defined(DBUG_OFF) && !defined(_lint)
 static const char *
@@ -3666,8 +3718,12 @@ int THD::binlog_query(THD::enum_binlog_q
     top-most close_thread_tables().
   */
   if (this->prelocked_mode == NON_PRELOCKED)
-    if (int error= binlog_flush_pending_rows_event(TRUE))
+  {
+    if (int error= binlog_flush_notrx_pending_rows_event(TRUE))
       DBUG_RETURN(error);
+    if (int error= binlog_flush_trx_pending_rows_event(TRUE))
+      DBUG_RETURN(error);
+  }
 
   /*
     If we are in statement mode and trying to log an unsafe statement,

=== modified file 'sql/sql_class.h'
--- a/sql/sql_class.h	2009-03-25 19:41:16 +0000
+++ b/sql/sql_class.h	2009-05-13 01:57:17 +0000
@@ -1367,7 +1367,6 @@ public:
   */
   void binlog_start_trans_and_stmt();
   void binlog_set_stmt_begin();
-  int binlog_write_table_map(TABLE *table, bool is_transactional);
   int binlog_write_row(TABLE* table, bool is_transactional,
                        MY_BITMAP const* cols, size_t colcnt,
                        const uchar *buf);
@@ -1380,6 +1379,8 @@ public:
 
   void set_server_id(uint32 sid) { server_id = sid; }
 
+  int binlog_set_trx_pending_table_map_events(TABLE *table);
+  int binlog_set_notrx_pending_table_map_events(TABLE *table);
   /*
     Member functions to handle pending event for row-level logging.
   */
@@ -1390,10 +1391,13 @@ public:
                                       size_t needed,
                                       bool is_transactional,
 				      RowsEventT* hint);
-  Rows_log_event* binlog_get_pending_rows_event() const;
-  void            binlog_set_pending_rows_event(Rows_log_event* ev);
-  int binlog_flush_pending_rows_event(bool stmt_end);
-  int binlog_remove_pending_rows_event(bool clear_maps);
+  Rows_log_event* binlog_get_trx_pending_rows_event() const;
+  Rows_log_event* binlog_get_notrx_pending_rows_event() const;
+  void            binlog_set_trx_pending_rows_event(Rows_log_event* ev);
+  void            binlog_set_notrx_pending_rows_event(Rows_log_event* ev);
+  int binlog_flush_trx_pending_rows_event(bool stmt_end);
+  int binlog_flush_notrx_pending_rows_event(bool stmt_end);
+  int binlog_remove_trx_pending_rows_event(bool clear_maps); 
 
 private:
   /*

=== modified file 'sql/sql_insert.cc'
--- a/sql/sql_insert.cc	2009-04-08 23:58:57 +0000
+++ b/sql/sql_insert.cc	2009-05-13 01:57:17 +0000
@@ -2746,8 +2746,11 @@ bool Delayed_insert::handle_inserts(void
 
     TODO: Move the logging to last in the sequence of rows.
    */
-  if (thd.current_stmt_binlog_row_based)
-    thd.binlog_flush_pending_rows_event(TRUE);
+  if (thd.current_stmt_binlog_row_based) 
+  {
+    thd.binlog_flush_notrx_pending_rows_event(TRUE);
+    thd.binlog_flush_trx_pending_rows_event(TRUE);
+  }
 
   if ((error=table->file->extra(HA_EXTRA_NO_CACHE)))
   {						// This shouldn't happen
@@ -3759,7 +3762,8 @@ void select_create::abort()
   select_insert::abort();
   thd->transaction.stmt.modified_non_trans_table= FALSE;
   reenable_binlog(thd);
-  thd->binlog_flush_pending_rows_event(TRUE);
+  thd->binlog_flush_notrx_pending_rows_event(TRUE);
+  thd->binlog_flush_trx_pending_rows_event(TRUE);
 
   if (m_plock)
   {

=== modified file 'sql/sql_load.cc'
--- a/sql/sql_load.cc	2009-03-17 20:29:24 +0000
+++ b/sql/sql_load.cc	2009-05-13 01:57:17 +0000
@@ -517,7 +517,10 @@ int mysql_load(THD *thd,sql_exchange *ex
       after this point.
      */
     if (thd->current_stmt_binlog_row_based)
-      thd->binlog_flush_pending_rows_event(true);
+    {
+      thd->binlog_flush_notrx_pending_rows_event(TRUE);
+      thd->binlog_flush_trx_pending_rows_event(TRUE);
+    }
     else
     {
       /*


Attachment: [text/bzr-bundle]
Thread
bzr commit into mysql-5.1-bugteam branch (alfranio.correia:2874)Bug#40278Alfranio Correia13 May