summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorunknown <msvensson@neptunus.(none)>2006-03-08 13:31:05 +0100
committerunknown <msvensson@neptunus.(none)>2006-03-08 13:31:05 +0100
commitc80332c7b9ed2fd0ac86d579af53cdb0e855ec7e (patch)
tree5209c5597ae2a4435c37415cbd44a48c16c371c8
parenta8331c7326dde37ae950ba33ad47257957fc581b (diff)
parent9a293f36e4de273e8b507c2f0878dcf90b2cfcbc (diff)
downloadmariadb-git-c80332c7b9ed2fd0ac86d579af53cdb0e855ec7e.tar.gz
Merge neptunus.(none):/home/msvensson/mysql/mysql-5.0
into neptunus.(none):/home/msvensson/mysql/bug17137/my50-bug17137
-rw-r--r--mysql-test/r/rpl_trunc_temp.result22
-rw-r--r--mysql-test/t/rpl_trunc_temp.test32
-rw-r--r--sql/sql_delete.cc2
3 files changed, 56 insertions, 0 deletions
diff --git a/mysql-test/r/rpl_trunc_temp.result b/mysql-test/r/rpl_trunc_temp.result
new file mode 100644
index 00000000000..44624a38875
--- /dev/null
+++ b/mysql-test/r/rpl_trunc_temp.result
@@ -0,0 +1,22 @@
+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 (n int);
+insert into t1 values(1);
+show status like 'Slave_open_temp_tables';
+Variable_name Value
+Slave_open_temp_tables 1
+delete from t1;
+show status like 'Slave_open_temp_tables';
+Variable_name Value
+Slave_open_temp_tables 1
+truncate t1;
+show status like 'Slave_open_temp_tables';
+Variable_name Value
+Slave_open_temp_tables 1
+show status like 'Slave_open_temp_tables';
+Variable_name Value
+Slave_open_temp_tables 0
diff --git a/mysql-test/t/rpl_trunc_temp.test b/mysql-test/t/rpl_trunc_temp.test
new file mode 100644
index 00000000000..b4ea3c318da
--- /dev/null
+++ b/mysql-test/t/rpl_trunc_temp.test
@@ -0,0 +1,32 @@
+source include/master-slave.inc;
+
+#
+# Bug#17137 Running "truncate table" on temporary table
+# leaves the table open on a slave
+#
+
+create temporary table t1 (n int);
+insert into t1 values(1);
+sync_slave_with_master;
+show status like 'Slave_open_temp_tables';
+
+# Perform a delete from temp table
+connection master;
+delete from t1;
+sync_slave_with_master;
+show status like 'Slave_open_temp_tables';
+
+# Perform truncate on temp table
+connection master;
+truncate t1;
+sync_slave_with_master;
+show status like 'Slave_open_temp_tables';
+
+# Disconnect the master, temp table on slave should dissapear
+disconnect master;
+--real_sleep 3 # time for DROP to be read by slave
+connection slave;
+show status like 'Slave_open_temp_tables';
+
+
+# End of 4.1 tests
diff --git a/sql/sql_delete.cc b/sql/sql_delete.cc
index d8a8f28b92b..56dbd423b69 100644
--- a/sql/sql_delete.cc
+++ b/sql/sql_delete.cc
@@ -813,6 +813,8 @@ bool mysql_truncate(THD *thd, TABLE_LIST *table_list, bool dont_send_ok)
strmov(path, table->s->path);
*table_ptr= table->next; // Unlink table from list
close_temporary(table,0);
+ if (thd->slave_thread)
+ --slave_open_temp_tables;
*fn_ext(path)=0; // Remove the .frm extension
ha_create_table(path, &create_info,1);
// We don't need to call invalidate() because this table is not in cache