summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--mysql-test/r/rpl_trigger.result12
-rw-r--r--mysql-test/t/rpl_trigger.test29
-rw-r--r--sql/sql_db.cc6
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;
}