From 0ba168020efb7343477d9a24f2335d7f9a7dacfe Mon Sep 17 00:00:00 2001 From: Sergei Golubchik Date: Sat, 21 Feb 2015 10:43:27 +0100 Subject: [PATCH] MDEV-6769 DROP TRIGGER IF NOT EXIST binlogged on master but not on slave don't return from DROP TRIGGER IF NOT EXISTS on the slave side early when the trigger couldn't be read --- mysql-test/suite/rpl/r/rpl_trigger.result | 11 +++++++++++ mysql-test/suite/rpl/t/rpl_trigger.test | 13 +++++++++++++ sql/sql_parse.cc | 12 ++++++++---- 3 files changed, 32 insertions(+), 4 deletions(-) diff --git a/mysql-test/suite/rpl/r/rpl_trigger.result b/mysql-test/suite/rpl/r/rpl_trigger.result index ac6d9155f4b..c0e35274594 100644 --- a/mysql-test/suite/rpl/r/rpl_trigger.result +++ b/mysql-test/suite/rpl/r/rpl_trigger.result @@ -986,4 +986,15 @@ Warning 1196 Some non-transactional changed tables couldn't be rolled back include/diff_tables.inc [master:t1, slave:t1] include/diff_tables.inc [master:log, slave:log] drop table t1, log; +drop trigger if exists notexistent; +Warnings: +Note 1360 Trigger does not exist +include/show_binlog_events.inc +Log_name Pos Event_type Server_id End_log_pos Info +master-bin.000001 # Gtid # # GTID #-#-# +master-bin.000001 # Query # # use `test`; drop trigger if exists notexistent +include/show_binlog_events.inc +Log_name Pos Event_type Server_id End_log_pos Info +slave-bin.000001 # Gtid # # GTID #-#-# +slave-bin.000001 # Query # # use `test`; drop trigger if exists notexistent include/rpl_end.inc diff --git a/mysql-test/suite/rpl/t/rpl_trigger.test b/mysql-test/suite/rpl/t/rpl_trigger.test index 723fa3e44e2..e062e821a25 100644 --- a/mysql-test/suite/rpl/t/rpl_trigger.test +++ b/mysql-test/suite/rpl/t/rpl_trigger.test @@ -532,6 +532,19 @@ connection master; drop table t1, log; sync_slave_with_master; +# +# MDEV-6769 DROP TRIGGER IF NOT EXIST binlogged on master but not on slave +# +let $slave_pos= query_get_value(SHOW MASTER STATUS, Position, 1); +connection master; +let $binlog_start= query_get_value(SHOW MASTER STATUS, Position, 1); +drop trigger if exists notexistent; +source include/show_binlog_events.inc; +sync_slave_with_master; +let $binlog_start= $slave_pos; +source include/show_binlog_events.inc; +connection master; + # # End of tests # diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc index 96e7bbc822e..9ecf168c60e 100644 --- a/sql/sql_parse.cc +++ b/sql/sql_parse.cc @@ -2283,11 +2283,15 @@ mysql_execute_command(THD *thd) according to slave filtering rules. Returning success without producing any errors in this case. */ - DBUG_RETURN(0); + if (!thd->lex->check_exists) + DBUG_RETURN(0); + /* + DROP TRIGGER IF NOT EXISTS will return without an error later + after possibly writing the query to a binlog + */ } - - // force searching in slave.cc:tables_ok() - all_tables->updating= 1; + else // force searching in slave.cc:tables_ok() + all_tables->updating= 1; } /*