From: Sergey Petrunia Date: August 20 2008 10:35am Subject: bzr commit into mysql-6.0-opt branch (sergefp:2683) List-Archive: http://lists.mysql.com/commits/52036 Message-Id: <20080820103505.0F56625ED61@pslp.localdomain> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7BIT #At file:///home/psergey/dev/mysql-6.0-opt-merge/ 2683 Sergey Petrunia 2008-08-20 [merge] 6.0 -> 6.0-opt merge removed: mysql-test/suite/rpl/t/rpl_row_err_daisychain-master.opt mysql-test/suite/rpl/t/rpl_row_err_daisychain-slave.opt mysql-test/suite/rpl_ndb/t/rpl_truncate_7ndb_2-master.opt modified: mysql-test/extra/binlog_tests/binlog_insert_delayed.test mysql-test/extra/rpl_tests/rpl_row_basic.test mysql-test/include/show_binlog_events.inc mysql-test/suite/binlog/r/binlog_killed_simulate.result mysql-test/suite/binlog/r/binlog_row_binlog.result mysql-test/suite/binlog/r/binlog_row_mix_innodb_myisam.result mysql-test/suite/binlog/r/binlog_statement_insert_delayed.result mysql-test/suite/binlog/r/binlog_stm_binlog.result mysql-test/suite/binlog/r/binlog_stm_mix_innodb_myisam.result mysql-test/suite/rpl/r/rpl_loaddata_map.result mysql-test/suite/rpl/r/rpl_row_basic_2myisam.result mysql-test/suite/rpl/r/rpl_row_basic_3innodb.result mysql-test/suite/rpl/r/rpl_stm_log.result mysql-test/suite/rpl/r/rpl_variables.result mysql-test/suite/rpl/t/disabled.def mysql-test/suite/rpl/t/rpl_incident.test mysql-test/suite/rpl/t/rpl_loaddata_map.test mysql-test/suite/rpl/t/rpl_trunc_temp.test mysql-test/suite/rpl/t/rpl_variables.test mysql-test/suite/rpl_ndb/t/rpl_truncate_7ndb_2.test mysql-test/suite/rpl_ndb_big/r/rpl_row_basic_7ndb.result sql/sql_binlog.cc sql/sql_cursor.cc tests/mysql_client_test.c === modified file 'mysql-test/extra/binlog_tests/binlog_insert_delayed.test' --- a/mysql-test/extra/binlog_tests/binlog_insert_delayed.test 2007-03-29 19:38:03 +0000 +++ b/mysql-test/extra/binlog_tests/binlog_insert_delayed.test 2008-07-23 16:56:39 +0000 @@ -1,17 +1,43 @@ -# Test of binlogging of INSERT_ID with INSERT DELAYED +# ==== Purpose ==== +# +# Verify that INSERT DELAYED in mixed or row mode writes events to the +# binlog, and that AUTO_INCREMENT works correctly. +# +# ==== Method ==== +# +# Insert both single and multiple rows into an autoincrement column, +# both with specified value and with NULL. +# +# With INSERT DELAYED, the rows do not show up in the table +# immediately, so we must do source include/wait_until_rows_count.inc +# between any two INSERT DELAYED statements. Moreover, if mixed or +# row-based logging is used, there is also a delay between when rows +# show up in the table and when they show up in the binlog. To ensure +# that the rows show up in the binlog, we call FLUSH TABLES, which +# waits until the delayed_insert thread has finished. +# +# We cannot read the binlog after executing INSERT DELAYED statements +# that insert multiple rows, because that is nondeterministic. More +# precisely, rows may be written in batches to the binlog, where each +# batch has one Table_map_log_event and one or more +# Write_rows_log_event. The number of rows included in each batch is +# nondeterministic. +# +# ==== Related bugs ==== +# +# BUG#20627: INSERT DELAYED does not honour auto_increment_* variables +# Bug in this test: BUG#38068: binlog_stm_binlog fails sporadically in pushbuild + + create table t1 (a int not null auto_increment, primary key (a)) engine=myisam; -# First, avoid BUG#20627: -set @@session.auto_increment_increment=1, @@session.auto_increment_offset=1; -# Verify that only one INSERT_ID event is binlogged. -# Note, that because of WL#3368 mixed mode binlog records RBR events for the delayed -let $table=t1; -let $rows_inserted=11; # total number of inserted rows in this test -insert delayed into t1 values (207); -let $count=1; -# use this macro instead of sleeps. +let $table=t1; +let $count=0; +insert delayed into t1 values (207); +inc $count; --source include/wait_until_rows_count.inc + insert delayed into t1 values (null); inc $count; --source include/wait_until_rows_count.inc @@ -20,9 +46,10 @@ insert delayed into t1 values (300); inc $count; --source include/wait_until_rows_count.inc -# moving binlog check affront of multi-rows queries which work is indeterministic (extra table_maps) -# todo: better check is to substitute SHOW BINLOG with reading from binlog, probably bug#19459 is in -# the way +# It is not enough to wait until all rows have been inserted into the +# table. FLUSH TABLES ensures that they are in the binlog too. See +# comment above. +FLUSH TABLES; source include/show_binlog_events.inc; insert delayed into t1 values (null),(null),(null),(null); @@ -33,8 +60,5 @@ insert delayed into t1 values (null),(nu inc $count; inc $count; inc $count; inc $count; --source include/wait_until_rows_count.inc -#check this assertion about $count calculation ---echo $count == $rows_inserted - select * from t1; drop table t1; === modified file 'mysql-test/extra/rpl_tests/rpl_row_basic.test' --- a/mysql-test/extra/rpl_tests/rpl_row_basic.test 2008-07-25 15:10:14 +0000 +++ b/mysql-test/extra/rpl_tests/rpl_row_basic.test 2008-08-18 18:12:46 +0000 @@ -309,46 +309,46 @@ sync_slave_with_master; # 7. Replicating UTF-8 CHAR(255) to CHAR(255) UTF-8 connection master; -CREATE TABLE t1 (i INT NOT NULL, - c CHAR(16) CHARACTER SET utf8 NOT NULL, - j INT NOT NULL); - -CREATE TABLE t2 (i INT NOT NULL, - c CHAR(16) CHARACTER SET utf8 NOT NULL, - j INT NOT NULL); +eval CREATE TABLE t1 (i INT NOT NULL, + c CHAR(16) CHARACTER SET utf8 NOT NULL, + j INT NOT NULL) ENGINE = $type ; + +eval CREATE TABLE t2 (i INT NOT NULL, + c CHAR(16) CHARACTER SET utf8 NOT NULL, + j INT NOT NULL) ENGINE = $type ; sync_slave_with_master; ALTER TABLE t2 MODIFY c CHAR(128) CHARACTER SET utf8 NOT NULL; connection master; -CREATE TABLE t3 (i INT NOT NULL, - c CHAR(128) CHARACTER SET utf8 NOT NULL, - j INT NOT NULL); +eval CREATE TABLE t3 (i INT NOT NULL, + c CHAR(128) CHARACTER SET utf8 NOT NULL, + j INT NOT NULL) ENGINE = $type ; sync_slave_with_master; ALTER TABLE t3 MODIFY c CHAR(16) CHARACTER SET utf8 NOT NULL; connection master; -CREATE TABLE t4 (i INT NOT NULL, - c CHAR(128) CHARACTER SET utf8 NOT NULL, - j INT NOT NULL); - -CREATE TABLE t5 (i INT NOT NULL, - c CHAR(255) CHARACTER SET utf8 NOT NULL, - j INT NOT NULL); +eval CREATE TABLE t4 (i INT NOT NULL, + c CHAR(128) CHARACTER SET utf8 NOT NULL, + j INT NOT NULL) ENGINE = $type ; + +eval CREATE TABLE t5 (i INT NOT NULL, + c CHAR(255) CHARACTER SET utf8 NOT NULL, + j INT NOT NULL) ENGINE = $type ; sync_slave_with_master; ALTER TABLE t5 MODIFY c CHAR(16) CHARACTER SET utf8 NOT NULL; connection master; -CREATE TABLE t6 (i INT NOT NULL, - c CHAR(255) CHARACTER SET utf8 NOT NULL, - j INT NOT NULL); +eval CREATE TABLE t6 (i INT NOT NULL, + c CHAR(255) CHARACTER SET utf8 NOT NULL, + j INT NOT NULL) ENGINE = $type ; sync_slave_with_master; ALTER TABLE t6 MODIFY c CHAR(128) CHARACTER SET utf8 NOT NULL; connection master; -CREATE TABLE t7 (i INT NOT NULL, - c CHAR(255) CHARACTER SET utf8 NOT NULL, - j INT NOT NULL); +eval CREATE TABLE t7 (i INT NOT NULL, + c CHAR(255) CHARACTER SET utf8 NOT NULL, + j INT NOT NULL) ENGINE = $type ; --echo [expecting slave to replicate correctly] connection master; @@ -381,7 +381,11 @@ let $last_error = query_get_value("SHOW disable_query_log; eval SELECT "$last_error" AS Last_SQL_Error; enable_query_log; -SET GLOBAL SQL_SLAVE_SKIP_COUNTER=8; +connection master; +RESET MASTER; +connection slave; +STOP SLAVE; +RESET SLAVE; START SLAVE; source include/wait_for_slave_to_start.inc; @@ -406,7 +410,11 @@ let $last_error = query_get_value("SHOW disable_query_log; eval SELECT "$last_error" AS Last_SQL_Error; enable_query_log; -SET GLOBAL SQL_SLAVE_SKIP_COUNTER=8; +connection master; +RESET MASTER; +connection slave; +STOP SLAVE; +RESET SLAVE; START SLAVE; source include/wait_for_slave_to_start.inc; @@ -421,7 +429,11 @@ let $last_error = query_get_value("SHOW disable_query_log; eval SELECT "$last_error" AS Last_SQL_Error; enable_query_log; -SET GLOBAL SQL_SLAVE_SKIP_COUNTER=8; +connection master; +RESET MASTER; +connection slave; +STOP SLAVE; +RESET SLAVE; START SLAVE; source include/wait_for_slave_to_start.inc; === modified file 'mysql-test/include/show_binlog_events.inc' --- a/mysql-test/include/show_binlog_events.inc 2008-04-01 15:13:57 +0000 +++ b/mysql-test/include/show_binlog_events.inc 2008-08-18 18:12:46 +0000 @@ -4,7 +4,7 @@ if (!$binlog_start) { let $binlog_start=107; } ---replace_result $binlog_start +--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR $binlog_start --replace_column 2 # 4 # 5 # ---replace_regex /\/\* xid=.* \*\//\/* XID *\// /table_id: [0-9]+/table_id: #/ /file_id=[0-9]+/file_id=#/ +--replace_regex /\/\* xid=.* \*\//\/* XID *\// /table_id: [0-9]+/table_id: #/ /file_id=[0-9]+/file_id=#/ /block_len=[0-9]+/block_len=#/ --eval show binlog events from $binlog_start === modified file 'mysql-test/suite/binlog/r/binlog_killed_simulate.result' --- a/mysql-test/suite/binlog/r/binlog_killed_simulate.result 2008-01-29 13:43:41 +0000 +++ b/mysql-test/suite/binlog/r/binlog_killed_simulate.result 2008-07-29 15:36:13 +0000 @@ -18,7 +18,7 @@ load data infile '../std_data_ln/rpl_loa ERROR 70100: Query execution was interrupted show binlog events from ; Log_name Pos Event_type Server_id End_log_pos Info -master-bin.000001 # Begin_load_query # # ;file_id=#;block_len=12 +master-bin.000001 # Begin_load_query # # ;file_id=#;block_len=# master-bin.000001 # Execute_load_query # # use `test`; load data infile '../std_data_ln/rpl_loaddata.dat' into table t2 /* will be "killed" in the middle */ ;file_id=# select (@a:=load_file("MYSQLTEST_VARDIR/tmp/binlog_killed_bug27571.binlog")) === modified file 'mysql-test/suite/binlog/r/binlog_row_binlog.result' --- a/mysql-test/suite/binlog/r/binlog_row_binlog.result 2008-04-02 13:14:23 +0000 +++ b/mysql-test/suite/binlog/r/binlog_row_binlog.result 2008-08-18 18:12:46 +0000 @@ -1141,10 +1141,10 @@ master-bin.000001 # Delete_rows # # tabl master-bin.000001 # Query # # use `mysql`; COMMIT drop table t1,t2,t3,tt1; create table t1 (a int not null auto_increment, primary key (a)) engine=myisam; -set @@session.auto_increment_increment=1, @@session.auto_increment_offset=1; insert delayed into t1 values (207); insert delayed into t1 values (null); insert delayed into t1 values (300); +FLUSH TABLES; show binlog events from ; Log_name Pos Event_type Server_id End_log_pos Info master-bin.000001 # Query # # use `test`; create table t1 (id tinyint auto_increment primary key) @@ -1188,9 +1188,9 @@ master-bin.000001 # Query # # use `test` master-bin.000001 # Table_map # # table_id: # (test.t1) master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F master-bin.000001 # Query # # use `test`; COMMIT +master-bin.000001 # Query # # use `test`; FLUSH TABLES insert delayed into t1 values (null),(null),(null),(null); insert delayed into t1 values (null),(null),(400),(null); -11 == 11 select * from t1; a 207 === modified file 'mysql-test/suite/binlog/r/binlog_row_mix_innodb_myisam.result' --- a/mysql-test/suite/binlog/r/binlog_row_mix_innodb_myisam.result 2008-05-09 10:27:23 +0000 +++ b/mysql-test/suite/binlog/r/binlog_row_mix_innodb_myisam.result 2008-08-18 18:12:46 +0000 @@ -927,7 +927,7 @@ Log_name Pos Event_type Server_id End_lo master-bin.000001 # Query # # use `test`; BEGIN master-bin.000001 # Intvar # # INSERT_ID=10 master-bin.000001 # User var # # @`b`=_latin1 0x3135 COLLATE latin1_swedish_ci -master-bin.000001 # Begin_load_query # # ;file_id=#;block_len=12 +master-bin.000001 # Begin_load_query # # ;file_id=#;block_len=# master-bin.000001 # Intvar # # INSERT_ID=10 master-bin.000001 # User var # # @`b`=_latin1 0x3135 COLLATE latin1_swedish_ci master-bin.000001 # Execute_load_query # # use `test`; load data infile '../std_data_ln/rpl_loaddata.dat' into table t4 (a, @b) set b= @b + bug27417(2) ;file_id=# === modified file 'mysql-test/suite/binlog/r/binlog_statement_insert_delayed.result' --- a/mysql-test/suite/binlog/r/binlog_statement_insert_delayed.result 2007-06-27 12:28:02 +0000 +++ b/mysql-test/suite/binlog/r/binlog_statement_insert_delayed.result 2008-07-29 15:36:13 +0000 @@ -1,8 +1,8 @@ create table t1 (a int not null auto_increment, primary key (a)) engine=myisam; -set @@session.auto_increment_increment=1, @@session.auto_increment_offset=1; insert delayed into t1 values (207); insert delayed into t1 values (null); insert delayed into t1 values (300); +FLUSH TABLES; show binlog events from ; Log_name Pos Event_type Server_id End_log_pos Info master-bin.000001 # Query # # use `test`; create table t1 (a int not null auto_increment, primary key (a)) engine=myisam @@ -10,9 +10,9 @@ master-bin.000001 # Query # # use `test` master-bin.000001 # Intvar # # INSERT_ID=208 master-bin.000001 # Query # # use `test`; insert delayed into t1 values (null) master-bin.000001 # Query # # use `test`; insert delayed into t1 values (300) +master-bin.000001 # Query # # use `test`; FLUSH TABLES insert delayed into t1 values (null),(null),(null),(null); insert delayed into t1 values (null),(null),(400),(null); -11 == 11 select * from t1; a 207 === modified file 'mysql-test/suite/binlog/r/binlog_stm_binlog.result' --- a/mysql-test/suite/binlog/r/binlog_stm_binlog.result 2008-04-01 15:13:57 +0000 +++ b/mysql-test/suite/binlog/r/binlog_stm_binlog.result 2008-08-18 18:12:46 +0000 @@ -629,10 +629,10 @@ master-bin.000001 # Query # # use `mysql master-bin.000001 # Query # # use `mysql`; DELETE FROM user WHERE host='localhost' AND user='@#@' drop table t1,t2,t3,tt1; create table t1 (a int not null auto_increment, primary key (a)) engine=myisam; -set @@session.auto_increment_increment=1, @@session.auto_increment_offset=1; insert delayed into t1 values (207); insert delayed into t1 values (null); insert delayed into t1 values (300); +FLUSH TABLES; show binlog events from ; Log_name Pos Event_type Server_id End_log_pos Info master-bin.000001 # Query # # use `test`; create table t1 (id tinyint auto_increment primary key) @@ -660,9 +660,9 @@ master-bin.000001 # Query # # use `test` master-bin.000001 # Table_map # # table_id: # (test.t1) master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F master-bin.000001 # Query # # use `test`; COMMIT +master-bin.000001 # Query # # use `test`; FLUSH TABLES insert delayed into t1 values (null),(null),(null),(null); insert delayed into t1 values (null),(null),(400),(null); -11 == 11 select * from t1; a 207 === modified file 'mysql-test/suite/binlog/r/binlog_stm_mix_innodb_myisam.result' --- a/mysql-test/suite/binlog/r/binlog_stm_mix_innodb_myisam.result 2008-05-09 10:27:23 +0000 +++ b/mysql-test/suite/binlog/r/binlog_stm_mix_innodb_myisam.result 2008-08-18 18:12:46 +0000 @@ -624,7 +624,7 @@ show binlog events from ; Log_name Pos Event_type Server_id End_log_pos Info master-bin.000001 # Query # # use `test`; BEGIN master-bin.000001 # Intvar # # INSERT_ID=10 -master-bin.000001 # Begin_load_query # # ;file_id=#;block_len=12 +master-bin.000001 # Begin_load_query # # ;file_id=#;block_len=# master-bin.000001 # Intvar # # INSERT_ID=10 master-bin.000001 # Execute_load_query # # use `test`; load data infile '../std_data_ln/rpl_loaddata.dat' into table t4 (a, @b) set b= @b + bug27417(2) ;file_id=# master-bin.000001 # Query # # use `test`; ROLLBACK @@ -859,7 +859,7 @@ Log_name Pos Event_type Server_id End_lo master-bin.000001 # Query # # use `test`; BEGIN master-bin.000001 # Intvar # # INSERT_ID=10 master-bin.000001 # User var # # @`b`=_latin1 0x3135 COLLATE latin1_swedish_ci -master-bin.000001 # Begin_load_query # # ;file_id=#;block_len=12 +master-bin.000001 # Begin_load_query # # ;file_id=#;block_len=# master-bin.000001 # Intvar # # INSERT_ID=10 master-bin.000001 # User var # # @`b`=_latin1 0x3135 COLLATE latin1_swedish_ci master-bin.000001 # Execute_load_query # # use `test`; load data infile '../std_data_ln/rpl_loaddata.dat' into table t4 (a, @b) set b= @b + bug27417(2) ;file_id=# === modified file 'mysql-test/suite/rpl/r/rpl_loaddata_map.result' --- a/mysql-test/suite/rpl/r/rpl_loaddata_map.result 2008-02-07 06:33:07 +0000 +++ b/mysql-test/suite/rpl/r/rpl_loaddata_map.result 2008-08-18 18:12:46 +0000 @@ -4,6 +4,8 @@ reset master; reset slave; drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9; start slave; +==== Create a big file ==== +==== Load our big file into a table ==== create table t2 (id int not null primary key auto_increment); select @@session.read_buffer_size - @@session.max_allowed_packet > 0 ; @@session.read_buffer_size - @@session.max_allowed_packet > 0 @@ -12,15 +14,18 @@ load data infile 'MYSQLTEST_VARDIR/tmp/b select count(*) from t2 /* 5 000 */; count(*) 5000 -show binlog events in 'master-bin.000002' from ; +show binlog events from ; Log_name Pos Event_type Server_id End_log_pos Info -master-bin.000002 # Query # # use `test`; create table t2 (id int not null primary key auto_increment) -master-bin.000002 # Begin_load_query # # ;file_id=#;block_len=# -master-bin.000002 # Append_block # # ;file_id=#;block_len=# -master-bin.000002 # Append_block # # ;file_id=#;block_len=# -master-bin.000002 # Execute_load_query # # use `test`; load data infile 'MYSQLTEST_VARDIR/tmp/bug30435_5k.txt' into table t2 ;file_id=# +master-bin.000001 # Query # # use `test`; create table t2 (id int not null primary key auto_increment) +master-bin.000001 # Begin_load_query # # ;file_id=#;block_len=# +master-bin.000001 # Append_block # # ;file_id=#;block_len=# +master-bin.000001 # Append_block # # ;file_id=#;block_len=# +master-bin.000001 # Execute_load_query # # use `test`; load data infile 'MYSQLTEST_VARDIR/tmp/bug30435_5k.txt' into table t2 ;file_id=# +==== Verify results on slave ==== +[on slave] select count(*) from t2 /* 5 000 */; count(*) 5000 -drop table t1, t2; -end of the tests +==== Clean up ==== +[on master] +drop table t2; === modified file 'mysql-test/suite/rpl/r/rpl_row_basic_2myisam.result' --- a/mysql-test/suite/rpl/r/rpl_row_basic_2myisam.result 2008-07-21 03:55:09 +0000 +++ b/mysql-test/suite/rpl/r/rpl_row_basic_2myisam.result 2008-08-18 18:12:46 +0000 @@ -453,29 +453,29 @@ a b c DROP TABLE IF EXISTS t1,t2,t3,t4,t5,t6,t7,t8; CREATE TABLE t1 (i INT NOT NULL, c CHAR(16) CHARACTER SET utf8 NOT NULL, -j INT NOT NULL); +j INT NOT NULL) ENGINE = 'MYISAM' ; CREATE TABLE t2 (i INT NOT NULL, c CHAR(16) CHARACTER SET utf8 NOT NULL, -j INT NOT NULL); +j INT NOT NULL) ENGINE = 'MYISAM' ; ALTER TABLE t2 MODIFY c CHAR(128) CHARACTER SET utf8 NOT NULL; CREATE TABLE t3 (i INT NOT NULL, c CHAR(128) CHARACTER SET utf8 NOT NULL, -j INT NOT NULL); +j INT NOT NULL) ENGINE = 'MYISAM' ; ALTER TABLE t3 MODIFY c CHAR(16) CHARACTER SET utf8 NOT NULL; CREATE TABLE t4 (i INT NOT NULL, c CHAR(128) CHARACTER SET utf8 NOT NULL, -j INT NOT NULL); +j INT NOT NULL) ENGINE = 'MYISAM' ; CREATE TABLE t5 (i INT NOT NULL, c CHAR(255) CHARACTER SET utf8 NOT NULL, -j INT NOT NULL); +j INT NOT NULL) ENGINE = 'MYISAM' ; ALTER TABLE t5 MODIFY c CHAR(16) CHARACTER SET utf8 NOT NULL; CREATE TABLE t6 (i INT NOT NULL, c CHAR(255) CHARACTER SET utf8 NOT NULL, -j INT NOT NULL); +j INT NOT NULL) ENGINE = 'MYISAM' ; ALTER TABLE t6 MODIFY c CHAR(128) CHARACTER SET utf8 NOT NULL; CREATE TABLE t7 (i INT NOT NULL, c CHAR(255) CHARACTER SET utf8 NOT NULL, -j INT NOT NULL); +j INT NOT NULL) ENGINE = 'MYISAM' ; [expecting slave to replicate correctly] INSERT INTO t1 VALUES (1, "", 1); INSERT INTO t1 VALUES (2, repeat(_utf8'a', 16), 2); @@ -489,7 +489,9 @@ INSERT INTO t3 VALUES (1, "", 1); INSERT INTO t3 VALUES (2, repeat(_utf8'a', 128), 2); Last_SQL_Error Table definition on master and slave does not match: Column 1 size mismatch - master has size 512, test.t3 on slave has size 65. Master's column size should be <= the slave's column size. -SET GLOBAL SQL_SLAVE_SKIP_COUNTER=8; +RESET MASTER; +STOP SLAVE; +RESET SLAVE; START SLAVE; [expecting slave to replicate correctly] INSERT INTO t4 VALUES (1, "", 1); @@ -500,14 +502,18 @@ INSERT INTO t5 VALUES (1, "", 1); INSERT INTO t5 VALUES (2, repeat(_utf8'a', 255), 2); Last_SQL_Error Table definition on master and slave does not match: Column 1 size mismatch - master has size 1020, test.t5 on slave has size 65. Master's column size should be <= the slave's column size. -SET GLOBAL SQL_SLAVE_SKIP_COUNTER=8; +RESET MASTER; +STOP SLAVE; +RESET SLAVE; START SLAVE; [expecting slave to stop] INSERT INTO t6 VALUES (1, "", 1); INSERT INTO t6 VALUES (2, repeat(_utf8'a', 255), 2); Last_SQL_Error Table definition on master and slave does not match: Column 1 size mismatch - master has size 1020, test.t6 on slave has size 513. Master's column size should be <= the slave's column size. -SET GLOBAL SQL_SLAVE_SKIP_COUNTER=8; +RESET MASTER; +STOP SLAVE; +RESET SLAVE; START SLAVE; [expecting slave to replicate correctly] INSERT INTO t7 VALUES (1, "", 1); === modified file 'mysql-test/suite/rpl/r/rpl_row_basic_3innodb.result' --- a/mysql-test/suite/rpl/r/rpl_row_basic_3innodb.result 2008-07-21 03:55:09 +0000 +++ b/mysql-test/suite/rpl/r/rpl_row_basic_3innodb.result 2008-08-18 18:12:46 +0000 @@ -453,29 +453,29 @@ a b c DROP TABLE IF EXISTS t1,t2,t3,t4,t5,t6,t7,t8; CREATE TABLE t1 (i INT NOT NULL, c CHAR(16) CHARACTER SET utf8 NOT NULL, -j INT NOT NULL); +j INT NOT NULL) ENGINE = 'INNODB' ; CREATE TABLE t2 (i INT NOT NULL, c CHAR(16) CHARACTER SET utf8 NOT NULL, -j INT NOT NULL); +j INT NOT NULL) ENGINE = 'INNODB' ; ALTER TABLE t2 MODIFY c CHAR(128) CHARACTER SET utf8 NOT NULL; CREATE TABLE t3 (i INT NOT NULL, c CHAR(128) CHARACTER SET utf8 NOT NULL, -j INT NOT NULL); +j INT NOT NULL) ENGINE = 'INNODB' ; ALTER TABLE t3 MODIFY c CHAR(16) CHARACTER SET utf8 NOT NULL; CREATE TABLE t4 (i INT NOT NULL, c CHAR(128) CHARACTER SET utf8 NOT NULL, -j INT NOT NULL); +j INT NOT NULL) ENGINE = 'INNODB' ; CREATE TABLE t5 (i INT NOT NULL, c CHAR(255) CHARACTER SET utf8 NOT NULL, -j INT NOT NULL); +j INT NOT NULL) ENGINE = 'INNODB' ; ALTER TABLE t5 MODIFY c CHAR(16) CHARACTER SET utf8 NOT NULL; CREATE TABLE t6 (i INT NOT NULL, c CHAR(255) CHARACTER SET utf8 NOT NULL, -j INT NOT NULL); +j INT NOT NULL) ENGINE = 'INNODB' ; ALTER TABLE t6 MODIFY c CHAR(128) CHARACTER SET utf8 NOT NULL; CREATE TABLE t7 (i INT NOT NULL, c CHAR(255) CHARACTER SET utf8 NOT NULL, -j INT NOT NULL); +j INT NOT NULL) ENGINE = 'INNODB' ; [expecting slave to replicate correctly] INSERT INTO t1 VALUES (1, "", 1); INSERT INTO t1 VALUES (2, repeat(_utf8'a', 16), 2); @@ -489,7 +489,9 @@ INSERT INTO t3 VALUES (1, "", 1); INSERT INTO t3 VALUES (2, repeat(_utf8'a', 128), 2); Last_SQL_Error Table definition on master and slave does not match: Column 1 size mismatch - master has size 512, test.t3 on slave has size 65. Master's column size should be <= the slave's column size. -SET GLOBAL SQL_SLAVE_SKIP_COUNTER=8; +RESET MASTER; +STOP SLAVE; +RESET SLAVE; START SLAVE; [expecting slave to replicate correctly] INSERT INTO t4 VALUES (1, "", 1); @@ -500,14 +502,18 @@ INSERT INTO t5 VALUES (1, "", 1); INSERT INTO t5 VALUES (2, repeat(_utf8'a', 255), 2); Last_SQL_Error Table definition on master and slave does not match: Column 1 size mismatch - master has size 1020, test.t5 on slave has size 65. Master's column size should be <= the slave's column size. -SET GLOBAL SQL_SLAVE_SKIP_COUNTER=8; +RESET MASTER; +STOP SLAVE; +RESET SLAVE; START SLAVE; [expecting slave to stop] INSERT INTO t6 VALUES (1, "", 1); INSERT INTO t6 VALUES (2, repeat(_utf8'a', 255), 2); Last_SQL_Error Table definition on master and slave does not match: Column 1 size mismatch - master has size 1020, test.t6 on slave has size 513. Master's column size should be <= the slave's column size. -SET GLOBAL SQL_SLAVE_SKIP_COUNTER=8; +RESET MASTER; +STOP SLAVE; +RESET SLAVE; START SLAVE; [expecting slave to replicate correctly] INSERT INTO t7 VALUES (1, "", 1); === modified file 'mysql-test/suite/rpl/r/rpl_stm_log.result' --- a/mysql-test/suite/rpl/r/rpl_stm_log.result 2008-02-12 10:27:52 +0000 +++ b/mysql-test/suite/rpl/r/rpl_stm_log.result 2008-08-18 18:12:46 +0000 @@ -196,7 +196,7 @@ master-bin.000001 # Intvar # # INSERT_ID master-bin.000001 # Query # # use `test`; insert into t1 values (NULL) master-bin.000001 # Query # # use `test`; drop table t1 master-bin.000001 # Query # # use `test`; create table t1 (word char(20) not null)ENGINE=MyISAM -master-bin.000001 # Begin_load_query # # ;file_id=#;block_len=581 +master-bin.000001 # Begin_load_query # # ;file_id=#;block_len=# master-bin.000001 # Execute_load_query # # use `test`; load data infile '../std_data_ln/words.dat' into table t1 ignore 1 lines ;file_id=# master-bin.000001 # Rotate # # master-bin.000002;pos=4 show binlog events in 'master-bin.000002'; === modified file 'mysql-test/suite/rpl/r/rpl_variables.result' --- a/mysql-test/suite/rpl/r/rpl_variables.result 2008-03-07 12:59:36 +0000 +++ b/mysql-test/suite/rpl/r/rpl_variables.result 2008-07-17 16:26:59 +0000 @@ -45,7 +45,7 @@ RESET SLAVE; RESET MASTER; START SLAVE; [on slave] -SET @@global.init_slave = 'ant'; +SET @@global.init_slave = 'SELECT 1'; [on master] CREATE TABLE tstmt (id INT AUTO_INCREMENT PRIMARY KEY, truth BOOLEAN, @@ -66,9 +66,9 @@ SET @@global.sync_binlog = 2000000; INSERT INTO tstmt(num) VALUES (@@global.sync_binlog); SET @@global.sync_binlog = 3000000; INSERT INTO tstmt(num) VALUES (@@global.sync_binlog); -SET @@global.init_slave = 'bison'; +SET @@global.init_slave = 'SELECT 2'; INSERT INTO tstmt(text) VALUES (@@global.init_slave); -SET @@global.init_slave = 'cat'; +SET @@global.init_slave = 'SELECT 3'; INSERT INTO tstmt(text) VALUES (@@global.init_slave); SET @@global.slave_exec_mode = 'IDEMPOTENT'; INSERT INTO tstmt(text) VALUES (@@global.slave_exec_mode); @@ -140,9 +140,9 @@ INSERT INTO tproc(num) VALUES (@@global. SET @@global.sync_binlog = 3000000; INSERT INTO tproc(num) VALUES (@@global.sync_binlog); # string -SET @@global.init_slave = 'bison'; +SET @@global.init_slave = 'SELECT 2'; INSERT INTO tproc(text) VALUES (@@global.init_slave); -SET @@global.init_slave = 'cat'; +SET @@global.init_slave = 'SELECT 3'; INSERT INTO tproc(text) VALUES (@@global.init_slave); # enumeration SET @@global.slave_exec_mode = 'IDEMPOTENT'; @@ -226,9 +226,9 @@ INSERT INTO tfunc(num) VALUES (@@global. SET @@global.sync_binlog = 3000000; INSERT INTO tfunc(num) VALUES (@@global.sync_binlog); # string -SET @@global.init_slave = 'bison'; +SET @@global.init_slave = 'SELECT 2'; INSERT INTO tfunc(text) VALUES (@@global.init_slave); -SET @@global.init_slave = 'cat'; +SET @@global.init_slave = 'SELECT 3'; INSERT INTO tfunc(text) VALUES (@@global.init_slave); # enumeration SET @@global.slave_exec_mode = 'IDEMPOTENT'; @@ -316,9 +316,9 @@ INSERT INTO ttrig(num) VALUES (@@global. SET @@global.sync_binlog = 3000000; INSERT INTO ttrig(num) VALUES (@@global.sync_binlog); # string -SET @@global.init_slave = 'bison'; +SET @@global.init_slave = 'SELECT 2'; INSERT INTO ttrig(text) VALUES (@@global.init_slave); -SET @@global.init_slave = 'cat'; +SET @@global.init_slave = 'SELECT 3'; INSERT INTO ttrig(text) VALUES (@@global.init_slave); # enumeration SET @@global.slave_exec_mode = 'IDEMPOTENT'; @@ -395,9 +395,9 @@ PREPARE p5 FROM 'SET @@global.sync_binlo PREPARE p6 FROM 'INSERT INTO tprep(num) VALUES (@@global.sync_binlog)'; PREPARE p7 FROM 'SET @@global.sync_binlog = 3000000'; PREPARE p8 FROM 'INSERT INTO tprep(num) VALUES (@@global.sync_binlog)'; -PREPARE p9 FROM 'SET @@global.init_slave = \'bison\''; +PREPARE p9 FROM 'SET @@global.init_slave = \'SELECT 2\''; PREPARE p10 FROM 'INSERT INTO tprep(text) VALUES (@@global.init_slave)'; -PREPARE p11 FROM 'SET @@global.init_slave = \'cat\''; +PREPARE p11 FROM 'SET @@global.init_slave = \'SELECT 3\''; PREPARE p12 FROM 'INSERT INTO tprep(text) VALUES (@@global.init_slave)'; PREPARE p13 FROM 'SET @@global.slave_exec_mode = \'IDEMPOTENT\''; PREPARE p14 FROM 'INSERT INTO tprep(text) VALUES (@@global.slave_exec_mode)'; @@ -522,8 +522,8 @@ id truth num text 2 0 NULL NULL 3 NULL 2000000 NULL 4 NULL 3000000 NULL -5 NULL NULL bison -6 NULL NULL cat +5 NULL NULL SELECT 2 +6 NULL NULL SELECT 3 7 NULL NULL IDEMPOTENT 8 NULL NULL STRICT 9 1 NULL NULL === modified file 'mysql-test/suite/rpl/t/disabled.def' --- a/mysql-test/suite/rpl/t/disabled.def 2008-07-25 15:10:14 +0000 +++ b/mysql-test/suite/rpl/t/disabled.def 2008-08-18 18:12:46 +0000 @@ -29,8 +29,6 @@ rpl_log_pos : Bug#8693 Te rpl_row_basic_7ndb : BUG#33360 2007-12-19 mats rpl_ndb_idempotent fails due to null field for table on slave side rpl_redirect : Failure is sporadic and and the test is superfluous (mats) rpl_innodb_bug28430 : Failure on Solaris Bug #36793 -rpl_row_basic_2myisam : Bug#37879 2008-07-14 alik Disabled to make 6.0 greaner (the test fails too often) -rpl_row_basic_3innodb : Bug#37879 2008-07-14 alik Disabled to make 6.0 greaner (the test fails too often) rpl_heartbeat : Bug#37714 2008-07-14 alik Disabled to make 6.0 greaner (the test fails too often) rpl_idempotency : Bug#37767 2008-07-14 alik Disabled to make 6.0 greaner (the test fails too often) === modified file 'mysql-test/suite/rpl/t/rpl_incident.test' --- a/mysql-test/suite/rpl/t/rpl_incident.test 2007-06-27 12:28:02 +0000 +++ b/mysql-test/suite/rpl/t/rpl_incident.test 2008-07-18 13:07:14 +0000 @@ -19,6 +19,37 @@ connection slave; # The 4 should not be inserted into the table, since the incident log # event should have stop the slave. --echo **** On Slave **** +#### BEGIN DEBUG INFO ADDED BY SVEN 2008-07-18 -- SEE BUG#38077 #### +let $tables= query_get_value(SHOW TABLES, Tables_in_test, 1); +if (`SELECT '$tables' != 't1'`) +{ + --echo **** TEST CASE BUG! PRINTING DEBUG INFO! **** + --echo **** Dear developer, if you see this in the output of a test + --echo **** case run, please add all the information below as a + --echo **** comment to BUG#38077. If it's a pushbuild failure, please + --echo **** include a link to the push page. + --echo **** Thank you! /Sven + SHOW BINLOG EVENTS; + --echo **** master binlog **** + --error 0,1 + --exec $MYSQL_BINLOG --hexdump $MYSQLTEST_VARDIR/log/master-bin.000001 + --echo **** slave binlog **** + --error 0,1 + --exec $MYSQL_BINLOG --hexdump $MYSQLTEST_VARDIR/log/slave-bin.000001 + --echo **** slave status **** + query_vertical SHOW SLAVE STATUS; + --echo **** slave's master status **** + SHOW MASTER STATUS; + --echo **** slave binlog events **** + --echo [on master] + connection master; + --echo **** master status **** + SHOW MASTER STATUS; + --echo **** master binlog events **** + SHOW BINLOG EVENTS; + exit; +} +#### END DEBUG INFO #### SELECT * FROM t1; --replace_result $MASTER_MYPORT MASTER_PORT === modified file 'mysql-test/suite/rpl/t/rpl_loaddata_map.test' --- a/mysql-test/suite/rpl/t/rpl_loaddata_map.test 2008-02-05 14:30:44 +0000 +++ b/mysql-test/suite/rpl/t/rpl_loaddata_map.test 2008-08-18 18:12:46 +0000 @@ -1,7 +1,16 @@ +# ==== Purpose ==== # # check replication of load data with the server parameters subjected to # read_buffer_size > max_allowed_packet # +# ==== Implementation ==== +# +# Insert many rows into t1, write t1 to file. +# Load the file into t2. +# See that t2 came out as expected on slave. +# +# ==== Related Bugs ==== +# # BUG#30435 loading large LOAD DATA INFILE breaks slave with # read_buffer_size set on master # BUG#33413 show binlog events fails if binlog has event size of close @@ -9,10 +18,17 @@ source include/have_binlog_format_mixed_or_statement.inc; source include/master-slave.inc; -source include/have_innodb.inc; -source include/have_binlog_format_mixed_or_statement.inc; + + +--echo ==== Create a big file ==== + +# We turn off binlogging to avoid too much noise in the binlog. t1 is +# just an auxiliary construction anyways, it is not needed on the +# slave. --disable_query_log +SET @@sql_log_bin= 0; + let $rows= 5000; create table t1 (id int not null primary key auto_increment); @@ -22,10 +38,13 @@ while($rows) dec $rows; } eval select * into outfile '$MYSQLTEST_VARDIR/tmp/bug30435_5k.txt' from t1; -flush logs; + +DROP TABLE t1; +SET @@sql_log_bin= 1; --enable_query_log -connection master; + +--echo ==== Load our big file into a table ==== create table t2 (id int not null primary key auto_increment); select @@session.read_buffer_size - @@session.max_allowed_packet > 0 ; @@ -34,21 +53,21 @@ select @@session.read_buffer_size - @@se eval load data infile '$MYSQLTEST_VARDIR/tmp/bug30435_5k.txt' into table t2; select count(*) from t2 /* 5 000 */; -# the binglog will show fragmented Append_block events ---let $binlog_start=107 ---replace_column 2 # 4 # 5 # ---replace_regex /\/\* xid=.* \*\//\/* XID *\// /file_id=[0-9]+/file_id=#/ /block_len=[0-9]+/block_len=#/ ---replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR $binlog_start ---eval show binlog events in 'master-bin.000002' from $binlog_start +# the binlog will show fragmented Append_block events +source include/show_binlog_events.inc; + +--echo ==== Verify results on slave ==== +--echo [on slave] sync_slave_with_master; -#connection slave; select count(*) from t2 /* 5 000 */; + +--echo ==== Clean up ==== + +--echo [on master] connection master; -drop table t1, t2; +drop table t2; sync_slave_with_master; remove_file $MYSQLTEST_VARDIR/tmp/bug30435_5k.txt; - ---echo end of the tests === removed file 'mysql-test/suite/rpl/t/rpl_row_err_daisychain-master.opt' --- a/mysql-test/suite/rpl/t/rpl_row_err_daisychain-master.opt 2007-06-27 12:28:02 +0000 +++ b/mysql-test/suite/rpl/t/rpl_row_err_daisychain-master.opt 1970-01-01 00:00:00 +0000 @@ -1 +0,0 @@ ---binlog-format=row === removed file 'mysql-test/suite/rpl/t/rpl_row_err_daisychain-slave.opt' --- a/mysql-test/suite/rpl/t/rpl_row_err_daisychain-slave.opt 2007-06-27 12:28:02 +0000 +++ b/mysql-test/suite/rpl/t/rpl_row_err_daisychain-slave.opt 1970-01-01 00:00:00 +0000 @@ -1 +0,0 @@ ---binlog-format=statement --log-slave-updates === modified file 'mysql-test/suite/rpl/t/rpl_trunc_temp.test' --- a/mysql-test/suite/rpl/t/rpl_trunc_temp.test 2008-02-28 11:36:14 +0000 +++ b/mysql-test/suite/rpl/t/rpl_trunc_temp.test 2008-07-23 10:13:55 +0000 @@ -1,13 +1,30 @@ -# Requires statement logging +# ==== Purpose ==== +# +# Verify that Slave_open_temp_tables is increased when a temporary +# table is opened on the slave, and decreased when a temporary table +# is closed on the slave, and that it is preserved during 'DELETE FROM +# table' and 'TRUNCATE table'. +# +# ==== Method ==== +# +# Create a temporary table on master, insert rows, and try: +# - delete rows from the table +# - truncate the table +# - drop the table +# +# ==== Related bugs ==== +# +# BUG#17137 Running "truncate table" on temporary table leaves the table open on a slave +# +# Bug in this test: BUG#37493: rpl_trunc_temp.test nondeterministic + + +# Requires statement-based logging since temporary tables are not +# logged in row-based logging -- source include/have_binlog_format_mixed_or_statement.inc source include/master-slave.inc; -# -# Bug#17137 Running "truncate table" on temporary table -# leaves the table open on a slave -# - create temporary table t1 (n int); insert into t1 values(1); sync_slave_with_master; @@ -28,13 +45,10 @@ show status like 'Slave_open_temp_tables # Disconnect the master, temp table on slave should dissapear disconnect master; -connection master1; -# Wait until drop of temp tables appers in binlog +connection slave; + +# Wait until drop of temp tables appers in slave's binlog let $wait_binlog_event= DROP; source include/wait_for_binlog_event.inc; -connection slave; show status like 'Slave_open_temp_tables'; - - -# End of 4.1 tests === modified file 'mysql-test/suite/rpl/t/rpl_variables.test' --- a/mysql-test/suite/rpl/t/rpl_variables.test 2008-03-07 12:59:36 +0000 +++ b/mysql-test/suite/rpl/t/rpl_variables.test 2008-07-17 16:26:59 +0000 @@ -117,7 +117,7 @@ source include/reset_master_and_slave.in # above, but can't because it affects how the slave works. --echo [on slave] connection slave; -SET @@global.init_slave = 'ant'; +SET @@global.init_slave = 'SELECT 1'; --echo [on master] @@ -154,9 +154,9 @@ SET @@global.sync_binlog = 3000000; INSERT INTO tstmt(num) VALUES (@@global.sync_binlog); # string -SET @@global.init_slave = 'bison'; +SET @@global.init_slave = 'SELECT 2'; INSERT INTO tstmt(text) VALUES (@@global.init_slave); -SET @@global.init_slave = 'cat'; +SET @@global.init_slave = 'SELECT 3'; INSERT INTO tstmt(text) VALUES (@@global.init_slave); # enumeration @@ -258,9 +258,9 @@ BEGIN INSERT INTO tproc(num) VALUES (@@global.sync_binlog); # string - SET @@global.init_slave = 'bison'; + SET @@global.init_slave = 'SELECT 2'; INSERT INTO tproc(text) VALUES (@@global.init_slave); - SET @@global.init_slave = 'cat'; + SET @@global.init_slave = 'SELECT 3'; INSERT INTO tproc(text) VALUES (@@global.init_slave); # enumeration @@ -367,9 +367,9 @@ BEGIN INSERT INTO tfunc(num) VALUES (@@global.sync_binlog); # string - SET @@global.init_slave = 'bison'; + SET @@global.init_slave = 'SELECT 2'; INSERT INTO tfunc(text) VALUES (@@global.init_slave); - SET @@global.init_slave = 'cat'; + SET @@global.init_slave = 'SELECT 3'; INSERT INTO tfunc(text) VALUES (@@global.init_slave); # enumeration @@ -478,9 +478,9 @@ BEGIN INSERT INTO ttrig(num) VALUES (@@global.sync_binlog); # string - SET @@global.init_slave = 'bison'; + SET @@global.init_slave = 'SELECT 2'; INSERT INTO ttrig(text) VALUES (@@global.init_slave); - SET @@global.init_slave = 'cat'; + SET @@global.init_slave = 'SELECT 3'; INSERT INTO ttrig(text) VALUES (@@global.init_slave); # enumeration @@ -581,9 +581,9 @@ PREPARE p7 FROM 'SET @@global.sync_binlo PREPARE p8 FROM 'INSERT INTO tprep(num) VALUES (@@global.sync_binlog)'; # string -PREPARE p9 FROM 'SET @@global.init_slave = \'bison\''; +PREPARE p9 FROM 'SET @@global.init_slave = \'SELECT 2\''; PREPARE p10 FROM 'INSERT INTO tprep(text) VALUES (@@global.init_slave)'; -PREPARE p11 FROM 'SET @@global.init_slave = \'cat\''; +PREPARE p11 FROM 'SET @@global.init_slave = \'SELECT 3\''; PREPARE p12 FROM 'INSERT INTO tprep(text) VALUES (@@global.init_slave)'; # enumeration === removed file 'mysql-test/suite/rpl_ndb/t/rpl_truncate_7ndb_2-master.opt' --- a/mysql-test/suite/rpl_ndb/t/rpl_truncate_7ndb_2-master.opt 2008-06-26 05:18:28 +0000 +++ b/mysql-test/suite/rpl_ndb/t/rpl_truncate_7ndb_2-master.opt 1970-01-01 00:00:00 +0000 @@ -1 +0,0 @@ ---binlog-format=mixed === modified file 'mysql-test/suite/rpl_ndb/t/rpl_truncate_7ndb_2.test' --- a/mysql-test/suite/rpl_ndb/t/rpl_truncate_7ndb_2.test 2008-06-26 05:18:28 +0000 +++ b/mysql-test/suite/rpl_ndb/t/rpl_truncate_7ndb_2.test 2008-08-18 18:12:46 +0000 @@ -1,6 +1,6 @@ # Same test as rpl_truncate_7ndb.test, but with mixed mode # This is marked with 'big_test' just because the rpl_truncate_7ndb test is # so slow... - +--source include/have_binlog_format_mixed.inc --source include/big_test.inc --source suite/rpl_ndb/t/rpl_truncate_7ndb.test === modified file 'mysql-test/suite/rpl_ndb_big/r/rpl_row_basic_7ndb.result' --- a/mysql-test/suite/rpl_ndb_big/r/rpl_row_basic_7ndb.result 2008-06-27 12:39:40 +0000 +++ b/mysql-test/suite/rpl_ndb_big/r/rpl_row_basic_7ndb.result 2008-08-18 18:12:46 +0000 @@ -437,7 +437,7 @@ SELECT COUNT(*) FROM t1 ORDER BY c1,c2; COUNT(*) 0 set @@global.slave_exec_mode= default; Last_SQL_Error -0 + SELECT COUNT(*) FROM t1 ORDER BY c1,c2; COUNT(*) 0 **** Test for BUG#37076 **** @@ -451,3 +451,72 @@ SELECT * FROM t1; a b c 2005-11-14 01:01:01 2005-11-14 01:01:02 2005-11-14 DROP TABLE IF EXISTS t1,t2,t3,t4,t5,t6,t7,t8; +CREATE TABLE t1 (i INT NOT NULL, +c CHAR(16) CHARACTER SET utf8 NOT NULL, +j INT NOT NULL) ENGINE = 'NDB' ; +CREATE TABLE t2 (i INT NOT NULL, +c CHAR(16) CHARACTER SET utf8 NOT NULL, +j INT NOT NULL) ENGINE = 'NDB' ; +ALTER TABLE t2 MODIFY c CHAR(128) CHARACTER SET utf8 NOT NULL; +CREATE TABLE t3 (i INT NOT NULL, +c CHAR(128) CHARACTER SET utf8 NOT NULL, +j INT NOT NULL) ENGINE = 'NDB' ; +ALTER TABLE t3 MODIFY c CHAR(16) CHARACTER SET utf8 NOT NULL; +CREATE TABLE t4 (i INT NOT NULL, +c CHAR(128) CHARACTER SET utf8 NOT NULL, +j INT NOT NULL) ENGINE = 'NDB' ; +CREATE TABLE t5 (i INT NOT NULL, +c CHAR(255) CHARACTER SET utf8 NOT NULL, +j INT NOT NULL) ENGINE = 'NDB' ; +ALTER TABLE t5 MODIFY c CHAR(16) CHARACTER SET utf8 NOT NULL; +CREATE TABLE t6 (i INT NOT NULL, +c CHAR(255) CHARACTER SET utf8 NOT NULL, +j INT NOT NULL) ENGINE = 'NDB' ; +ALTER TABLE t6 MODIFY c CHAR(128) CHARACTER SET utf8 NOT NULL; +CREATE TABLE t7 (i INT NOT NULL, +c CHAR(255) CHARACTER SET utf8 NOT NULL, +j INT NOT NULL) ENGINE = 'NDB' ; +[expecting slave to replicate correctly] +INSERT INTO t1 VALUES (1, "", 1); +INSERT INTO t1 VALUES (2, repeat(_utf8'a', 16), 2); +Comparing tables master:test.t1 and slave:test.t1 +[expecting slave to replicate correctly] +INSERT INTO t2 VALUES (1, "", 1); +INSERT INTO t2 VALUES (2, repeat(_utf8'a', 16), 2); +Comparing tables master:test.t2 and slave:test.t2 +[expecting slave to stop] +INSERT INTO t3 VALUES (1, "", 1); +INSERT INTO t3 VALUES (2, repeat(_utf8'a', 128), 2); +Last_SQL_Error +Table definition on master and slave does not match: Column 1 size mismatch - master has size 384, test.t3 on slave has size 49. Master's column size should be <= the slave's column size. +RESET MASTER; +STOP SLAVE; +RESET SLAVE; +START SLAVE; +[expecting slave to replicate correctly] +INSERT INTO t4 VALUES (1, "", 1); +INSERT INTO t4 VALUES (2, repeat(_utf8'a', 128), 2); +Comparing tables master:test.t4 and slave:test.t4 +[expecting slave to stop] +INSERT INTO t5 VALUES (1, "", 1); +INSERT INTO t5 VALUES (2, repeat(_utf8'a', 255), 2); +Last_SQL_Error +Table definition on master and slave does not match: Column 1 size mismatch - master has size 765, test.t5 on slave has size 49. Master's column size should be <= the slave's column size. +RESET MASTER; +STOP SLAVE; +RESET SLAVE; +START SLAVE; +[expecting slave to stop] +INSERT INTO t6 VALUES (1, "", 1); +INSERT INTO t6 VALUES (2, repeat(_utf8'a', 255), 2); +Last_SQL_Error +Table definition on master and slave does not match: Column 1 size mismatch - master has size 765, test.t6 on slave has size 385. Master's column size should be <= the slave's column size. +RESET MASTER; +STOP SLAVE; +RESET SLAVE; +START SLAVE; +[expecting slave to replicate correctly] +INSERT INTO t7 VALUES (1, "", 1); +INSERT INTO t7 VALUES (2, repeat(_utf8'a', 255), 2); +Comparing tables master:test.t7 and slave:test.t7 +drop table t1, t2, t3, t4, t5, t6, t7; === modified file 'sql/sql_binlog.cc' --- a/sql/sql_binlog.cc 2008-05-23 13:54:03 +0000 +++ b/sql/sql_binlog.cc 2008-08-18 18:12:46 +0000 @@ -208,6 +208,7 @@ void mysql_client_binlog_statement(THD* #if !defined(MYSQL_CLIENT) && defined(HAVE_REPLICATION) if (apply_event_and_update_pos(ev, thd, thd->rli_fake, FALSE)) { + delete ev; /* TODO: Maybe a better error message since the BINLOG statement now contains several events. === modified file 'sql/sql_cursor.cc' --- a/sql/sql_cursor.cc 2008-08-11 13:45:45 +0000 +++ b/sql/sql_cursor.cc 2008-08-18 18:12:46 +0000 @@ -155,6 +155,7 @@ int mysql_open_cursor(THD *thd, uint fla if (! (sensitive_cursor= new (thd->mem_root) Sensitive_cursor(thd, result))) { delete result_materialize; + result_materialize= NULL; return 1; } @@ -212,6 +213,7 @@ int mysql_open_cursor(THD *thd, uint fla if ((rc= materialized_cursor->open(0))) { delete materialized_cursor; + materialized_cursor= NULL; goto err_open; } === modified file 'tests/mysql_client_test.c' --- a/tests/mysql_client_test.c 2008-08-11 13:45:45 +0000 +++ b/tests/mysql_client_test.c 2008-08-18 18:12:46 +0000 @@ -17623,7 +17623,6 @@ static void test_wl4166_2() } - /** Test how warnings generated during assignment of parameters are (currently not) preserve in case of reprepare. @@ -17881,6 +17880,36 @@ static void test_wl4284_1() DBUG_VOID_RETURN; } +/** + Bug#38486 Crash when using cursor protocol +*/ + +static void test_bug38486(void) +{ + MYSQL_STMT *stmt; + const char *stmt_text; + unsigned long type= CURSOR_TYPE_READ_ONLY; + + DBUG_ENTER("test_bug38486"); + myheader("test_bug38486"); + + stmt= mysql_stmt_init(mysql); + mysql_stmt_attr_set(stmt, STMT_ATTR_CURSOR_TYPE, (void*)&type); + stmt_text= "CREATE TABLE t1 (a INT)"; + mysql_stmt_prepare(stmt, stmt_text, strlen(stmt_text)); + mysql_stmt_execute(stmt); + mysql_stmt_close(stmt); + + stmt= mysql_stmt_init(mysql); + mysql_stmt_attr_set(stmt, STMT_ATTR_CURSOR_TYPE, (void*)&type); + stmt_text= "INSERT INTO t1 VALUES (1)"; + mysql_stmt_prepare(stmt, stmt_text, strlen(stmt_text)); + mysql_stmt_execute(stmt); + mysql_stmt_close(stmt); + + DBUG_VOID_RETURN; +} + /* Read and parse arguments and MySQL options from my.cnf */ @@ -18193,6 +18222,7 @@ static struct my_tests_st my_tests[]= { { "test_wl4166_4", test_wl4166_4 }, { "test_bug36004", test_bug36004 }, { "test_wl4284_1", test_wl4284_1 }, + { "test_bug38486", test_bug38486 }, { 0, 0 } };