From: Dao-Gang.Qu Date: December 29 2009 8:55am Subject: bzr commit into mysql-5.1-bugteam branch (Dao-Gang.Qu:3271) Bug#49132 List-Archive: http://lists.mysql.com/commits/95771 X-Bug: 49132 Message-Id: <200912290856.nBT8uLij032607@daogangqu-desktop> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============1142052546==" --===============1142052546== MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Content-Disposition: inline #At file:///home/daogangqu/mysql/bzrwork/bug49132/mysql-5.1-bugteam/ based on revid:alexey.kopytov@stripped 3271 Dao-Gang.Qu@stripped 2009-12-29 Bug #49132 Replication failure on temporary table + DDL In RBR, DDL statement will change binlog format to non row-based format, and then manipulating a temporary table can not reset binlog format to row-based format rightly. So that the manipulated statement is binlogged with statement-based format. To fix the problem, restore the state of binlog format after the DDL statement is binlogged. @ mysql-test/suite/binlog/r/binlog_row_mix_innodb_myisam.result Correct the test result, all the above binlog event should be row-based after the bug49132 is fixed IN RBR. @ mysql-test/suite/rpl/r/rpl_failure_on_tmp_table_and_DDL.result Test result of the bug#49132. @ mysql-test/suite/rpl/t/rpl_failure_on_tmp_table_and_DDL.test Added the test file to verify if executing DDL statement before trying to manipulate a temporary table causes row-based replication to break with error 'table does not exist'. added: mysql-test/suite/rpl/r/rpl_failure_on_tmp_table_and_DDL.result mysql-test/suite/rpl/t/rpl_failure_on_tmp_table_and_DDL.test modified: mysql-test/suite/binlog/r/binlog_row_mix_innodb_myisam.result sql/events.cc sql/sp.cc sql/sql_acl.cc === 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 2009-10-06 10:25:36 +0000 +++ b/mysql-test/suite/binlog/r/binlog_row_mix_innodb_myisam.result 2009-12-29 08:54:57 +0000 @@ -772,8 +772,11 @@ insert into t2 values (bug27417(2)); ERROR 23000: Duplicate entry '2' for key 'PRIMARY' show binlog events from ; Log_name Pos Event_type Server_id End_log_pos Info -master-bin.000001 # Intvar # # INSERT_ID=3 -master-bin.000001 # Query # # use `test`; insert into t2 values (bug27417(2)) +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Table_map # # table_id: # (test.t2) +master-bin.000001 # Table_map # # table_id: # (test.t1) +master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F +master-bin.000001 # Query # # ROLLBACK select count(*) from t1 /* must be 3 */; count(*) 3 @@ -787,8 +790,11 @@ count(*) 2 show binlog events from ; Log_name Pos Event_type Server_id End_log_pos Info -master-bin.000001 # Intvar # # INSERT_ID=4 -master-bin.000001 # Query # # use `test`; delete from t2 where a=bug27417(3) +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Table_map # # table_id: # (test.t2) +master-bin.000001 # Table_map # # table_id: # (test.t1) +master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F +master-bin.000001 # Query # # COMMIT select count(*) from t1 /* must be 5 */; count(*) 5 @@ -810,8 +816,9 @@ ERROR 23000: Duplicate entry '1' for key show binlog events from ; Log_name Pos Event_type Server_id End_log_pos Info master-bin.000001 # Query # # BEGIN -master-bin.000001 # Intvar # # INSERT_ID=1 -master-bin.000001 # Query # # use `test`; insert into t2 values (bug27417(1)) +master-bin.000001 # Table_map # # table_id: # (test.t2) +master-bin.000001 # Table_map # # table_id: # (test.t1) +master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F master-bin.000001 # Query # # ROLLBACK select count(*) from t1 /* must be 1 */; count(*) @@ -825,8 +832,10 @@ ERROR 23000: Duplicate entry '2' for key show binlog events from ; Log_name Pos Event_type Server_id End_log_pos Info master-bin.000001 # Query # # BEGIN -master-bin.000001 # Intvar # # INSERT_ID=2 -master-bin.000001 # Query # # use `test`; insert into t2 select bug27417(1) union select bug27417(2) +master-bin.000001 # Table_map # # table_id: # (test.t2) +master-bin.000001 # Table_map # # table_id: # (test.t1) +master-bin.000001 # Write_rows # # table_id: # +master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F master-bin.000001 # Query # # ROLLBACK select count(*) from t1 /* must be 2 */; count(*) @@ -838,8 +847,13 @@ update t3 set b=b+bug27417(1); ERROR 23000: Duplicate entry '4' for key 'b' show binlog events from ; Log_name Pos Event_type Server_id End_log_pos Info -master-bin.000001 # Intvar # # INSERT_ID=4 -master-bin.000001 # Query # # use `test`; update t3 set b=b+bug27417(1) +master-bin.000001 # Query # # BEGIN +master-bin.000001 # Table_map # # table_id: # (test.t3) +master-bin.000001 # Table_map # # table_id: # (test.t1) +master-bin.000001 # Write_rows # # table_id: # +master-bin.000001 # Update_rows # # table_id: # +master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F +master-bin.000001 # Query # # ROLLBACK select count(*) from t1 /* must be 2 */; count(*) 2 @@ -853,8 +867,9 @@ ERROR 23000: Duplicate entry '2' for key show binlog events from ; Log_name Pos Event_type Server_id End_log_pos Info master-bin.000001 # Query # # BEGIN -master-bin.000001 # Intvar # # INSERT_ID=6 -master-bin.000001 # Query # # use `test`; UPDATE t4,t3 SET t4.a=t3.a + bug27417(1) /* top level non-ta table */ +master-bin.000001 # Table_map # # table_id: # (test.t4) +master-bin.000001 # Table_map # # table_id: # (test.t1) +master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F master-bin.000001 # Query # # ROLLBACK select count(*) from t1 /* must be 4 */; count(*) @@ -869,7 +884,7 @@ UPDATE t3,t4 SET t3.a=t4.a + bug27417(1) ERROR 23000: Duplicate entry '2' for key 'PRIMARY' select count(*) from t1 /* must be 1 */; count(*) -1 +2 drop table t4; delete from t1; delete from t2; @@ -884,8 +899,10 @@ ERROR 23000: Duplicate entry '1' for key show binlog events from ; Log_name Pos Event_type Server_id End_log_pos Info master-bin.000001 # Query # # BEGIN -master-bin.000001 # Intvar # # INSERT_ID=9 -master-bin.000001 # Query # # use `test`; delete from t2 +master-bin.000001 # Table_map # # table_id: # (test.t2) +master-bin.000001 # Table_map # # table_id: # (test.t3) +master-bin.000001 # Table_map # # table_id: # (test.t1) +master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F master-bin.000001 # Query # # ROLLBACK select count(*) from t1 /* must be 1 */; count(*) @@ -904,7 +921,11 @@ ERROR 23000: Duplicate entry '1' for key show binlog events from ; Log_name Pos Event_type Server_id End_log_pos Info master-bin.000001 # Query # # BEGIN -master-bin.000001 # Query # # use `test`; delete t2.* from t2,t5 where t2.a=t5.a + 1 +master-bin.000001 # Table_map # # table_id: # (test.t2) +master-bin.000001 # Table_map # # table_id: # (test.t1) +master-bin.000001 # Delete_rows # # table_id: # +master-bin.000001 # Write_rows # # table_id: # +master-bin.000001 # Delete_rows # # table_id: # flags: STMT_END_F master-bin.000001 # Query # # ROLLBACK select count(*) from t1 /* must be 1 */; count(*) @@ -924,12 +945,11 @@ count(*) show binlog events from ; Log_name Pos Event_type Server_id End_log_pos Info master-bin.000001 # Query # # 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=# -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/rpl_loaddata.dat' INTO TABLE `t4` FIELDS TERMINATED BY '\t' ENCLOSED BY '' ESCAPED BY '\\' LINES TERMINATED BY '\n' (a, @b) SET b=((@b) + `bug27417`(2)) ;file_id=# +master-bin.000001 # Table_map # # table_id: # (test.t4) +master-bin.000001 # Table_map # # table_id: # (test.t1) +master-bin.000001 # Write_rows # # table_id: # +master-bin.000001 # Write_rows # # table_id: # +master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F master-bin.000001 # Query # # ROLLBACK drop trigger trg_del_t2; drop table t1,t2,t3,t4,t5; === added file 'mysql-test/suite/rpl/r/rpl_failure_on_tmp_table_and_DDL.result' --- a/mysql-test/suite/rpl/r/rpl_failure_on_tmp_table_and_DDL.result 1970-01-01 00:00:00 +0000 +++ b/mysql-test/suite/rpl/r/rpl_failure_on_tmp_table_and_DDL.result 2009-12-29 08:54:57 +0000 @@ -0,0 +1,109 @@ +stop slave; +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; +CREATE TEMPORARY TABLE t1 (a int); +CREATE EVENT e1 ON SCHEDULE EVERY 10 HOUR DO SELECT "nothing"; +insert into t1 values (1); +DROP TEMPORARY TABLE t1; +CREATE TEMPORARY TABLE t1 (a int); +ALTER EVENT e1 ON SCHEDULE EVERY 20 HOUR DO SELECT "nothing"; +insert into t1 values (1); +DROP TEMPORARY TABLE t1; +CREATE TEMPORARY TABLE t1 (a int); +DROP EVENT IF EXISTS e1; +insert into t1 values (1); +DROP TEMPORARY TABLE t1; +CREATE TEMPORARY TABLE t1 (a int); +CREATE PROCEDURE p1() BEGIN SELECT 1 ; END | +insert into t1 values (1); +DROP TEMPORARY TABLE t1; +CREATE TEMPORARY TABLE t1 (a int); +ALTER PROCEDURE p1 SQL SECURITY INVOKER; +insert into t1 values (1); +DROP TEMPORARY TABLE t1; +CREATE TEMPORARY TABLE t1 (a int); +DROP PROCEDURE p1; +insert into t1 values (1); +DROP TEMPORARY TABLE t1; +CREATE TEMPORARY TABLE t1 (a int); +CREATE FUNCTION f1() RETURNS INT RETURN 123; +insert into t1 values (1); +DROP TEMPORARY TABLE t1; +CREATE TEMPORARY TABLE t1 (a int); +ALTER FUNCTION f1 SQL SECURITY INVOKER; +insert into t1 values (1); +DROP TEMPORARY TABLE t1; +CREATE TEMPORARY TABLE t1 (a int); +DROP FUNCTION f1; +insert into t1 values (1); +DROP TEMPORARY TABLE t1; +CREATE TEMPORARY TABLE t1 (a int); +CREATE TABLE t2 (b int); +insert into t1 values (1); +DROP TEMPORARY TABLE t1; +CREATE TEMPORARY TABLE t1 (a int); +DROP TABLE t2; +insert into t1 values (1); +DROP TEMPORARY TABLE t1; +CREATE TEMPORARY TABLE t1 (a int); +CREATE DATABASE mysqltest1; +insert into t1 values (1); +DROP TEMPORARY TABLE t1; +CREATE TEMPORARY TABLE t1 (a int); +DROP DATABASE mysqltest1; +insert into t1 values (1); +DROP TEMPORARY TABLE t1; +CREATE TEMPORARY TABLE t1 (a int); +CREATE TABLE t2 (a int); +CREATE TABLE t3 (a int); +CREATE TRIGGER t3_ai AFTER INSERT ON t3 FOR EACH ROW INSERT INTO t2 VALUES(22); +insert into t3 values (1); +insert into t1 values (1); +DROP TEMPORARY TABLE t1; +drop table t2, t3; +CREATE TEMPORARY TABLE t1 (a int); +CREATE TABLE t2 (a int); +CREATE VIEW v2 AS SELECT * FROM t2; +insert into t1 values (1); +DROP TEMPORARY TABLE t1; +CREATE TEMPORARY TABLE t1 (a int); +DROP VIEW v2; +drop table t2; +insert into t1 values (1); +DROP TEMPORARY TABLE t1; +CREATE TEMPORARY TABLE t1 (a int); +CREATE USER test_1@localhost; +insert into t1 values (1); +DROP TEMPORARY TABLE t1; +CREATE TEMPORARY TABLE t1 (a int); +create table t2 (a int, b int); +grant select on t2 to test_1@localhost; +insert into t1 values (1); +DROP TEMPORARY TABLE t1; +CREATE TEMPORARY TABLE t1 (a int); +create procedure stamp() insert into t2 values (1,2); +grant execute on procedure stamp to test_1@localhost; +insert into t1 values (1); +DROP TEMPORARY TABLE t1; +DROP PROCEDURE stamp; +CREATE TEMPORARY TABLE t1 (a int); +grant usage on *.* to test_1@localhost; +insert into t1 values (1); +DROP TEMPORARY TABLE t1; +CREATE TEMPORARY TABLE t1 (a int); +revoke all privileges on t2 from test_1@localhost; +revoke usage on *.* from test_1@localhost; +insert into t1 values (1); +DROP TEMPORARY TABLE t1; +CREATE TEMPORARY TABLE t1 (a int); +RENAME USER test_1@localhost TO test_2@localhost; +insert into t1 values (1); +DROP TEMPORARY TABLE t1; +CREATE TEMPORARY TABLE t1 (a int); +drop user test_2@localhost; +insert into t1 values (1); +DROP TEMPORARY TABLE t1; +drop table t2; === added file 'mysql-test/suite/rpl/t/rpl_failure_on_tmp_table_and_DDL.test' --- a/mysql-test/suite/rpl/t/rpl_failure_on_tmp_table_and_DDL.test 1970-01-01 00:00:00 +0000 +++ b/mysql-test/suite/rpl/t/rpl_failure_on_tmp_table_and_DDL.test 2009-12-29 08:54:57 +0000 @@ -0,0 +1,164 @@ +# +# Bug#49132 +# This test verify if executing DDL statement before trying to +# manipulate a temporary table causes row-based replication to +# break with error 'table does not exist'. +# +--source include/master-slave.inc +--source include/have_binlog_format_row.inc + +# CREATE EVENT when a temporary table is open. +CREATE TEMPORARY TABLE t1 (a int); +CREATE EVENT e1 ON SCHEDULE EVERY 10 HOUR DO SELECT "nothing"; +insert into t1 values (1); +DROP TEMPORARY TABLE t1; + +# ALTER EVENT when a temporary table is open. +CREATE TEMPORARY TABLE t1 (a int); +ALTER EVENT e1 ON SCHEDULE EVERY 20 HOUR DO SELECT "nothing"; +insert into t1 values (1); +DROP TEMPORARY TABLE t1; + +# DROP EVENT when a temporary table is open. +CREATE TEMPORARY TABLE t1 (a int); +DROP EVENT IF EXISTS e1; +insert into t1 values (1); +DROP TEMPORARY TABLE t1; + +# CREATE PROCEDURE when a temporary table is open. +CREATE TEMPORARY TABLE t1 (a int); +DELIMITER |; +CREATE PROCEDURE p1() BEGIN SELECT 1 ; END | +DELIMITER ;| +insert into t1 values (1); +DROP TEMPORARY TABLE t1; + +# Alter PROCEDURE when a temporary table is open. +CREATE TEMPORARY TABLE t1 (a int); +ALTER PROCEDURE p1 SQL SECURITY INVOKER; +insert into t1 values (1); +DROP TEMPORARY TABLE t1; + + +# DROP PROCEDURE when a temporary table is open. +CREATE TEMPORARY TABLE t1 (a int); +DROP PROCEDURE p1; +insert into t1 values (1); +DROP TEMPORARY TABLE t1; + +# CREATE FUNCTION when a temporary table is open. +CREATE TEMPORARY TABLE t1 (a int); +CREATE FUNCTION f1() RETURNS INT RETURN 123; +insert into t1 values (1); +DROP TEMPORARY TABLE t1; + +# ALTER FUNCTION when a temporary table is open. +CREATE TEMPORARY TABLE t1 (a int); +ALTER FUNCTION f1 SQL SECURITY INVOKER; +insert into t1 values (1); +DROP TEMPORARY TABLE t1; + +# DROP FUNCTION when a temporary table is open. +CREATE TEMPORARY TABLE t1 (a int); +DROP FUNCTION f1; +insert into t1 values (1); +DROP TEMPORARY TABLE t1; + +# CREATE TABLE when a temporary table is open. +CREATE TEMPORARY TABLE t1 (a int); +CREATE TABLE t2 (b int); +insert into t1 values (1); +DROP TEMPORARY TABLE t1; + +# DROP TABLE when a temporary table is open. +CREATE TEMPORARY TABLE t1 (a int); +DROP TABLE t2; +insert into t1 values (1); +DROP TEMPORARY TABLE t1; + +# CREATE DATABASE when a temporary table is open. +CREATE TEMPORARY TABLE t1 (a int); +CREATE DATABASE mysqltest1; +insert into t1 values (1); +DROP TEMPORARY TABLE t1; + +# DROP DATABASE when a temporary table is open. +CREATE TEMPORARY TABLE t1 (a int); +DROP DATABASE mysqltest1; +insert into t1 values (1); +DROP TEMPORARY TABLE t1; + +# CREATE TRIGGER when a temporary table is open. +CREATE TEMPORARY TABLE t1 (a int); +CREATE TABLE t2 (a int); +CREATE TABLE t3 (a int); +CREATE TRIGGER t3_ai AFTER INSERT ON t3 FOR EACH ROW INSERT INTO t2 VALUES(22); +insert into t3 values (1); +insert into t1 values (1); +DROP TEMPORARY TABLE t1; +drop table t2, t3; + +# CREATE VIEW when a temporary table is open. +CREATE TEMPORARY TABLE t1 (a int); +CREATE TABLE t2 (a int); +CREATE VIEW v2 AS SELECT * FROM t2; +insert into t1 values (1); +DROP TEMPORARY TABLE t1; + +# DROP VIEW when a temporary table is open. +CREATE TEMPORARY TABLE t1 (a int); +DROP VIEW v2; +drop table t2; +insert into t1 values (1); +DROP TEMPORARY TABLE t1; + +# CREATE USER when a temporary table is open. +CREATE TEMPORARY TABLE t1 (a int); +CREATE USER test_1@localhost; +insert into t1 values (1); +DROP TEMPORARY TABLE t1; + +# TABLE GRANT when a temporary table is open. +CREATE TEMPORARY TABLE t1 (a int); +create table t2 (a int, b int); +grant select on t2 to test_1@localhost; +insert into t1 values (1); +DROP TEMPORARY TABLE t1; + +# ROUTINE GRANT when a temporary table is open. +CREATE TEMPORARY TABLE t1 (a int); +create procedure stamp() insert into t2 values (1,2); +grant execute on procedure stamp to test_1@localhost; +insert into t1 values (1); +DROP TEMPORARY TABLE t1; +DROP PROCEDURE stamp; + +# MYSQL GRANT when a temporary table is open. +CREATE TEMPORARY TABLE t1 (a int); +grant usage on *.* to test_1@localhost; +insert into t1 values (1); +DROP TEMPORARY TABLE t1; + +# REVOKE PRIVILEGES when a temporary table is open. +CREATE TEMPORARY TABLE t1 (a int); +revoke all privileges on t2 from test_1@localhost; +revoke usage on *.* from test_1@localhost; +insert into t1 values (1); +DROP TEMPORARY TABLE t1; + +# RENAME USER when a temporary table is open. +CREATE TEMPORARY TABLE t1 (a int); +RENAME USER test_1@localhost TO test_2@localhost; +insert into t1 values (1); +DROP TEMPORARY TABLE t1; + +# DROP USER when a temporary table is open. +CREATE TEMPORARY TABLE t1 (a int); +drop user test_2@localhost; +insert into t1 values (1); +DROP TEMPORARY TABLE t1; + +drop table t2; + +--sync_slave_with_master + === modified file 'sql/events.cc' --- a/sql/events.cc 2009-10-16 10:29:42 +0000 +++ b/sql/events.cc 2009-12-29 08:54:57 +0000 @@ -479,6 +479,9 @@ Events::create_event(THD *thd, Event_par } } pthread_mutex_unlock(&LOCK_event_metadata); + /* Restore the state of binlog format */ + if (thd->variables.binlog_format == BINLOG_FORMAT_ROW) + thd->current_stmt_binlog_row_based= TRUE; DBUG_RETURN(ret); } @@ -600,6 +603,9 @@ Events::update_event(THD *thd, Event_par } } pthread_mutex_unlock(&LOCK_event_metadata); + /* Restore the state of binlog format */ + if (thd->variables.binlog_format == BINLOG_FORMAT_ROW) + thd->current_stmt_binlog_row_based= TRUE; DBUG_RETURN(ret); } @@ -674,6 +680,9 @@ Events::drop_event(THD *thd, LEX_STRING write_bin_log(thd, TRUE, thd->query(), thd->query_length()); } pthread_mutex_unlock(&LOCK_event_metadata); + /* Restore the state of binlog format */ + if (thd->variables.binlog_format == BINLOG_FORMAT_ROW) + thd->current_stmt_binlog_row_based= TRUE; DBUG_RETURN(ret); } === modified file 'sql/sp.cc' --- a/sql/sp.cc 2009-12-02 11:17:08 +0000 +++ b/sql/sp.cc 2009-12-29 08:54:57 +0000 @@ -1118,6 +1118,9 @@ done: thd->variables.sql_mode= saved_mode; close_thread_tables(thd); + /* Restore the state of binlog format */ + if (thd->variables.binlog_format == BINLOG_FORMAT_ROW) + thd->current_stmt_binlog_row_based= TRUE; DBUG_RETURN(ret); } @@ -1171,6 +1174,9 @@ sp_drop_routine(THD *thd, int type, sp_n } close_thread_tables(thd); + /* Restore the state of binlog format */ + if (thd->variables.binlog_format == BINLOG_FORMAT_ROW) + thd->current_stmt_binlog_row_based= TRUE; DBUG_RETURN(ret); } @@ -1241,6 +1247,9 @@ sp_update_routine(THD *thd, int type, sp } close_thread_tables(thd); + /* Restore the state of binlog format */ + if (thd->variables.binlog_format == BINLOG_FORMAT_ROW) + thd->current_stmt_binlog_row_based= TRUE; DBUG_RETURN(ret); } === modified file 'sql/sql_acl.cc' --- a/sql/sql_acl.cc 2009-12-06 23:12:11 +0000 +++ b/sql/sql_acl.cc 2009-12-29 08:54:57 +0000 @@ -3083,7 +3083,12 @@ int mysql_table_grant(THD *thd, TABLE_LI */ tables[0].updating= tables[1].updating= tables[2].updating= 1; if (!(thd->spcont || rpl_filter->tables_ok(0, tables))) + { + /* Restore the state of binlog format */ + if (thd->variables.binlog_format == BINLOG_FORMAT_ROW) + thd->current_stmt_binlog_row_based= TRUE; DBUG_RETURN(FALSE); + } } #endif @@ -3096,6 +3101,9 @@ int mysql_table_grant(THD *thd, TABLE_LI if (simple_open_n_lock_tables(thd,tables)) { // Should never happen close_thread_tables(thd); /* purecov: deadcode */ + /* Restore the state of binlog format */ + if (thd->variables.binlog_format == BINLOG_FORMAT_ROW) + thd->current_stmt_binlog_row_based= TRUE; DBUG_RETURN(TRUE); /* purecov: deadcode */ } @@ -3222,6 +3230,9 @@ int mysql_table_grant(THD *thd, TABLE_LI /* Tables are automatically closed */ thd->lex->restore_backup_query_tables_list(&backup); + /* Restore the state of binlog format */ + if (thd->variables.binlog_format == BINLOG_FORMAT_ROW) + thd->current_stmt_binlog_row_based= TRUE; DBUG_RETURN(result); } @@ -3300,13 +3311,21 @@ bool mysql_routine_grant(THD *thd, TABLE */ tables[0].updating= tables[1].updating= 1; if (!(thd->spcont || rpl_filter->tables_ok(0, tables))) + { + /* Restore the state of binlog format */ + if (thd->variables.binlog_format == BINLOG_FORMAT_ROW) + thd->current_stmt_binlog_row_based= TRUE; DBUG_RETURN(FALSE); + } } #endif if (simple_open_n_lock_tables(thd,tables)) { // Should never happen close_thread_tables(thd); + /* Restore the state of binlog format */ + if (thd->variables.binlog_format == BINLOG_FORMAT_ROW) + thd->current_stmt_binlog_row_based= TRUE; DBUG_RETURN(TRUE); } @@ -3382,6 +3401,9 @@ bool mysql_routine_grant(THD *thd, TABLE } rw_unlock(&LOCK_grant); + /* Restore the state of binlog format */ + if (thd->variables.binlog_format == BINLOG_FORMAT_ROW) + thd->current_stmt_binlog_row_based= TRUE; /* Tables are automatically closed */ DBUG_RETURN(result); @@ -3439,13 +3461,21 @@ bool mysql_grant(THD *thd, const char *d */ tables[0].updating= tables[1].updating= 1; if (!(thd->spcont || rpl_filter->tables_ok(0, tables))) + { + /* Restore the state of binlog format */ + if (thd->variables.binlog_format == BINLOG_FORMAT_ROW) + thd->current_stmt_binlog_row_based= TRUE; DBUG_RETURN(FALSE); + } } #endif if (simple_open_n_lock_tables(thd,tables)) { // This should never happen close_thread_tables(thd); /* purecov: deadcode */ + /* Restore the state of binlog format */ + if (thd->variables.binlog_format == BINLOG_FORMAT_ROW) + thd->current_stmt_binlog_row_based= TRUE; DBUG_RETURN(TRUE); /* purecov: deadcode */ } @@ -3505,6 +3535,9 @@ bool mysql_grant(THD *thd, const char *d if (!result) my_ok(thd); + /* Restore the state of binlog format */ + if (thd->variables.binlog_format == BINLOG_FORMAT_ROW) + thd->current_stmt_binlog_row_based= TRUE; DBUG_RETURN(result); } @@ -5672,7 +5705,12 @@ bool mysql_create_user(THD *thd, List variables.binlog_format == BINLOG_FORMAT_ROW) + thd->current_stmt_binlog_row_based= TRUE; DBUG_RETURN(result != 1); + } rw_wrlock(&LOCK_grant); VOID(pthread_mutex_lock(&acl_cache->lock)); @@ -5715,6 +5753,9 @@ bool mysql_create_user(THD *thd, List variables.binlog_format == BINLOG_FORMAT_ROW) + thd->current_stmt_binlog_row_based= TRUE; DBUG_RETURN(result); } @@ -5752,7 +5793,12 @@ bool mysql_drop_user(THD *thd, List variables.binlog_format == BINLOG_FORMAT_ROW) + thd->current_stmt_binlog_row_based= TRUE; DBUG_RETURN(result != 1); + } thd->variables.sql_mode&= ~MODE_PAD_CHAR_TO_FULL_LENGTH; @@ -5789,6 +5835,9 @@ bool mysql_drop_user(THD *thd, List variables.sql_mode= old_sql_mode; + /* Restore the state of binlog format */ + if (thd->variables.binlog_format == BINLOG_FORMAT_ROW) + thd->current_stmt_binlog_row_based= TRUE; DBUG_RETURN(result); } @@ -5826,7 +5875,12 @@ bool mysql_rename_user(THD *thd, List variables.binlog_format == BINLOG_FORMAT_ROW) + thd->current_stmt_binlog_row_based= TRUE; DBUG_RETURN(result != 1); + } rw_wrlock(&LOCK_grant); VOID(pthread_mutex_lock(&acl_cache->lock)); @@ -5873,6 +5927,9 @@ bool mysql_rename_user(THD *thd, List variables.binlog_format == BINLOG_FORMAT_ROW) + thd->current_stmt_binlog_row_based= TRUE; DBUG_RETURN(result); } @@ -5907,7 +5964,12 @@ bool mysql_revoke_all(THD *thd, List clear_current_stmt_binlog_row_based(); if ((result= open_grant_tables(thd, tables))) + { + /* Restore the state of binlog format */ + if (thd->variables.binlog_format == BINLOG_FORMAT_ROW) + thd->current_stmt_binlog_row_based= TRUE; DBUG_RETURN(result != 1); + } rw_wrlock(&LOCK_grant); VOID(pthread_mutex_lock(&acl_cache->lock)); @@ -6058,6 +6120,9 @@ bool mysql_revoke_all(THD *thd, List variables.binlog_format == BINLOG_FORMAT_ROW) + thd->current_stmt_binlog_row_based= TRUE; DBUG_RETURN(result); } @@ -6193,6 +6258,9 @@ bool sp_revoke_privileges(THD *thd, cons close_thread_tables(thd); thd->pop_internal_handler(); + /* Restore the state of binlog format */ + if (thd->variables.binlog_format == BINLOG_FORMAT_ROW) + thd->current_stmt_binlog_row_based= TRUE; DBUG_RETURN(error_handler.has_errors()); } --===============1142052546== MIME-Version: 1.0 Content-Type: text/bzr-bundle; charset="us-ascii"; name="bzr/dao-gang.qu@stripped" Content-Transfer-Encoding: 7bit Content-Disposition: inline # Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: dao-gang.qu@stripped # target_branch: file:///home/daogangqu/mysql/bzrwork/bug49132/mysql-\ # 5.1-bugteam/ # testament_sha1: 609eb5f3f31f93ab6caa64a1417e88f1d207c5d3 # timestamp: 2009-12-29 16:55:21 +0800 # base_revision_id: alexey.kopytov@stripped\ # yqe4f478evi8347x # # Begin bundle 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 --===============1142052546==--