diff options
-rw-r--r-- | mysql-test/r/rpl_trigger.result | 12 | ||||
-rw-r--r-- | mysql-test/t/rpl_trigger.test | 29 | ||||
-rw-r--r-- | sql/sql_db.cc | 6 |
3 files changed, 45 insertions, 2 deletions
diff --git a/mysql-test/r/rpl_trigger.result b/mysql-test/r/rpl_trigger.result index 999af131b8b..7613f2547f0 100644 --- a/mysql-test/r/rpl_trigger.result +++ b/mysql-test/r/rpl_trigger.result @@ -122,3 +122,15 @@ a=b && a=c 1 drop function bug12480; drop table t1; +create table t1 (i int); +create table t2 (i int); +create trigger tr1 before insert on t1 for each row +begin +insert into t2 values (1); +end| +create database other; +use other; +insert into test.t1 values (1); +use test; +drop table t1,t2; +drop database other; diff --git a/mysql-test/t/rpl_trigger.test b/mysql-test/t/rpl_trigger.test index bf2836b6049..fa6054372c7 100644 --- a/mysql-test/t/rpl_trigger.test +++ b/mysql-test/t/rpl_trigger.test @@ -134,6 +134,35 @@ drop function bug12480; drop table t1; # +# #14614: Replication of tables with trigger generates error message if databases is changed +# Note. The error message is emitted by _myfree() using fprintf() to the stderr +# and because of that does not fall into the .result file. +# + +create table t1 (i int); +create table t2 (i int); + +delimiter |; +create trigger tr1 before insert on t1 for each row +begin + insert into t2 values (1); +end| +delimiter ;| + +create database other; +use other; +insert into test.t1 values (1); + +save_master_pos; +connection slave; +sync_with_master; + +connection master; +use test; +drop table t1,t2; +drop database other; + +# # End of test # save_master_pos; diff --git a/sql/sql_db.cc b/sql/sql_db.cc index bde6522a38b..2500b213f4c 100644 --- a/sql/sql_db.cc +++ b/sql/sql_db.cc @@ -1162,10 +1162,12 @@ bool mysql_change_db(THD *thd, const char *name, bool no_access_check) DBUG_RETURN(1); } end: - x_free(thd->db); + if (!(thd->slave_thread)) + x_free(thd->db); if (dbname && dbname[0] == 0) { - x_free(dbname); + if (!(thd->slave_thread)) + x_free(dbname); thd->db= NULL; thd->db_length= 0; } |