mariadb/mysql-test/suite/binlog/t
Mats Kindahl 711305e2c5 BUG#37426: RBR breaks for CHAR() UTF-8 fields > 85 chars
In order to handle CHAR() fields, 8 bits were reserved for
the size of the CHAR field. However, instead of denoting the
number of characters in the field, field_length was used which
denotes the number of bytes in the field.

Since UTF-8 fields can have three bytes per character (and
has been extended to have four bytes per character in 6.0),
an extra two bits have been encoded in the field metadata
work for fields of type Field_string (i.e., CHAR fields).

Since the metadata word is filled, the extra bits have been
encoded in the upper 4 bits of the real type (the most 
significant byte of the metadata word) by computing the
bitwise xor of the extra two bits. Since the upper 4 bits
of the real type always is 1111 for Field_string, this 
means that for fields of length <256, the encoding is
identical to the encoding used in pre-5.1.26 servers, but
for lengths of 256 or more, an unrecognized type is formed,
causing an old slave (that does not handle lengths of 256
or more) to stop.


mysql-test/extra/rpl_tests/rpl_row_basic.test:
  Adding test cases for replicating UTF-8 fields of lengths
  of 256 or more (bytes).
mysql-test/suite/binlog/r/binlog_base64_flag.result:
  Result file change.
mysql-test/suite/binlog/t/binlog_base64_flag.test:
  Adding tests to trigger check that an error is generated when replicating from a
  5.1.25 server for tables with a CHAR(128) but not when replicating a table with a
  CHAR(63). Although the bug indicates that the limit is 83, we elected to use CHAR(63)
  since 6.0 uses 4-byte UTF-8, and anything exceeding 63 would then cause the test to fail
  when the patch is merged to 6.0.
mysql-test/suite/bugs/combinations:
  Adding combinations file to run all bug reports in all binlog modes (where
  applicable).
mysql-test/suite/bugs/r/rpl_bug37426.result:
  Result file change.
mysql-test/suite/bugs/t/rpl_bug37426.test:
  Added test for reported bug.
mysql-test/suite/rpl/r/rpl_row_basic_2myisam.result:
  Result file change.
mysql-test/suite/rpl/r/rpl_row_basic_3innodb.result:
  Result file change.
sql/field.cc:
  Encoding an extra two bits in the most significant nibble (4 bits)
  of the metadata word. Adding assertions to ensure that no attempt
  is made to use lengths longer than supported.
  
  Extending compatible_field_size() function with an extra parameter
  holding a Relay_log_instace for error reporting.
  
  Field_string::compatible_field_size() now reports an error if field
  size for a CHAR is >255.
sql/field.h:
  Field length is now computed from most significant 4 bits
  of metadata word, or is equal to the row pack length if
  there is no metadata.
  
  Extending compatible_field_size() function with an extra parameter
  holding a Relay_log_instace for error reporting.
sql/rpl_utility.cc:
  Adding relay log parameter to compatible_field_size().
  
  Minor refactoring to eliminate duplicate code.
sql/slave.cc:
  Extending rpl_master_has_bug() with a single-argument predicate function and
  a parameter to the predicate function. The predicate function can be used to
  test for extra conditions for the bug before writing an error message.
sql/slave.h:
  Extending rpl_master_has_bug() with a single-argument predicate function and
  a parameter to the predicate function. The predicate function can be used to
  test for extra conditions for the bug before writing an error message.
  
  Also removing gratuitous default argument.
sql/sql_insert.cc:
  Changing calls to rpl_master_has_bug() to adapt to changed signature.
2008-06-30 22:11:18 +02:00
..
binlog_auto_increment_bug33029-master.opt BUG#33029 5.0 to 5.1 replication fails on dup key when inserting 2008-03-14 11:35:41 +08:00
binlog_auto_increment_bug33029.test Bug #35675 reset master finds assert if a binlog file can not be deleted 2008-03-30 00:54:08 +02:00
binlog_base64_flag.test BUG#37426: RBR breaks for CHAR() UTF-8 fields > 85 chars 2008-06-30 22:11:18 +02:00
binlog_database.test Bug#32435: 2007-11-16 15:55:22 +01:00
binlog_innodb.test Updates to allow innodb.test to be run with --embedded-server, 2007-08-14 15:35:19 -06:00
binlog_killed.test BUG#33247: mysqlbinlog does not clean up after itself on abnormal termination 2008-02-08 18:17:00 +01:00
binlog_killed_simulate-master.opt bug#27571 merging. Fixing offsets and moving tests to the corrent 2007-10-31 11:48:49 +02:00
binlog_killed_simulate.test BUG#33247: mysqlbinlog does not clean up after itself on abnormal termination 2008-02-08 18:17:00 +01:00
binlog_multi_engine.test Bug#32663, Bug#33045, Bug#23533, WL#4091 2008-02-29 00:50:15 +03:00
binlog_old_versions.test Merge dl145h.mysql.com:/data0/mkindahl/mysql-5.1 2008-02-07 12:38:13 +01:00
binlog_row_binlog-master.opt WL#3933 Split main test suite to rpl, rpl_ndb and ndb 2007-06-27 14:28:02 +02:00
binlog_row_binlog.test WL#3933 Split main test suite to rpl, rpl_ndb and ndb 2007-06-27 14:28:02 +02:00
binlog_row_ctype_cp932.test WL#3933 Split main test suite to rpl, rpl_ndb and ndb 2007-06-27 14:28:02 +02:00
binlog_row_ctype_ucs.test WL#3933 Split main test suite to rpl, rpl_ndb and ndb 2007-06-27 14:28:02 +02:00
binlog_row_drop_tmp_tbl.test WL#3933 Split main test suite to rpl, rpl_ndb and ndb 2007-06-27 14:28:02 +02:00
binlog_row_innodb_stat-master.opt WL#3933 Split main test suite to rpl, rpl_ndb and ndb 2007-06-27 14:28:02 +02:00
binlog_row_innodb_stat.test WL#3933 Split main test suite to rpl, rpl_ndb and ndb 2007-06-27 14:28:02 +02:00
binlog_row_insert_select.test WL#3933 Split main test suite to rpl, rpl_ndb and ndb 2007-06-27 14:28:02 +02:00
binlog_row_mix_innodb_myisam-master.opt WL#3933 Split main test suite to rpl, rpl_ndb and ndb 2007-06-27 14:28:02 +02:00
binlog_row_mix_innodb_myisam.test Post-merge fixes to make tests pass. 2008-01-11 13:25:26 +01:00
binlog_start_comment.test Fixes to make tests pass in pushbuild. 2008-02-01 20:26:39 +01:00
binlog_statement_insert_delayed.test WL#3933 Split main test suite to rpl, rpl_ndb and ndb 2007-06-27 14:28:02 +02:00
binlog_stm_binlog-master.opt WL#3933 Split main test suite to rpl, rpl_ndb and ndb 2007-06-27 14:28:02 +02:00
binlog_stm_binlog.test WL#3933 Split main test suite to rpl, rpl_ndb and ndb 2007-06-27 14:28:02 +02:00
binlog_stm_blackhole.test WL#3933 Split main test suite to rpl, rpl_ndb and ndb 2007-06-27 14:28:02 +02:00
binlog_stm_ctype_cp932.test WL#3933 Split main test suite to rpl, rpl_ndb and ndb 2007-06-27 14:28:02 +02:00
binlog_stm_ctype_ucs.test WL#3933 Split main test suite to rpl, rpl_ndb and ndb 2007-06-27 14:28:02 +02:00
binlog_stm_drop_tmp_tbl.test WL#3933 Split main test suite to rpl, rpl_ndb and ndb 2007-06-27 14:28:02 +02:00
binlog_stm_innodb_stat-master.opt WL#3933 Split main test suite to rpl, rpl_ndb and ndb 2007-06-27 14:28:02 +02:00
binlog_stm_innodb_stat.test WL#3933 Split main test suite to rpl, rpl_ndb and ndb 2007-06-27 14:28:02 +02:00
binlog_stm_insert_select.test WL#3933 Split main test suite to rpl, rpl_ndb and ndb 2007-06-27 14:28:02 +02:00
binlog_stm_mix_innodb_myisam-master.opt WL#3933 Split main test suite to rpl, rpl_ndb and ndb 2007-06-27 14:28:02 +02:00
binlog_stm_mix_innodb_myisam.test Test changes to fix failures in pushbuild. 2008-01-29 14:43:41 +01:00
binlog_stm_ps.test BUG#34768 - nondeterministic INSERT using LIMIT logged in stmt mode 2008-03-25 17:28:12 +04:00
binlog_unsafe.test Merge stella.local:/home2/mydev/mysql-5.1-ateam 2008-03-26 10:56:03 +01:00
disabled.def Bug#32663, Bug#33045, Bug#23533, WL#4091 2008-02-29 00:50:15 +03:00