List:Commits« Previous MessageNext Message »
From:Guilhem Bichot Date:March 22 2007 5:31pm
Subject:bk commit into 5.1 tree (guilhem:1.2479) BUG#26194
View as plain text  
Below is the list of changes that have just been committed into a local
5.1 repository of guilhem. When guilhem 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, 2007-03-22 17:31:39+01:00, guilhem@stripped +4 -0
  Fix for BUG#26194 "mysqlbinlog --base64-output produces invalid SQL";
  when it was printing a Query event, it produced invalid SQL (missing
  the BINLOG keyword, so the SQL started with the base64 string, which
  is incorrect).
  Note: no testcase; I have a .test which shows that the bugfix works,
  but it triggers BUG#26361 and so gives Valgrind warnings. I'm sending
  this test to the fixer of BUG#26361 for her/him to push when she/he
  fixes BUG#26361.

  client/mysqlbinlog.cc@stripped, 2007-03-22 17:31:36+01:00, guilhem@stripped +7 -9
    writing the header (a line started with "#", i.e. a comment) and the
    body (the real operation) of an event to the same IO_CACHE
    (result_cache) confused the logic of Log_event::print_base64()
    (which is that if the cache is not empty then the BINLOG keyword
    should not be printed); it caused the BINLOG keyword to miss hence
    a syntactically wrong output of "mysqlbinlog --base64-output"
    for Query events.
    So we just use the two IO_CACHE already available in "print_event_info".

  sql/log_event.cc@stripped, 2007-03-22 17:31:37+01:00, guilhem@stripped +3 -6
    using the new small inline function.
    Note that the replication code should one day be fixed to trap all
    errors (like disk write errors).

  sql/log_event.h@stripped, 2007-03-22 17:31:37+01:00, guilhem@stripped +8 -0
    small inline function to group two operations: copying an IO_CACHE
    to a FILE, and reinitializing this IO_CACHE for being filled again.

  sql/records.cc@stripped, 2007-03-22 17:31:37+01:00, guilhem@stripped +2 -1
    fix after merge

# 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:	guilhem
# Host:	gbichot3.local
# Root:	/home/mysql_src/mysql-5.1-rpl-26194

--- 1.274/sql/log_event.cc	2007-03-22 17:31:48 +01:00
+++ 1.275/sql/log_event.cc	2007-03-22 17:31:48 +01:00
@@ -75,8 +75,7 @@ public:
 
   ~Write_on_release_cache()
   {
-    if (!my_b_copy_to_file(m_cache, m_file))
-      reinit_io_cache(m_cache, WRITE_CACHE, 0L, FALSE, TRUE);
+    copy_event_cache_to_file_and_reinit(m_cache, m_file);
     if (m_flags | FLUSH_F)
       fflush(m_file);
   }
@@ -6160,10 +6159,8 @@ void Rows_log_event::print_helper(FILE *
 
   if (get_flags(STMT_END_F))
   {
-    my_b_copy_to_file(head, file);
-    my_b_copy_to_file(body, file);
-    reinit_io_cache(head, WRITE_CACHE, 0, FALSE, TRUE);
-    reinit_io_cache(body, WRITE_CACHE, 0, FALSE, TRUE);
+    copy_event_cache_to_file_and_reinit(head, file);
+    copy_event_cache_to_file_and_reinit(body, file);
   }
 }
 #endif

--- 1.149/sql/log_event.h	2007-03-22 17:31:48 +01:00
+++ 1.150/sql/log_event.h	2007-03-22 17:31:48 +01:00
@@ -2230,4 +2230,12 @@ private:
 #endif
 };
 
+static inline bool copy_event_cache_to_file_and_reinit(IO_CACHE *cache,
+                                                       FILE *file)
+{
+  return         
+    my_b_copy_to_file(cache, file) ||
+    reinit_io_cache(cache, WRITE_CACHE, 0, FALSE, TRUE);
+}
+
 #endif /* _log_event_h */

--- 1.149/client/mysqlbinlog.cc	2007-03-22 17:31:48 +01:00
+++ 1.150/client/mysqlbinlog.cc	2007-03-22 17:31:48 +01:00
@@ -483,19 +483,17 @@ static int
 write_event_header_and_base64(Log_event *ev, FILE *result_file,
                               PRINT_EVENT_INFO *print_event_info)
 {
+  IO_CACHE *head= &print_event_info->head_cache;
+  IO_CACHE *body= &print_event_info->body_cache;
   DBUG_ENTER("write_event_header_and_base64");
-  /* Write header and base64 output to cache */
-  IO_CACHE result_cache;
-  if (open_cached_file(&result_cache, NULL, NULL, 0, MYF(MY_WME | MY_NABP)))
-    return 1;
 
-  ev->print_header(&result_cache, print_event_info, FALSE);
-  ev->print_base64(&result_cache, print_event_info, FALSE);
+  /* Write header and base64 output to cache */
+  ev->print_header(head, print_event_info, FALSE);
+  ev->print_base64(body, print_event_info, FALSE);
 
   /* Read data from cache and write to result file */
-  my_b_copy_to_file(&result_cache, result_file);
-  close_cached_file(&result_cache);
-  DBUG_RETURN(0);
+  DBUG_RETURN(copy_event_cache_to_file_and_reinit(head, result_file) ||
+              copy_event_cache_to_file_and_reinit(body, result_file));
 }
 
 

--- 1.48/sql/records.cc	2007-03-22 17:31:48 +01:00
+++ 1.49/sql/records.cc	2007-03-22 17:31:48 +01:00
@@ -150,7 +150,8 @@ void init_read_record(READ_RECORD *info,
   info->file= table->file;
   info->forms= &info->table;		/* Only one table */
   
-  if (table->s->tmp_table == TMP_TABLE && !table->sort.addon_field)
+  if (table->s->tmp_table == NON_TRANSACTIONAL_TMP_TABLE &&
+      !table->sort.addon_field)
     VOID(table->file->extra(HA_EXTRA_MMAP));
   
   if (table->sort.addon_field)
Thread
bk commit into 5.1 tree (guilhem:1.2479) BUG#26194Guilhem Bichot22 Mar