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#26194 | Guilhem Bichot | 22 Mar |