Loading CMakeLists.txt +1 −1 Original line number Diff line number Diff line Loading @@ -161,7 +161,7 @@ IF(EMBED_MANIFESTS) ENDIF(NOT tmp_manifest) # Set the processor architecture. IF(CMAKE_GENERATOR MATCHES "Visual Studio 8 2005 Win64") SET(PROCESSOR_ARCH "X64") SET(PROCESSOR_ARCH "amd64") ELSE(CMAKE_GENERATOR MATCHES "Visual Studio 8 2005 Win64") SET(PROCESSOR_ARCH "X86") ENDIF(CMAKE_GENERATOR MATCHES "Visual Studio 8 2005 Win64") Loading include/my_global.h +6 −1 Original line number Diff line number Diff line Loading @@ -895,7 +895,12 @@ typedef unsigned long uint32; /* Short for unsigned integer >= 32 bits */ typedef unsigned long ulong; /* Short for unsigned long */ #endif #ifndef longlong_defined #if defined(HAVE_LONG_LONG) && SIZEOF_LONG != 8 /* Using [unsigned] long long is preferable as [u]longlong because we use [unsigned] long long unconditionally in many places, for example in constants with [U]LL suffix. */ #if defined(HAVE_LONG_LONG) && SIZEOF_LONG_LONG == 8 typedef unsigned long long int ulonglong; /* ulong or unsigned long long */ typedef long long int longlong; #else Loading mysql-test/r/binlog.result +119 −3 Original line number Diff line number Diff line drop table if exists t1, t2; reset master; create table t1 (a int) engine=bdb; create table t1 (a int) engine=innodb; create table t2 (a int) engine=innodb; begin; insert t1 values (5); Loading @@ -10,11 +10,11 @@ insert t2 values (5); commit; show binlog events from 98; Log_name Pos Event_type Server_id End_log_pos Info master-bin.000001 # Query 1 # use `test`; create table t1 (a int) engine=bdb master-bin.000001 # Query 1 # use `test`; create table t1 (a int) engine=innodb master-bin.000001 # Query 1 # use `test`; create table t2 (a int) engine=innodb master-bin.000001 # Query 1 # use `test`; BEGIN master-bin.000001 # Query 1 # use `test`; insert t1 values (5) master-bin.000001 # Query 1 # use `test`; COMMIT master-bin.000001 # Xid 1 # COMMIT /* XID */ master-bin.000001 # Query 1 # use `test`; BEGIN master-bin.000001 # Query 1 # use `test`; insert t2 values (5) master-bin.000001 # Xid 1 # COMMIT /* XID */ Loading Loading @@ -133,3 +133,119 @@ master-bin.000001 # Rotate 1 # master-bin.000002;pos=4 show binlog events in 'master-bin.000002' from 98; Log_name Pos Event_type Server_id End_log_pos Info master-bin.000002 # Query 1 # use `test`; drop table t1 set @ac = @@autocommit; set autocommit= 0; reset master; create table t1(n int) engine=innodb; begin; insert into t1 values (1); insert into t1 values (2); insert into t1 values (3); commit; drop table t1; show binlog events from 0; Log_name Pos Event_type Server_id End_log_pos Info master-bin.000001 4 Format_desc 1 98 Server version, Binlog ver: 4 master-bin.000001 98 Query 1 197 use `test`; create table t1(n int) engine=innodb master-bin.000001 197 Query 1 265 use `test`; BEGIN master-bin.000001 265 Query 1 353 use `test`; insert into t1 values (1) master-bin.000001 353 Query 1 441 use `test`; insert into t1 values (2) master-bin.000001 441 Query 1 529 use `test`; insert into t1 values (3) master-bin.000001 529 Xid 1 556 COMMIT /* XID */ master-bin.000001 556 Query 1 632 use `test`; drop table t1 set autocommit= 1; reset master; create table t1(n int) engine=innodb; insert into t1 values (1); insert into t1 values (2); insert into t1 values (3); commit; drop table t1; show binlog events from 0; Log_name Pos Event_type Server_id End_log_pos Info master-bin.000001 4 Format_desc 1 98 Server version, Binlog ver: 4 master-bin.000001 98 Query 1 197 use `test`; create table t1(n int) engine=innodb master-bin.000001 197 Query 1 285 use `test`; insert into t1 values (1) master-bin.000001 285 Xid 1 312 COMMIT /* XID */ master-bin.000001 312 Query 1 400 use `test`; insert into t1 values (2) master-bin.000001 400 Xid 1 427 COMMIT /* XID */ master-bin.000001 427 Query 1 515 use `test`; insert into t1 values (3) master-bin.000001 515 Xid 1 542 COMMIT /* XID */ master-bin.000001 542 Query 1 618 use `test`; drop table t1 reset master; create table t1(n int) engine=myisam; begin; insert into t1 values (4); insert into t1 values (5); insert into t1 values (6); commit; drop table t1; show binlog events from 0; Log_name Pos Event_type Server_id End_log_pos Info master-bin.000001 4 Format_desc 1 98 Server version, Binlog ver: 4 master-bin.000001 98 Query 1 197 use `test`; create table t1(n int) engine=myisam master-bin.000001 197 Query 1 285 use `test`; insert into t1 values (4) master-bin.000001 285 Query 1 373 use `test`; insert into t1 values (5) master-bin.000001 373 Query 1 461 use `test`; insert into t1 values (6) master-bin.000001 461 Query 1 537 use `test`; drop table t1 set autocommit= 1; reset master; create table t1(n int) engine=innodb; show master status; File Position Binlog_Do_DB Binlog_Ignore_DB master-bin.000001 197 insert into t1 values (1); show master status; File Position Binlog_Do_DB Binlog_Ignore_DB master-bin.000001 312 insert into t1 values (2); insert into t1 values (3); show master status; File Position Binlog_Do_DB Binlog_Ignore_DB master-bin.000001 542 commit; show master status; File Position Binlog_Do_DB Binlog_Ignore_DB master-bin.000001 542 drop table t1; show binlog events from 0; Log_name Pos Event_type Server_id End_log_pos Info master-bin.000001 4 Format_desc 1 98 Server version, Binlog ver: 4 master-bin.000001 98 Query 1 197 use `test`; create table t1(n int) engine=innodb master-bin.000001 197 Query 1 285 use `test`; insert into t1 values (1) master-bin.000001 285 Xid 1 312 COMMIT /* XID */ master-bin.000001 312 Query 1 400 use `test`; insert into t1 values (2) master-bin.000001 400 Xid 1 427 COMMIT /* XID */ master-bin.000001 427 Query 1 515 use `test`; insert into t1 values (3) master-bin.000001 515 Xid 1 542 COMMIT /* XID */ master-bin.000001 542 Query 1 618 use `test`; drop table t1 set autocommit= 0; reset master; create table t1(n int) engine=myisam; show master status; File Position Binlog_Do_DB Binlog_Ignore_DB master-bin.000001 197 insert into t1 values (4); show master status; File Position Binlog_Do_DB Binlog_Ignore_DB master-bin.000001 285 insert into t1 values (5); insert into t1 values (6); show master status; File Position Binlog_Do_DB Binlog_Ignore_DB master-bin.000001 461 commit; show master status; File Position Binlog_Do_DB Binlog_Ignore_DB master-bin.000001 461 drop table t1; show binlog events from 0; Log_name Pos Event_type Server_id End_log_pos Info master-bin.000001 4 Format_desc 1 98 Server version, Binlog ver: 4 master-bin.000001 98 Query 1 197 use `test`; create table t1(n int) engine=myisam master-bin.000001 197 Query 1 285 use `test`; insert into t1 values (4) master-bin.000001 285 Query 1 373 use `test`; insert into t1 values (5) master-bin.000001 373 Query 1 461 use `test`; insert into t1 values (6) master-bin.000001 461 Query 1 537 use `test`; drop table t1 set session autocommit = @ac; End of 5.0 tests mysql-test/t/binlog.test +91 −2 Original line number Diff line number Diff line Loading @@ -3,7 +3,6 @@ # -- source include/have_log_bin.inc -- source include/not_embedded.inc -- source include/have_bdb.inc -- source include/have_innodb.inc -- source include/have_log_bin.inc Loading @@ -12,7 +11,7 @@ drop table if exists t1, t2; --enable_warnings reset master; create table t1 (a int) engine=bdb; create table t1 (a int) engine=innodb; create table t2 (a int) engine=innodb; begin; insert t1 values (5); Loading Loading @@ -49,3 +48,93 @@ show binlog events in 'master-bin.000001' from 98; --replace_column 2 # 5 # show binlog events in 'master-bin.000002' from 98; # # Bug#22540 - Incorrect value in column End_log_pos of # SHOW BINLOG EVENTS using InnoDB # # the following tests will show that certain queries now return # absolute offsets (from binlog start, rather than relative to # the beginning of the current transaction). under what # conditions it should be allowed / is sensible to put the # slider into the middle of a transaction is not our concern # here; we just guarantee that if and when it's done, the # user has valid offsets to use. if the setter function still # wants to throw a "positioning into middle of transaction" # warning, that's its prerogative and handled elsewhere. set @ac = @@autocommit; # first show this to work for SHOW BINLOG EVENTS set autocommit= 0; reset master; create table t1(n int) engine=innodb; begin; insert into t1 values (1); insert into t1 values (2); insert into t1 values (3); commit; drop table t1; --replace_regex /\/\* xid=.* \*\//\/* XID *\// /table_id: [0-9]+/table_id: #/ /Server ver: [^,]*,/Server version,/ show binlog events from 0; set autocommit= 1; reset master; create table t1(n int) engine=innodb; insert into t1 values (1); insert into t1 values (2); insert into t1 values (3); commit; drop table t1; --replace_regex /\/\* xid=.* \*\//\/* XID *\// /table_id: [0-9]+/table_id: #/ /Server ver: [^,]*,/Server version,/ show binlog events from 0; reset master; create table t1(n int) engine=myisam; begin; insert into t1 values (4); insert into t1 values (5); insert into t1 values (6); commit; drop table t1; --replace_regex /\/\* xid=.* \*\//\/* XID *\// /table_id: [0-9]+/table_id: #/ /Server ver: [^,]*,/Server version,/ show binlog events from 0; # now show this also works for SHOW MASTER STATUS # as this is what "mysqldump --master-data=1" uses. set autocommit= 1; reset master; create table t1(n int) engine=innodb; show master status; insert into t1 values (1); show master status; insert into t1 values (2); insert into t1 values (3); show master status; commit; show master status; drop table t1; --replace_regex /\/\* xid=.* \*\//\/* XID *\// /table_id: [0-9]+/table_id: #/ /Server ver: [^,]*,/Server version,/ show binlog events from 0; set autocommit= 0; reset master; create table t1(n int) engine=myisam; show master status; insert into t1 values (4); show master status; insert into t1 values (5); insert into t1 values (6); show master status; commit; show master status; drop table t1; --replace_regex /\/\* xid=.* \*\//\/* XID *\// /table_id: [0-9]+/table_id: #/ /Server ver: [^,]*,/Server version,/ show binlog events from 0; set session autocommit = @ac; --echo End of 5.0 tests sql/log.cc +59 −4 Original line number Diff line number Diff line Loading @@ -1835,7 +1835,9 @@ bool MYSQL_LOG::write(THD *thd, IO_CACHE *cache, Log_event *commit_event) if (likely(is_open())) // Should always be true { uint length; uint length, group, carry, hdr_offs; long val; byte header[LOG_EVENT_HEADER_LEN]; /* Log "BEGIN" at the beginning of the transaction. Loading Loading @@ -1867,10 +1869,63 @@ bool MYSQL_LOG::write(THD *thd, IO_CACHE *cache, Log_event *commit_event) /* Read from the file used to cache the queries .*/ if (reinit_io_cache(cache, READ_CACHE, 0, 0, 0)) goto err; length= my_b_bytes_in_cache(cache); DBUG_EXECUTE_IF("half_binlogged_transaction", length-=100;); group= my_b_tell(&log_file); hdr_offs= carry= 0; do { if (likely(carry > 0)) { DBUG_ASSERT(carry < LOG_EVENT_HEADER_LEN); memcpy(&header[carry], (char *)cache->read_pos, LOG_EVENT_HEADER_LEN - carry); val= uint4korr(&header[LOG_POS_OFFSET]) + group; int4store(&header[LOG_POS_OFFSET], val); if (my_b_write(&log_file, header, carry)) goto err; memcpy((char *)cache->read_pos, &header[carry], LOG_EVENT_HEADER_LEN - carry); hdr_offs = LOG_EVENT_HEADER_LEN - carry + uint4korr(&header[EVENT_LEN_OFFSET]); carry= 0; } if(likely(length > 0)) { do { DBUG_ASSERT((hdr_offs + max(EVENT_LEN_OFFSET, LOG_POS_OFFSET) + 4) <= length); val= uint4korr((char *)cache->read_pos + hdr_offs + LOG_POS_OFFSET) + group; int4store((char *)cache->read_pos + hdr_offs + LOG_POS_OFFSET, val); hdr_offs += uint4korr((char *)cache->read_pos + hdr_offs + EVENT_LEN_OFFSET); /* header beyond current read-buffer? */ if (hdr_offs >= length) { hdr_offs -= length; break; } /* split header? */ if (hdr_offs + LOG_EVENT_HEADER_LEN > length) { carry= length - hdr_offs; memcpy(header, (char *)cache->read_pos + hdr_offs, carry); length -= carry; } } while (hdr_offs < length); } /* Write data to the binary log file */ if (my_b_write(&log_file, cache->read_pos, length)) goto err; Loading Loading
CMakeLists.txt +1 −1 Original line number Diff line number Diff line Loading @@ -161,7 +161,7 @@ IF(EMBED_MANIFESTS) ENDIF(NOT tmp_manifest) # Set the processor architecture. IF(CMAKE_GENERATOR MATCHES "Visual Studio 8 2005 Win64") SET(PROCESSOR_ARCH "X64") SET(PROCESSOR_ARCH "amd64") ELSE(CMAKE_GENERATOR MATCHES "Visual Studio 8 2005 Win64") SET(PROCESSOR_ARCH "X86") ENDIF(CMAKE_GENERATOR MATCHES "Visual Studio 8 2005 Win64") Loading
include/my_global.h +6 −1 Original line number Diff line number Diff line Loading @@ -895,7 +895,12 @@ typedef unsigned long uint32; /* Short for unsigned integer >= 32 bits */ typedef unsigned long ulong; /* Short for unsigned long */ #endif #ifndef longlong_defined #if defined(HAVE_LONG_LONG) && SIZEOF_LONG != 8 /* Using [unsigned] long long is preferable as [u]longlong because we use [unsigned] long long unconditionally in many places, for example in constants with [U]LL suffix. */ #if defined(HAVE_LONG_LONG) && SIZEOF_LONG_LONG == 8 typedef unsigned long long int ulonglong; /* ulong or unsigned long long */ typedef long long int longlong; #else Loading
mysql-test/r/binlog.result +119 −3 Original line number Diff line number Diff line drop table if exists t1, t2; reset master; create table t1 (a int) engine=bdb; create table t1 (a int) engine=innodb; create table t2 (a int) engine=innodb; begin; insert t1 values (5); Loading @@ -10,11 +10,11 @@ insert t2 values (5); commit; show binlog events from 98; Log_name Pos Event_type Server_id End_log_pos Info master-bin.000001 # Query 1 # use `test`; create table t1 (a int) engine=bdb master-bin.000001 # Query 1 # use `test`; create table t1 (a int) engine=innodb master-bin.000001 # Query 1 # use `test`; create table t2 (a int) engine=innodb master-bin.000001 # Query 1 # use `test`; BEGIN master-bin.000001 # Query 1 # use `test`; insert t1 values (5) master-bin.000001 # Query 1 # use `test`; COMMIT master-bin.000001 # Xid 1 # COMMIT /* XID */ master-bin.000001 # Query 1 # use `test`; BEGIN master-bin.000001 # Query 1 # use `test`; insert t2 values (5) master-bin.000001 # Xid 1 # COMMIT /* XID */ Loading Loading @@ -133,3 +133,119 @@ master-bin.000001 # Rotate 1 # master-bin.000002;pos=4 show binlog events in 'master-bin.000002' from 98; Log_name Pos Event_type Server_id End_log_pos Info master-bin.000002 # Query 1 # use `test`; drop table t1 set @ac = @@autocommit; set autocommit= 0; reset master; create table t1(n int) engine=innodb; begin; insert into t1 values (1); insert into t1 values (2); insert into t1 values (3); commit; drop table t1; show binlog events from 0; Log_name Pos Event_type Server_id End_log_pos Info master-bin.000001 4 Format_desc 1 98 Server version, Binlog ver: 4 master-bin.000001 98 Query 1 197 use `test`; create table t1(n int) engine=innodb master-bin.000001 197 Query 1 265 use `test`; BEGIN master-bin.000001 265 Query 1 353 use `test`; insert into t1 values (1) master-bin.000001 353 Query 1 441 use `test`; insert into t1 values (2) master-bin.000001 441 Query 1 529 use `test`; insert into t1 values (3) master-bin.000001 529 Xid 1 556 COMMIT /* XID */ master-bin.000001 556 Query 1 632 use `test`; drop table t1 set autocommit= 1; reset master; create table t1(n int) engine=innodb; insert into t1 values (1); insert into t1 values (2); insert into t1 values (3); commit; drop table t1; show binlog events from 0; Log_name Pos Event_type Server_id End_log_pos Info master-bin.000001 4 Format_desc 1 98 Server version, Binlog ver: 4 master-bin.000001 98 Query 1 197 use `test`; create table t1(n int) engine=innodb master-bin.000001 197 Query 1 285 use `test`; insert into t1 values (1) master-bin.000001 285 Xid 1 312 COMMIT /* XID */ master-bin.000001 312 Query 1 400 use `test`; insert into t1 values (2) master-bin.000001 400 Xid 1 427 COMMIT /* XID */ master-bin.000001 427 Query 1 515 use `test`; insert into t1 values (3) master-bin.000001 515 Xid 1 542 COMMIT /* XID */ master-bin.000001 542 Query 1 618 use `test`; drop table t1 reset master; create table t1(n int) engine=myisam; begin; insert into t1 values (4); insert into t1 values (5); insert into t1 values (6); commit; drop table t1; show binlog events from 0; Log_name Pos Event_type Server_id End_log_pos Info master-bin.000001 4 Format_desc 1 98 Server version, Binlog ver: 4 master-bin.000001 98 Query 1 197 use `test`; create table t1(n int) engine=myisam master-bin.000001 197 Query 1 285 use `test`; insert into t1 values (4) master-bin.000001 285 Query 1 373 use `test`; insert into t1 values (5) master-bin.000001 373 Query 1 461 use `test`; insert into t1 values (6) master-bin.000001 461 Query 1 537 use `test`; drop table t1 set autocommit= 1; reset master; create table t1(n int) engine=innodb; show master status; File Position Binlog_Do_DB Binlog_Ignore_DB master-bin.000001 197 insert into t1 values (1); show master status; File Position Binlog_Do_DB Binlog_Ignore_DB master-bin.000001 312 insert into t1 values (2); insert into t1 values (3); show master status; File Position Binlog_Do_DB Binlog_Ignore_DB master-bin.000001 542 commit; show master status; File Position Binlog_Do_DB Binlog_Ignore_DB master-bin.000001 542 drop table t1; show binlog events from 0; Log_name Pos Event_type Server_id End_log_pos Info master-bin.000001 4 Format_desc 1 98 Server version, Binlog ver: 4 master-bin.000001 98 Query 1 197 use `test`; create table t1(n int) engine=innodb master-bin.000001 197 Query 1 285 use `test`; insert into t1 values (1) master-bin.000001 285 Xid 1 312 COMMIT /* XID */ master-bin.000001 312 Query 1 400 use `test`; insert into t1 values (2) master-bin.000001 400 Xid 1 427 COMMIT /* XID */ master-bin.000001 427 Query 1 515 use `test`; insert into t1 values (3) master-bin.000001 515 Xid 1 542 COMMIT /* XID */ master-bin.000001 542 Query 1 618 use `test`; drop table t1 set autocommit= 0; reset master; create table t1(n int) engine=myisam; show master status; File Position Binlog_Do_DB Binlog_Ignore_DB master-bin.000001 197 insert into t1 values (4); show master status; File Position Binlog_Do_DB Binlog_Ignore_DB master-bin.000001 285 insert into t1 values (5); insert into t1 values (6); show master status; File Position Binlog_Do_DB Binlog_Ignore_DB master-bin.000001 461 commit; show master status; File Position Binlog_Do_DB Binlog_Ignore_DB master-bin.000001 461 drop table t1; show binlog events from 0; Log_name Pos Event_type Server_id End_log_pos Info master-bin.000001 4 Format_desc 1 98 Server version, Binlog ver: 4 master-bin.000001 98 Query 1 197 use `test`; create table t1(n int) engine=myisam master-bin.000001 197 Query 1 285 use `test`; insert into t1 values (4) master-bin.000001 285 Query 1 373 use `test`; insert into t1 values (5) master-bin.000001 373 Query 1 461 use `test`; insert into t1 values (6) master-bin.000001 461 Query 1 537 use `test`; drop table t1 set session autocommit = @ac; End of 5.0 tests
mysql-test/t/binlog.test +91 −2 Original line number Diff line number Diff line Loading @@ -3,7 +3,6 @@ # -- source include/have_log_bin.inc -- source include/not_embedded.inc -- source include/have_bdb.inc -- source include/have_innodb.inc -- source include/have_log_bin.inc Loading @@ -12,7 +11,7 @@ drop table if exists t1, t2; --enable_warnings reset master; create table t1 (a int) engine=bdb; create table t1 (a int) engine=innodb; create table t2 (a int) engine=innodb; begin; insert t1 values (5); Loading Loading @@ -49,3 +48,93 @@ show binlog events in 'master-bin.000001' from 98; --replace_column 2 # 5 # show binlog events in 'master-bin.000002' from 98; # # Bug#22540 - Incorrect value in column End_log_pos of # SHOW BINLOG EVENTS using InnoDB # # the following tests will show that certain queries now return # absolute offsets (from binlog start, rather than relative to # the beginning of the current transaction). under what # conditions it should be allowed / is sensible to put the # slider into the middle of a transaction is not our concern # here; we just guarantee that if and when it's done, the # user has valid offsets to use. if the setter function still # wants to throw a "positioning into middle of transaction" # warning, that's its prerogative and handled elsewhere. set @ac = @@autocommit; # first show this to work for SHOW BINLOG EVENTS set autocommit= 0; reset master; create table t1(n int) engine=innodb; begin; insert into t1 values (1); insert into t1 values (2); insert into t1 values (3); commit; drop table t1; --replace_regex /\/\* xid=.* \*\//\/* XID *\// /table_id: [0-9]+/table_id: #/ /Server ver: [^,]*,/Server version,/ show binlog events from 0; set autocommit= 1; reset master; create table t1(n int) engine=innodb; insert into t1 values (1); insert into t1 values (2); insert into t1 values (3); commit; drop table t1; --replace_regex /\/\* xid=.* \*\//\/* XID *\// /table_id: [0-9]+/table_id: #/ /Server ver: [^,]*,/Server version,/ show binlog events from 0; reset master; create table t1(n int) engine=myisam; begin; insert into t1 values (4); insert into t1 values (5); insert into t1 values (6); commit; drop table t1; --replace_regex /\/\* xid=.* \*\//\/* XID *\// /table_id: [0-9]+/table_id: #/ /Server ver: [^,]*,/Server version,/ show binlog events from 0; # now show this also works for SHOW MASTER STATUS # as this is what "mysqldump --master-data=1" uses. set autocommit= 1; reset master; create table t1(n int) engine=innodb; show master status; insert into t1 values (1); show master status; insert into t1 values (2); insert into t1 values (3); show master status; commit; show master status; drop table t1; --replace_regex /\/\* xid=.* \*\//\/* XID *\// /table_id: [0-9]+/table_id: #/ /Server ver: [^,]*,/Server version,/ show binlog events from 0; set autocommit= 0; reset master; create table t1(n int) engine=myisam; show master status; insert into t1 values (4); show master status; insert into t1 values (5); insert into t1 values (6); show master status; commit; show master status; drop table t1; --replace_regex /\/\* xid=.* \*\//\/* XID *\// /table_id: [0-9]+/table_id: #/ /Server ver: [^,]*,/Server version,/ show binlog events from 0; set session autocommit = @ac; --echo End of 5.0 tests
sql/log.cc +59 −4 Original line number Diff line number Diff line Loading @@ -1835,7 +1835,9 @@ bool MYSQL_LOG::write(THD *thd, IO_CACHE *cache, Log_event *commit_event) if (likely(is_open())) // Should always be true { uint length; uint length, group, carry, hdr_offs; long val; byte header[LOG_EVENT_HEADER_LEN]; /* Log "BEGIN" at the beginning of the transaction. Loading Loading @@ -1867,10 +1869,63 @@ bool MYSQL_LOG::write(THD *thd, IO_CACHE *cache, Log_event *commit_event) /* Read from the file used to cache the queries .*/ if (reinit_io_cache(cache, READ_CACHE, 0, 0, 0)) goto err; length= my_b_bytes_in_cache(cache); DBUG_EXECUTE_IF("half_binlogged_transaction", length-=100;); group= my_b_tell(&log_file); hdr_offs= carry= 0; do { if (likely(carry > 0)) { DBUG_ASSERT(carry < LOG_EVENT_HEADER_LEN); memcpy(&header[carry], (char *)cache->read_pos, LOG_EVENT_HEADER_LEN - carry); val= uint4korr(&header[LOG_POS_OFFSET]) + group; int4store(&header[LOG_POS_OFFSET], val); if (my_b_write(&log_file, header, carry)) goto err; memcpy((char *)cache->read_pos, &header[carry], LOG_EVENT_HEADER_LEN - carry); hdr_offs = LOG_EVENT_HEADER_LEN - carry + uint4korr(&header[EVENT_LEN_OFFSET]); carry= 0; } if(likely(length > 0)) { do { DBUG_ASSERT((hdr_offs + max(EVENT_LEN_OFFSET, LOG_POS_OFFSET) + 4) <= length); val= uint4korr((char *)cache->read_pos + hdr_offs + LOG_POS_OFFSET) + group; int4store((char *)cache->read_pos + hdr_offs + LOG_POS_OFFSET, val); hdr_offs += uint4korr((char *)cache->read_pos + hdr_offs + EVENT_LEN_OFFSET); /* header beyond current read-buffer? */ if (hdr_offs >= length) { hdr_offs -= length; break; } /* split header? */ if (hdr_offs + LOG_EVENT_HEADER_LEN > length) { carry= length - hdr_offs; memcpy(header, (char *)cache->read_pos + hdr_offs, carry); length -= carry; } } while (hdr_offs < length); } /* Write data to the binary log file */ if (my_b_write(&log_file, cache->read_pos, length)) goto err; Loading