MySQL Lists are EOL. Please join:

List:Commits« Previous MessageNext Message »
From:Alfranio Correia Date:January 28 2009 5:30pm
Subject:bzr commit into mysql-6.0-bugteam branch (alfranio.correia:2983)
Bug#35583
View as plain text  
#At file:///home/acorreia/workspace.sun/repository.mysql/bzrwork/bug-35583/mysql-6.0-bugteam/ based on revid:chad@stripped

 2983 Alfranio Correia	2009-01-28 [merge]
      Merge BUG#35583 from 5.1-bugteam to 6.0-bugteam (Done by He Zhenxing 2009-01-12)
added:
  mysql-test/suite/binlog/r/binlog_tmp_table.result
  mysql-test/suite/binlog/t/binlog_tmp_table.test
modified:
  sql/sql_delete.cc
  sql/sql_table.cc

=== added file 'mysql-test/suite/binlog/r/binlog_tmp_table.result'
--- a/mysql-test/suite/binlog/r/binlog_tmp_table.result	1970-01-01 00:00:00 +0000
+++ b/mysql-test/suite/binlog/r/binlog_tmp_table.result	2009-01-28 14:35:12 +0000
@@ -0,0 +1,30 @@
+create table foo (a int);
+flush logs;
+create temporary table tmp1_foo like foo;
+create temporary table tmp2_foo (a int);
+insert into tmp1_foo values (1), (2), (3), (4);
+replace into tmp2_foo values (1), (2), (3), (4);
+update tmp1_foo set a=2*a-1;
+update tmp2_foo set a=2*a;
+delete from tmp1_foo where a < 5;
+delete from tmp2_foo where a < 5;
+insert into foo select * from tmp1_foo;
+insert into foo select * from tmp2_foo;
+truncate table tmp1_foo;
+truncate table tmp2_foo;
+flush logs;
+select * from foo;
+a
+5
+7
+6
+8
+drop table foo;
+create table foo (a int);
+select * from foo;
+a
+5
+7
+6
+8
+drop table foo;

=== added file 'mysql-test/suite/binlog/t/binlog_tmp_table.test'
--- a/mysql-test/suite/binlog/t/binlog_tmp_table.test	1970-01-01 00:00:00 +0000
+++ b/mysql-test/suite/binlog/t/binlog_tmp_table.test	2009-01-28 14:35:12 +0000
@@ -0,0 +1,82 @@
+# ==== Purpose ====
+#
+# Test if statements used temporary tables are binlogged correctly
+#
+# ==== Method ====
+#
+# Use two connections, use temporary tables on both of them, and by
+# switching connections between statements, the test can check if the
+# statements are logged with the correct thread id.
+# 
+# The statements current tested include:
+#   CREATE TEMPORARY TABLE
+#   CREATE TEMPORARY TABLE LIKE
+#   INSERT
+#   REPLACE
+#   UPDATE
+#   INSERT SELECT
+#   TRUNCATE
+#
+# Note: When adding new query statements, please add them between the
+# two 'flush logs'. And aslo please make sure the connection is
+# switched between each statement.
+#
+# ==== Related bugs ====
+#
+# BUG#35583 mysqlbinlog replay fails with ERROR 1146 when temp tables are used
+#
+source include/have_log_bin.inc;
+source include/have_binlog_format_mixed_or_statement.inc;
+
+connect (master,127.0.0.1,root,,test,$MASTER_MYPORT,);
+connect (master1,127.0.0.1,root,,test,$MASTER_MYPORT,);
+
+create table foo (a int);
+
+flush logs;
+
+connection master;
+create temporary table tmp1_foo like foo;
+connection master1;
+create temporary table tmp2_foo (a int);
+
+connection master;
+insert into tmp1_foo values (1), (2), (3), (4);
+connection master1;
+replace into tmp2_foo values (1), (2), (3), (4);
+
+connection master;
+update tmp1_foo set a=2*a-1;
+connection master1;
+update tmp2_foo set a=2*a;
+
+connection master;
+delete from tmp1_foo where a < 5;
+connection master1;
+delete from tmp2_foo where a < 5;
+
+connection master;
+insert into foo select * from tmp1_foo;
+connection master1;
+insert into foo select * from tmp2_foo;
+
+connection master;
+truncate table tmp1_foo;
+connection master1;
+truncate table tmp2_foo;
+
+flush logs;
+
+connection default;
+select * from foo;
+
+# prepare for the replay
+drop table foo;
+create table foo (a int);
+
+# replay from binary log
+exec $MYSQL_BINLOG $MYSQLTEST_VARDIR/log/master-bin.000002 | $MYSQL;
+select * from foo;
+
+# clean up
+drop table foo;

=== modified file 'sql/sql_delete.cc'
--- a/sql/sql_delete.cc	2009-01-16 14:28:04 +0000
+++ b/sql/sql_delete.cc	2009-01-28 17:30:19 +0000
@@ -1045,6 +1045,9 @@ bool mysql_truncate(THD *thd, TABLE_LIST
 					     share->table_name.str, 1,
                                              OTM_OPEN))))
       (void) rm_temporary_table(table_type, path, frm_only);
+    else
+      thd->thread_specific_used= TRUE;
+    
     free_table_share(share);
     my_free((char*) table,MYF(0));
     /*

=== modified file 'sql/sql_table.cc'
--- a/sql/sql_table.cc	2009-01-16 14:28:04 +0000
+++ b/sql/sql_table.cc	2009-01-28 17:30:19 +0000
@@ -5015,6 +5015,7 @@ bool mysql_create_like_table(THD* thd, T
 				dst_path, false); /* purecov: inspected */
       goto err;     /* purecov: inspected */
     }
+    thd->thread_specific_used= TRUE;
   }
   else if (err)
   {

Thread
bzr commit into mysql-6.0-bugteam branch (alfranio.correia:2983)Bug#35583Alfranio Correia28 Jan