summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorunknown <mats@romeo.(none)>2007-02-12 16:46:42 +0100
committerunknown <mats@romeo.(none)>2007-02-12 16:46:42 +0100
commite4146a9f7a9945ea8c5654fa9aba8ccdd05c6c4a (patch)
tree160e17d4a6561b96d99b10e1bb0bb56d64d2d43c
parentc34940a0786f472ab3d1797c6cd97228b1ee49f5 (diff)
downloadmariadb-git-e4146a9f7a9945ea8c5654fa9aba8ccdd05c6c4a.tar.gz
BUG#22583 (RBR between MyISAM and non-MyISAM tables containing BIT field
does not work): Changing packed row format to only include null bits for those columns that are present in the row as well as writing BIT columns in a storage engine-independent format. The change in row format is incompatible with the previous format and a slave will not be able to read the new events. mysql-test/extra/rpl_tests/rpl_deadlock.test: Position change since Format_description_log_event is longer. mysql-test/extra/rpl_tests/rpl_log.test: Position change since Format_description_log_event is longer. mysql-test/extra/rpl_tests/rpl_row_charset.test: Position change since Format_description_log_event is longer. mysql-test/r/rpl_000015.result: Result change. mysql-test/r/rpl_change_master.result: Result change. mysql-test/r/rpl_deadlock_innodb.result: Result change. mysql-test/r/rpl_flushlog_loop.result: Result change. mysql-test/r/rpl_log_pos.result: Result change. mysql-test/r/rpl_row_basic_11bugs.result: Result change. mysql-test/r/rpl_row_charset.result: Result change. mysql-test/r/rpl_row_create_table.result: Result change. mysql-test/r/rpl_row_delayed_ins.result: Result change. mysql-test/r/rpl_row_drop.result: Result change. mysql-test/r/rpl_row_flsh_tbls.result: Result change. mysql-test/r/rpl_row_inexist_tbl.result: Result change. mysql-test/r/rpl_row_log.result: Result change. mysql-test/r/rpl_row_log_innodb.result: Result change. mysql-test/r/rpl_row_max_relay_size.result: Result change. mysql-test/r/rpl_row_reset_slave.result: Result change. mysql-test/r/rpl_row_until.result: Result change. mysql-test/r/rpl_server_id1.result: Result change. mysql-test/r/rpl_server_id2.result: Result change. mysql-test/r/rpl_switch_stm_row_mixed.result: Result change. mysql-test/r/rpl_truncate_2myisam.result: Result change. mysql-test/r/rpl_truncate_3innodb.result: Result change. mysql-test/t/rpl_loaddata_s.test: Position change since Format_description_log_event is longer. mysql-test/t/rpl_log_pos.test: Position change since Format_description_log_event is longer. mysql-test/t/rpl_row_basic_11bugs-master.opt: Adding --innodb option mysql-test/t/rpl_row_basic_11bugs.test: Testing explicitly for RBR MyISAM -> InnoDB and vice versa. Position change since Format_description_log_event is longer. mysql-test/t/rpl_row_create_table.test: Position change since Format_description_log_event is longer. mysql-test/t/rpl_row_flsh_tbls.test: Position change since Format_description_log_event is longer. mysql-test/t/rpl_row_mysqlbinlog.test: Position change since Format_description_log_event is longer. mysql-test/t/rpl_switch_stm_row_mixed.test: Position change since Format_description_log_event is longer. mysql-test/t/user_var-binlog.test: Position change since Format_description_log_event is longer. sql/log_event.cc: Changing packed row format to only include null bits for those columns that are present in the row as well as writing BIT columns in a storage engine-independent format. Changing unpack_row() to accomodate for the changes. sql/log_event.h: Renumbering old row events and adding new codes. sql/sql_class.cc: Changing packed row format to only include null bits for those columns that are present in the row as well as writing BIT columns in a storage engine-independent format. Changing THD::pack_row() to accomodate for the changes and adding documentation. mysql-test/t/rpl_row_basic_11bugs-slave.opt: New BitKeeper file ``mysql-test/t/rpl_row_basic_11bugs-slave.opt''
-rw-r--r--mysql-test/extra/rpl_tests/rpl_deadlock.test4
-rw-r--r--mysql-test/extra/rpl_tests/rpl_log.test6
-rw-r--r--mysql-test/extra/rpl_tests/rpl_row_charset.test2
-rw-r--r--mysql-test/r/rpl_000015.result4
-rw-r--r--mysql-test/r/rpl_change_master.result4
-rw-r--r--mysql-test/r/rpl_deadlock_innodb.result4
-rw-r--r--mysql-test/r/rpl_flushlog_loop.result4
-rw-r--r--mysql-test/r/rpl_log_pos.result8
-rw-r--r--mysql-test/r/rpl_row_basic_11bugs.result115
-rw-r--r--mysql-test/r/rpl_row_charset.result2
-rw-r--r--mysql-test/r/rpl_row_create_table.result32
-rw-r--r--mysql-test/r/rpl_row_delayed_ins.result14
-rw-r--r--mysql-test/r/rpl_row_drop.result8
-rw-r--r--mysql-test/r/rpl_row_flsh_tbls.result4
-rw-r--r--mysql-test/r/rpl_row_inexist_tbl.result2
-rw-r--r--mysql-test/r/rpl_row_log.result16
-rw-r--r--mysql-test/r/rpl_row_log_innodb.result16
-rw-r--r--mysql-test/r/rpl_row_max_relay_size.result22
-rw-r--r--mysql-test/r/rpl_row_reset_slave.result6
-rw-r--r--mysql-test/r/rpl_row_until.result8
-rw-r--r--mysql-test/r/rpl_server_id1.result2
-rw-r--r--mysql-test/r/rpl_server_id2.result2
-rw-r--r--mysql-test/r/rpl_switch_stm_row_mixed.result4
-rw-r--r--mysql-test/r/rpl_truncate_2myisam.result66
-rw-r--r--mysql-test/r/rpl_truncate_3innodb.result90
-rw-r--r--mysql-test/t/rpl_loaddata_s.test2
-rw-r--r--mysql-test/t/rpl_log_pos.test2
-rw-r--r--mysql-test/t/rpl_row_basic_11bugs-master.opt3
-rw-r--r--mysql-test/t/rpl_row_basic_11bugs-slave.opt1
-rw-r--r--mysql-test/t/rpl_row_basic_11bugs.test70
-rw-r--r--mysql-test/t/rpl_row_create_table.test10
-rw-r--r--mysql-test/t/rpl_row_flsh_tbls.test2
-rw-r--r--mysql-test/t/rpl_row_mysqlbinlog.test4
-rw-r--r--mysql-test/t/rpl_switch_stm_row_mixed.test4
-rw-r--r--mysql-test/t/user_var-binlog.test2
-rw-r--r--sql/log_event.cc137
-rw-r--r--sql/log_event.h19
-rw-r--r--sql/sql_class.cc113
38 files changed, 548 insertions, 266 deletions
diff --git a/mysql-test/extra/rpl_tests/rpl_deadlock.test b/mysql-test/extra/rpl_tests/rpl_deadlock.test
index 64df1f272cc..d132c34ef90 100644
--- a/mysql-test/extra/rpl_tests/rpl_deadlock.test
+++ b/mysql-test/extra/rpl_tests/rpl_deadlock.test
@@ -73,7 +73,7 @@ show slave status;
# 2) Test lock wait timeout
stop slave;
-change master to master_log_pos=536; # the BEGIN log event
+change master to master_log_pos=539; # the BEGIN log event
begin;
select * from t2 for update; # hold lock
start slave;
@@ -96,7 +96,7 @@ set global max_relay_log_size=0;
# This is really copy-paste of 2) of above
stop slave;
-change master to master_log_pos=536;
+change master to master_log_pos=539;
begin;
select * from t2 for update;
start slave;
diff --git a/mysql-test/extra/rpl_tests/rpl_log.test b/mysql-test/extra/rpl_tests/rpl_log.test
index cc3a9b4ffb5..4f40cab4e7e 100644
--- a/mysql-test/extra/rpl_tests/rpl_log.test
+++ b/mysql-test/extra/rpl_tests/rpl_log.test
@@ -42,13 +42,13 @@ select count(*) from t1;
show binlog events;
--replace_column 2 # 5 #
--replace_regex /\/\* xid=.* \*\//\/* XID *\// /table_id: [0-9]+/table_id: #/
-show binlog events from 102 limit 1;
+show binlog events from 105 limit 1;
--replace_column 2 # 5 #
--replace_regex /\/\* xid=.* \*\//\/* XID *\// /table_id: [0-9]+/table_id: #/
-show binlog events from 102 limit 2;
+show binlog events from 105 limit 2;
--replace_column 2 # 5 #
--replace_regex /\/\* xid=.* \*\//\/* XID *\// /table_id: [0-9]+/table_id: #/
-show binlog events from 102 limit 2,1;
+show binlog events from 105 limit 2,1;
flush logs;
# We need an extra update before doing save_master_pos.
diff --git a/mysql-test/extra/rpl_tests/rpl_row_charset.test b/mysql-test/extra/rpl_tests/rpl_row_charset.test
index 336a038db10..b3959c53d15 100644
--- a/mysql-test/extra/rpl_tests/rpl_row_charset.test
+++ b/mysql-test/extra/rpl_tests/rpl_row_charset.test
@@ -115,7 +115,7 @@ drop database mysqltest2;
drop database mysqltest3;
--replace_column 2 # 5 #
--replace_regex /table_id: [0-9]+/table_id: #/
-show binlog events from 102;
+show binlog events from 105;
sync_slave_with_master;
# Check that we can change global.collation_server (since 5.0.3)
diff --git a/mysql-test/r/rpl_000015.result b/mysql-test/r/rpl_000015.result
index a2763d4f023..eb9b1ef4882 100644
--- a/mysql-test/r/rpl_000015.result
+++ b/mysql-test/r/rpl_000015.result
@@ -1,7 +1,7 @@
reset master;
show master status;
File Position Binlog_Do_DB Binlog_Ignore_DB
-master-bin.000001 102
+master-bin.000001 105
reset slave;
show slave status;
Slave_IO_State Master_Host Master_User Master_Port Connect_Retry Master_Log_File Read_Master_Log_Pos Relay_Log_File Relay_Log_Pos Relay_Master_Log_File Slave_IO_Running Slave_SQL_Running Replicate_Do_DB Replicate_Ignore_DB Replicate_Do_Table Replicate_Ignore_Table Replicate_Wild_Do_Table Replicate_Wild_Ignore_Table Last_Errno Last_Error Skip_Counter Exec_Master_Log_Pos Relay_Log_Space Until_Condition Until_Log_File Until_Log_Pos Master_SSL_Allowed Master_SSL_CA_File Master_SSL_CA_Path Master_SSL_Cert Master_SSL_Cipher Master_SSL_Key Seconds_Behind_Master
@@ -17,7 +17,7 @@ Slave_IO_State Master_Host Master_User Master_Port Connect_Retry Master_Log_File
start slave;
show slave status;
Slave_IO_State Master_Host Master_User Master_Port Connect_Retry Master_Log_File Read_Master_Log_Pos Relay_Log_File Relay_Log_Pos Relay_Master_Log_File Slave_IO_Running Slave_SQL_Running Replicate_Do_DB Replicate_Ignore_DB Replicate_Do_Table Replicate_Ignore_Table Replicate_Wild_Do_Table Replicate_Wild_Ignore_Table Last_Errno Last_Error Skip_Counter Exec_Master_Log_Pos Relay_Log_Space Until_Condition Until_Log_File Until_Log_Pos Master_SSL_Allowed Master_SSL_CA_File Master_SSL_CA_Path Master_SSL_Cert Master_SSL_Cipher Master_SSL_Key Seconds_Behind_Master
-# 127.0.0.1 root MASTER_PORT 7 master-bin.000001 102 # # master-bin.000001 Yes Yes 0 0 102 # None 0 No #
+# 127.0.0.1 root MASTER_PORT 7 master-bin.000001 105 # # master-bin.000001 Yes Yes 0 0 105 # None 0 No #
drop table if exists t1;
create table t1 (n int, PRIMARY KEY(n));
insert into t1 values (10),(45),(90);
diff --git a/mysql-test/r/rpl_change_master.result b/mysql-test/r/rpl_change_master.result
index 513de9494ba..a9ea380df09 100644
--- a/mysql-test/r/rpl_change_master.result
+++ b/mysql-test/r/rpl_change_master.result
@@ -13,11 +13,11 @@ insert into t1 values(2);
stop slave;
show slave status;
Slave_IO_State Master_Host Master_User Master_Port Connect_Retry Master_Log_File Read_Master_Log_Pos Relay_Log_File Relay_Log_Pos Relay_Master_Log_File Slave_IO_Running Slave_SQL_Running Replicate_Do_DB Replicate_Ignore_DB Replicate_Do_Table Replicate_Ignore_Table Replicate_Wild_Do_Table Replicate_Wild_Ignore_Table Last_Errno Last_Error Skip_Counter Exec_Master_Log_Pos Relay_Log_Space Until_Condition Until_Log_File Until_Log_Pos Master_SSL_Allowed Master_SSL_CA_File Master_SSL_CA_Path Master_SSL_Cert Master_SSL_Cipher Master_SSL_Key Seconds_Behind_Master
-# 127.0.0.1 root MASTER_MYPORT 1 master-bin.000001 # # # master-bin.000001 No No 0 0 187 # None 0 No #
+# 127.0.0.1 root MASTER_MYPORT 1 master-bin.000001 # # # master-bin.000001 No No 0 0 190 # None 0 No #
change master to master_user='root';
show slave status;
Slave_IO_State Master_Host Master_User Master_Port Connect_Retry Master_Log_File Read_Master_Log_Pos Relay_Log_File Relay_Log_Pos Relay_Master_Log_File Slave_IO_Running Slave_SQL_Running Replicate_Do_DB Replicate_Ignore_DB Replicate_Do_Table Replicate_Ignore_Table Replicate_Wild_Do_Table Replicate_Wild_Ignore_Table Last_Errno Last_Error Skip_Counter Exec_Master_Log_Pos Relay_Log_Space Until_Condition Until_Log_File Until_Log_Pos Master_SSL_Allowed Master_SSL_CA_File Master_SSL_CA_Path Master_SSL_Cert Master_SSL_Cipher Master_SSL_Key Seconds_Behind_Master
-# 127.0.0.1 root MASTER_MYPORT 1 master-bin.000001 # # # master-bin.000001 No No 0 0 187 # None 0 No #
+# 127.0.0.1 root MASTER_MYPORT 1 master-bin.000001 # # # master-bin.000001 No No 0 0 190 # None 0 No #
start slave;
select * from t1;
n
diff --git a/mysql-test/r/rpl_deadlock_innodb.result b/mysql-test/r/rpl_deadlock_innodb.result
index b9a23950ed8..22ca1c3cec1 100644
--- a/mysql-test/r/rpl_deadlock_innodb.result
+++ b/mysql-test/r/rpl_deadlock_innodb.result
@@ -78,7 +78,7 @@ Master_SSL_Cipher
Master_SSL_Key
Seconds_Behind_Master #
stop slave;
-change master to master_log_pos=536;
+change master to master_log_pos=539;
begin;
select * from t2 for update;
a
@@ -128,7 +128,7 @@ Master_SSL_Key
Seconds_Behind_Master #
set global max_relay_log_size=0;
stop slave;
-change master to master_log_pos=536;
+change master to master_log_pos=539;
begin;
select * from t2 for update;
a
diff --git a/mysql-test/r/rpl_flushlog_loop.result b/mysql-test/r/rpl_flushlog_loop.result
index 16d8ba251f4..a600f103069 100644
--- a/mysql-test/r/rpl_flushlog_loop.result
+++ b/mysql-test/r/rpl_flushlog_loop.result
@@ -24,7 +24,7 @@ Master_User root
Master_Port SLAVE_PORT
Connect_Retry 60
Master_Log_File slave-bin.000001
-Read_Master_Log_Pos 212
+Read_Master_Log_Pos 215
Relay_Log_File #
Relay_Log_Pos #
Relay_Master_Log_File slave-bin.000001
@@ -39,7 +39,7 @@ Replicate_Wild_Ignore_Table
Last_Errno 0
Last_Error
Skip_Counter 0
-Exec_Master_Log_Pos 212
+Exec_Master_Log_Pos 215
Relay_Log_Space #
Until_Condition None
Until_Log_File
diff --git a/mysql-test/r/rpl_log_pos.result b/mysql-test/r/rpl_log_pos.result
index c7484022b23..8a80b5315d4 100644
--- a/mysql-test/r/rpl_log_pos.result
+++ b/mysql-test/r/rpl_log_pos.result
@@ -6,10 +6,10 @@ drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
start slave;
show master status;
File Position Binlog_Do_DB Binlog_Ignore_DB
-master-bin.000001 102 <Binlog_Ignore_DB>
+master-bin.000001 105 <Binlog_Ignore_DB>
show slave status;
Slave_IO_State Master_Host Master_User Master_Port Connect_Retry Master_Log_File Read_Master_Log_Pos Relay_Log_File Relay_Log_Pos Relay_Master_Log_File Slave_IO_Running Slave_SQL_Running Replicate_Do_DB Replicate_Ignore_DB Replicate_Do_Table Replicate_Ignore_Table Replicate_Wild_Do_Table Replicate_Wild_Ignore_Table Last_Errno Last_Error Skip_Counter Exec_Master_Log_Pos Relay_Log_Space Until_Condition Until_Log_File Until_Log_Pos Master_SSL_Allowed Master_SSL_CA_File Master_SSL_CA_Path Master_SSL_Cert Master_SSL_Cipher Master_SSL_Key Seconds_Behind_Master
-# 127.0.0.1 root MASTER_PORT 1 master-bin.000001 102 # # master-bin.000001 Yes Yes 0 0 102 # None 0 No #
+# 127.0.0.1 root MASTER_PORT 1 master-bin.000001 105 # # master-bin.000001 Yes Yes 0 0 105 # None 0 No #
stop slave;
change master to master_log_pos=74;
start slave;
@@ -30,13 +30,13 @@ Slave_IO_State Master_Host Master_User Master_Port Connect_Retry Master_Log_File
# 127.0.0.1 root MASTER_PORT 1 master-bin.000001 177 # # master-bin.000001 No Yes 0 0 177 # None 0 No #
show master status;
File Position Binlog_Do_DB Binlog_Ignore_DB
-master-bin.000001 102 <Binlog_Ignore_DB>
+master-bin.000001 105 <Binlog_Ignore_DB>
create table if not exists t1 (n int);
drop table if exists t1;
create table t1 (n int);
insert into t1 values (1),(2),(3);
stop slave;
-change master to master_log_pos=102;
+change master to master_log_pos=105;
start slave;
select * from t1 ORDER BY n;
n
diff --git a/mysql-test/r/rpl_row_basic_11bugs.result b/mysql-test/r/rpl_row_basic_11bugs.result
index e49facd2d70..a3542f9a931 100644
--- a/mysql-test/r/rpl_row_basic_11bugs.result
+++ b/mysql-test/r/rpl_row_basic_11bugs.result
@@ -25,11 +25,11 @@ SHOW TABLES;
Tables_in_test_ignore
t2
INSERT INTO t2 VALUES (3,3), (4,4);
-SHOW BINLOG EVENTS FROM 102;
+SHOW BINLOG EVENTS FROM 105;
Log_name Pos Event_type Server_id End_log_pos Info
-master-bin.000001 102 Query 1 195 use `test`; CREATE TABLE t1 (a INT, b INT)
-master-bin.000001 195 Table_map 1 235 table_id: # (test.t1)
-master-bin.000001 235 Write_rows 1 282 table_id: # flags: STMT_END_F
+master-bin.000001 105 Query 1 198 use `test`; CREATE TABLE t1 (a INT, b INT)
+master-bin.000001 198 Table_map 1 238 table_id: # (test.t1)
+master-bin.000001 238 Write_rows 1 285 table_id: # flags: STMT_END_F
**** On Slave ****
SHOW DATABASES;
Database
@@ -56,10 +56,10 @@ DELETE FROM t1 WHERE a = 0;
UPDATE t1 SET a=99 WHERE a = 0;
SHOW BINLOG EVENTS;
Log_name Pos Event_type Server_id End_log_pos Info
-master-bin.000001 4 Format_desc 1 102 Server ver: SERVER_VERSION, Binlog ver: 4
-master-bin.000001 102 Query 1 188 use `test`; CREATE TABLE t1 (a INT)
-master-bin.000001 188 Table_map 1 227 table_id: # (test.t1)
-master-bin.000001 227 Write_rows 1 266 table_id: # flags: STMT_END_F
+master-bin.000001 4 Format_desc 1 105 Server ver: SERVER_VERSION, Binlog ver: 4
+master-bin.000001 105 Query 1 191 use `test`; CREATE TABLE t1 (a INT)
+master-bin.000001 191 Table_map 1 230 table_id: # (test.t1)
+master-bin.000001 230 Write_rows 1 269 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;
@@ -120,3 +120,102 @@ HEX(a) b
SELECT HEX(a),b FROM t1;
HEX(a) b
0 2
+DROP TABLE IF EXISTS t1;
+================ Test for BUG#22583 ================
+drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
+reset master;
+reset slave;
+drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
+start slave;
+**** On Master ****
+CREATE TABLE t1_myisam (k INT, a BIT(1), b BIT(9)) ENGINE=MYISAM;
+CREATE TABLE t1_innodb (k INT, a BIT(1), b BIT(9)) ENGINE=INNODB;
+CREATE TABLE t2_myisam (k INT, a BIT(1) NOT NULL, b BIT(4) NOT NULL) ENGINE=MYISAM;
+CREATE TABLE t2_innodb (k INT, a BIT(1) NOT NULL, b BIT(4) NOT NULL) ENGINE=INNODB;
+**** On Slave ****
+ALTER TABLE t1_myisam ENGINE=INNODB;
+ALTER TABLE t1_innodb ENGINE=MYISAM;
+ALTER TABLE t2_myisam ENGINE=INNODB;
+ALTER TABLE t2_innodb ENGINE=MYISAM;
+**** On Master ****
+INSERT INTO t1_myisam VALUES(1, b'0', 257);
+INSERT INTO t1_myisam VALUES(2, b'1', 256);
+INSERT INTO t1_innodb VALUES(1, b'0', 257);
+INSERT INTO t1_innodb VALUES(2, b'1', 256);
+SELECT k, HEX(a),HEX(b) FROM t1_myisam;
+k HEX(a) HEX(b)
+1 0 101
+2 1 100
+SELECT k, HEX(a),HEX(b) FROM t1_innodb;
+k HEX(a) HEX(b)
+1 0 101
+2 1 100
+INSERT INTO t2_myisam VALUES(1, b'0', 9);
+INSERT INTO t2_myisam VALUES(2, b'1', 8);
+INSERT INTO t2_innodb VALUES(1, b'0', 9);
+INSERT INTO t2_innodb VALUES(2, b'1', 8);
+SELECT k, HEX(a),HEX(b) FROM t2_myisam;
+k HEX(a) HEX(b)
+1 0 9
+2 1 8
+SELECT k, HEX(a),HEX(b) FROM t2_innodb;
+k HEX(a) HEX(b)
+1 0 9
+2 1 8
+**** On Slave ****
+SELECT k, HEX(a),HEX(b) FROM t1_myisam;
+k HEX(a) HEX(b)
+1 0 101
+2 1 100
+SELECT k, HEX(a),HEX(b) FROM t1_innodb;
+k HEX(a) HEX(b)
+1 0 101
+2 1 100
+SELECT k, HEX(a),HEX(b) FROM t2_myisam;
+k HEX(a) HEX(b)
+1 0 9
+2 1 8
+SELECT k, HEX(a),HEX(b) FROM t2_innodb;
+k HEX(a) HEX(b)
+1 0 9
+2 1 8
+**** On Master ****
+UPDATE t1_myisam SET a=0 WHERE k=2;
+SELECT k, HEX(a),HEX(b) FROM t1_myisam;
+k HEX(a) HEX(b)
+1 0 101
+2 0 100
+UPDATE t1_innodb SET a=0 WHERE k=2;
+SELECT k, HEX(a),HEX(b) FROM t1_innodb;
+k HEX(a) HEX(b)
+1 0 101
+2 0 100
+UPDATE t2_myisam SET a=0 WHERE k=2;
+SELECT k, HEX(a),HEX(b) FROM t2_myisam;
+k HEX(a) HEX(b)
+1 0 9
+2 0 8
+UPDATE t2_innodb SET a=0 WHERE k=2;
+SELECT k, HEX(a),HEX(b) FROM t2_innodb;
+k HEX(a) HEX(b)
+1 0 9
+2 0 8
+**** On Slave ****
+SELECT k, HEX(a),HEX(b) FROM t1_myisam;
+k HEX(a) HEX(b)
+1 0 101
+2 0 100
+SELECT k, HEX(a),HEX(b) FROM t1_innodb;
+k HEX(a) HEX(b)
+1 0 101
+2 0 100
+SELECT k, HEX(a),HEX(b) FROM t2_myisam;
+k HEX(a) HEX(b)
+1 0 9
+2 0 8
+SELECT k, HEX(a),HEX(b) FROM t2_innodb;
+k HEX(a) HEX(b)
+1 0 9
+2 0 8
+**** On Master ****
+DROP TABLE IF EXISTS t1_myisam, t1_innodb, t2_myisam, t2_innodb;
diff --git a/mysql-test/r/rpl_row_charset.result b/mysql-test/r/rpl_row_charset.result
index 79cf75c8cc1..2462dd0b505 100644
--- a/mysql-test/r/rpl_row_charset.result
+++ b/mysql-test/r/rpl_row_charset.result
@@ -109,7 +109,7 @@ a b
1 cp850_general_ci
drop database mysqltest2;
drop database mysqltest3;
-show binlog events from 102;
+show binlog events from 105;
Log_name Pos Event_type Server_id End_log_pos Info
master-bin.000001 # Query 1 # drop database if exists mysqltest2
master-bin.000001 # Query 1 # drop database if exists mysqltest3
diff --git a/mysql-test/r/rpl_row_create_table.result b/mysql-test/r/rpl_row_create_table.result
index 03388f59b8c..6a1877c0fec 100644
--- a/mysql-test/r/rpl_row_create_table.result
+++ b/mysql-test/r/rpl_row_create_table.result
@@ -8,27 +8,27 @@ CREATE TABLE t1 (a INT, b INT);
CREATE TABLE t2 (a INT, b INT) ENGINE=Merge;
CREATE TABLE t3 (a INT, b INT) CHARSET=utf8;
CREATE TABLE t4 (a INT, b INT) ENGINE=Merge CHARSET=utf8;
-SHOW BINLOG EVENTS FROM 212;
+SHOW BINLOG EVENTS FROM 215;
Log_name #
-Pos 212
+Pos 215
Event_type Query
Server_id #
End_log_pos #
Info use `test`; CREATE TABLE t1 (a INT, b INT)
Log_name #
-Pos 305
+Pos 308
Event_type Query
Server_id #
End_log_pos #
Info use `test`; CREATE TABLE t2 (a INT, b INT) ENGINE=Merge
Log_name #
-Pos 411
+Pos 414
Event_type Query
Server_id #
End_log_pos #
Info use `test`; CREATE TABLE t3 (a INT, b INT) CHARSET=utf8
Log_name #
-Pos 517
+Pos 520
Event_type Query
Server_id #
End_log_pos #
@@ -127,7 +127,7 @@ NULL 5 10
NULL 6 12
CREATE TABLE t7 (UNIQUE(b)) SELECT a,b FROM tt3;
ERROR 23000: Duplicate entry '2' for key 'b'
-SHOW BINLOG EVENTS FROM 1256;
+SHOW BINLOG EVENTS FROM 1097;
Log_name Pos Event_type Server_id End_log_pos Info
CREATE TABLE t7 (a INT, b INT UNIQUE);
INSERT INTO t7 SELECT a,b FROM tt3;
@@ -137,11 +137,11 @@ a b
1 2
2 4
3 6
-SHOW BINLOG EVENTS FROM 1118;
+SHOW BINLOG EVENTS FROM 1097;
Log_name Pos Event_type Server_id End_log_pos Info
-master-bin.000001 1118 Query 1 1218 use `test`; CREATE TABLE t7 (a INT, b INT UNIQUE)
-master-bin.000001 1218 Table_map 1 1258 table_id: # (test.t7)
-master-bin.000001 1258 Write_rows 1 1314 table_id: # flags: STMT_END_F
+master-bin.000001 1097 Query 1 1197 use `test`; CREATE TABLE t7 (a INT, b INT UNIQUE)
+master-bin.000001 1197 Table_map 1 1237 table_id: # (test.t7)
+master-bin.000001 1237 Write_rows 1 1293 table_id: # flags: STMT_END_F
SELECT * FROM t7 ORDER BY a,b;
a b
1 2
@@ -154,10 +154,10 @@ INSERT INTO t7 SELECT a,b FROM tt4;
ROLLBACK;
Warnings:
Warning 1196 Some non-transactional changed tables couldn't be rolled back
-SHOW BINLOG EVENTS FROM 1314;
+SHOW BINLOG EVENTS FROM 1293;
Log_name Pos Event_type Server_id End_log_pos Info
-master-bin.000001 1314 Table_map 1 1354 table_id: # (test.t7)
-master-bin.000001 1354 Write_rows 1 1410 table_id: # flags: STMT_END_F
+master-bin.000001 1293 Table_map 1 1333 table_id: # (test.t7)
+master-bin.000001 1333 Write_rows 1 1389 table_id: # flags: STMT_END_F
SELECT * FROM t7 ORDER BY a,b;
a b
1 2
@@ -192,10 +192,10 @@ Create Table CREATE TABLE `t9` (
`a` int(11) DEFAULT NULL,
`b` int(11) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
-SHOW BINLOG EVENTS FROM 1410;
+SHOW BINLOG EVENTS FROM 1389;
Log_name Pos Event_type Server_id End_log_pos Info
-master-bin.000001 1410 Query 1 1496 use `test`; CREATE TABLE t8 LIKE t4
-master-bin.000001 1496 Query 1 1635 use `test`; CREATE TABLE `t9` (
+master-bin.000001 1389 Query 1 1475 use `test`; CREATE TABLE t8 LIKE t4
+master-bin.000001 1475 Query 1 1614 use `test`; CREATE TABLE `t9` (
`a` int(11) DEFAULT NULL,
`b` int(11) DEFAULT NULL
)
diff --git a/mysql-test/r/rpl_row_delayed_ins.result b/mysql-test/r/rpl_row_delayed_ins.result
index 31fffeb59cc..cad38f77d52 100644
--- a/mysql-test/r/rpl_row_delayed_ins.result
+++ b/mysql-test/r/rpl_row_delayed_ins.result
@@ -14,13 +14,13 @@ a
3
show binlog events;
Log_name Pos Event_type Server_id End_log_pos Info
-master-bin.000001 4 Format_desc 1 102 Server ver: VERSION, Binlog ver: 4
-master-bin.000001 102 Query 1 222 use `test`; create table t1(a int not null primary key) engine=myisam
-master-bin.000001 222 Table_map 1 261 table_id: # (test.t1)
-master-bin.000001 261 Write_rows 1 295 table_id: # flags: STMT_END_F
-master-bin.000001 295 Table_map 1 334 table_id: # (test.t1)
-master-bin.000001 334 Write_rows 1 373 table_id: # flags: STMT_END_F
-master-bin.000001 373 Query 1 448 use `test`; flush tables
+master-bin.000001 4 Format_desc 1 105 Server ver: VERSION, Binlog ver: 4
+master-bin.000001 105 Query 1 225 use `test`; create table t1(a int not null primary key) engine=myisam
+master-bin.000001 225 Table_map 1 264 table_id: # (test.t1)
+master-bin.000001 264 Write_rows 1 298 table_id: # flags: STMT_END_F
+master-bin.000001 298 Table_map 1 337 table_id: # (test.t1)
+master-bin.000001 337 Write_rows 1 376 table_id: # flags: STMT_END_F
+master-bin.000001 376 Query 1 451 use `test`; flush tables
SELECT * FROM t1 ORDER BY a;
a
1
diff --git a/mysql-test/r/rpl_row_drop.result b/mysql-test/r/rpl_row_drop.result
index 4ef21884fda..cdf52ceb9b9 100644
--- a/mysql-test/r/rpl_row_drop.result
+++ b/mysql-test/r/rpl_row_drop.result
@@ -43,10 +43,10 @@ t2
DROP TABLE t1,t2;
SHOW BINLOG EVENTS;
Log_name Pos Event_type Server_id End_log_pos Info
-master-bin.000001 4 Format_desc 1 102 Server ver: VERSION, Binlog ver: 4
-master-bin.000001 102 Query 1 188 use `test`; CREATE TABLE t1 (a int)
-master-bin.000001 188 Query 1 274 use `test`; CREATE TABLE t2 (a int)
-master-bin.000001 274 Query 1 378 use `test`; DROP TABLE `t1` /* generated by server */
+master-bin.000001 4 Format_desc 1 105 Server ver: VERSION, Binlog ver: 4
+master-bin.000001 105 Query 1 191 use `test`; CREATE TABLE t1 (a int)
+master-bin.000001 191 Query 1 277 use `test`; CREATE TABLE t2 (a int)
+master-bin.000001 277 Query 1 381 use `test`; DROP TABLE `t1` /* generated by server */
SHOW TABLES;
Tables_in_test
t2
diff --git a/mysql-test/r/rpl_row_flsh_tbls.result b/mysql-test/r/rpl_row_flsh_tbls.result
index e2352b8605b..d5b8dc48009 100644
--- a/mysql-test/r/rpl_row_flsh_tbls.result
+++ b/mysql-test/r/rpl_row_flsh_tbls.result
@@ -12,13 +12,13 @@ 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 615 ;
+SHOW BINLOG EVENTS FROM 618 ;
Log_name Pos Event_type Server_id End_log_pos Info
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 615 ;
+SHOW BINLOG EVENTS FROM 618 ;
Log_name Pos Event_type Server_id End_log_pos Info
master-bin.000001 # Query 1 # use `test`; rename table t1 to t5, t2 to t1
master-bin.000001 # Query 1 # use `test`; flush tables
diff --git a/mysql-test/r/rpl_row_inexist_tbl.result b/mysql-test/r/rpl_row_inexist_tbl.result
index 5f5a4556d76..188dfd5924a 100644
--- a/mysql-test/r/rpl_row_inexist_tbl.result
+++ b/mysql-test/r/rpl_row_inexist_tbl.result
@@ -39,7 +39,7 @@ Replicate_Wild_Ignore_Table
Last_Errno 1146
Last_Error Error 'Table 'test.t1' doesn't exist' on opening table `test`.`t1`
Skip_Counter 0
-Exec_Master_Log_Pos 519
+Exec_Master_Log_Pos 522
Relay_Log_Space #
Until_Condition None
Until_Log_File
diff --git a/mysql-test/r/rpl_row_log.result b/mysql-test/r/rpl_row_log.result
index 89163e1e37b..b7785bbe6b3 100644
--- a/mysql-test/r/rpl_row_log.result
+++ b/mysql-test/r/rpl_row_log.result
@@ -26,14 +26,14 @@ 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 # Table_map 1 # table_id: # (test.t1)
master-bin.000001 # Write_rows 1 # table_id: # flags: STMT_END_F
-show binlog events from 102 limit 1;
+show binlog events from 105 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 102 limit 2;
+show binlog events from 105 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 # Table_map 1 # table_id: # (test.t1)
-show binlog events from 102 limit 2,1;
+show binlog events from 105 limit 2,1;
Log_name Pos Event_type Server_id End_log_pos Info
master-bin.000001 # Write_rows 1 # table_id: # flags: STMT_END_F
flush logs;
@@ -67,13 +67,13 @@ master-bin.000002 # Table_map 1 # table_id: # (test.t2)
master-bin.000002 # Write_rows 1 # table_id: # flags: STMT_END_F
show binary logs;
Log_name File_size
-master-bin.000001 1256
-master-bin.000002 373
+master-bin.000001 1259
+master-bin.000002 376
start slave;
show binary logs;
Log_name File_size
-slave-bin.000001 1354
-slave-bin.000002 274
+slave-bin.000001 1357
+slave-bin.000002 277
show binlog events in 'slave-bin.000001' from 4;
Log_name Pos Event_type Server_id End_log_pos Info
slave-bin.000001 # Format_desc 2 # Server ver: VERSION, Binlog ver: 4
@@ -94,7 +94,7 @@ slave-bin.000002 # Table_map 1 # table_id: # (test.t2)
slave-bin.000002 # Write_rows 1 # table_id: # flags: STMT_END_F
show slave status;
Slave_IO_State Master_Host Master_User Master_Port Connect_Retry Master_Log_File Read_Master_Log_Pos Relay_Log_File Relay_Log_Pos Relay_Master_Log_File Slave_IO_Running Slave_SQL_Running Replicate_Do_DB Replicate_Ignore_DB Replicate_Do_Table Replicate_Ignore_Table Replicate_Wild_Do_Table Replicate_Wild_Ignore_Table Last_Errno Last_Error Skip_Counter Exec_Master_Log_Pos Relay_Log_Space Until_Condition Until_Log_File Until_Log_Pos Master_SSL_Allowed Master_SSL_CA_File Master_SSL_CA_Path Master_SSL_Cert Master_SSL_Cipher Master_SSL_Key Seconds_Behind_Master
-# 127.0.0.1 root MASTER_PORT 1 master-bin.000002 373 # # master-bin.000002 Yes Yes # 0 0 373 # None 0 No #
+# 127.0.0.1 root MASTER_PORT 1 master-bin.000002 376 # # master-bin.000002 Yes Yes # 0 0 376 # None 0 No #
show binlog events in 'slave-bin.000005' from 4;
ERROR HY000: Error when executing command SHOW BINLOG EVENTS: Could not find target log
DROP TABLE t1;
diff --git a/mysql-test/r/rpl_row_log_innodb.result b/mysql-test/r/rpl_row_log_innodb.result
index 3bcd8a6a0fb..f51d99a07c3 100644
--- a/mysql-test/r/rpl_row_log_innodb.result
+++ b/mysql-test/r/rpl_row_log_innodb.result
@@ -28,14 +28,14 @@ master-bin.000001 # Query 1 # use `test`; create table t1 (word char(20) not nul
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 # Xid 1 # COMMIT /* XID */
-show binlog events from 102 limit 1;
+show binlog events from 105 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=InnoDB
-show binlog events from 102 limit 2;
+show binlog events from 105 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=InnoDB
master-bin.000001 # Table_map 1 # table_id: # (test.t1)
-show binlog events from 102 limit 2,1;
+show binlog events from 105 limit 2,1;
Log_name Pos Event_type Server_id End_log_pos Info
master-bin.000001 # Write_rows 1 # table_id: # flags: STMT_END_F
flush logs;
@@ -72,13 +72,13 @@ master-bin.000002 # Write_rows 1 # table_id: # flags: STMT_END_F
master-bin.000002 # Xid 1 # COMMIT /* XID */
show binary logs;
Log_name File_size
-master-bin.000001 1310
-master-bin.000002 400
+master-bin.000001 1313
+master-bin.000002 403
start slave;
show binary logs;
Log_name File_size
-slave-bin.000001 1408
-slave-bin.000002 301
+slave-bin.000001 1411
+slave-bin.000002 304
show binlog events in 'slave-bin.000001' from 4;
Log_name Pos Event_type Server_id End_log_pos Info
slave-bin.000001 # Format_desc 2 # Server ver: VERSION, Binlog ver: 4
@@ -102,7 +102,7 @@ slave-bin.000002 # Write_rows 1 # table_id: # flags: STMT_END_F
slave-bin.000002 # Xid 1 # COMMIT /* XID */
show slave status;
Slave_IO_State Master_Host Master_User Master_Port Connect_Retry Master_Log_File Read_Master_Log_Pos Relay_Log_File Relay_Log_Pos Relay_Master_Log_File Slave_IO_Running Slave_SQL_Running Replicate_Do_DB Replicate_Ignore_DB Replicate_Do_Table Replicate_Ignore_Table Replicate_Wild_Do_Table Replicate_Wild_Ignore_Table Last_Errno Last_Error Skip_Counter Exec_Master_Log_Pos Relay_Log_Space Until_Condition Until_Log_File Until_Log_Pos Master_SSL_Allowed Master_SSL_CA_File Master_SSL_CA_Path Master_SSL_Cert Master_SSL_Cipher Master_SSL_Key Seconds_Behind_Master
-# 127.0.0.1 root MASTER_PORT 1 master-bin.000002 400 # # master-bin.000002 Yes Yes # 0 0 400 # None 0 No #
+# 127.0.0.1 root MASTER_PORT 1 master-bin.000002 403 # # master-bin.000002 Yes Yes # 0 0 403 # None 0 No #
show binlog events in 'slave-bin.000005' from 4;
ERROR HY000: Error when executing command SHOW BINLOG EVENTS: Could not find target log
DROP TABLE t1;
diff --git a/mysql-test/r/rpl_row_max_relay_size.result b/mysql-test/r/rpl_row_max_relay_size.result
index 163e8231de5..9f420c120d3 100644
--- a/mysql-test/r/rpl_row_max_relay_size.result
+++ b/mysql-test/r/rpl_row_max_relay_size.result
@@ -29,7 +29,7 @@ Master_User root
Master_Port MASTER_PORT
Connect_Retry 1
Master_Log_File master-bin.000001
-Read_Master_Log_Pos 58664
+Read_Master_Log_Pos 58667
Relay_Log_File #
Relay_Log_Pos #
Relay_Master_Log_File master-bin.000001
@@ -44,7 +44,7 @@ Replicate_Wild_Ignore_Table
Last_Errno 0
Last_Error
Skip_Counter 0
-Exec_Master_Log_Pos 58664
+Exec_Master_Log_Pos 58667
Relay_Log_Space #
Until_Condition None
Until_Log_File
@@ -72,7 +72,7 @@ Master_User root
Master_Port MASTER_PORT
Connect_Retry 1
Master_Log_File master-bin.000001
-Read_Master_Log_Pos 58664
+Read_Master_Log_Pos 58667
Relay_Log_File #
Relay_Log_Pos #
Relay_Master_Log_File master-bin.000001
@@ -87,7 +87,7 @@ Replicate_Wild_Ignore_Table
Last_Errno 0
Last_Error
Skip_Counter 0
-Exec_Master_Log_Pos 58664
+Exec_Master_Log_Pos 58667
Relay_Log_Space #
Until_Condition None
Until_Log_File
@@ -115,7 +115,7 @@ Master_User root
Master_Port MASTER_PORT
Connect_Retry 1
Master_Log_File master-bin.000001
-Read_Master_Log_Pos 58664
+Read_Master_Log_Pos 58667
Relay_Log_File #
Relay_Log_Pos #
Relay_Master_Log_File master-bin.000001
@@ -130,7 +130,7 @@ Replicate_Wild_Ignore_Table
Last_Errno 0
Last_Error
Skip_Counter 0
-Exec_Master_Log_Pos 58664
+Exec_Master_Log_Pos 58667
Relay_Log_Space #
Until_Condition None
Until_Log_File
@@ -196,7 +196,7 @@ Master_User root
Master_Port MASTER_PORT
Connect_Retry 1
Master_Log_File master-bin.000001
-Read_Master_Log_Pos 58750
+Read_Master_Log_Pos 58753
Relay_Log_File #
Relay_Log_Pos #
Relay_Master_Log_File master-bin.000001
@@ -211,7 +211,7 @@ Replicate_Wild_Ignore_Table
Last_Errno 0
Last_Error
Skip_Counter 0
-Exec_Master_Log_Pos 58750
+Exec_Master_Log_Pos 58753
Relay_Log_Space #
Until_Condition None
Until_Log_File
@@ -235,7 +235,7 @@ Master_User root
Master_Port MASTER_PORT
Connect_Retry 1
Master_Log_File master-bin.000001
-Read_Master_Log_Pos 58826
+Read_Master_Log_Pos 58829
Relay_Log_File #
Relay_Log_Pos #
Relay_Master_Log_File master-bin.000001
@@ -250,7 +250,7 @@ Replicate_Wild_Ignore_Table
Last_Errno 0
Last_Error
Skip_Counter 0
-Exec_Master_Log_Pos 58826
+Exec_Master_Log_Pos 58829
Relay_Log_Space #
Until_Condition None
Until_Log_File
@@ -265,7 +265,7 @@ Seconds_Behind_Master #
flush logs;
show master status;
File master-bin.000002
-Position 102
+Position 105
Binlog_Do_DB <Binlog_Ignore_DB>
Binlog_Ignore_DB
#
diff --git a/mysql-test/r/rpl_row_reset_slave.result b/mysql-test/r/rpl_row_reset_slave.result
index 57fc95708e5..a93db7b2c7e 100644
--- a/mysql-test/r/rpl_row_reset_slave.result
+++ b/mysql-test/r/rpl_row_reset_slave.result
@@ -6,12 +6,12 @@ drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
start slave;
show slave status;
Slave_IO_State Master_Host Master_User Master_Port Connect_Retry Master_Log_File Read_Master_Log_Pos Relay_Log_File Relay_Log_Pos Relay_Master_Log_File Slave_IO_Running Slave_SQL_Running Replicate_Do_DB Replicate_Ignore_DB Replicate_Do_Table Replicate_Ignore_Table Replicate_Wild_Do_Table Replicate_Wild_Ignore_Table Last_Errno Last_Error Skip_Counter Exec_Master_Log_Pos Relay_Log_Space Until_Condition Until_Log_File Until_Log_Pos Master_SSL_Allowed Master_SSL_CA_File Master_SSL_CA_Path Master_SSL_Cert Master_SSL_Cipher Master_SSL_Key Seconds_Behind_Master
-# 127.0.0.1 root MASTER_PORT 1 master-bin.000001 102 # # master-bin.000001 Yes Yes # 0 0 102 # None 0 No #
+# 127.0.0.1 root MASTER_PORT 1 master-bin.000001 105 # # master-bin.000001 Yes Yes # 0 0 105 # None 0 No #
stop slave;
change master to master_user='test';
show slave status;
Slave_IO_State Master_Host Master_User Master_Port Connect_Retry Master_Log_File Read_Master_Log_Pos Relay_Log_File Relay_Log_Pos Relay_Master_Log_File Slave_IO_Running Slave_SQL_Running Replicate_Do_DB Replicate_Ignore_DB Replicate_Do_Table Replicate_Ignore_Table Replicate_Wild_Do_Table Replicate_Wild_Ignore_Table Last_Errno Last_Error Skip_Counter Exec_Master_Log_Pos Relay_Log_Space Until_Condition Until_Log_File Until_Log_Pos Master_SSL_Allowed Master_SSL_CA_File Master_SSL_CA_Path Master_SSL_Cert Master_SSL_Cipher Master_SSL_Key Seconds_Behind_Master
-# 127.0.0.1 test MASTER_PORT 1 master-bin.000001 102 # # master-bin.000001 No No # 0 0 102 # None 0 No #
+# 127.0.0.1 test MASTER_PORT 1 master-bin.000001 105 # # master-bin.000001 No No # 0 0 105 # None 0 No #
reset slave;
show slave status;
Slave_IO_State Master_Host Master_User Master_Port Connect_Retry Master_Log_File Read_Master_Log_Pos Relay_Log_File Relay_Log_Pos Relay_Master_Log_File Slave_IO_Running Slave_SQL_Running Replicate_Do_DB Replicate_Ignore_DB Replicate_Do_Table Replicate_Ignore_Table Replicate_Wild_Do_Table Replicate_Wild_Ignore_Table Last_Errno Last_Error Skip_Counter Exec_Master_Log_Pos Relay_Log_Space Until_Condition Until_Log_File Until_Log_Pos Master_SSL_Allowed Master_SSL_CA_File Master_SSL_CA_Path Master_SSL_Cert Master_SSL_Cipher Master_SSL_Key Seconds_Behind_Master
@@ -19,7 +19,7 @@ Slave_IO_State Master_Host Master_User Master_Port Connect_Retry Master_Log_File
start slave;
show slave status;
Slave_IO_State Master_Host Master_User Master_Port Connect_Retry Master_Log_File Read_Master_Log_Pos Relay_Log_File Relay_Log_Pos Relay_Master_Log_File Slave_IO_Running Slave_SQL_Running Replicate_Do_DB Replicate_Ignore_DB Replicate_Do_Table Replicate_Ignore_Table Replicate_Wild_Do_Table Replicate_Wild_Ignore_Table Last_Errno Last_Error Skip_Counter Exec_Master_Log_Pos Relay_Log_Space Until_Condition Until_Log_File Until_Log_Pos Master_SSL_Allowed Master_SSL_CA_File Master_SSL_CA_Path Master_SSL_Cert Master_SSL_Cipher Master_SSL_Key Seconds_Behind_Master
-# 127.0.0.1 root MASTER_PORT 1 master-bin.000001 102 # # master-bin.000001 Yes Yes # 0 0 102 # None 0 No #
+# 127.0.0.1 root MASTER_PORT 1 master-bin.000001 105 # # master-bin.000001 Yes Yes # 0 0 105 # None 0 No #
stop slave;
reset slave;
start slave;
diff --git a/mysql-test/r/rpl_row_until.result b/mysql-test/r/rpl_row_until.result
index 8d4b0d6b591..6d0da57baeb 100644
--- a/mysql-test/r/rpl_row_until.result
+++ b/mysql-test/r/rpl_row_until.result
@@ -21,7 +21,7 @@ n
4
show slave status;
Slave_IO_State Master_Host Master_User Master_Port Connect_Retry Master_Log_File Read_Master_Log_Pos Relay_Log_File Relay_Log_Pos Relay_Master_Log_File Slave_IO_Running Slave_SQL_Running Replicate_Do_DB Replicate_Ignore_DB Replicate_Do_Table Replicate_Ignore_Table Replicate_Wild_Do_Table Replicate_Wild_Ignore_Table Last_Errno Last_Error Skip_Counter Exec_Master_Log_Pos Relay_Log_Space Until_Condition Until_Log_File Until_Log_Pos Master_SSL_Allowed Master_SSL_CA_File Master_SSL_CA_Path Master_SSL_Cert Master_SSL_Cipher Master_SSL_Key Seconds_Behind_Master
-# 127.0.0.1 root MASTER_MYPORT 1 master-bin.000001 740 slave-relay-bin.000004 # master-bin.000001 # No 0 0 311 # Master master-bin.000001 311 No #
+# 127.0.0.1 root MASTER_MYPORT 1 master-bin.000001 743 slave-relay-bin.000004 # master-bin.000001 # No 0 0 314 # Master master-bin.000001 311 No #
start slave until master_log_file='master-no-such-bin.000001', master_log_pos=291;
select * from t1;
n
@@ -31,7 +31,7 @@ n
4
show slave status;
Slave_IO_State Master_Host Master_User Master_Port Connect_Retry Master_Log_File Read_Master_Log_Pos Relay_Log_File Relay_Log_Pos Relay_Master_Log_File Slave_IO_Running Slave_SQL_Running Replicate_Do_DB Replicate_Ignore_DB Replicate_Do_Table Replicate_Ignore_Table Replicate_Wild_Do_Table Replicate_Wild_Ignore_Table Last_Errno Last_Error Skip_Counter Exec_Master_Log_Pos Relay_Log_Space Until_Condition Until_Log_File Until_Log_Pos Master_SSL_Allowed Master_SSL_CA_File Master_SSL_CA_Path Master_SSL_Cert Master_SSL_Cipher Master_SSL_Key Seconds_Behind_Master
-# 127.0.0.1 root MASTER_MYPORT 1 master-bin.000001 740 slave-relay-bin.000004 # master-bin.000001 # No 0 0 311 # Master master-no-such-bin.000001 291 No #
+# 127.0.0.1 root MASTER_MYPORT 1 master-bin.000001 743 slave-relay-bin.000004 # master-bin.000001 # No 0 0 314 # Master master-no-such-bin.000001 291 No #
start slave until relay_log_file='slave-relay-bin.000004', relay_log_pos=728;
select * from t2;
n
@@ -39,13 +39,13 @@ n
2
show slave status;
Slave_IO_State Master_Host Master_User Master_Port Connect_Retry Master_Log_File Read_Master_Log_Pos Relay_Log_File Relay_Log_Pos Relay_Master_Log_File Slave_IO_Running Slave_SQL_Running Replicate_Do_DB Replicate_Ignore_DB Replicate_Do_Table Replicate_Ignore_Table Replicate_Wild_Do_Table Replicate_Wild_Ignore_Table Last_Errno Last_Error Skip_Counter Exec_Master_Log_Pos Relay_Log_Space Until_Condition Until_Log_File Until_Log_Pos Master_SSL_Allowed Master_SSL_CA_File Master_SSL_CA_Path Master_SSL_Cert Master_SSL_Cipher Master_SSL_Key Seconds_Behind_Master
-# 127.0.0.1 root MASTER_MYPORT 1 master-bin.000001 740 slave-relay-bin.000004 # master-bin.000001 # No 0 0 586 # Relay slave-relay-bin.000004 728 No #
+# 127.0.0.1 root MASTER_MYPORT 1 master-bin.000001 743 slave-relay-bin.000004 # master-bin.000001 # No 0 0 589 # Relay slave-relay-bin.000004 728 No #
start slave;
stop slave;
start slave until master_log_file='master-bin.000001', master_log_pos=740;
show slave status;
Slave_IO_State Master_Host Master_User Master_Port Connect_Retry Master_Log_File Read_Master_Log_Pos Relay_Log_File Relay_Log_Pos Relay_Master_Log_File Slave_IO_Running Slave_SQL_Running Replicate_Do_DB Replicate_Ignore_DB Replicate_Do_Table Replicate_Ignore_Table Replicate_Wild_Do_Table Replicate_Wild_Ignore_Table Last_Errno Last_Error Skip_Counter Exec_Master_Log_Pos Relay_Log_Space Until_Condition Until_Log_File Until_Log_Pos Master_SSL_Allowed Master_SSL_CA_File Master_SSL_CA_Path Master_SSL_Cert Master_SSL_Cipher Master_SSL_Key Seconds_Behind_Master
-# 127.0.0.1 root MASTER_MYPORT 1 master-bin.000001 740 slave-relay-bin.000004 # master-bin.000001 Yes No 0 0 740 # Master master-bin.000001 740 No #
+# 127.0.0.1 root MASTER_MYPORT 1 master-bin.000001 743 slave-relay-bin.000004 # master-bin.000001 Yes No 0 0 743 # Master master-bin.000001 740 No #
start slave until master_log_file='master-bin', master_log_pos=561;
ERROR HY000: Incorrect parameter or combination of parameters for START SLAVE UNTIL
start slave until master_log_file='master-bin.000001', master_log_pos=561, relay_log_pos=12;
diff --git a/mysql-test/r/rpl_server_id1.result b/mysql-test/r/rpl_server_id1.result
index c94a7748fcd..7091a26f272 100644
--- a/mysql-test/r/rpl_server_id1.result
+++ b/mysql-test/r/rpl_server_id1.result
@@ -10,7 +10,7 @@ stop slave;
change master to master_port=SLAVE_PORT;
show slave status;
Slave_IO_State Master_Host Master_User Master_Port Connect_Retry Master_Log_File Read_Master_Log_Pos Relay_Log_File Relay_Log_Pos Relay_Master_Log_File Slave_IO_Running Slave_SQL_Running Replicate_Do_DB Replicate_Ignore_DB Replicate_Do_Table Replicate_Ignore_Table Replicate_Wild_Do_Table Replicate_Wild_Ignore_Table Last_Errno Last_Error Skip_Counter Exec_Master_Log_Pos Relay_Log_Space Until_Condition Until_Log_File Until_Log_Pos Master_SSL_Allowed Master_SSL_CA_File Master_SSL_CA_Path Master_SSL_Cert Master_SSL_Cipher Master_SSL_Key Seconds_Behind_Master
- 127.0.0.1 root SLAVE_PORT 1 4 slave-relay-bin.000001 4 No No # # 0 0 0 102 None 0 No NULL
+ 127.0.0.1 root SLAVE_PORT 1 4 slave-relay-bin.000001 4 No No # # 0 0 0 105 None 0 No NULL
start slave;
insert into t1 values (1);
show status like "slave_running";
diff --git a/mysql-test/r/rpl_server_id2.result b/mysql-test/r/rpl_server_id2.result
index 72db862040e..3ad15d7ce5b 100644
--- a/mysql-test/r/rpl_server_id2.result
+++ b/mysql-test/r/rpl_server_id2.result
@@ -10,7 +10,7 @@ stop slave;
change master to master_port=SLAVE_PORT;
show slave status;
Slave_IO_State Master_Host Master_User Master_Port Connect_Retry Master_Log_File Read_Master_Log_Pos Relay_Log_File Relay_Log_Pos Relay_Master_Log_File Slave_IO_Running Slave_SQL_Running Replicate_Do_DB Replicate_Ignore_DB Replicate_Do_Table Replicate_Ignore_Table Replicate_Wild_Do_Table Replicate_Wild_Ignore_Table Last_Errno Last_Error Skip_Counter Exec_Master_Log_Pos Relay_Log_Space Until_Condition Until_Log_File Until_Log_Pos Master_SSL_Allowed Master_SSL_CA_File Master_SSL_CA_Path Master_SSL_Cert Master_SSL_Cipher Master_SSL_Key Seconds_Behind_Master
- 127.0.0.1 root SLAVE_PORT 1 4 slave-relay-bin.000001 4 No No # 0 0 0 102 None 0 No NULL
+ 127.0.0.1 root SLAVE_PORT 1 4 slave-relay-bin.000001 4 No No # 0 0 0 105 None 0 No NULL
start slave;
insert into t1 values (1);
select * from t1;
diff --git a/mysql-test/r/rpl_switch_stm_row_mixed.result b/mysql-test/r/rpl_switch_stm_row_mixed.result
index 047bfe53704..2f970adea11 100644
--- a/mysql-test/r/rpl_switch_stm_row_mixed.result
+++ b/mysql-test/r/rpl_switch_stm_row_mixed.result
@@ -382,7 +382,7 @@ CREATE TABLE t12 (data LONG);
LOCK TABLES t12 WRITE;
INSERT INTO t12 VALUES(UUID());
UNLOCK TABLES;
-show binlog events from 102;
+show binlog events from 105;
Log_name Pos Event_type Server_id End_log_pos Info
master-bin.000001 # Query 1 # drop database if exists mysqltest1
master-bin.000001 # Query 1 # create database mysqltest1
@@ -692,7 +692,7 @@ master-bin.000001 # Query 1 # use `mysqltest1`; DROP TABLE IF EXISTS t12
master-bin.000001 # Query 1 # use `mysqltest1`; CREATE TABLE t12 (data LONG)
master-bin.000001 # Table_map 1 # table_id: # (mysqltest1.t12)
master-bin.000001 # Write_rows 1 # table_id: # flags: STMT_END_F
-show binlog events from 102;
+show binlog events from 105;
Log_name Pos Event_type Server_id End_log_pos Info
master-bin.000001 # Query 1 # drop database if exists mysqltest1
master-bin.000001 # Query 1 # create database mysqltest1
diff --git a/mysql-test/r/rpl_truncate_2myisam.result b/mysql-test/r/rpl_truncate_2myisam.result
index 41640a709b9..23e4630c3c8 100644
--- a/mysql-test/r/rpl_truncate_2myisam.result
+++ b/mysql-test/r/rpl_truncate_2myisam.result
@@ -31,11 +31,11 @@ a b
DROP TABLE t1;
SHOW BINLOG EVENTS;
Log_name Pos Event_type Server_id End_log_pos Info
-master-bin.000001 4 Format_desc 1 102 Server ver: SERVER_VERSION, Binlog ver: 4
-master-bin.000001 102 Query 1 210 use `test`; CREATE TABLE t1 (a INT, b LONG) ENGINE=MyISAM
-master-bin.000001 210 Query 1 307 use `test`; INSERT INTO t1 VALUES (1,1), (2,2)
-master-bin.000001 307 Query 1 387 use `test`; TRUNCATE TABLE t1
-master-bin.000001 387 Query 1 463 use `test`; DROP TABLE t1
+master-bin.000001 4 Format_desc 1 105 Server ver: SERVER_VERSION, Binlog ver: 4
+master-bin.000001 105 Query 1 213 use `test`; CREATE TABLE t1 (a INT, b LONG) ENGINE=MyISAM
+master-bin.000001 213 Query 1 310 use `test`; INSERT INTO t1 VALUES (1,1), (2,2)
+master-bin.000001 310 Query 1 390 use `test`; TRUNCATE TABLE t1
+master-bin.000001 390 Query 1 466 use `test`; DROP TABLE t1
**** On Master ****
SET SESSION BINLOG_FORMAT=MIXED;
SET GLOBAL BINLOG_FORMAT=MIXED;
@@ -63,11 +63,11 @@ a b
DROP TABLE t1;
SHOW BINLOG EVENTS;
Log_name Pos Event_type Server_id End_log_pos Info
-master-bin.000001 4 Format_desc 1 102 Server ver: SERVER_VERSION, Binlog ver: 4
-master-bin.000001 102 Query 1 210 use `test`; CREATE TABLE t1 (a INT, b LONG) ENGINE=MyISAM
-master-bin.000001 210 Query 1 307 use `test`; INSERT INTO t1 VALUES (1,1), (2,2)
-master-bin.000001 307 Query 1 387 use `test`; TRUNCATE TABLE t1
-master-bin.000001 387 Query 1 463 use `test`; DROP TABLE t1
+master-bin.000001 4 Format_desc 1 105 Server ver: SERVER_VERSION, Binlog ver: 4
+master-bin.000001 105 Query 1 213 use `test`; CREATE TABLE t1 (a INT, b LONG) ENGINE=MyISAM
+master-bin.000001 213 Query 1 310 use `test`; INSERT INTO t1 VALUES (1,1), (2,2)
+master-bin.000001 310 Query 1 390 use `test`; TRUNCATE TABLE t1
+master-bin.000001 390 Query 1 466 use `test`; DROP TABLE t1
**** On Master ****
SET SESSION BINLOG_FORMAT=ROW;
SET GLOBAL BINLOG_FORMAT=ROW;
@@ -95,12 +95,12 @@ a b
DROP TABLE t1;
SHOW BINLOG EVENTS;
Log_name Pos Event_type Server_id End_log_pos Info
-master-bin.000001 4 Format_desc 1 102 Server ver: SERVER_VERSION, Binlog ver: 4
-master-bin.000001 102 Query 1 210 use `test`; CREATE TABLE t1 (a INT, b LONG) ENGINE=MyISAM
-master-bin.000001 210 Table_map 1 250 table_id: # (test.t1)
-master-bin.000001 250 Write_rows 1 297 table_id: # flags: STMT_END_F
-master-bin.000001 297 Query 1 377 use `test`; TRUNCATE TABLE t1
-master-bin.000001 377 Query 1 453 use `test`; DROP TABLE t1
+master-bin.000001 4 Format_desc 1 105 Server ver: SERVER_VERSION, Binlog ver: 4
+master-bin.000001 105 Query 1 213 use `test`; CREATE TABLE t1 (a INT, b LONG) ENGINE=MyISAM
+master-bin.000001 213 Table_map 1 253 table_id: # (test.t1)
+master-bin.000001 253 Write_rows 1 300 table_id: # flags: STMT_END_F
+master-bin.000001 300 Query 1 380 use `test`; TRUNCATE TABLE t1
+master-bin.000001 380 Query 1 456 use `test`; DROP TABLE t1
**** On Master ****
SET SESSION BINLOG_FORMAT=STATEMENT;
SET GLOBAL BINLOG_FORMAT=STATEMENT;
@@ -128,11 +128,11 @@ a b
DROP TABLE t1;
SHOW BINLOG EVENTS;
Log_name Pos Event_type Server_id End_log_pos Info
-master-bin.000001 4 Format_desc 1 102 Server ver: SERVER_VERSION, Binlog ver: 4
-master-bin.000001 102 Query 1 210 use `test`; CREATE TABLE t1 (a INT, b LONG) ENGINE=MyISAM
-master-bin.000001 210 Query 1 307 use `test`; INSERT INTO t1 VALUES (1,1), (2,2)
-master-bin.000001 307 Query 1 384 use `test`; DELETE FROM t1
-master-bin.000001 384 Query 1 460 use `test`; DROP TABLE t1
+master-bin.000001 4 Format_desc 1 105 Server ver: SERVER_VERSION, Binlog ver: 4
+master-bin.000001 105 Query 1 213 use `test`; CREATE TABLE t1 (a INT, b LONG) ENGINE=MyISAM
+master-bin.000001 213 Query 1 310 use `test`; INSERT INTO t1 VALUES (1,1), (2,2)
+master-bin.000001 310 Query 1 387 use `test`; DELETE FROM t1
+master-bin.000001 387 Query 1 463 use `test`; DROP TABLE t1
**** On Master ****
SET SESSION BINLOG_FORMAT=MIXED;
SET GLOBAL BINLOG_FORMAT=MIXED;
@@ -160,11 +160,11 @@ a b
DROP TABLE t1;
SHOW BINLOG EVENTS;
Log_name Pos Event_type Server_id End_log_pos Info
-master-bin.000001 4 Format_desc 1 102 Server ver: SERVER_VERSION, Binlog ver: 4
-master-bin.000001 102 Query 1 210 use `test`; CREATE TABLE t1 (a INT, b LONG) ENGINE=MyISAM
-master-bin.000001 210 Query 1 307 use `test`; INSERT INTO t1 VALUES (1,1), (2,2)
-master-bin.000001 307 Query 1 384 use `test`; DELETE FROM t1
-master-bin.000001 384 Query 1 460 use `test`; DROP TABLE t1
+master-bin.000001 4 Format_desc 1 105 Server ver: SERVER_VERSION, Binlog ver: 4
+master-bin.000001 105 Query 1 213 use `test`; CREATE TABLE t1 (a INT, b LONG) ENGINE=MyISAM
+master-bin.000001 213 Query 1 310 use `test`; INSERT INTO t1 VALUES (1,1), (2,2)
+master-bin.000001 310 Query 1 387 use `test`; DELETE FROM t1
+master-bin.000001 387 Query 1 463 use `test`; DROP TABLE t1
**** On Master ****
SET SESSION BINLOG_FORMAT=ROW;
SET GLOBAL BINLOG_FORMAT=ROW;
@@ -193,10 +193,10 @@ a b
DROP TABLE t1;
SHOW BINLOG EVENTS;
Log_name Pos Event_type Server_id End_log_pos Info
-master-bin.000001 4 Format_desc 1 102 Server ver: SERVER_VERSION, Binlog ver: 4
-master-bin.000001 102 Query 1 210 use `test`; CREATE TABLE t1 (a INT, b LONG) ENGINE=MyISAM
-master-bin.000001 210 Table_map 1 250 table_id: # (test.t1)
-master-bin.000001 250 Write_rows 1 297 table_id: # flags: STMT_END_F
-master-bin.000001 297 Table_map 1 337 table_id: # (test.t1)
-master-bin.000001 337 Delete_rows 1 384 table_id: # flags: STMT_END_F
-master-bin.000001 384 Query 1 460 use `test`; DROP TABLE t1
+master-bin.000001 4 Format_desc 1 105 Server ver: SERVER_VERSION, Binlog ver: 4
+master-bin.000001 105 Query 1 213 use `test`; CREATE TABLE t1 (a INT, b LONG) ENGINE=MyISAM
+master-bin.000001 213 Table_map 1 253 table_id: # (test.t1)
+master-bin.000001 253 Write_rows 1 300 table_id: # flags: STMT_END_F
+master-bin.000001 300 Table_map 1 340 table_id: # (test.t1)
+master-bin.000001 340 Delete_rows 1 387 table_id: # flags: STMT_END_F
+master-bin.000001 387 Query 1 463 use `test`; DROP TABLE t1
diff --git a/mysql-test/r/rpl_truncate_3innodb.result b/mysql-test/r/rpl_truncate_3innodb.result
index 062c9704ae0..c7edd5014c2 100644
--- a/mysql-test/r/rpl_truncate_3innodb.result
+++ b/mysql-test/r/rpl_truncate_3innodb.result
@@ -31,13 +31,13 @@ a b
DROP TABLE t1;
SHOW BINLOG EVENTS;
Log_name Pos Event_type Server_id End_log_pos Info
-master-bin.000001 4 Format_desc 1 102 Server ver: SERVER_VERSION, Binlog ver: 4
-master-bin.000001 102 Query 1 210 use `test`; CREATE TABLE t1 (a INT, b LONG) ENGINE=InnoDB
-master-bin.000001 210 Query 1 97 use `test`; INSERT INTO t1 VALUES (1,1), (2,2)
-master-bin.000001 307 Xid 1 334 COMMIT /* xid= */
-master-bin.000001 334 Query 1 80 use `test`; TRUNCATE TABLE t1
-master-bin.000001 414 Xid 1 441 COMMIT /* xid= */
-master-bin.000001 441 Query 1 517 use `test`; DROP TABLE t1
+master-bin.000001 4 Format_desc 1 105 Server ver: SERVER_VERSION, Binlog ver: 4
+master-bin.000001 105 Query 1 213 use `test`; CREATE TABLE t1 (a INT, b LONG) ENGINE=InnoDB
+master-bin.000001 213 Query 1 97 use `test`; INSERT INTO t1 VALUES (1,1), (2,2)
+master-bin.000001 310 Xid 1 337 COMMIT /* xid= */
+master-bin.000001 337 Query 1 80 use `test`; TRUNCATE TABLE t1
+master-bin.000001 417 Xid 1 444 COMMIT /* xid= */
+master-bin.000001 444 Query 1 520 use `test`; DROP TABLE t1
**** On Master ****
SET SESSION BINLOG_FORMAT=MIXED;
SET GLOBAL BINLOG_FORMAT=MIXED;
@@ -65,13 +65,13 @@ a b
DROP TABLE t1;
SHOW BINLOG EVENTS;
Log_name Pos Event_type Server_id End_log_pos Info
-master-bin.000001 4 Format_desc 1 102 Server ver: SERVER_VERSION, Binlog ver: 4
-master-bin.000001 102 Query 1 210 use `test`; CREATE TABLE t1 (a INT, b LONG) ENGINE=InnoDB
-master-bin.000001 210 Query 1 97 use `test`; INSERT INTO t1 VALUES (1,1), (2,2)
-master-bin.000001 307 Xid 1 334 COMMIT /* xid= */
-master-bin.000001 334 Query 1 80 use `test`; TRUNCATE TABLE t1
-master-bin.000001 414 Xid 1 441 COMMIT /* xid= */
-master-bin.000001 441 Query 1 517 use `test`; DROP TABLE t1
+master-bin.000001 4 Format_desc 1 105 Server ver: SERVER_VERSION, Binlog ver: 4
+master-bin.000001 105 Query 1 213 use `test`; CREATE TABLE t1 (a INT, b LONG) ENGINE=InnoDB
+master-bin.000001 213 Query 1 97 use `test`; INSERT INTO t1 VALUES (1,1), (2,2)
+master-bin.000001 310 Xid 1 337 COMMIT /* xid= */
+master-bin.000001 337 Query 1 80 use `test`; TRUNCATE TABLE t1
+master-bin.000001 417 Xid 1 444 COMMIT /* xid= */
+master-bin.000001 444 Query 1 520 use `test`; DROP TABLE t1
**** On Master ****
SET SESSION BINLOG_FORMAT=ROW;
SET GLOBAL BINLOG_FORMAT=ROW;
@@ -99,14 +99,14 @@ a b
DROP TABLE t1;
SHOW BINLOG EVENTS;
Log_name Pos Event_type Server_id End_log_pos Info
-master-bin.000001 4 Format_desc 1 102 Server ver: SERVER_VERSION, Binlog ver: 4
-master-bin.000001 102 Query 1 210 use `test`; CREATE TABLE t1 (a INT, b LONG) ENGINE=InnoDB
-master-bin.000001 210 Table_map 1 40 table_id: # (test.t1)
-master-bin.000001 250 Write_rows 1 87 table_id: # flags: STMT_END_F
-master-bin.000001 297 Xid 1 324 COMMIT /* xid= */
-master-bin.000001 324 Query 1 80 use `test`; TRUNCATE TABLE t1
-master-bin.000001 404 Xid 1 431 COMMIT /* xid= */
-master-bin.000001 431 Query 1 507 use `test`; DROP TABLE t1
+master-bin.000001 4 Format_desc 1 105 Server ver: SERVER_VERSION, Binlog ver: 4
+master-bin.000001 105 Query 1 213 use `test`; CREATE TABLE t1 (a INT, b LONG) ENGINE=InnoDB
+master-bin.000001 213 Table_map 1 40 table_id: # (test.t1)
+master-bin.000001 253 Write_rows 1 87 table_id: # flags: STMT_END_F
+master-bin.000001 300 Xid 1 327 COMMIT /* xid= */
+master-bin.000001 327 Query 1 80 use `test`; TRUNCATE TABLE t1
+master-bin.000001 407 Xid 1 434 COMMIT /* xid= */
+master-bin.000001 434 Query 1 510 use `test`; DROP TABLE t1
**** On Master ****
SET SESSION BINLOG_FORMAT=STATEMENT;
SET GLOBAL BINLOG_FORMAT=STATEMENT;
@@ -134,13 +134,13 @@ a b
DROP TABLE t1;
SHOW BINLOG EVENTS;
Log_name Pos Event_type Server_id End_log_pos Info
-master-bin.000001 4 Format_desc 1 102 Server ver: SERVER_VERSION, Binlog ver: 4
-master-bin.000001 102 Query 1 210 use `test`; CREATE TABLE t1 (a INT, b LONG) ENGINE=InnoDB
-master-bin.000001 210 Query 1 97 use `test`; INSERT INTO t1 VALUES (1,1), (2,2)
-master-bin.000001 307 Xid 1 334 COMMIT /* xid= */
-master-bin.000001 334 Query 1 77 use `test`; DELETE FROM t1
-master-bin.000001 411 Xid 1 438 COMMIT /* xid= */
-master-bin.000001 438 Query 1 514 use `test`; DROP TABLE t1
+master-bin.000001 4 Format_desc 1 105 Server ver: SERVER_VERSION, Binlog ver: 4
+master-bin.000001 105 Query 1 213 use `test`; CREATE TABLE t1 (a INT, b LONG) ENGINE=InnoDB
+master-bin.000001 213 Query 1 97 use `test`; INSERT INTO t1 VALUES (1,1), (2,2)
+master-bin.000001 310 Xid 1 337 COMMIT /* xid= */
+master-bin.000001 337 Query 1 77 use `test`; DELETE FROM t1
+master-bin.000001 414 Xid 1 441 COMMIT /* xid= */
+master-bin.000001 441 Query 1 517 use `test`; DROP TABLE t1
**** On Master ****
SET SESSION BINLOG_FORMAT=MIXED;
SET GLOBAL BINLOG_FORMAT=MIXED;
@@ -168,13 +168,13 @@ a b
DROP TABLE t1;
SHOW BINLOG EVENTS;
Log_name Pos Event_type Server_id End_log_pos Info
-master-bin.000001 4 Format_desc 1 102 Server ver: SERVER_VERSION, Binlog ver: 4
-master-bin.000001 102 Query 1 210 use `test`; CREATE TABLE t1 (a INT, b LONG) ENGINE=InnoDB
-master-bin.000001 210 Query 1 97 use `test`; INSERT INTO t1 VALUES (1,1), (2,2)
-master-bin.000001 307 Xid 1 334 COMMIT /* xid= */
-master-bin.000001 334 Query 1 77 use `test`; DELETE FROM t1
-master-bin.000001 411 Xid 1 438 COMMIT /* xid= */
-master-bin.000001 438 Query 1 514 use `test`; DROP TABLE t1
+master-bin.000001 4 Format_desc 1 105 Server ver: SERVER_VERSION, Binlog ver: 4
+master-bin.000001 105 Query 1 213 use `test`; CREATE TABLE t1 (a INT, b LONG) ENGINE=InnoDB
+master-bin.000001 213 Query 1 97 use `test`; INSERT INTO t1 VALUES (1,1), (2,2)
+master-bin.000001 310 Xid 1 337 COMMIT /* xid= */
+master-bin.000001 337 Query 1 77 use `test`; DELETE FROM t1
+master-bin.000001 414 Xid 1 441 COMMIT /* xid= */
+master-bin.000001 441 Query 1 517 use `test`; DROP TABLE t1
**** On Master ****
SET SESSION BINLOG_FORMAT=ROW;
SET GLOBAL BINLOG_FORMAT=ROW;
@@ -203,12 +203,12 @@ a b
DROP TABLE t1;
SHOW BINLOG EVENTS;
Log_name Pos Event_type Server_id End_log_pos Info
-master-bin.000001 4 Format_desc 1 102 Server ver: SERVER_VERSION, Binlog ver: 4
-master-bin.000001 102 Query 1 210 use `test`; CREATE TABLE t1 (a INT, b LONG) ENGINE=InnoDB
-master-bin.000001 210 Table_map 1 40 table_id: # (test.t1)
-master-bin.000001 250 Write_rows 1 87 table_id: # flags: STMT_END_F
-master-bin.000001 297 Xid 1 324 COMMIT /* xid= */
-master-bin.000001 324 Table_map 1 40 table_id: # (test.t1)
-master-bin.000001 364 Delete_rows 1 87 table_id: # flags: STMT_END_F
-master-bin.000001 411 Xid 1 438 COMMIT /* xid= */
-master-bin.000001 438 Query 1 514 use `test`; DROP TABLE t1
+master-bin.000001 4 Format_desc 1 105 Server ver: SERVER_VERSION, Binlog ver: 4
+master-bin.000001 105 Query 1 213 use `test`; CREATE TABLE t1 (a INT, b LONG) ENGINE=InnoDB
+master-bin.000001 213 Table_map 1 40 table_id: # (test.t1)
+master-bin.000001 253 Write_rows 1 87 table_id: # flags: STMT_END_F
+master-bin.000001 300 Xid 1 327 COMMIT /* xid= */
+master-bin.000001 327 Table_map 1 40 table_id: # (test.t1)
+master-bin.000001 367 Delete_rows 1 87 table_id: # flags: STMT_END_F
+master-bin.000001 414 Xid 1 441 COMMIT /* xid= */
+master-bin.000001 441 Query 1 517 use `test`; DROP TABLE t1
diff --git a/mysql-test/t/rpl_loaddata_s.test b/mysql-test/t/rpl_loaddata_s.test
index 2c94c8ef953..e9c0ce96925 100644
--- a/mysql-test/t/rpl_loaddata_s.test
+++ b/mysql-test/t/rpl_loaddata_s.test
@@ -22,7 +22,7 @@ sync_with_master;
select count(*) from test.t1; # check that LOAD was replicated
--replace_column 2 # 5 #
--replace_regex /table_id: [0-9]+/table_id: #/
-show binlog events from 102; # should be nothing
+show binlog events from 105; # should be nothing
# Cleanup
connection master;
diff --git a/mysql-test/t/rpl_log_pos.test b/mysql-test/t/rpl_log_pos.test
index 61c24da514e..ffc62bb2f51 100644
--- a/mysql-test/t/rpl_log_pos.test
+++ b/mysql-test/t/rpl_log_pos.test
@@ -49,7 +49,7 @@ insert into t1 values (1),(2),(3);
save_master_pos;
connection slave;
stop slave;
-change master to master_log_pos=102;
+change master to master_log_pos=105;
start slave;
sync_with_master;
select * from t1 ORDER BY n;
diff --git a/mysql-test/t/rpl_row_basic_11bugs-master.opt b/mysql-test/t/rpl_row_basic_11bugs-master.opt
index ad03cdaa6d1..ceba85f40e5 100644
--- a/mysql-test/t/rpl_row_basic_11bugs-master.opt
+++ b/mysql-test/t/rpl_row_basic_11bugs-master.opt
@@ -1 +1,2 @@
---binlog_ignore_db=test_ignore
+--binlog_ignore_db=test_ignore --innodb
+
diff --git a/mysql-test/t/rpl_row_basic_11bugs-slave.opt b/mysql-test/t/rpl_row_basic_11bugs-slave.opt
new file mode 100644
index 00000000000..627becdbfb5
--- /dev/null
+++ b/mysql-test/t/rpl_row_basic_11bugs-slave.opt
@@ -0,0 +1 @@
+--innodb
diff --git a/mysql-test/t/rpl_row_basic_11bugs.test b/mysql-test/t/rpl_row_basic_11bugs.test
index 37bfd01e260..bec3478f456 100644
--- a/mysql-test/t/rpl_row_basic_11bugs.test
+++ b/mysql-test/t/rpl_row_basic_11bugs.test
@@ -26,7 +26,7 @@ CREATE TABLE t2 (a INT, b INT);
SHOW TABLES;
INSERT INTO t2 VALUES (3,3), (4,4);
--replace_regex /table_id: [0-9]+/table_id: #/
-SHOW BINLOG EVENTS FROM 102;
+SHOW BINLOG EVENTS FROM 105;
sync_slave_with_master;
--echo **** On Slave ****
SHOW DATABASES;
@@ -114,3 +114,71 @@ UPDATE t1 SET a=0 WHERE b=2;
SELECT HEX(a),b FROM t1;
sync_slave_with_master;
SELECT HEX(a),b FROM t1;
+
+connection master;
+DROP TABLE IF EXISTS t1;
+sync_slave_with_master;
+
+# BUG#22583: RBR between MyISAM and non-MyISAM tables containing a BIT
+# field does not work
+
+--echo ================ Test for BUG#22583 ================
+--disable_query_log
+--source include/master-slave-reset.inc
+--enable_query_log
+
+--echo **** On Master ****
+connection master;
+CREATE TABLE t1_myisam (k INT, a BIT(1), b BIT(9)) ENGINE=MYISAM;
+CREATE TABLE t1_innodb (k INT, a BIT(1), b BIT(9)) ENGINE=INNODB;
+CREATE TABLE t2_myisam (k INT, a BIT(1) NOT NULL, b BIT(4) NOT NULL) ENGINE=MYISAM;
+CREATE TABLE t2_innodb (k INT, a BIT(1) NOT NULL, b BIT(4) NOT NULL) ENGINE=INNODB;
+--echo **** On Slave ****
+sync_slave_with_master;
+ALTER TABLE t1_myisam ENGINE=INNODB;
+ALTER TABLE t1_innodb ENGINE=MYISAM;
+ALTER TABLE t2_myisam ENGINE=INNODB;
+ALTER TABLE t2_innodb ENGINE=MYISAM;
+
+--echo **** On Master ****
+connection master;
+INSERT INTO t1_myisam VALUES(1, b'0', 257);
+INSERT INTO t1_myisam VALUES(2, b'1', 256);
+INSERT INTO t1_innodb VALUES(1, b'0', 257);
+INSERT INTO t1_innodb VALUES(2, b'1', 256);
+SELECT k, HEX(a),HEX(b) FROM t1_myisam;
+SELECT k, HEX(a),HEX(b) FROM t1_innodb;
+INSERT INTO t2_myisam VALUES(1, b'0', 9);
+INSERT INTO t2_myisam VALUES(2, b'1', 8);
+INSERT INTO t2_innodb VALUES(1, b'0', 9);
+INSERT INTO t2_innodb VALUES(2, b'1', 8);
+SELECT k, HEX(a),HEX(b) FROM t2_myisam;
+SELECT k, HEX(a),HEX(b) FROM t2_innodb;
+--echo **** On Slave ****
+sync_slave_with_master;
+SELECT k, HEX(a),HEX(b) FROM t1_myisam;
+SELECT k, HEX(a),HEX(b) FROM t1_innodb;
+SELECT k, HEX(a),HEX(b) FROM t2_myisam;
+SELECT k, HEX(a),HEX(b) FROM t2_innodb;
+
+--echo **** On Master ****
+connection master;
+UPDATE t1_myisam SET a=0 WHERE k=2;
+SELECT k, HEX(a),HEX(b) FROM t1_myisam;
+UPDATE t1_innodb SET a=0 WHERE k=2;
+SELECT k, HEX(a),HEX(b) FROM t1_innodb;
+UPDATE t2_myisam SET a=0 WHERE k=2;
+SELECT k, HEX(a),HEX(b) FROM t2_myisam;
+UPDATE t2_innodb SET a=0 WHERE k=2;
+SELECT k, HEX(a),HEX(b) FROM t2_innodb;
+--echo **** On Slave ****
+sync_slave_with_master;
+SELECT k, HEX(a),HEX(b) FROM t1_myisam;
+SELECT k, HEX(a),HEX(b) FROM t1_innodb;
+SELECT k, HEX(a),HEX(b) FROM t2_myisam;
+SELECT k, HEX(a),HEX(b) FROM t2_innodb;
+
+--echo **** On Master ****
+connection master;
+DROP TABLE IF EXISTS t1_myisam, t1_innodb, t2_myisam, t2_innodb;
+sync_slave_with_master;
diff --git a/mysql-test/t/rpl_row_create_table.test b/mysql-test/t/rpl_row_create_table.test
index 3a711e5b496..bc1752b3d5b 100644
--- a/mysql-test/t/rpl_row_create_table.test
+++ b/mysql-test/t/rpl_row_create_table.test
@@ -32,7 +32,7 @@ CREATE TABLE t3 (a INT, b INT) CHARSET=utf8;
CREATE TABLE t4 (a INT, b INT) ENGINE=Merge CHARSET=utf8;
--replace_column 1 # 4 # 5 #
--replace_regex /table_id: [0-9]+/table_id: #/
---query_vertical SHOW BINLOG EVENTS FROM 212
+--query_vertical SHOW BINLOG EVENTS FROM 215
--echo **** On Master ****
--query_vertical SHOW CREATE TABLE t1
--query_vertical SHOW CREATE TABLE t2
@@ -67,7 +67,7 @@ connection master;
CREATE TABLE t7 (UNIQUE(b)) SELECT a,b FROM tt3;
# Shouldn't be written to the binary log
--replace_regex /table_id: [0-9]+/table_id: #/
-SHOW BINLOG EVENTS FROM 1256;
+SHOW BINLOG EVENTS FROM 1097;
# Test that INSERT-SELECT works the same way as for SBR.
CREATE TABLE t7 (a INT, b INT UNIQUE);
@@ -76,7 +76,7 @@ INSERT INTO t7 SELECT a,b FROM tt3;
SELECT * FROM t7 ORDER BY a,b;
# Should be written to the binary log
--replace_regex /table_id: [0-9]+/table_id: #/
-SHOW BINLOG EVENTS FROM 1118;
+SHOW BINLOG EVENTS FROM 1097;
sync_slave_with_master;
SELECT * FROM t7 ORDER BY a,b;
@@ -87,7 +87,7 @@ BEGIN;
INSERT INTO t7 SELECT a,b FROM tt4;
ROLLBACK;
--replace_regex /table_id: [0-9]+/table_id: #/
-SHOW BINLOG EVENTS FROM 1314;
+SHOW BINLOG EVENTS FROM 1293;
SELECT * FROM t7 ORDER BY a,b;
sync_slave_with_master;
SELECT * FROM t7 ORDER BY a,b;
@@ -102,7 +102,7 @@ CREATE TEMPORARY TABLE tt7 SELECT 1;
--query_vertical SHOW CREATE TABLE t8
--query_vertical SHOW CREATE TABLE t9
--replace_regex /table_id: [0-9]+/table_id: #/
-SHOW BINLOG EVENTS FROM 1410;
+SHOW BINLOG EVENTS FROM 1389;
sync_slave_with_master;
--echo **** On Slave ****
--query_vertical SHOW CREATE TABLE t8
diff --git a/mysql-test/t/rpl_row_flsh_tbls.test b/mysql-test/t/rpl_row_flsh_tbls.test
index 9e8efc1ac9c..ef8fb171989 100644
--- a/mysql-test/t/rpl_row_flsh_tbls.test
+++ b/mysql-test/t/rpl_row_flsh_tbls.test
@@ -1,7 +1,7 @@
# depends on the binlog output
-- source include/have_binlog_format_row.inc
-let $rename_event_pos= 615;
+let $rename_event_pos= 618;
# 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
diff --git a/mysql-test/t/rpl_row_mysqlbinlog.test b/mysql-test/t/rpl_row_mysqlbinlog.test
index 3b4c8db86d8..0bef8b5a62f 100644
--- a/mysql-test/t/rpl_row_mysqlbinlog.test
+++ b/mysql-test/t/rpl_row_mysqlbinlog.test
@@ -167,7 +167,7 @@ connection master;
select "--- Test 2 position test --" as "";
--enable_query_log
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
---exec $MYSQL_BINLOG --short-form --local-load=$MYSQLTEST_VARDIR/tmp/ --position=412 $MYSQLTEST_VARDIR/log/master-bin.000001
+--exec $MYSQL_BINLOG --short-form --local-load=$MYSQLTEST_VARDIR/tmp/ --position=415 $MYSQLTEST_VARDIR/log/master-bin.000001
# These are tests for remote binlog.
# They should return the same as previous test.
@@ -263,7 +263,7 @@ select "--- Test 6 reading stdin --" as "";
select "--- Test 7 reading stdin w/position --" as "";
--enable_query_log
--replace_result $MYSQL_TEST_DIR MYSQL_TEST_DIR
---exec $MYSQL_BINLOG --short-form --position=412 - < $MYSQLTEST_VARDIR/log/master-bin.000001
+--exec $MYSQL_BINLOG --short-form --position=415 - < $MYSQLTEST_VARDIR/log/master-bin.000001
# Bug#16217 (mysql client did not know how not switch its internal charset)
--disable_query_log
diff --git a/mysql-test/t/rpl_switch_stm_row_mixed.test b/mysql-test/t/rpl_switch_stm_row_mixed.test
index d345b62b8eb..24e1c17f59c 100644
--- a/mysql-test/t/rpl_switch_stm_row_mixed.test
+++ b/mysql-test/t/rpl_switch_stm_row_mixed.test
@@ -498,7 +498,7 @@ UNLOCK TABLES;
--replace_column 2 # 5 #
--replace_regex /table_id: [0-9]+/table_id: #/
-show binlog events from 102;
+show binlog events from 105;
sync_slave_with_master;
# as we're using UUID we don't SELECT but use "diff" like in rpl_row_UUID
@@ -515,7 +515,7 @@ sync_slave_with_master;
connection master;
--replace_column 2 # 5 #
--replace_regex /table_id: [0-9]+/table_id: #/
-show binlog events from 102;
+show binlog events from 105;
# Now test that mysqlbinlog works fine on a binlog generated by the
# mixed mode
diff --git a/mysql-test/t/user_var-binlog.test b/mysql-test/t/user_var-binlog.test
index 6615e48ca42..9f1c790847d 100644
--- a/mysql-test/t/user_var-binlog.test
+++ b/mysql-test/t/user_var-binlog.test
@@ -15,7 +15,7 @@ SET @var2=char(ascii('a'));
insert into t1 values (@var1),(@var2);
--replace_column 2 # 5 #
--replace_regex /table_id: [0-9]+/table_id: #/
-show binlog events from 102;
+show binlog events from 105;
# more important than SHOW BINLOG EVENTS, mysqlbinlog (where we
# absolutely need variables names to be quoted and strings to be
# escaped).
diff --git a/sql/log_event.cc b/sql/log_event.cc
index 4a6346bf57c..804c29724d5 100644
--- a/sql/log_event.cc
+++ b/sql/log_event.cc
@@ -1000,7 +1000,8 @@ Log_event* Log_event::read_log_event(const char* buf, uint event_len,
ev = new Execute_load_query_log_event(buf, event_len, description_event);
break;
default:
- DBUG_PRINT("error",("Unknown evernt code: %d",(int) buf[EVENT_TYPE_OFFSET]));
+ DBUG_PRINT("error",("Unknown event code: %d",
+ (int) buf[EVENT_TYPE_OFFSET]));
ev= NULL;
break;
}
@@ -5449,19 +5450,19 @@ int Rows_log_event::do_add_row_data(byte *const row_data,
SYNOPSIS
unpack_row()
- rli Relay log info
- table Table to unpack into
- colcnt Number of columns to read from record
- record Record where the data should be unpacked
- row Packed row data
- cols Pointer to columns data to fill in
- row_end Pointer to variable that will hold the value of the
- one-after-end position for the row
+ rli Relay log info
+ table Table to unpack into
+ colcnt Number of columns to read from record
+ record Record where the data should be unpacked
+ row_data Packed row data
+ cols Pointer to columns data to fill in
+ row_end Pointer to variable that will hold the value of the
+ one-after-end position for the row
master_reclength
- Pointer to variable that will be set to the length of the
- record on the master side
- rw_set Pointer to bitmap that holds either the read_set or the
- write_set of the table
+ Pointer to variable that will be set to the length of the
+ record on the master side
+ rw_set Pointer to bitmap that holds either the read_set or the
+ write_set of the table
DESCRIPTION
@@ -5484,62 +5485,78 @@ int Rows_log_event::do_add_row_data(byte *const row_data,
static int
unpack_row(RELAY_LOG_INFO *rli,
TABLE *table, uint const colcnt, byte *record,
- char const *row, MY_BITMAP const *cols,
- char const **row_end, ulong *master_reclength,
+ char const *const row_data, MY_BITMAP const *cols,
+ char const **const row_end, ulong *const master_reclength,
MY_BITMAP* const rw_set, Log_event_type const event_type)
{
- DBUG_ASSERT(record && row);
+ DBUG_ENTER("unpack_row");
+ DBUG_ASSERT(record && row_data);
my_ptrdiff_t const offset= record - (byte*) table->record[0];
- my_size_t master_null_bytes= table->s->null_bytes;
+ my_size_t const master_null_byte_count= (bitmap_bits_set(cols) + 7) / 8;
+ int error= 0;
- if (colcnt != table->s->fields)
- {
- Field **fptr= &table->field[colcnt-1];
- do
- master_null_bytes= (*fptr)->last_null_byte();
- while (master_null_bytes == Field::LAST_NULL_BYTE_UNDEF &&
- fptr-- > table->field);
+ char const *null_ptr= row_data;
+ char const *pack_ptr= row_data + master_null_byte_count;
- /*
- If master_null_bytes is LAST_NULL_BYTE_UNDEF (0) at this time,
- there were no nullable fields nor BIT fields at all in the
- columns that are common to the master and the slave. In that
- case, there is only one null byte holding the X bit.
+ bitmap_clear_all(rw_set);
- OBSERVE! There might still be nullable columns following the
- common columns, so table->s->null_bytes might be greater than 1.
- */
- if (master_null_bytes == Field::LAST_NULL_BYTE_UNDEF)
- master_null_bytes= 1;
- }
-
- DBUG_ASSERT(master_null_bytes <= table->s->null_bytes);
- memcpy(record, row, master_null_bytes); // [1]
- int error= 0;
-
- bitmap_set_all(rw_set);
+ memcpy(record, table->s->default_values, table->s->null_bytes);
Field **const begin_ptr = table->field;
Field **field_ptr;
- char const *ptr= row + master_null_bytes;
Field **const end_ptr= begin_ptr + colcnt;
+
+ DBUG_ASSERT(null_ptr < row_data + master_null_byte_count);
+
+ // Mask to mask out the correct bit among the null bits
+ unsigned int null_mask= 1U;
+ // The "current" null bits
+ unsigned int null_bits= *null_ptr++;
for (field_ptr= begin_ptr ; field_ptr < end_ptr ; ++field_ptr)
{
Field *const f= *field_ptr;
if (bitmap_is_set(cols, field_ptr - begin_ptr))
{
- f->move_field_offset(offset);
- ptr= f->unpack(f->ptr, ptr);
- f->move_field_offset(-offset);
+ if ((null_mask & 0xFF) == 0)
+ {
+ DBUG_ASSERT(null_ptr < row_data + master_null_byte_count);
+ null_mask= 1U;
+ null_bits= *null_ptr++;
+ }
+
+ DBUG_ASSERT(null_mask & 0xFF); // One of the 8 LSB should be set
+
+
/* Field...::unpack() cannot return 0 */
- DBUG_ASSERT(ptr != NULL);
+ DBUG_ASSERT(pack_ptr != NULL);
+
+ if ((null_bits & null_mask) && f->maybe_null())
+ f->set_null(offset);
+ else
+ {
+ f->set_notnull(offset);
+
+ /*
+ We only unpack the field if it was non-null
+ */
+ f->move_field_offset(offset);
+ pack_ptr= f->unpack(f->ptr, pack_ptr);
+ f->move_field_offset(-offset);
+ }
+
+ bitmap_set_bit(rw_set, field_ptr - begin_ptr);
+ null_mask <<= 1;
}
- else
- bitmap_clear_bit(rw_set, field_ptr - begin_ptr);
}
- *row_end = ptr;
+ /*
+ We should now have read all the null bytes, otherwise something is
+ really wrong.
+ */
+ DBUG_ASSERT(null_ptr == row_data + master_null_byte_count);
+
+ *row_end = pack_ptr;
if (master_reclength)
{
if (*field_ptr)
@@ -5563,10 +5580,6 @@ unpack_row(RELAY_LOG_INFO *rli,
{
uint32 const mask= NOT_NULL_FLAG | NO_DEFAULT_VALUE_FLAG;
- DBUG_PRINT("debug", ("flags = 0x%x, mask = 0x%x, flags & mask = 0x%x",
- (*field_ptr)->flags, mask,
- (*field_ptr)->flags & mask));
-
if (event_type == WRITE_ROWS_EVENT &&
((*field_ptr)->flags & mask) == mask)
{
@@ -5581,7 +5594,7 @@ unpack_row(RELAY_LOG_INFO *rli,
(*field_ptr)->set_default();
}
- return error;
+ DBUG_RETURN(error);
}
int Rows_log_event::exec_event(st_relay_log_info *rli)
@@ -6740,6 +6753,8 @@ static int find_and_fetch_row(TABLE *table, byte *key)
DBUG_ASSERT(table->in_use != NULL);
+ DBUG_DUMP("record[0]", table->record[0], table->s->reclength);
+
if ((table->file->ha_table_flags() & HA_PRIMARY_KEY_REQUIRED_FOR_POSITION) &&
table->s->primary_key < MAX_KEY)
{
@@ -6842,16 +6857,18 @@ static int find_and_fetch_row(TABLE *table, byte *key)
/* Continue until we find the right record or have made a full loop */
do
{
+ error= table->file->rnd_next(table->record[1]);
+
/*
- We need to set the null bytes to ensure that the filler bit
- are all set when returning. There are storage engines that
- just set the necessary bits on the bytes and don't set the
- filler bits correctly.
+ Patching the returned record since some storage engines do
+ not set the filler bits correctly.
*/
my_ptrdiff_t const pos=
table->s->null_bytes > 0 ? table->s->null_bytes - 1 : 0;
- table->record[1][pos]= 0xFF;
- error= table->file->rnd_next(table->record[1]);
+ table->record[1][pos]|= 256U - (1U << table->s->last_null_bit_pos);
+
+ DBUG_DUMP("record[0]", table->record[0], table->s->reclength);
+ DBUG_DUMP("record[1]", table->record[1], table->s->reclength);
switch (error)
{
diff --git a/sql/log_event.h b/sql/log_event.h
index 81ce2f18b4d..93546ddba8a 100644
--- a/sql/log_event.h
+++ b/sql/log_event.h
@@ -442,10 +442,23 @@ enum Log_event_type
XID_EVENT= 16,
BEGIN_LOAD_QUERY_EVENT= 17,
EXECUTE_LOAD_QUERY_EVENT= 18,
+
TABLE_MAP_EVENT = 19,
- WRITE_ROWS_EVENT = 20,
- UPDATE_ROWS_EVENT = 21,
- DELETE_ROWS_EVENT = 22,
+
+ /*
+ These event numbers were used for 5.1.0 to 5.1.15 and are
+ therefore obsolete.
+ */
+ PRE_GA_WRITE_ROWS_EVENT = 20,
+ PRE_GA_UPDATE_ROWS_EVENT = 21,
+ PRE_GA_DELETE_ROWS_EVENT = 22,
+
+ /*
+ These event numbers are used from 5.1.16 and forward
+ */
+ WRITE_ROWS_EVENT = 23,
+ UPDATE_ROWS_EVENT = 24,
+ DELETE_ROWS_EVENT = 25,
/*
Add new events here - right above this comment!
diff --git a/sql/sql_class.cc b/sql/sql_class.cc
index 3fd0e621422..00a68a3d30e 100644
--- a/sql/sql_class.cc
+++ b/sql/sql_class.cc
@@ -2527,30 +2527,113 @@ my_size_t THD::max_row_length_blob(TABLE *table, const byte *data) const
}
-my_size_t THD::pack_row(TABLE *table, MY_BITMAP const* cols, byte *row_data,
- const byte *record) const
+/*
+ Pack a record of data for a table into a format suitable for
+ transfer via the binary log.
+
+ SYNOPSIS
+ THD::pack_row()
+ table Table describing the format of the record
+ cols Bitmap with a set bit for each column that should be
+ stored in the row
+ row_data Pointer to memory where row will be written
+ record Pointer to record that should be packed. It is assumed
+ that the pointer refers to either record[0] or
+ record[1], but no such check is made since the code does
+ not rely on that.
+
+ DESCRIPTION
+
+ The format for a row in transfer with N fields is the following:
+
+ ceil(N/8) null bytes:
+ One null bit for every column *regardless of whether it can be
+ null or not*. This simplifies the decoding. Observe that the
+ number of null bits is equal to the number of set bits in the
+ 'cols' bitmap. The number of null bytes is the smallest number
+ of bytes necessary to store the null bits.
+
+ Padding bits are 1.
+
+ N packets:
+ Each field is stored in packed format.
+
+
+ RETURN VALUE
+
+ The number of bytes written at 'row_data'.
+ */
+my_size_t
+THD::pack_row(TABLE *table, MY_BITMAP const* cols,
+ byte *const row_data, const byte *record) const
{
Field **p_field= table->field, *field;
- int n_null_bytes= table->s->null_bytes;
- byte *ptr;
- uint i;
+ int const null_byte_count= (bitmap_bits_set(cols) + 7) / 8;
+ byte *pack_ptr = row_data + null_byte_count;
+ byte *null_ptr = row_data;
my_ptrdiff_t const rec_offset= record - table->record[0];
my_ptrdiff_t const def_offset= table->s->default_values - table->record[0];
- memcpy(row_data, record, n_null_bytes);
- ptr= row_data+n_null_bytes;
- for (i= 0 ; (field= *p_field) ; i++, p_field++)
+ /*
+ We write the null bits and the packed records using one pass
+ through all the fields. The null bytes are written little-endian,
+ i.e., the first fields are in the first byte.
+ */
+ unsigned int null_bits= (1U << 8) - 1;
+ // Mask to mask out the correct but among the null bits
+ unsigned int null_mask= 1U;
+ for ( ; (field= *p_field) ; p_field++)
{
- if (bitmap_is_set(cols,i))
+ DBUG_PRINT("debug", ("null_mask=%d; null_ptr=%p; row_data=%p; null_byte_count=%d",
+ null_mask, null_ptr, row_data, null_byte_count));
+ if (bitmap_is_set(cols, p_field - table->field))
{
- my_ptrdiff_t const offset=
- field->is_null(rec_offset) ? def_offset : rec_offset;
- field->move_field_offset(offset);
- ptr= (byte*)field->pack((char *) ptr, field->ptr);
- field->move_field_offset(-offset);
+ my_ptrdiff_t offset;
+ if (field->is_null(rec_offset))
+ {
+ offset= def_offset;
+ null_bits |= null_mask;
+ }
+ else
+ {
+ offset= rec_offset;
+ null_bits &= ~null_mask;
+
+ /*
+ We only store the data of the field if it is non-null
+ */
+ field->move_field_offset(offset);
+ pack_ptr= (byte*)field->pack((char *) pack_ptr, field->ptr);
+ field->move_field_offset(-offset);
+ }
+
+ null_mask <<= 1;
+ if ((null_mask & 0xFF) == 0)
+ {
+ DBUG_ASSERT(null_ptr < row_data + null_byte_count);
+ null_mask = 1U;
+ *null_ptr++ = null_bits;
+ null_bits= (1U << 8) - 1;
+ }
}
}
- return (static_cast<my_size_t>(ptr - row_data));
+
+ /*
+ Write the last (partial) byte, if there is one
+ */
+ if ((null_mask & 0xFF) > 1)
+ {
+ DBUG_ASSERT(null_ptr < row_data + null_byte_count);
+ *null_ptr++ = null_bits;
+ }
+
+ /*
+ The null pointer should now point to the first byte of the
+ packed data. If it doesn't, something is very wrong.
+ */
+ DBUG_ASSERT(null_ptr == row_data + null_byte_count);
+
+ return static_cast<my_size_t>(pack_ptr - row_data);
}