Loading mysql-test/r/rpl_ddl.result +434 −0 Original line number Diff line number Diff line Loading @@ -1254,6 +1254,440 @@ flush logs; SHOW PROCEDURE STATUS LIKE 'p1'; -------- switch to slave ------- SHOW PROCEDURE STATUS LIKE 'p1'; ######## CREATE OR REPLACE VIEW v1 as select * from t1 ######## -------- switch to master ------- INSERT INTO t1 SET f1= 18 + 1; SELECT MAX(f1) FROM t1; MAX(f1) 19 -------- switch to slave -------- SELECT MAX(f1) FROM t1; MAX(f1) 18 -------- switch to master ------- CREATE OR REPLACE VIEW v1 as select * from t1; SELECT MAX(f1) FROM t1; MAX(f1) 19 -------- switch to slave -------- SELECT MAX(f1) FROM t1; MAX(f1) 19 -------- switch to master ------- ROLLBACK; SELECT MAX(f1) FROM t1; MAX(f1) 19 TEST-INFO: MASTER: The INSERT is committed (Succeeded) -------- switch to slave -------- SELECT MAX(f1) FROM t1; MAX(f1) 19 TEST-INFO: SLAVE: The INSERT is committed (Succeeded) -------- switch to master ------- flush logs; -------- switch to slave -------- flush logs; -------- switch to master ------- SHOW CREATE VIEW v1; View Create View v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `t1`.`f1` AS `f1` from `t1` -------- switch to slave ------- SHOW CREATE VIEW v1; View Create View v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `t1`.`f1` AS `f1` from `t1` ######## ALTER VIEW v1 AS select f1 from t1 ######## -------- switch to master ------- INSERT INTO t1 SET f1= 19 + 1; SELECT MAX(f1) FROM t1; MAX(f1) 20 -------- switch to slave -------- SELECT MAX(f1) FROM t1; MAX(f1) 19 -------- switch to master ------- ALTER VIEW v1 AS select f1 from t1; SELECT MAX(f1) FROM t1; MAX(f1) 20 -------- switch to slave -------- SELECT MAX(f1) FROM t1; MAX(f1) 20 -------- switch to master ------- ROLLBACK; SELECT MAX(f1) FROM t1; MAX(f1) 20 TEST-INFO: MASTER: The INSERT is committed (Succeeded) -------- switch to slave -------- SELECT MAX(f1) FROM t1; MAX(f1) 20 TEST-INFO: SLAVE: The INSERT is committed (Succeeded) -------- switch to master ------- flush logs; -------- switch to slave -------- flush logs; -------- switch to master ------- SHOW CREATE VIEW v1; View Create View v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `t1`.`f1` AS `f1` from `t1` -------- switch to slave ------- SHOW CREATE VIEW v1; View Create View v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `t1`.`f1` AS `f1` from `t1` ######## DROP VIEW IF EXISTS v1 ######## -------- switch to master ------- INSERT INTO t1 SET f1= 20 + 1; SELECT MAX(f1) FROM t1; MAX(f1) 21 -------- switch to slave -------- SELECT MAX(f1) FROM t1; MAX(f1) 20 -------- switch to master ------- DROP VIEW IF EXISTS v1; SELECT MAX(f1) FROM t1; MAX(f1) 21 -------- switch to slave -------- SELECT MAX(f1) FROM t1; MAX(f1) 21 -------- switch to master ------- ROLLBACK; SELECT MAX(f1) FROM t1; MAX(f1) 21 TEST-INFO: MASTER: The INSERT is committed (Succeeded) -------- switch to slave -------- SELECT MAX(f1) FROM t1; MAX(f1) 21 TEST-INFO: SLAVE: The INSERT is committed (Succeeded) -------- switch to master ------- flush logs; -------- switch to slave -------- flush logs; -------- switch to master ------- SHOW CREATE VIEW v1; ERROR 42S02: Table 'mysqltest1.v1' doesn't exist -------- switch to slave ------- SHOW CREATE VIEW v1; ERROR 42S02: Table 'mysqltest1.v1' doesn't exist ######## CREATE TRIGGER trg1 BEFORE INSERT ON t1 FOR EACH ROW SET @a:=1 ######## -------- switch to master ------- INSERT INTO t1 SET f1= 21 + 1; SELECT MAX(f1) FROM t1; MAX(f1) 22 -------- switch to slave -------- SELECT MAX(f1) FROM t1; MAX(f1) 21 -------- switch to master ------- CREATE TRIGGER trg1 BEFORE INSERT ON t1 FOR EACH ROW SET @a:=1; SELECT MAX(f1) FROM t1; MAX(f1) 22 -------- switch to slave -------- SELECT MAX(f1) FROM t1; MAX(f1) 22 -------- switch to master ------- ROLLBACK; SELECT MAX(f1) FROM t1; MAX(f1) 22 TEST-INFO: MASTER: The INSERT is committed (Succeeded) -------- switch to slave -------- SELECT MAX(f1) FROM t1; MAX(f1) 22 TEST-INFO: SLAVE: The INSERT is committed (Succeeded) -------- switch to master ------- flush logs; -------- switch to slave -------- flush logs; -------- switch to master ------- SHOW TRIGGERS; Trigger Event Table Statement Timing Created sql_mode trg1 INSERT t1 SET @a:=1 BEFORE NULL -------- switch to slave ------- SHOW TRIGGERS; Trigger Event Table Statement Timing Created sql_mode trg1 INSERT t1 SET @a:=1 BEFORE NULL ######## DROP TRIGGER trg1 ######## -------- switch to master ------- INSERT INTO t1 SET f1= 22 + 1; SELECT MAX(f1) FROM t1; MAX(f1) 23 -------- switch to slave -------- SELECT MAX(f1) FROM t1; MAX(f1) 22 -------- switch to master ------- DROP TRIGGER trg1; SELECT MAX(f1) FROM t1; MAX(f1) 23 -------- switch to slave -------- SELECT MAX(f1) FROM t1; MAX(f1) 23 -------- switch to master ------- ROLLBACK; SELECT MAX(f1) FROM t1; MAX(f1) 23 TEST-INFO: MASTER: The INSERT is committed (Succeeded) -------- switch to slave -------- SELECT MAX(f1) FROM t1; MAX(f1) 23 TEST-INFO: SLAVE: The INSERT is committed (Succeeded) -------- switch to master ------- flush logs; -------- switch to slave -------- flush logs; -------- switch to master ------- SHOW TRIGGERS; Trigger Event Table Statement Timing Created sql_mode -------- switch to slave ------- SHOW TRIGGERS; Trigger Event Table Statement Timing Created sql_mode ######## CREATE USER user1@localhost ######## -------- switch to master ------- INSERT INTO t1 SET f1= 23 + 1; SELECT MAX(f1) FROM t1; MAX(f1) 24 -------- switch to slave -------- SELECT MAX(f1) FROM t1; MAX(f1) 23 -------- switch to master ------- CREATE USER user1@localhost; SELECT MAX(f1) FROM t1; MAX(f1) 24 -------- switch to slave -------- SELECT MAX(f1) FROM t1; MAX(f1) 24 -------- switch to master ------- ROLLBACK; SELECT MAX(f1) FROM t1; MAX(f1) 24 TEST-INFO: MASTER: The INSERT is committed (Succeeded) -------- switch to slave -------- SELECT MAX(f1) FROM t1; MAX(f1) 24 TEST-INFO: SLAVE: The INSERT is committed (Succeeded) -------- switch to master ------- flush logs; -------- switch to slave -------- flush logs; -------- switch to master ------- SELECT user FROM mysql.user WHERE user = 'user1'; user user1 -------- switch to slave ------- SELECT user FROM mysql.user WHERE user = 'user1'; user user1 ######## RENAME USER user1@localhost TO rename1@localhost ######## -------- switch to master ------- INSERT INTO t1 SET f1= 24 + 1; SELECT MAX(f1) FROM t1; MAX(f1) 25 -------- switch to slave -------- SELECT MAX(f1) FROM t1; MAX(f1) 24 -------- switch to master ------- RENAME USER user1@localhost TO rename1@localhost; SELECT MAX(f1) FROM t1; MAX(f1) 25 -------- switch to slave -------- SELECT MAX(f1) FROM t1; MAX(f1) 25 -------- switch to master ------- ROLLBACK; SELECT MAX(f1) FROM t1; MAX(f1) 25 TEST-INFO: MASTER: The INSERT is committed (Succeeded) -------- switch to slave -------- SELECT MAX(f1) FROM t1; MAX(f1) 25 TEST-INFO: SLAVE: The INSERT is committed (Succeeded) -------- switch to master ------- flush logs; -------- switch to slave -------- flush logs; -------- switch to master ------- SELECT user FROM mysql.user WHERE user = 'rename1'; user rename1 -------- switch to slave ------- SELECT user FROM mysql.user WHERE user = 'rename1'; user rename1 ######## DROP USER rename1@localhost ######## -------- switch to master ------- INSERT INTO t1 SET f1= 25 + 1; SELECT MAX(f1) FROM t1; MAX(f1) 26 -------- switch to slave -------- SELECT MAX(f1) FROM t1; MAX(f1) 25 -------- switch to master ------- DROP USER rename1@localhost; SELECT MAX(f1) FROM t1; MAX(f1) 26 -------- switch to slave -------- SELECT MAX(f1) FROM t1; MAX(f1) 26 -------- switch to master ------- ROLLBACK; SELECT MAX(f1) FROM t1; MAX(f1) 26 TEST-INFO: MASTER: The INSERT is committed (Succeeded) -------- switch to slave -------- SELECT MAX(f1) FROM t1; MAX(f1) 26 TEST-INFO: SLAVE: The INSERT is committed (Succeeded) -------- switch to master ------- flush logs; -------- switch to slave -------- flush logs; -------- switch to master ------- SELECT user FROM mysql.user WHERE user = 'rename1'; user -------- switch to slave ------- SELECT user FROM mysql.user WHERE user = 'rename1'; user DROP DATABASE IF EXISTS mysqltest1; DROP DATABASE IF EXISTS mysqltest2; DROP DATABASE IF EXISTS mysqltest3; mysql-test/t/rpl_ddl.test +107 −0 Original line number Diff line number Diff line Loading @@ -391,6 +391,113 @@ SHOW PROCEDURE STATUS LIKE 'p1'; connection master; --horizontal_results ############################################################### # Cases with VIEWs ############################################################### let $my_stmt= CREATE OR REPLACE VIEW v1 as select * from t1; let $my_master_commit= true; let $my_slave_commit= true; --source include/rpl_stmt_seq.inc SHOW CREATE VIEW v1; --disable_query_log SELECT '-------- switch to slave -------' as ""; --enable_query_log connection slave; SHOW CREATE VIEW v1; connection master; let $my_stmt= ALTER VIEW v1 AS select f1 from t1; let $my_master_commit= true; let $my_slave_commit= true; --source include/rpl_stmt_seq.inc SHOW CREATE VIEW v1; --disable_query_log SELECT '-------- switch to slave -------' as ""; --enable_query_log connection slave; SHOW CREATE VIEW v1; connection master; let $my_stmt= DROP VIEW IF EXISTS v1; let $my_master_commit= true; let $my_slave_commit= true; --source include/rpl_stmt_seq.inc --error 1146 SHOW CREATE VIEW v1; --disable_query_log SELECT '-------- switch to slave -------' as ""; --enable_query_log connection slave; --error 1146 SHOW CREATE VIEW v1; connection master; ############################################################### # Cases with TRIGGERs ############################################################### let $my_stmt= CREATE TRIGGER trg1 BEFORE INSERT ON t1 FOR EACH ROW SET @a:=1; let $my_master_commit= true; let $my_slave_commit= true; --source include/rpl_stmt_seq.inc SHOW TRIGGERS; --disable_query_log SELECT '-------- switch to slave -------' as ""; --enable_query_log connection slave; SHOW TRIGGERS; connection master; let $my_stmt= DROP TRIGGER trg1; let $my_master_commit= true; let $my_slave_commit= true; --source include/rpl_stmt_seq.inc SHOW TRIGGERS; --disable_query_log SELECT '-------- switch to slave -------' as ""; --enable_query_log connection slave; SHOW TRIGGERS; connection master; ############################################################### # Cases with USERs ############################################################### let $my_stmt= CREATE USER user1@localhost; let $my_master_commit= true; let $my_slave_commit= true; --source include/rpl_stmt_seq.inc SELECT user FROM mysql.user WHERE user = 'user1'; --disable_query_log SELECT '-------- switch to slave -------' as ""; --enable_query_log connection slave; SELECT user FROM mysql.user WHERE user = 'user1'; connection master; let $my_stmt= RENAME USER user1@localhost TO rename1@localhost; let $my_master_commit= true; let $my_slave_commit= true; --source include/rpl_stmt_seq.inc SELECT user FROM mysql.user WHERE user = 'rename1'; --disable_query_log SELECT '-------- switch to slave -------' as ""; --enable_query_log connection slave; SELECT user FROM mysql.user WHERE user = 'rename1'; connection master; let $my_stmt= DROP USER rename1@localhost; let $my_master_commit= true; let $my_slave_commit= true; --source include/rpl_stmt_seq.inc SELECT user FROM mysql.user WHERE user = 'rename1'; --disable_query_log SELECT '-------- switch to slave -------' as ""; --enable_query_log connection slave; SELECT user FROM mysql.user WHERE user = 'rename1'; connection master; ############################################################### # Cleanup ############################################################### Loading sql/sql_parse.cc +15 −0 Original line number Diff line number Diff line Loading @@ -3684,6 +3684,8 @@ mysql_execute_command(THD *thd) if (check_access(thd, INSERT_ACL, "mysql", 0, 1, 1, 0) && check_global_access(thd,CREATE_USER_ACL)) break; if (end_active_trans(thd)) goto error; if (!(res= mysql_create_user(thd, lex->users_list))) { if (mysql_bin_log.is_open()) Loading @@ -3700,6 +3702,8 @@ mysql_execute_command(THD *thd) if (check_access(thd, DELETE_ACL, "mysql", 0, 1, 1, 0) && check_global_access(thd,CREATE_USER_ACL)) break; if (end_active_trans(thd)) goto error; if (!(res= mysql_drop_user(thd, lex->users_list))) { if (mysql_bin_log.is_open()) Loading @@ -3716,6 +3720,8 @@ mysql_execute_command(THD *thd) if (check_access(thd, UPDATE_ACL, "mysql", 0, 1, 1, 0) && check_global_access(thd,CREATE_USER_ACL)) break; if (end_active_trans(thd)) goto error; if (!(res= mysql_rename_user(thd, lex->users_list))) { if (mysql_bin_log.is_open()) Loading Loading @@ -4510,6 +4516,9 @@ mysql_execute_command(THD *thd) } case SQLCOM_CREATE_VIEW: { if (end_active_trans(thd)) goto error; if (!(res= mysql_create_view(thd, thd->lex->create_view_mode)) && mysql_bin_log.is_open()) { Loading Loading @@ -4557,6 +4566,9 @@ mysql_execute_command(THD *thd) } case SQLCOM_CREATE_TRIGGER: { if (end_active_trans(thd)) goto error; res= mysql_create_or_drop_trigger(thd, all_tables, 1); /* We don't care about trigger body after this point */ Loading @@ -4566,6 +4578,9 @@ mysql_execute_command(THD *thd) } case SQLCOM_DROP_TRIGGER: { if (end_active_trans(thd)) goto error; res= mysql_create_or_drop_trigger(thd, all_tables, 0); break; } Loading Loading
mysql-test/r/rpl_ddl.result +434 −0 Original line number Diff line number Diff line Loading @@ -1254,6 +1254,440 @@ flush logs; SHOW PROCEDURE STATUS LIKE 'p1'; -------- switch to slave ------- SHOW PROCEDURE STATUS LIKE 'p1'; ######## CREATE OR REPLACE VIEW v1 as select * from t1 ######## -------- switch to master ------- INSERT INTO t1 SET f1= 18 + 1; SELECT MAX(f1) FROM t1; MAX(f1) 19 -------- switch to slave -------- SELECT MAX(f1) FROM t1; MAX(f1) 18 -------- switch to master ------- CREATE OR REPLACE VIEW v1 as select * from t1; SELECT MAX(f1) FROM t1; MAX(f1) 19 -------- switch to slave -------- SELECT MAX(f1) FROM t1; MAX(f1) 19 -------- switch to master ------- ROLLBACK; SELECT MAX(f1) FROM t1; MAX(f1) 19 TEST-INFO: MASTER: The INSERT is committed (Succeeded) -------- switch to slave -------- SELECT MAX(f1) FROM t1; MAX(f1) 19 TEST-INFO: SLAVE: The INSERT is committed (Succeeded) -------- switch to master ------- flush logs; -------- switch to slave -------- flush logs; -------- switch to master ------- SHOW CREATE VIEW v1; View Create View v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `t1`.`f1` AS `f1` from `t1` -------- switch to slave ------- SHOW CREATE VIEW v1; View Create View v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `t1`.`f1` AS `f1` from `t1` ######## ALTER VIEW v1 AS select f1 from t1 ######## -------- switch to master ------- INSERT INTO t1 SET f1= 19 + 1; SELECT MAX(f1) FROM t1; MAX(f1) 20 -------- switch to slave -------- SELECT MAX(f1) FROM t1; MAX(f1) 19 -------- switch to master ------- ALTER VIEW v1 AS select f1 from t1; SELECT MAX(f1) FROM t1; MAX(f1) 20 -------- switch to slave -------- SELECT MAX(f1) FROM t1; MAX(f1) 20 -------- switch to master ------- ROLLBACK; SELECT MAX(f1) FROM t1; MAX(f1) 20 TEST-INFO: MASTER: The INSERT is committed (Succeeded) -------- switch to slave -------- SELECT MAX(f1) FROM t1; MAX(f1) 20 TEST-INFO: SLAVE: The INSERT is committed (Succeeded) -------- switch to master ------- flush logs; -------- switch to slave -------- flush logs; -------- switch to master ------- SHOW CREATE VIEW v1; View Create View v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `t1`.`f1` AS `f1` from `t1` -------- switch to slave ------- SHOW CREATE VIEW v1; View Create View v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `t1`.`f1` AS `f1` from `t1` ######## DROP VIEW IF EXISTS v1 ######## -------- switch to master ------- INSERT INTO t1 SET f1= 20 + 1; SELECT MAX(f1) FROM t1; MAX(f1) 21 -------- switch to slave -------- SELECT MAX(f1) FROM t1; MAX(f1) 20 -------- switch to master ------- DROP VIEW IF EXISTS v1; SELECT MAX(f1) FROM t1; MAX(f1) 21 -------- switch to slave -------- SELECT MAX(f1) FROM t1; MAX(f1) 21 -------- switch to master ------- ROLLBACK; SELECT MAX(f1) FROM t1; MAX(f1) 21 TEST-INFO: MASTER: The INSERT is committed (Succeeded) -------- switch to slave -------- SELECT MAX(f1) FROM t1; MAX(f1) 21 TEST-INFO: SLAVE: The INSERT is committed (Succeeded) -------- switch to master ------- flush logs; -------- switch to slave -------- flush logs; -------- switch to master ------- SHOW CREATE VIEW v1; ERROR 42S02: Table 'mysqltest1.v1' doesn't exist -------- switch to slave ------- SHOW CREATE VIEW v1; ERROR 42S02: Table 'mysqltest1.v1' doesn't exist ######## CREATE TRIGGER trg1 BEFORE INSERT ON t1 FOR EACH ROW SET @a:=1 ######## -------- switch to master ------- INSERT INTO t1 SET f1= 21 + 1; SELECT MAX(f1) FROM t1; MAX(f1) 22 -------- switch to slave -------- SELECT MAX(f1) FROM t1; MAX(f1) 21 -------- switch to master ------- CREATE TRIGGER trg1 BEFORE INSERT ON t1 FOR EACH ROW SET @a:=1; SELECT MAX(f1) FROM t1; MAX(f1) 22 -------- switch to slave -------- SELECT MAX(f1) FROM t1; MAX(f1) 22 -------- switch to master ------- ROLLBACK; SELECT MAX(f1) FROM t1; MAX(f1) 22 TEST-INFO: MASTER: The INSERT is committed (Succeeded) -------- switch to slave -------- SELECT MAX(f1) FROM t1; MAX(f1) 22 TEST-INFO: SLAVE: The INSERT is committed (Succeeded) -------- switch to master ------- flush logs; -------- switch to slave -------- flush logs; -------- switch to master ------- SHOW TRIGGERS; Trigger Event Table Statement Timing Created sql_mode trg1 INSERT t1 SET @a:=1 BEFORE NULL -------- switch to slave ------- SHOW TRIGGERS; Trigger Event Table Statement Timing Created sql_mode trg1 INSERT t1 SET @a:=1 BEFORE NULL ######## DROP TRIGGER trg1 ######## -------- switch to master ------- INSERT INTO t1 SET f1= 22 + 1; SELECT MAX(f1) FROM t1; MAX(f1) 23 -------- switch to slave -------- SELECT MAX(f1) FROM t1; MAX(f1) 22 -------- switch to master ------- DROP TRIGGER trg1; SELECT MAX(f1) FROM t1; MAX(f1) 23 -------- switch to slave -------- SELECT MAX(f1) FROM t1; MAX(f1) 23 -------- switch to master ------- ROLLBACK; SELECT MAX(f1) FROM t1; MAX(f1) 23 TEST-INFO: MASTER: The INSERT is committed (Succeeded) -------- switch to slave -------- SELECT MAX(f1) FROM t1; MAX(f1) 23 TEST-INFO: SLAVE: The INSERT is committed (Succeeded) -------- switch to master ------- flush logs; -------- switch to slave -------- flush logs; -------- switch to master ------- SHOW TRIGGERS; Trigger Event Table Statement Timing Created sql_mode -------- switch to slave ------- SHOW TRIGGERS; Trigger Event Table Statement Timing Created sql_mode ######## CREATE USER user1@localhost ######## -------- switch to master ------- INSERT INTO t1 SET f1= 23 + 1; SELECT MAX(f1) FROM t1; MAX(f1) 24 -------- switch to slave -------- SELECT MAX(f1) FROM t1; MAX(f1) 23 -------- switch to master ------- CREATE USER user1@localhost; SELECT MAX(f1) FROM t1; MAX(f1) 24 -------- switch to slave -------- SELECT MAX(f1) FROM t1; MAX(f1) 24 -------- switch to master ------- ROLLBACK; SELECT MAX(f1) FROM t1; MAX(f1) 24 TEST-INFO: MASTER: The INSERT is committed (Succeeded) -------- switch to slave -------- SELECT MAX(f1) FROM t1; MAX(f1) 24 TEST-INFO: SLAVE: The INSERT is committed (Succeeded) -------- switch to master ------- flush logs; -------- switch to slave -------- flush logs; -------- switch to master ------- SELECT user FROM mysql.user WHERE user = 'user1'; user user1 -------- switch to slave ------- SELECT user FROM mysql.user WHERE user = 'user1'; user user1 ######## RENAME USER user1@localhost TO rename1@localhost ######## -------- switch to master ------- INSERT INTO t1 SET f1= 24 + 1; SELECT MAX(f1) FROM t1; MAX(f1) 25 -------- switch to slave -------- SELECT MAX(f1) FROM t1; MAX(f1) 24 -------- switch to master ------- RENAME USER user1@localhost TO rename1@localhost; SELECT MAX(f1) FROM t1; MAX(f1) 25 -------- switch to slave -------- SELECT MAX(f1) FROM t1; MAX(f1) 25 -------- switch to master ------- ROLLBACK; SELECT MAX(f1) FROM t1; MAX(f1) 25 TEST-INFO: MASTER: The INSERT is committed (Succeeded) -------- switch to slave -------- SELECT MAX(f1) FROM t1; MAX(f1) 25 TEST-INFO: SLAVE: The INSERT is committed (Succeeded) -------- switch to master ------- flush logs; -------- switch to slave -------- flush logs; -------- switch to master ------- SELECT user FROM mysql.user WHERE user = 'rename1'; user rename1 -------- switch to slave ------- SELECT user FROM mysql.user WHERE user = 'rename1'; user rename1 ######## DROP USER rename1@localhost ######## -------- switch to master ------- INSERT INTO t1 SET f1= 25 + 1; SELECT MAX(f1) FROM t1; MAX(f1) 26 -------- switch to slave -------- SELECT MAX(f1) FROM t1; MAX(f1) 25 -------- switch to master ------- DROP USER rename1@localhost; SELECT MAX(f1) FROM t1; MAX(f1) 26 -------- switch to slave -------- SELECT MAX(f1) FROM t1; MAX(f1) 26 -------- switch to master ------- ROLLBACK; SELECT MAX(f1) FROM t1; MAX(f1) 26 TEST-INFO: MASTER: The INSERT is committed (Succeeded) -------- switch to slave -------- SELECT MAX(f1) FROM t1; MAX(f1) 26 TEST-INFO: SLAVE: The INSERT is committed (Succeeded) -------- switch to master ------- flush logs; -------- switch to slave -------- flush logs; -------- switch to master ------- SELECT user FROM mysql.user WHERE user = 'rename1'; user -------- switch to slave ------- SELECT user FROM mysql.user WHERE user = 'rename1'; user DROP DATABASE IF EXISTS mysqltest1; DROP DATABASE IF EXISTS mysqltest2; DROP DATABASE IF EXISTS mysqltest3;
mysql-test/t/rpl_ddl.test +107 −0 Original line number Diff line number Diff line Loading @@ -391,6 +391,113 @@ SHOW PROCEDURE STATUS LIKE 'p1'; connection master; --horizontal_results ############################################################### # Cases with VIEWs ############################################################### let $my_stmt= CREATE OR REPLACE VIEW v1 as select * from t1; let $my_master_commit= true; let $my_slave_commit= true; --source include/rpl_stmt_seq.inc SHOW CREATE VIEW v1; --disable_query_log SELECT '-------- switch to slave -------' as ""; --enable_query_log connection slave; SHOW CREATE VIEW v1; connection master; let $my_stmt= ALTER VIEW v1 AS select f1 from t1; let $my_master_commit= true; let $my_slave_commit= true; --source include/rpl_stmt_seq.inc SHOW CREATE VIEW v1; --disable_query_log SELECT '-------- switch to slave -------' as ""; --enable_query_log connection slave; SHOW CREATE VIEW v1; connection master; let $my_stmt= DROP VIEW IF EXISTS v1; let $my_master_commit= true; let $my_slave_commit= true; --source include/rpl_stmt_seq.inc --error 1146 SHOW CREATE VIEW v1; --disable_query_log SELECT '-------- switch to slave -------' as ""; --enable_query_log connection slave; --error 1146 SHOW CREATE VIEW v1; connection master; ############################################################### # Cases with TRIGGERs ############################################################### let $my_stmt= CREATE TRIGGER trg1 BEFORE INSERT ON t1 FOR EACH ROW SET @a:=1; let $my_master_commit= true; let $my_slave_commit= true; --source include/rpl_stmt_seq.inc SHOW TRIGGERS; --disable_query_log SELECT '-------- switch to slave -------' as ""; --enable_query_log connection slave; SHOW TRIGGERS; connection master; let $my_stmt= DROP TRIGGER trg1; let $my_master_commit= true; let $my_slave_commit= true; --source include/rpl_stmt_seq.inc SHOW TRIGGERS; --disable_query_log SELECT '-------- switch to slave -------' as ""; --enable_query_log connection slave; SHOW TRIGGERS; connection master; ############################################################### # Cases with USERs ############################################################### let $my_stmt= CREATE USER user1@localhost; let $my_master_commit= true; let $my_slave_commit= true; --source include/rpl_stmt_seq.inc SELECT user FROM mysql.user WHERE user = 'user1'; --disable_query_log SELECT '-------- switch to slave -------' as ""; --enable_query_log connection slave; SELECT user FROM mysql.user WHERE user = 'user1'; connection master; let $my_stmt= RENAME USER user1@localhost TO rename1@localhost; let $my_master_commit= true; let $my_slave_commit= true; --source include/rpl_stmt_seq.inc SELECT user FROM mysql.user WHERE user = 'rename1'; --disable_query_log SELECT '-------- switch to slave -------' as ""; --enable_query_log connection slave; SELECT user FROM mysql.user WHERE user = 'rename1'; connection master; let $my_stmt= DROP USER rename1@localhost; let $my_master_commit= true; let $my_slave_commit= true; --source include/rpl_stmt_seq.inc SELECT user FROM mysql.user WHERE user = 'rename1'; --disable_query_log SELECT '-------- switch to slave -------' as ""; --enable_query_log connection slave; SELECT user FROM mysql.user WHERE user = 'rename1'; connection master; ############################################################### # Cleanup ############################################################### Loading
sql/sql_parse.cc +15 −0 Original line number Diff line number Diff line Loading @@ -3684,6 +3684,8 @@ mysql_execute_command(THD *thd) if (check_access(thd, INSERT_ACL, "mysql", 0, 1, 1, 0) && check_global_access(thd,CREATE_USER_ACL)) break; if (end_active_trans(thd)) goto error; if (!(res= mysql_create_user(thd, lex->users_list))) { if (mysql_bin_log.is_open()) Loading @@ -3700,6 +3702,8 @@ mysql_execute_command(THD *thd) if (check_access(thd, DELETE_ACL, "mysql", 0, 1, 1, 0) && check_global_access(thd,CREATE_USER_ACL)) break; if (end_active_trans(thd)) goto error; if (!(res= mysql_drop_user(thd, lex->users_list))) { if (mysql_bin_log.is_open()) Loading @@ -3716,6 +3720,8 @@ mysql_execute_command(THD *thd) if (check_access(thd, UPDATE_ACL, "mysql", 0, 1, 1, 0) && check_global_access(thd,CREATE_USER_ACL)) break; if (end_active_trans(thd)) goto error; if (!(res= mysql_rename_user(thd, lex->users_list))) { if (mysql_bin_log.is_open()) Loading Loading @@ -4510,6 +4516,9 @@ mysql_execute_command(THD *thd) } case SQLCOM_CREATE_VIEW: { if (end_active_trans(thd)) goto error; if (!(res= mysql_create_view(thd, thd->lex->create_view_mode)) && mysql_bin_log.is_open()) { Loading Loading @@ -4557,6 +4566,9 @@ mysql_execute_command(THD *thd) } case SQLCOM_CREATE_TRIGGER: { if (end_active_trans(thd)) goto error; res= mysql_create_or_drop_trigger(thd, all_tables, 1); /* We don't care about trigger body after this point */ Loading @@ -4566,6 +4578,9 @@ mysql_execute_command(THD *thd) } case SQLCOM_DROP_TRIGGER: { if (end_active_trans(thd)) goto error; res= mysql_create_or_drop_trigger(thd, all_tables, 0); break; } Loading