List:Commits« Previous MessageNext Message »
From:bar Date:December 8 2006 6:33am
Subject:bk commit into 5.1 tree (bar:1.2378)
View as plain text  
Below is the list of changes that have just been committed into a local
5.1 repository of bar. When bar does a push these changes will
be propagated to the main repository and, within 24 hours after the
push, to the public repository.
For information on how to access the public repository
see http://dev.mysql.com/doc/mysql/en/installing-source-tree.html

ChangeSet@stripped, 2006-12-08 10:33:05+04:00, bar@stripped +10 -0
  After merge fix
  MERGE: 1.1810.1698.188

  BitKeeper/deleted/.del-ctype_ucs_binlog.result~280d136b1a0bcf17@stripped, 2006-12-08 10:03:44+04:00, bar@stripped +0 -0
    Auto merged
    MERGE: 1.4.3.2

  BitKeeper/deleted/.del-ctype_ucs_binlog.result~280d136b1a0bcf17@stripped, 2006-12-08 10:03:44+04:00, bar@stripped +0 -0
    Merge rename: mysql-test/r/ctype_ucs_binlog.result -> BitKeeper/deleted/.del-ctype_ucs_binlog.result~280d136b1a0bcf17

  client/mysqlbinlog.cc@stripped, 2006-12-08 10:03:44+04:00, bar@stripped +0 -0
    Auto merged
    MERGE: 1.123.1.7

  mysql-test/extra/binlog_tests/mix_innodb_myisam_binlog.test@stripped, 2006-12-08 10:07:43+04:00, bar@stripped +0 -1
    after merge fix.
    MERGE: 1.20.4.2

  mysql-test/extra/binlog_tests/mix_innodb_myisam_binlog.test@stripped, 2006-12-08 10:03:44+04:00, bar@stripped +0 -0
    Merge rename: mysql-test/t/mix_innodb_myisam_binlog.test -> mysql-test/extra/binlog_tests/mix_innodb_myisam_binlog.test

  mysql-test/r/binlog_stm_mix_innodb_myisam.result@stripped, 2006-12-08 10:03:44+04:00, bar@stripped +0 -0
    Auto merged
    MERGE: 1.24.6.2

  mysql-test/r/binlog_stm_mix_innodb_myisam.result@stripped, 2006-12-08 10:03:44+04:00, bar@stripped +0 -0
    Merge rename: mysql-test/r/mix_innodb_myisam_binlog.result -> mysql-test/r/binlog_stm_mix_innodb_myisam.result

  mysql-test/r/rpl_stm_charset.result@stripped, 2006-12-08 10:03:44+04:00, bar@stripped +0 -0
    Auto merged
    MERGE: 1.20.3.2

  mysql-test/r/rpl_stm_charset.result@stripped, 2006-12-08 10:03:44+04:00, bar@stripped +0 -0
    Merge rename: mysql-test/r/rpl_charset.result -> mysql-test/r/rpl_stm_charset.result

  mysql-test/r/rpl_timezone.result@stripped, 2006-12-08 10:33:00+04:00, bar@stripped +12 -3
    After merge fix
    MERGE: 1.12.1.3

  mysql-test/r/user_var-binlog.result@stripped, 2006-12-08 10:03:44+04:00, bar@stripped +0 -0
    Auto merged
    MERGE: 1.5.1.2

  mysql-test/t/mysqlbinlog.test@stripped, 2006-12-08 10:03:44+04:00, bar@stripped +0 -0
    Auto merged
    MERGE: 1.21.1.13

  sql/log_event.cc@stripped, 2006-12-08 10:33:00+04:00, bar@stripped +40 -65
    After merge fix
    MERGE: 1.174.1.43

  sql/log_event.h@stripped, 2006-12-08 10:33:00+04:00, bar@stripped +0 -0
    After merge fix
    MERGE: 1.122.1.5

# This is a BitKeeper patch.  What follows are the unified diffs for the
# set of deltas contained in the patch.  The rest of the patch, the part
# that BitKeeper cares about, is below these diffs.
# User:	bar
# Host:	bar.intranet.mysql.r18.ru
# Root:	/usr/home/bar/mysql-5.1.b20396/RESYNC

--- 1.255/sql/log_event.cc	2006-12-08 10:33:16 +04:00
+++ 1.256/sql/log_event.cc	2006-12-08 10:33:16 +04:00
@@ -1183,7 +1183,7 @@ void Log_event::print_base64(IO_CACHE* f
   my_b_printf(file, "%s\n", tmp_str);
 
   if (!more)
-    my_b_printf(file, "';\n");
+    my_b_printf(file, "'%s\n", print_event_info->delimiter);
 
   my_free(tmp_str, MYF(0));
   DBUG_VOID_RETURN;
@@ -1708,15 +1708,16 @@ void Query_log_event::print_query_header
     if (different_db= memcmp(print_event_info->db, db, db_len + 1))
       memcpy(print_event_info->db, db, db_len + 1);
     if (db[0] && different_db) 
-      my_b_printf(file, "use %s;\n", db);
+      my_b_printf(file, "use %s%s\n", db, print_event_info->delimiter);
   }
 
   end=int10_to_str((long) when, strmov(buff,"SET TIMESTAMP="),10);
-  *end++=';';
+  end= strmov(end, print_event_info->delimiter);
   *end++='\n';
   my_b_write(file, (byte*) buff, (uint) (end-buff));
   if (flags & LOG_EVENT_THREAD_SPECIFIC_F)
-    my_b_printf(file,"SET @@session.pseudo_thread_id=%lu;\n",(ulong)thread_id);
+    my_b_printf(file,"SET @@session.pseudo_thread_id=%lu%s\n",
+                (ulong)thread_id, print_event_info->delimiter);
 
   /*
     If flags2_inited==0, this is an event from 3.23 or 4.0; nothing to
@@ -1745,7 +1746,7 @@ void Query_log_event::print_query_header
                    "@@session.sql_auto_is_null", &need_comma);
       print_set_option(file, tmp, OPTION_RELAXED_UNIQUE_CHECKS, ~flags2,
                    "@@session.unique_checks", &need_comma);
-      my_b_printf(file,";\n");
+      my_b_printf(file,"%s\n", print_event_info->delimiter);
       print_event_info->flags2= flags2;
     }
   }
@@ -1773,15 +1774,17 @@ void Query_log_event::print_query_header
     }
     if (unlikely(print_event_info->sql_mode != sql_mode))
     {
-      my_b_printf(file,"SET @@session.sql_mode=%lu;\n",(ulong)sql_mode);
+      my_b_printf(file,"SET @@session.sql_mode=%lu%s\n",
+                  (ulong)sql_mode, print_event_info->delimiter);
       print_event_info->sql_mode= sql_mode;
     }
   }
   if (print_event_info->auto_increment_increment != auto_increment_increment ||
       print_event_info->auto_increment_offset != auto_increment_offset)
   {
-    my_b_printf(file,"SET @@session.auto_increment_increment=%lu, @@session.auto_increment_offset=%lu;\n",
-            auto_increment_increment,auto_increment_offset);
+    my_b_printf(file,"SET @@session.auto_increment_increment=%lu, @@session.auto_increment_offset=%lu%s\n",
+                auto_increment_increment,auto_increment_offset,
+                print_event_info->delimiter);
     print_event_info->auto_increment_increment= auto_increment_increment;
     print_event_info->auto_increment_offset=    auto_increment_offset;
   }
@@ -1801,16 +1804,18 @@ void Query_log_event::print_query_header
       if (cs_info)
       {
         /* for mysql client */
-        my_b_printf(file, "/*!\\C %s */;\n", cs_info->csname);
+        my_b_printf(file, "/*!\\C %s */%s\n",
+                    cs_info->csname, print_event_info->delimiter);
       }
       my_b_printf(file,"SET "
                   "@@session.character_set_client=%d,"
                   "@@session.collation_connection=%d,"
                   "@@session.collation_server=%d"
-                  ";\n",
+                  "%s\n",
                   uint2korr(charset),
                   uint2korr(charset+2),
-                  uint2korr(charset+4));
+                  uint2korr(charset+4),
+                  print_event_info->delimiter);
       memcpy(print_event_info->charset, charset, 6);
     }
   }
@@ -1818,7 +1823,8 @@ void Query_log_event::print_query_header
   {
     if (bcmp(print_event_info->time_zone_str, time_zone_str, time_zone_len+1))
     {
-      my_b_printf(file,"SET @@session.time_zone='%s';\n", time_zone_str);
+      my_b_printf(file,"SET @@session.time_zone='%s'%s\n",
+                  time_zone_str, print_event_info->delimiter);
       memcpy(print_event_info->time_zone_str, time_zone_str, time_zone_len+1);
     }
   }
@@ -1831,7 +1837,7 @@ void Query_log_event::print(FILE* file, 
 
   print_query_header(&cache, print_event_info);
   my_b_write(&cache, (byte*) query, q_len);
-  my_b_printf(&cache, ";\n");
+  my_b_printf(&cache, "%s\n", print_event_info->delimiter);
 }
 #endif /* MYSQL_CLIENT */
 
@@ -2188,9 +2194,9 @@ void Start_log_event_v3::print(FILE* fil
       and rollback unfinished transaction.
       Probably this can be done with RESET CONNECTION (syntax to be defined).
     */
-    my_b_printf(&cache,"RESET CONNECTION;\n");
+    my_b_printf(&cache,"RESET CONNECTION%s\n", print_event_info->delimiter);
 #else
-    my_b_printf(&cache,"ROLLBACK;\n");
+    my_b_printf(&cache,"ROLLBACK%s\n", print_event_info->delimiter);
 #endif
   }
   DBUG_VOID_RETURN;
@@ -2945,15 +2951,16 @@ void Load_log_event::print(FILE* file_ar
   }
   
   if (db && db[0] && different_db)
-    my_b_printf(&cache, "%suse %s;\n", 
+    my_b_printf(&cache, "%suse %s%s\n", 
             commented ? "# " : "",
-            db);
+            db, print_event_info->delimiter);
 
   if (flags & LOG_EVENT_THREAD_SPECIFIC_F)
-    my_b_printf(&cache,"%sSET @@session.pseudo_thread_id=%lu;\n",
-            commented ? "# " : "", (ulong)thread_id);
+    my_b_printf(&cache,"%sSET @@session.pseudo_thread_id=%lu%s\n",
+            commented ? "# " : "", (ulong)thread_id,
+            print_event_info->delimiter);
   my_b_printf(&cache, "%sLOAD DATA ",
-          commented ? "# " : "");
+              commented ? "# " : "");
   if (check_fname_outside_temp_buf())
     my_b_printf(&cache, "LOCAL ");
   my_b_printf(&cache, "INFILE '%-*s' ", fname_len, fname);
@@ -3003,7 +3010,7 @@ void Load_log_event::print(FILE* file_ar
     my_b_printf(&cache, ")");
   }
 
-  my_b_printf(&cache, ";\n");
+  my_b_printf(&cache, "%s\n", print_event_info->delimiter);
   DBUG_VOID_RETURN;
 }
 #endif /* MYSQL_CLIENT */
@@ -3582,7 +3589,8 @@ void Intvar_log_event::print(FILE* file,
     msg="INVALID_INT";
     break;
   }
-  my_b_printf(&cache, "%s=%s;\n", msg, llstr(val,llbuff));
+  my_b_printf(&cache, "%s=%s%s\n",
+              msg, llstr(val,llbuff), print_event_info->delimiter);
 }
 #endif
 
@@ -3660,8 +3668,9 @@ void Rand_log_event::print(FILE* file, P
     print_header(&cache, print_event_info, FALSE);
     my_b_printf(&cache, "\tRand\n");
   }
-  my_b_printf(&cache, "SET @@RAND_SEED1=%s, @@RAND_SEED2=%s;\n",
-              llstr(seed1, llbuff),llstr(seed2, llbuff2));
+  my_b_printf(&cache, "SET @@RAND_SEED1=%s, @@RAND_SEED2=%s%s\n",
+              llstr(seed1, llbuff),llstr(seed2, llbuff2),
+              print_event_info->delimiter);
 }
 #endif /* MYSQL_CLIENT */
 
@@ -3734,7 +3743,7 @@ void Xid_log_event::print(FILE* file, PR
     print_header(&cache, print_event_info, FALSE);
     my_b_printf(&cache, "\tXid = %s\n", buf);
   }
-  my_b_printf(&cache, "COMMIT;\n");
+  my_b_printf(&cache, "COMMIT%s\n", print_event_info->delimiter);
 }
 #endif /* MYSQL_CLIENT */
 
@@ -3939,7 +3948,7 @@ void User_var_log_event::print(FILE* fil
 
   if (is_null)
   {
-    my_b_printf(&cache, ":=NULL;\n");
+    my_b_printf(&cache, ":=NULL%s\n", print_event_info->delimiter);
   }
   else
   {
@@ -3947,12 +3956,12 @@ void User_var_log_event::print(FILE* fil
     case REAL_RESULT:
       double real_val;
       float8get(real_val, val);
-      my_b_printf(&cache, ":=%.14g;\n", real_val);
+      my_b_printf(&cache, ":=%.14g%s\n", real_val, print_event_info->delimiter);
       break;
     case INT_RESULT:
       char int_buf[22];
       longlong10_to_str(uint8korr(val), int_buf, -10);
-      my_b_printf(&cache, ":=%s;\n", int_buf);
+      my_b_printf(&cache, ":=%s%s\n", int_buf, print_event_info->delimiter);
       break;
     case DECIMAL_RESULT:
     {
@@ -3968,7 +3977,7 @@ void User_var_log_event::print(FILE* fil
       bin2decimal(val+2, &dec, precision, scale);
       decimal2string(&dec, str_buf, &str_len, 0, 0, 0);
       str_buf[str_len]= 0;
-      my_b_printf(&cache, ":=%s;\n",str_buf);
+      my_b_printf(&cache, ":=%s%s\n", str_buf, print_event_info->delimiter);
       break;
     }
     case STRING_RESULT:
@@ -4004,9 +4013,11 @@ void User_var_log_event::print(FILE* fil
           Generate an unusable command (=> syntax error) is probably the best
           thing we can do here.
         */
-        my_b_printf(&cache, ":=???;\n");
+        my_b_printf(&cache, ":=???%s\n", print_event_info->delimiter);
       else
-        my_b_printf(&cache, ":=_%s %s COLLATE `%s`;\n", cs->csname, hex_str, cs->name);
+        my_b_printf(&cache, ":=_%s %s COLLATE `%s`%s\n",
+                    cs->csname, hex_str, cs->name,
+                    print_event_info->delimiter);
       my_afree(hex_str);
     }
       break;
@@ -5108,12 +5119,12 @@ void Execute_load_query_log_event::print
       my_b_printf(&cache, " REPLACE");
     my_b_printf(&cache, " INTO");
     my_b_write(&cache, (byte*) query + fn_pos_end, q_len-fn_pos_end);
-    my_b_printf(&cache, ";\n");
+    my_b_printf(&cache, "%s\n", print_event_info->delimiter);
   }
   else
   {
     my_b_write(&cache, (byte*) query, q_len);
-    my_b_printf(&cache, ";\n");
+    my_b_printf(&cache, "%s\n", print_event_info->delimiter);
   }
 
   if (!print_event_info->short_form)

--- 1.139/sql/log_event.h	2006-12-08 10:33:16 +04:00
+++ 1.140/sql/log_event.h	2006-12-08 10:33:16 +04:00
@@ -537,6 +537,7 @@ typedef struct st_print_event_info
       bzero(db, sizeof(db));
       bzero(charset, sizeof(charset));
       bzero(time_zone_str, sizeof(time_zone_str));
+      strcpy(delimiter, ";");
       uint const flags = MYF(MY_WME | MY_NABP);
       init_io_cache(&head_cache, -1, 0, WRITE_CACHE, 0L, FALSE, flags);
       init_io_cache(&body_cache, -1, 0, WRITE_CACHE, 0L, FALSE, flags);
@@ -553,6 +554,7 @@ typedef struct st_print_event_info
   bool base64_output;
   my_off_t hexdump_from;
   uint8 common_header_len;
+  char delimiter[16];
 
   /*
      These two caches are used by the row-based replication events to

--- 1.136/client/mysqlbinlog.cc	2006-12-08 10:33:16 +04:00
+++ 1.137/client/mysqlbinlog.cc	2006-12-08 10:33:16 +04:00
@@ -95,8 +95,10 @@ static bool stop_passed= 0;
 */
 Format_description_log_event* description_event; 
 
-static int dump_local_log_entries(const char* logname);
-static int dump_remote_log_entries(const char* logname);
+static int dump_local_log_entries(PRINT_EVENT_INFO *print_event_info,
+                                  const char* logname);
+static int dump_remote_log_entries(PRINT_EVENT_INFO *print_event_info,
+                                   const char* logname);
 static int dump_log_entries(const char* logname);
 static int dump_remote_file(NET* net, const char* fname);
 static void die(const char* fmt, ...);
@@ -1000,8 +1002,22 @@ static MYSQL* safe_connect()
 
 static int dump_log_entries(const char* logname)
 {
-  return (remote_opt ? dump_remote_log_entries(logname) :
-          dump_local_log_entries(logname));
+  int rc;
+  PRINT_EVENT_INFO print_event_info;
+  /*
+     Set safe delimiter, to dump things
+     like CREATE PROCEDURE safely
+  */
+  fprintf(result_file, "DELIMITER /*!*/;\n");
+  strcpy(print_event_info.delimiter, "/*!*/;");
+
+  rc= (remote_opt ? dump_remote_log_entries(&print_event_info, logname) :
+       dump_local_log_entries(&print_event_info, logname));
+
+  /* Set delimiter back to semicolon */
+  fprintf(result_file, "DELIMITER ;\n");
+  strcpy(print_event_info.delimiter, ";");
+  return rc;
 }
 
 
@@ -1066,11 +1082,11 @@ static int check_master_version(MYSQL* m
 }
 
 
-static int dump_remote_log_entries(const char* logname)
+static int dump_remote_log_entries(PRINT_EVENT_INFO *print_event_info,
+                                   const char* logname)
 
 {
   char buf[128];
-  PRINT_EVENT_INFO print_event_info;
   ulong len;
   uint logname_len;
   NET* net;
@@ -1193,7 +1209,7 @@ could be out of memory");
           len= 1; // fake Rotate, so don't increment old_off
         }
       }
-      if ((error= process_event(&print_event_info, ev, old_off)))
+      if ((error= process_event(print_event_info, ev, old_off)))
       {
 	error= ((error < 0) ? 0 : 1);
         goto err;
@@ -1212,7 +1228,7 @@ could be out of memory");
         goto err;
       }
       
-      if ((error= process_event(&print_event_info, ev, old_off)))
+      if ((error= process_event(print_event_info, ev, old_off)))
       {
  	my_close(file,MYF(MY_WME));
 	error= ((error < 0) ? 0 : 1);
@@ -1338,11 +1354,11 @@ at offset %lu ; this could be a log form
 }
 
 
-static int dump_local_log_entries(const char* logname)
+static int dump_local_log_entries(PRINT_EVENT_INFO *print_event_info,
+                                  const char* logname)
 {
   File fd = -1;
   IO_CACHE cache,*file= &cache;
-  PRINT_EVENT_INFO print_event_info;
   byte tmp_buff[BIN_LOG_HEADER_SIZE];
   int error= 0;
 
@@ -1429,7 +1445,7 @@ static int dump_local_log_entries(const 
       // file->error == 0 means EOF, that's OK, we break in this case
       break;
     }
-    if ((error= process_event(&print_event_info, ev, old_off)))
+    if ((error= process_event(print_event_info, ev, old_off)))
     {
       if (error < 0)
         error= 0;

--- 1.18/mysql-test/r/rpl_timezone.result	2006-12-08 10:33:16 +04:00
+++ 1.19/mysql-test/r/rpl_timezone.result	2006-12-08 10:33:16 +04:00
@@ -39,6 +39,38 @@ SELECT * FROM t1 ORDER BY n;
 t	n
 2004-01-01 00:00:00	5
 2004-06-11 09:39:02	6
+select * from t1;
+t
+2004-01-01 00:00:00
+2004-06-11 09:39:02
+/*!40019 SET @@session.max_insert_delayed_threads=0*/;
+/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
+DELIMITER /*!*/;
+ROLLBACK/*!*/;
+use test/*!*/;
+SET TIMESTAMP=100000000/*!*/;
+SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.unique_checks=1/*!*/;
+SET @@session.sql_mode=0/*!*/;
+/*!\C latin1 *//*!*/;
+SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=8/*!*/;
+create table t1 (t timestamp)/*!*/;
+SET TIMESTAMP=100000000/*!*/;
+create table t2 (t char(32))/*!*/;
+SET TIMESTAMP=100000000/*!*/;
+SET @@session.time_zone='Europe/Moscow'/*!*/;
+insert into t1 values ('20050101000000'), ('20050611093902')/*!*/;
+SET TIMESTAMP=100000000/*!*/;
+SET @@session.time_zone='UTC'/*!*/;
+insert into t1 values ('20040101000000'), ('20040611093902')/*!*/;
+SET TIMESTAMP=100000000/*!*/;
+delete from t1/*!*/;
+SET TIMESTAMP=100000000/*!*/;
+SET @@session.time_zone='Europe/Moscow'/*!*/;
+insert into t1 values ('20040101000000'), ('20040611093902')/*!*/;
+DELIMITER ;
+# End of log file
+ROLLBACK /* added by mysqlbinlog */;
+/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
 delete from t1;
 set time_zone='UTC';
 load data infile '../std_data_ln/rpl_timezone2.dat' into table t1;

--- 1.30/mysql-test/t/mysqlbinlog.test	2006-12-08 10:33:16 +04:00
+++ 1.31/mysql-test/t/mysqlbinlog.test	2006-12-08 10:33:16 +04:00
@@ -136,6 +136,30 @@ flush logs;
 --exec $MYSQL_BINLOG --short-form $MYSQLTEST_VARDIR/log/master-bin.000006 | $MYSQL
 select * from t5  /* must be (1),(1) */;
 
+#
+# Bug#20396 Bin Log does not get DELIMETER cmd - Recover StoredProc fails 
+#
+--disable_warnings
+drop procedure if exists p1;
+--enable_warnings
+flush logs;
+delimiter //;
+create procedure p1()
+begin
+select 1;
+end;
+//
+delimiter ;//
+flush logs;
+call p1();
+drop procedure p1;
+--error 1305
+call p1();
+--exec $MYSQL_BINLOG --short-form $MYSQLTEST_VARDIR/log/master-bin.000007
+--exec $MYSQL_BINLOG --short-form $MYSQLTEST_VARDIR/log/master-bin.000007 | $MYSQL
+call p1();
+drop procedure p1;
+
 # clean up
 drop table t1, t2, t03, t04, t3, t4, t5; 
 

--- 1.24.6.1/mysql-test/r/mix_innodb_myisam_binlog.result	2006-12-08 10:33:16 +04:00
+++ 1.34/mysql-test/r/binlog_stm_mix_innodb_myisam.result	2006-12-08 10:33:16 +04:00
@@ -6,12 +6,12 @@ begin;
 insert into t1 values(1);
 insert into t2 select * from t1;
 commit;
-show binlog events from 98;
+show binlog events from 102;
 Log_name	Pos	Event_type	Server_id	End_log_pos	Info
-master-bin.000001	98	Query	1	#	use `test`; BEGIN
-master-bin.000001	166	Query	1	#	use `test`; insert into t1 values(1)
-master-bin.000001	253	Query	1	#	use `test`; insert into t2 select * from t1
-master-bin.000001	347	Xid	1	#	COMMIT /* xid=8 */
+master-bin.000001	#	Query	1	#	use `test`; BEGIN
+master-bin.000001	#	Query	1	#	use `test`; insert into t1 values(1)
+master-bin.000001	#	Query	1	#	use `test`; insert into t2 select * from t1
+master-bin.000001	#	Xid	1	#	COMMIT /* xid= */
 delete from t1;
 delete from t2;
 reset master;
@@ -21,12 +21,12 @@ insert into t2 select * from t1;
 rollback;
 Warnings:
 Warning	1196	Some non-transactional changed tables couldn't be rolled back
-show binlog events from 98;
+show binlog events from 102;
 Log_name	Pos	Event_type	Server_id	End_log_pos	Info
-master-bin.000001	98	Query	1	#	use `test`; BEGIN
-master-bin.000001	166	Query	1	#	use `test`; insert into t1 values(2)
-master-bin.000001	253	Query	1	#	use `test`; insert into t2 select * from t1
-master-bin.000001	347	Query	1	#	use `test`; ROLLBACK
+master-bin.000001	#	Query	1	#	use `test`; BEGIN
+master-bin.000001	#	Query	1	#	use `test`; insert into t1 values(2)
+master-bin.000001	#	Query	1	#	use `test`; insert into t2 select * from t1
+master-bin.000001	#	Query	1	#	use `test`; ROLLBACK
 delete from t1;
 delete from t2;
 reset master;
@@ -39,15 +39,15 @@ rollback to savepoint my_savepoint;
 Warnings:
 Warning	1196	Some non-transactional changed tables couldn't be rolled back
 commit;
-show binlog events from 98;
+show binlog events from 102;
 Log_name	Pos	Event_type	Server_id	End_log_pos	Info
-master-bin.000001	98	Query	1	#	use `test`; BEGIN
-master-bin.000001	166	Query	1	#	use `test`; insert into t1 values(3)
-master-bin.000001	253	Query	1	#	use `test`; savepoint my_savepoint
-master-bin.000001	338	Query	1	#	use `test`; insert into t1 values(4)
-master-bin.000001	425	Query	1	#	use `test`; insert into t2 select * from t1
-master-bin.000001	519	Query	1	#	use `test`; rollback to savepoint my_savepoint
-master-bin.000001	616	Xid	1	#	COMMIT /* xid=25 */
+master-bin.000001	#	Query	1	#	use `test`; BEGIN
+master-bin.000001	#	Query	1	#	use `test`; insert into t1 values(3)
+master-bin.000001	#	Query	1	#	use `test`; savepoint my_savepoint
+master-bin.000001	#	Query	1	#	use `test`; insert into t1 values(4)
+master-bin.000001	#	Query	1	#	use `test`; insert into t2 select * from t1
+master-bin.000001	#	Query	1	#	use `test`; rollback to savepoint my_savepoint
+master-bin.000001	#	Xid	1	#	COMMIT /* xid= */
 delete from t1;
 delete from t2;
 reset master;
@@ -65,16 +65,16 @@ select a from t1 order by a;
 a
 5
 7
-show binlog events from 98;
+show binlog events from 102;
 Log_name	Pos	Event_type	Server_id	End_log_pos	Info
-master-bin.000001	98	Query	1	#	use `test`; BEGIN
-master-bin.000001	166	Query	1	#	use `test`; insert into t1 values(5)
-master-bin.000001	253	Query	1	#	use `test`; savepoint my_savepoint
-master-bin.000001	338	Query	1	#	use `test`; insert into t1 values(6)
-master-bin.000001	425	Query	1	#	use `test`; insert into t2 select * from t1
-master-bin.000001	519	Query	1	#	use `test`; rollback to savepoint my_savepoint
-master-bin.000001	616	Query	1	#	use `test`; insert into t1 values(7)
-master-bin.000001	703	Xid	1	#	COMMIT /* xid=37 */
+master-bin.000001	#	Query	1	#	use `test`; BEGIN
+master-bin.000001	#	Query	1	#	use `test`; insert into t1 values(5)
+master-bin.000001	#	Query	1	#	use `test`; savepoint my_savepoint
+master-bin.000001	#	Query	1	#	use `test`; insert into t1 values(6)
+master-bin.000001	#	Query	1	#	use `test`; insert into t2 select * from t1
+master-bin.000001	#	Query	1	#	use `test`; rollback to savepoint my_savepoint
+master-bin.000001	#	Query	1	#	use `test`; insert into t1 values(7)
+master-bin.000001	#	Xid	1	#	COMMIT /* xid= */
 delete from t1;
 delete from t2;
 reset master;
@@ -87,43 +87,43 @@ insert into t2 select * from t1;
 select get_lock("a",10);
 get_lock("a",10)
 1
-show binlog events from 98;
+show binlog events from 102;
 Log_name	Pos	Event_type	Server_id	End_log_pos	Info
-master-bin.000001	98	Query	1	#	use `test`; BEGIN
-master-bin.000001	166	Query	1	#	use `test`; insert into t1 values(8)
-master-bin.000001	253	Query	1	#	use `test`; insert into t2 select * from t1
-master-bin.000001	347	Query	1	#	use `test`; ROLLBACK
+master-bin.000001	#	Query	1	#	use `test`; BEGIN
+master-bin.000001	#	Query	1	#	use `test`; insert into t1 values(8)
+master-bin.000001	#	Query	1	#	use `test`; insert into t2 select * from t1
+master-bin.000001	#	Query	1	#	use `test`; ROLLBACK
 delete from t1;
 delete from t2;
 reset master;
 insert into t1 values(9);
 insert into t2 select * from t1;
-show binlog events from 98;
+show binlog events from 102;
 Log_name	Pos	Event_type	Server_id	End_log_pos	Info
-master-bin.000001	98	Query	1	#	use `test`; insert into t1 values(9)
-master-bin.000001	185	Xid	1	#	COMMIT /* xid=60 */
-master-bin.000001	212	Query	1	#	use `test`; insert into t2 select * from t1
+master-bin.000001	#	Query	1	#	use `test`; insert into t1 values(9)
+master-bin.000001	#	Xid	1	#	COMMIT /* xid= */
+master-bin.000001	#	Query	1	#	use `test`; insert into t2 select * from t1
 delete from t1;
 delete from t2;
 reset master;
 insert into t1 values(10);
 begin;
 insert into t2 select * from t1;
-show binlog events from 98;
+show binlog events from 102;
 Log_name	Pos	Event_type	Server_id	End_log_pos	Info
-master-bin.000001	98	Query	1	#	use `test`; insert into t1 values(10)
-master-bin.000001	186	Xid	1	#	COMMIT /* xid=66 */
-master-bin.000001	213	Query	1	#	use `test`; insert into t2 select * from t1
+master-bin.000001	#	Query	1	#	use `test`; insert into t1 values(10)
+master-bin.000001	#	Xid	1	#	COMMIT /* xid= */
+master-bin.000001	#	Query	1	#	use `test`; insert into t2 select * from t1
 insert into t1 values(11);
 commit;
-show binlog events from 98;
+show binlog events from 102;
 Log_name	Pos	Event_type	Server_id	End_log_pos	Info
-master-bin.000001	98	Query	1	#	use `test`; insert into t1 values(10)
-master-bin.000001	186	Xid	1	#	COMMIT /* xid=66 */
-master-bin.000001	213	Query	1	#	use `test`; insert into t2 select * from t1
-master-bin.000001	307	Query	1	#	use `test`; BEGIN
-master-bin.000001	375	Query	1	#	use `test`; insert into t1 values(11)
-master-bin.000001	463	Xid	1	#	COMMIT /* xid=68 */
+master-bin.000001	#	Query	1	#	use `test`; insert into t1 values(10)
+master-bin.000001	#	Xid	1	#	COMMIT /* xid= */
+master-bin.000001	#	Query	1	#	use `test`; insert into t2 select * from t1
+master-bin.000001	#	Query	1	#	use `test`; BEGIN
+master-bin.000001	#	Query	1	#	use `test`; insert into t1 values(11)
+master-bin.000001	#	Xid	1	#	COMMIT /* xid= */
 alter table t2 engine=INNODB;
 delete from t1;
 delete from t2;
@@ -132,12 +132,12 @@ begin;
 insert into t1 values(12);
 insert into t2 select * from t1;
 commit;
-show binlog events from 98;
+show binlog events from 102;
 Log_name	Pos	Event_type	Server_id	End_log_pos	Info
-master-bin.000001	98	Query	1	#	use `test`; BEGIN
-master-bin.000001	166	Query	1	#	use `test`; insert into t1 values(12)
-master-bin.000001	254	Query	1	#	use `test`; insert into t2 select * from t1
-master-bin.000001	348	Xid	1	#	COMMIT /* xid=78 */
+master-bin.000001	#	Query	1	#	use `test`; BEGIN
+master-bin.000001	#	Query	1	#	use `test`; insert into t1 values(12)
+master-bin.000001	#	Query	1	#	use `test`; insert into t2 select * from t1
+master-bin.000001	#	Xid	1	#	COMMIT /* xid= */
 delete from t1;
 delete from t2;
 reset master;
@@ -145,7 +145,7 @@ begin;
 insert into t1 values(13);
 insert into t2 select * from t1;
 rollback;
-show binlog events from 98;
+show binlog events from 102;
 Log_name	Pos	Event_type	Server_id	End_log_pos	Info
 delete from t1;
 delete from t2;
@@ -157,11 +157,11 @@ insert into t1 values(15);
 insert into t2 select * from t1;
 rollback to savepoint my_savepoint;
 commit;
-show binlog events from 98;
+show binlog events from 102;
 Log_name	Pos	Event_type	Server_id	End_log_pos	Info
-master-bin.000001	98	Query	1	#	use `test`; BEGIN
-master-bin.000001	166	Query	1	#	use `test`; insert into t1 values(14)
-master-bin.000001	254	Xid	1	#	COMMIT /* xid=94 */
+master-bin.000001	#	Query	1	#	use `test`; BEGIN
+master-bin.000001	#	Query	1	#	use `test`; insert into t1 values(14)
+master-bin.000001	#	Xid	1	#	COMMIT /* xid= */
 delete from t1;
 delete from t2;
 reset master;
@@ -177,15 +177,15 @@ select a from t1 order by a;
 a
 16
 18
-show binlog events from 98;
+show binlog events from 102;
 Log_name	Pos	Event_type	Server_id	End_log_pos	Info
-master-bin.000001	98	Query	1	#	use `test`; BEGIN
-master-bin.000001	166	Query	1	#	use `test`; insert into t1 values(16)
-master-bin.000001	254	Query	1	#	use `test`; insert into t1 values(18)
-master-bin.000001	342	Xid	1	#	COMMIT /* xid=105 */
+master-bin.000001	#	Query	1	#	use `test`; BEGIN
+master-bin.000001	#	Query	1	#	use `test`; insert into t1 values(16)
+master-bin.000001	#	Query	1	#	use `test`; insert into t1 values(18)
+master-bin.000001	#	Xid	1	#	COMMIT /* xid= */
 delete from t1;
 delete from t2;
-alter table t2 type=MyISAM;
+alter table t2 engine=MyISAM;
 insert into t1 values (1);
 begin;
 select * from t1 for update;
@@ -209,8 +209,6 @@ commit;
 begin;
 create temporary table ti (a int) engine=innodb;
 rollback;
-Warnings:
-Warning	1196	Some non-transactional changed tables couldn't be rolled back
 insert into ti values(1);
 set autocommit=0;
 create temporary table t1 (a int) engine=myisam;
@@ -229,33 +227,134 @@ insert into t2 values (3);
 select get_lock("lock1",60);
 get_lock("lock1",60)
 1
-show binlog events from 98;
+show binlog events from 102;
 Log_name	Pos	Event_type	Server_id	End_log_pos	Info
-master-bin.000001	98	Query	1	#	use `test`; BEGIN
-master-bin.000001	166	Query	1	#	use `test`; insert into t1 values(16)
-master-bin.000001	254	Query	1	#	use `test`; insert into t1 values(18)
-master-bin.000001	342	Xid	1	#	COMMIT /* xid=105 */
-master-bin.000001	369	Query	1	#	use `test`; delete from t1
-master-bin.000001	446	Xid	1	#	COMMIT /* xid=114 */
-master-bin.000001	473	Query	1	#	use `test`; delete from t2
-master-bin.000001	550	Xid	1	#	COMMIT /* xid=115 */
-master-bin.000001	577	Query	1	#	use `test`; alter table t2 type=MyISAM
-master-bin.000001	666	Query	1	#	use `test`; insert into t1 values (1)
-master-bin.000001	754	Xid	1	#	COMMIT /* xid=117 */
-master-bin.000001	781	Query	1	#	use `test`; insert into t2 values (20)
-master-bin.000001	870	Query	1	#	use `test`; drop table t1,t2
-master-bin.000001	949	Query	1	#	use `test`; create temporary table ti (a int) engine=innodb
-master-bin.000001	1059	Query	1	#	use `test`; insert into ti values(1)
-master-bin.000001	1146	Xid	1	#	COMMIT /* xid=132 */
-master-bin.000001	1173	Query	1	#	use `test`; create temporary table t1 (a int) engine=myisam
-master-bin.000001	1283	Query	1	#	use `test`; insert t1 values (1)
-master-bin.000001	1366	Query	1	#	use `test`; create table t0 (n int)
-master-bin.000001	1452	Query	1	#	use `test`; insert t0 select * from t1
-master-bin.000001	1541	Query	1	#	use `test`; insert into t0 select GET_LOCK("lock1",null)
-master-bin.000001	1648	Query	1	#	use `test`; create table t2 (n int) engine=innodb
-master-bin.000001	1748	Query	1	#	use `test`; DROP /*!40005 TEMPORARY */ TABLE IF EXISTS `test`.`t1`,`test`.`ti`
+master-bin.000001	#	Query	1	#	use `test`; BEGIN
+master-bin.000001	#	Query	1	#	use `test`; insert into t1 values(16)
+master-bin.000001	#	Query	1	#	use `test`; insert into t1 values(18)
+master-bin.000001	#	Xid	1	#	COMMIT /* xid= */
+master-bin.000001	#	Query	1	#	use `test`; delete from t1
+master-bin.000001	#	Xid	1	#	COMMIT /* xid= */
+master-bin.000001	#	Query	1	#	use `test`; delete from t2
+master-bin.000001	#	Xid	1	#	COMMIT /* xid= */
+master-bin.000001	#	Query	1	#	use `test`; alter table t2 engine=MyISAM
+master-bin.000001	#	Query	1	#	use `test`; insert into t1 values (1)
+master-bin.000001	#	Xid	1	#	COMMIT /* xid= */
+master-bin.000001	#	Query	1	#	use `test`; insert into t2 values (20)
+master-bin.000001	#	Query	1	#	use `test`; drop table t1,t2
+master-bin.000001	#	Query	1	#	use `test`; create temporary table ti (a int) engine=innodb
+master-bin.000001	#	Query	1	#	use `test`; insert into ti values(1)
+master-bin.000001	#	Xid	1	#	COMMIT /* xid= */
+master-bin.000001	#	Query	1	#	use `test`; create temporary table t1 (a int) engine=myisam
+master-bin.000001	#	Query	1	#	use `test`; insert t1 values (1)
+master-bin.000001	#	Query	1	#	use `test`; create table t0 (n int)
+master-bin.000001	#	Query	1	#	use `test`; insert t0 select * from t1
+master-bin.000001	#	Query	1	#	use `test`; insert into t0 select GET_LOCK("lock1",null)
+master-bin.000001	#	Query	1	#	use `test`; create table t2 (n int) engine=innodb
+master-bin.000001	#	Query	1	#	use `test`; DROP /*!40005 TEMPORARY */ TABLE IF EXISTS `test`.`t1`,`test`.`ti`
 do release_lock("lock1");
 drop table t0,t2;
+set autocommit=0;
+CREATE TABLE t1 (a int, b int) engine=myisam;
+reset master;
+INSERT INTO t1 values (1,1),(1,2);
+CREATE TABLE t2 (primary key (a)) engine=innodb select * from t1;
+ERROR 23000: Duplicate entry '1' for key 'PRIMARY'
+DROP TABLE if exists t2;
+Warnings:
+Note	1051	Unknown table 't2'
+INSERT INTO t1 values (3,3);
+CREATE TEMPORARY TABLE t2 (primary key (a)) engine=innodb select * from t1;
+ERROR 23000: Duplicate entry '1' for key 'PRIMARY'
+ROLLBACK;
+Warnings:
+Warning	1196	Some non-transactional changed tables couldn't be rolled back
+DROP TABLE IF EXISTS t2;
+Warnings:
+Note	1051	Unknown table 't2'
+CREATE TABLE t2 (a int, b int, primary key (a)) engine=innodb;
+INSERT INTO t1 VALUES (4,4);
+CREATE TABLE IF NOT EXISTS t2 (primary key (a)) engine=innodb select * from t1;
+ERROR 23000: Duplicate entry '1' for key 'PRIMARY'
+SELECT * from t2;
+a	b
+TRUNCATE table t2;
+INSERT INTO t1 VALUES (5,5);
+INSERT INTO t2 select * from t1;
+ERROR 23000: Duplicate entry '1' for key 'PRIMARY'
+SELECT * FROM t2;
+a	b
+DROP TABLE t2;
+INSERT INTO t1 values (6,6);
+CREATE TEMPORARY TABLE t2 (a int, b int, primary key (a)) engine=innodb ;
+INSERT INTO t1 values (7,7);
+ROLLBACK;
+Warnings:
+Warning	1196	Some non-transactional changed tables couldn't be rolled back
+INSERT INTO t1 values (8,8);
+CREATE TEMPORARY TABLE IF NOT EXISTS t2 (primary key (a)) engine=innodb select * from t1;
+ERROR 23000: Duplicate entry '1' for key 'PRIMARY'
+COMMIT;
+INSERT INTO t1 values (9,9);
+CREATE TEMPORARY TABLE IF NOT EXISTS t2 (primary key (a)) engine=innodb select * from t1;
+ERROR 23000: Duplicate entry '1' for key 'PRIMARY'
+ROLLBACK;
+Warnings:
+Warning	1196	Some non-transactional changed tables couldn't be rolled back
+SELECT * from t2;
+a	b
+TRUNCATE table t2;
+INSERT INTO t1 values (10,10);
+INSERT INTO t2 select * from t1;
+ERROR 23000: Duplicate entry '1' for key 'PRIMARY'
+SELECT * from t1;
+a	b
+1	1
+1	2
+3	3
+4	4
+5	5
+6	6
+7	7
+8	8
+9	9
+10	10
+INSERT INTO t2 values (100,100);
+CREATE TEMPORARY TABLE IF NOT EXISTS t2 (primary key (a)) engine=innodb select * from t1;
+ERROR 23000: Duplicate entry '1' for key 'PRIMARY'
+COMMIT;
+INSERT INTO t2 values (101,101);
+CREATE TEMPORARY TABLE IF NOT EXISTS t2 (primary key (a)) engine=innodb select * from t1;
+ERROR 23000: Duplicate entry '1' for key 'PRIMARY'
+ROLLBACK;
+SELECT * from t2;
+a	b
+100	100
+DROP TABLE t1,t2;
+show binlog events from 102;
+Log_name	Pos	Event_type	Server_id	End_log_pos	Info
+master-bin.000001	#	Query	1	#	use `test`; INSERT INTO t1 values (1,1),(1,2)
+master-bin.000001	#	Query	1	#	use `test`; DROP TABLE if exists t2
+master-bin.000001	#	Query	1	#	use `test`; INSERT INTO t1 values (3,3)
+master-bin.000001	#	Query	1	#	use `test`; DROP TABLE IF EXISTS t2
+master-bin.000001	#	Query	1	#	use `test`; CREATE TABLE t2 (a int, b int, primary key (a)) engine=innodb
+master-bin.000001	#	Query	1	#	use `test`; INSERT INTO t1 VALUES (4,4)
+master-bin.000001	#	Query	1	#	use `test`; TRUNCATE table t2
+master-bin.000001	#	Xid	1	#	COMMIT /* xid= */
+master-bin.000001	#	Query	1	#	use `test`; INSERT INTO t1 VALUES (5,5)
+master-bin.000001	#	Query	1	#	use `test`; DROP TABLE t2
+master-bin.000001	#	Query	1	#	use `test`; INSERT INTO t1 values (6,6)
+master-bin.000001	#	Query	1	#	use `test`; CREATE TEMPORARY TABLE t2 (a int, b int, primary key (a)) engine=innodb
+master-bin.000001	#	Query	1	#	use `test`; INSERT INTO t1 values (7,7)
+master-bin.000001	#	Query	1	#	use `test`; INSERT INTO t1 values (8,8)
+master-bin.000001	#	Query	1	#	use `test`; INSERT INTO t1 values (9,9)
+master-bin.000001	#	Query	1	#	use `test`; TRUNCATE table t2
+master-bin.000001	#	Xid	1	#	COMMIT /* xid= */
+master-bin.000001	#	Query	1	#	use `test`; INSERT INTO t1 values (10,10)
+master-bin.000001	#	Query	1	#	use `test`; BEGIN
+master-bin.000001	#	Query	1	#	use `test`; INSERT INTO t2 values (100,100)
+master-bin.000001	#	Xid	1	#	COMMIT /* xid= */
+master-bin.000001	#	Query	1	#	use `test`; DROP TABLE t1,t2
 reset master;
 create table t1 (a int) engine=innodb;
 create table t2 (a int) engine=myisam;

--- 1.20.3.1/mysql-test/r/rpl_charset.result	2006-12-08 10:33:16 +04:00
+++ 1.24/mysql-test/r/rpl_stm_charset.result	2006-12-08 10:33:16 +04:00
@@ -103,7 +103,7 @@ a	b
 1	cp850_general_ci
 drop database mysqltest2;
 drop database mysqltest3;
-show binlog events from 98;
+show binlog events from 102;
 Log_name	Pos	Event_type	Server_id	End_log_pos	Info
 master-bin.000001	#	Query	1	#	drop database if exists mysqltest2
 master-bin.000001	#	Query	1	#	drop database if exists mysqltest3

--- 1.20.4.1/mysql-test/t/mix_innodb_myisam_binlog.test	2006-12-08 10:33:16 +04:00
+++ 1.32/mysql-test/extra/binlog_tests/mix_innodb_myisam_binlog.test	2006-12-08 10:33:16 +04:00
@@ -9,6 +9,7 @@
 -- source include/not_embedded.inc
 
 -- source include/have_innodb.inc
+-- source include/have_debug.inc
 
 --disable_warnings
 drop table if exists t1, t2;
@@ -28,9 +29,9 @@ insert into t1 values(1);
 insert into t2 select * from t1;
 commit;
 
---replace_column 5 #
---replace_result "xid=15" "xid=8"
-show binlog events from 98;
+--replace_column 2 # 5 #
+--replace_regex /table_id: [0-9]+/table_id: #/ /\/\* xid=.* \*\//\/* xid= *\//
+show binlog events from 102;
 
 delete from t1;
 delete from t2;
@@ -42,8 +43,9 @@ insert into t2 select * from t1;
 # should say some changes to non-transact1onal tables couldn't be rolled back
 rollback;
 
---replace_column 5 #
-show binlog events from 98;
+--replace_column 2 # 5 #
+--replace_regex /table_id: [0-9]+/table_id: #/ /\/\* xid=.* \*\//\/* xid= *\//
+show binlog events from 102;
 
 delete from t1;
 delete from t2;
@@ -57,9 +59,9 @@ insert into t2 select * from t1;
 rollback to savepoint my_savepoint;
 commit;
 
---replace_column 5 #
---replace_result "xid=48" "xid=25"
-show binlog events from 98;
+--replace_column 2 # 5 #
+--replace_regex /table_id: [0-9]+/table_id: #/ /\/\* xid=.* \*\//\/* xid= *\//
+show binlog events from 102;
 
 delete from t1;
 delete from t2;
@@ -75,9 +77,9 @@ insert into t1 values(7);
 commit;
 select a from t1 order by a; # check that savepoints work :)
 
---replace_column 5 #
---replace_result "xid=70" "xid=37"
-show binlog events from 98;
+--replace_column 2 # 5 #
+--replace_regex /table_id: [0-9]+/table_id: #/ /\/\* xid=.* \*\//\/* xid= *\//
+show binlog events from 102;
 
 # and when ROLLBACK is not explicit?
 delete from t1;
@@ -97,8 +99,9 @@ connection con2;
 # so SHOW BINLOG EVENTS may come before con1 does the loggin. To be sure that
 # logging has been done, we use a user lock.
 select get_lock("a",10);
---replace_column 5 #
-show binlog events from 98;
+--replace_column 2 # 5 #
+--replace_regex /table_id: [0-9]+/table_id: #/ /\/\* xid=.* \*\//\/* xid= *\//
+show binlog events from 102;
 
 # and when not in a transact1on?
 delete from t1;
@@ -108,9 +111,9 @@ reset master;
 insert into t1 values(9);
 insert into t2 select * from t1;
 
---replace_column 5 #
---replace_result "xid=119" "xid=60"
-show binlog events from 98;
+--replace_column 2 # 5 #
+--replace_regex /table_id: [0-9]+/table_id: #/ /\/\* xid=.* \*\//\/* xid= *\//
+show binlog events from 102;
 
 # Check that when the query updat1ng the MyISAM table is the first in the
 # transaction, we log it immediately.
@@ -121,15 +124,15 @@ reset master;
 insert into t1 values(10); # first make t1 non-empty
 begin;
 insert into t2 select * from t1;
---replace_column 5 #
---replace_result "xid=133" "xid=66"
-show binlog events from 98;
+--replace_column 2 # 5 #
+--replace_regex /table_id: [0-9]+/table_id: #/ /\/\* xid=.* \*\//\/* xid= *\//
+show binlog events from 102;
 insert into t1 values(11);
 commit;
 
---replace_column 5 #
---replace_result "xid=133" "xid=66" "xid=136" "xid=68"
-show binlog events from 98;
+--replace_column 2 # 5 #
+--replace_regex /table_id: [0-9]+/table_id: #/ /\/\* xid=.* \*\//\/* xid= *\//
+show binlog events from 102;
 
 
 # Check that things work like before this BEGIN/ROLLBACK code was added,
@@ -146,9 +149,9 @@ insert into t1 values(12);
 insert into t2 select * from t1;
 commit;
 
---replace_column 5 #
---replace_result "xid=155" "xid=78"
-show binlog events from 98;
+--replace_column 2 # 5 #
+--replace_regex /table_id: [0-9]+/table_id: #/ /\/\* xid=.* \*\//\/* xid= *\//
+show binlog events from 102;
 
 delete from t1;
 delete from t2;
@@ -159,8 +162,9 @@ insert into t1 values(13);
 insert into t2 select * from t1;
 rollback;
 
---replace_column 5 #
-show binlog events from 98;
+--replace_column 2 # 5 #
+--replace_regex /table_id: [0-9]+/table_id: #/ /\/\* xid=.* \*\//\/* xid= *\//
+show binlog events from 102;
 
 delete from t1;
 delete from t2;
@@ -174,9 +178,9 @@ insert into t2 select * from t1;
 rollback to savepoint my_savepoint;
 commit;
 
---replace_column 5 #
---replace_result "xid=187" "xid=94"
-show binlog events from 98;
+--replace_column 2 # 5 #
+--replace_regex /table_id: [0-9]+/table_id: #/ /\/\* xid=.* \*\//\/* xid= *\//
+show binlog events from 102;
 
 delete from t1;
 delete from t2;
@@ -192,9 +196,9 @@ insert into t1 values(18);
 commit;
 select a from t1 order by a; # check that savepoints work :)
 
---replace_column 5 #
---replace_result "xid=208" "xid=105"
-show binlog events from 98;
+--replace_column 2 # 5 #
+--replace_regex /table_id: [0-9]+/table_id: #/ /\/\* xid=.* \*\//\/* xid= *\//
+show binlog events from 102;
 
 # Test for BUG#5714, where a MyISAM update in the transaction used to
 # release row-level locks in InnoDB
@@ -205,7 +209,7 @@ connection con3;
 delete from t1;
 delete from t2;
 --disable_warnings
-alter table t2 type=MyISAM;
+alter table t2 engine=MyISAM;
 --enable_warnings
 insert into t1 values (1);
 begin;
@@ -230,8 +234,8 @@ select (@after-@before) >= 2;
 drop table t1,t2;
 commit;
 
-# test for BUG#7947 - DO RELEASE_LOCK() not written to binlog on rollback in the middle
-# of a transaction
+# test for BUG#7947 - DO RELEASE_LOCK() not written to binlog on rollback in
+# the middle of a transaction
 
 connection con2;
 begin;
@@ -253,14 +257,77 @@ insert into t2 values (3); 
 disconnect con2;
 connection con3;
 select get_lock("lock1",60);
---replace_column 5 #
---replace_result "xid=208" "xid=105" "xid=227" "xid=114" "xid=230" "xid=115" "xid=234" "xid=117" "xid=261" "xid=132"
-show binlog events from 98;
+--replace_column 2 # 5 #
+--replace_regex /table_id: [0-9]+/table_id: #/ /\/\* xid=.* \*\//\/* xid= *\//
+show binlog events from 102;
 do release_lock("lock1");
 drop table t0,t2;
 
 # End of 4.1 tests
 
+#
+# Test behaviour of CREATE ... SELECT when mixing MyISAM and InnoDB tables
+#
+
+set autocommit=0;
+CREATE TABLE t1 (a int, b int) engine=myisam;
+reset master;
+INSERT INTO t1 values (1,1),(1,2);
+--error 1062
+CREATE TABLE t2 (primary key (a)) engine=innodb select * from t1;
+# This should give warning
+DROP TABLE if exists t2;
+INSERT INTO t1 values (3,3);
+--error 1062
+CREATE TEMPORARY TABLE t2 (primary key (a)) engine=innodb select * from t1;
+ROLLBACK;
+# This should give warning
+DROP TABLE IF EXISTS t2;
+
+CREATE TABLE t2 (a int, b int, primary key (a)) engine=innodb;
+INSERT INTO t1 VALUES (4,4);
+--error 1062
+CREATE TABLE IF NOT EXISTS t2 (primary key (a)) engine=innodb select * from t1;
+SELECT * from t2;
+TRUNCATE table t2;
+INSERT INTO t1 VALUES (5,5);
+--error 1062
+INSERT INTO t2 select * from t1;
+SELECT * FROM t2;
+DROP TABLE t2;
+
+INSERT INTO t1 values (6,6);
+CREATE TEMPORARY TABLE t2 (a int, b int, primary key (a)) engine=innodb ;
+INSERT INTO t1 values (7,7);
+ROLLBACK;
+INSERT INTO t1 values (8,8);
+--error 1062
+CREATE TEMPORARY TABLE IF NOT EXISTS t2 (primary key (a)) engine=innodb select * from t1;
+COMMIT;
+INSERT INTO t1 values (9,9);
+--error 1062
+CREATE TEMPORARY TABLE IF NOT EXISTS t2 (primary key (a)) engine=innodb select * from t1;
+ROLLBACK;
+SELECT * from t2;
+TRUNCATE table t2;
+INSERT INTO t1 values (10,10);
+--error 1062
+INSERT INTO t2 select * from t1;
+SELECT * from t1;
+INSERT INTO t2 values (100,100);
+--error 1062
+CREATE TEMPORARY TABLE IF NOT EXISTS t2 (primary key (a)) engine=innodb select * from t1;
+COMMIT;
+INSERT INTO t2 values (101,101);
+--error 1062
+CREATE TEMPORARY TABLE IF NOT EXISTS t2 (primary key (a)) engine=innodb select * from t1;
+ROLLBACK;
+SELECT * from t2;
+DROP TABLE t1,t2;
+--replace_column 2 # 5 #
+--replace_regex /table_id: [0-9]+/table_id: #/ /\/\* xid=.* \*\//\/* xid= *\//
+show binlog events from 102;
+
 # Test for BUG#16559 (ROLLBACK should always have a zero error code in
 # binlog). Has to be here and not earlier, as the SELECTs influence
 # XIDs differently between normal and ps-protocol (and SHOW BINLOG
@@ -280,16 +347,3 @@ disconnect con3;
 connection con4;
 select get_lock("a",10); # wait for rollback to finish
 
-# we check that the error code of the "ROLLBACK" event is 0 and not
-# ER_SERVER_SHUTDOWN (i.e. disconnection just rolls back transaction
-# and does not make slave to stop)
---exec $MYSQL_BINLOG --start-position=547 $MYSQLTEST_VARDIR/log/master-bin.000001 > $MYSQLTEST_VARDIR/tmp/mix_innodb_myisam_binlog.output
---replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
-eval select
-(@a:=load_file("$MYSQLTEST_VARDIR/tmp/mix_innodb_myisam_binlog.output"))
-is not null;
---replace_result $MYSQL_TEST_DIR MYSQL_TEST_DIR
-eval select
-@a like "%#%error_code=0%ROLLBACK/*!*/;%ROLLBACK /* added by mysqlbinlog */;%",
-@a not like "%#%error_code=%error_code=%";
-drop table t1, t2;

--- 1.7/mysql-test/r/user_var-binlog.result	2006-12-08 10:33:16 +04:00
+++ 1.8/mysql-test/r/user_var-binlog.result	2006-12-08 10:33:16 +04:00
@@ -15,19 +15,21 @@ master-bin.000001	#	User var	1	#	@`var2`
 master-bin.000001	#	Query	1	#	use `test`; insert into t1 values (@var1),(@var2)
 /*!40019 SET @@session.max_insert_delayed_threads=0*/;
 /*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
-ROLLBACK;
-SET @`a b`:=_latin1 0x68656C6C6F COLLATE `latin1_swedish_ci`;
-use test;
-SET TIMESTAMP=10000;
-SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.unique_checks=1;
-SET @@session.sql_mode=0;
-/*!\C latin1 */;
-SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=8;
-INSERT INTO t1 VALUES(@`a b`);
-SET @`var1`:=_latin1 0x273B616161 COLLATE `latin1_swedish_ci`;
-SET @`var2`:=_binary 0x61 COLLATE `binary`;
-SET TIMESTAMP=10000;
-insert into t1 values (@var1),(@var2);
+DELIMITER /*!*/;
+ROLLBACK/*!*/;
+SET @`a b`:=_latin1 0x68656C6C6F COLLATE `latin1_swedish_ci`/*!*/;
+use test/*!*/;
+SET TIMESTAMP=10000/*!*/;
+SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.unique_checks=1/*!*/;
+SET @@session.sql_mode=0/*!*/;
+/*!\C latin1 *//*!*/;
+SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=8/*!*/;
+INSERT INTO t1 VALUES(@`a b`)/*!*/;
+SET @`var1`:=_latin1 0x273B616161 COLLATE `latin1_swedish_ci`/*!*/;
+SET @`var2`:=_binary 0x61 COLLATE `binary`/*!*/;
+SET TIMESTAMP=10000/*!*/;
+insert into t1 values (@var1),(@var2)/*!*/;
+DELIMITER ;
 # End of log file
 ROLLBACK /* added by mysqlbinlog */;
 /*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
Thread
bk commit into 5.1 tree (bar:1.2378)bar8 Dec