Mats,
I had a test failure on Windows and Linux.
Run with "./mysql-test-run.pl --mysqld=--binlog-format=row"
binlog.binlog_row_ctype_ucs [ fail ]
Warning: Not freed memory segments: 2
Warning: Memory that was not free'ed (559 bytes):
103 bytes at 0x001152bb8, allocated at line 1018 in
'D:\source\c++\my
sql-5.1_BUG_29020\sql\log_event.cc'
456 bytes at 0x001152350, allocated at line 201 in
'..\mysys\my_allo
c.c'
---
d:/source/c++/mysql-5.1_BUG_29020/mysql-test/suite/binlog/r/binlog_row_ctype
_ucs.result 2008-03-26 17:59:10.209765000 +0300
+++
d:\source\c++\mysql-5.1_BUG_29020\mysql-test\suite\binlog\r\binlog_row_ctype
_ucs.reject 2008-03-26 18:29:48.191765000 +0300
@@ -16,10 +16,14 @@
ROLLBACK/*!*/;
use test/*!*/;
SET TIMESTAMP=10000/*!*/;
+SET @@session.pseudo_thread_id=999999999/*!*/;
SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1,
@@session.uni
que_checks=1/*!*/;
SET @@session.sql_mode=0/*!*/;
+SET @@session.auto_increment_increment=1,
@@session.auto_increment_offset=1/*!*
/;
/*!\C latin1 *//*!*/;
SET
@@session.character_set_client=8,@@session.collation_connection=8,@@session
.collation_server=8/*!*/;
+SET @@session.lc_time_names=0/*!*/;
+SET @@session.collation_database=DEFAULT/*!*/;
BEGIN
/*!*/;
SET TIMESTAMP=10000/*!*/;
mysqltest: Result content mismatch
Other than that, there were only very minor changes below.
[...]
> +
> + /*
> + The only valid positions that can be truncated to are at the
> + beginning of a statement. We are relying on this fact
> to be able
> + to set the at_least_one_stmt flag correctly. In other word, if
> + we are truncating to the beginning of the transaction cache,
> + there will be no statements in the cache, otherwhise, we will
> + have at least one statement in the transaction cache.
> + */
> + at_least_one_stmt= (pos > 0);
> }
Minor spelling issues in comments. Should read:
"In other words, if we are truncating..."
^^^
and:
"...cache, otherwise, we will..."
^^^
Or possibly this, but above is ok, just being picky. :)
"...cache. Otherwise we will..."
^^^^^^^^^^^^
[...]
> /*
> - Write commit event if at least one of the following holds:
> - - the user sends an explicit COMMIT; or
> - - the autocommit flag is on, and we are not inside a BEGIN.
> - However, if the user has not sent an explicit COMMIT, and we are
> - either inside a BEGIN or run with autocommit off, then
> this is not
> - the end of a transaction and we should not write a commit event.
> + Decision table for committing a transaction:
> +
> + ============================= = = = = = = = = = = = = = = = =
> + Real transaction N N N N N N N N N N N N N N N N
> + Statement in cache N N N N N N N N Y Y Y Y Y Y Y Y
> + In transaction N N N N Y Y Y Y N N N N Y Y Y Y
> + Stmt modified non-trans N N Y Y N N Y Y N N Y Y N N Y Y
> + All modified non-trans N Y N Y N Y N Y N Y N Y N Y N Y
> +
> + Action: (C)ommit/(A)ccumulate C C C C A C C C - - - - A A A A
> + ============================= = = = = = = = = = = = = = = = =
> +
> +
> + ============================= = = = = = = = = = = = = = = = =
> + Real transaction Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y
> + Statement in cache N N N N N N N N Y Y Y Y Y Y Y Y
> + In transaction N N N N Y Y Y Y N N N N Y Y Y Y
> + Stmt modified non-trans N N Y Y N N Y Y N N Y Y N N Y Y
> + All modified non-trans N Y N Y N Y N Y N Y N Y N Y N Y
> +
> + (C)ommit/(A)ccumulate/(-) - - - - C C C C - - - - C C C C
> + ============================= = = = = = = = = = = = = = = = =
> +
> + In other words, we commit the transaction if and only if:
> + - The keep log option is set
> + - We are in a transaction and:
> + - A full transaction is committed,
> + - A non-transactional statement is committed and there is
> + no statement cached, or
> + - We are not in a transaction and committing a statement
> +
> + Otherwise, we accumulate the statement
> */
Excellent comment!!! This needs to go in the documentation!