summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorunknown <guilhem@mysql.com>2003-08-19 15:46:47 +0200
committerunknown <guilhem@mysql.com>2003-08-19 15:46:47 +0200
commitfe0e54643492c6b689664ed09206db58dca29967 (patch)
tree96fc3e34d0ad8c0c6612d46fb6ce4ffa5977b7ab
parent4392456beab4790ac14a05862fd85aec592fba10 (diff)
downloadmariadb-git-fe0e54643492c6b689664ed09206db58dca29967.tar.gz
Fix for BUG#1096 which is:
"mysqlbinlog does not comment the original LOAD DATA INFILE if it has a "use xx"" client/mysqlbinlog.cc: a comment sql/log_event.cc: in mysqlbinlog we want to have a leading '#' before LOAD DATA INFILE when we print a Create_file event. This was not done properly when the query had *2* lines: only the "use db" got commented. To fix this I had to add an argument to Load_log_event::print, it could not be handled in Create_file_log_event::print alone. sql/log_event.h: prototype
-rw-r--r--client/mysqlbinlog.cc8
-rw-r--r--sql/log_event.cc22
-rw-r--r--sql/log_event.h1
3 files changed, 24 insertions, 7 deletions
diff --git a/client/mysqlbinlog.cc b/client/mysqlbinlog.cc
index 954e9290a76..a454d6a859f 100644
--- a/client/mysqlbinlog.cc
+++ b/client/mysqlbinlog.cc
@@ -613,7 +613,13 @@ Could not read entry at offset %s : Error in log format or read error",
continue; // next
}
}
- ce->print(result_file, short_form, last_db,true);
+ /*
+ We print the event, but with a leading '#': this is just to inform the
+ user of the original command; the command we want to execute will be a
+ derivation of this original command (we will change the filename and
+ use LOCAL), prepared in the 'case EXEC_LOAD_EVENT' below.
+ */
+ ce->print(result_file, short_form, last_db, true);
load_processor.process(ce);
ev= 0;
break;
diff --git a/sql/log_event.cc b/sql/log_event.cc
index 3451ffab65f..591ebf2b5d8 100644
--- a/sql/log_event.cc
+++ b/sql/log_event.cc
@@ -1280,6 +1280,11 @@ int Load_log_event::copy_log_event(const char *buf, ulong event_len,
void Load_log_event::print(FILE* file, bool short_form, char* last_db)
{
+ print(file, short_form, last_db, 0);
+}
+
+void Load_log_event::print(FILE* file, bool short_form, char* last_db, bool commented)
+{
if (!short_form)
{
print_header(file);
@@ -1295,9 +1300,12 @@ void Load_log_event::print(FILE* file, bool short_form, char* last_db)
}
if (db && db[0] && !same_db)
- fprintf(file, "use %s;\n", db);
+ fprintf(file, "%suse %s;\n",
+ commented ? "# " : "",
+ db);
- fprintf(file, "LOAD DATA ");
+ fprintf(file, "%sLOAD DATA ",
+ commented ? "# " : "");
if (check_fname_outside_temp_buf())
fprintf(file, "LOCAL ");
fprintf(file, "INFILE '%-*s' ", fname_len, fname);
@@ -1573,10 +1581,12 @@ void Create_file_log_event::print(FILE* file, bool short_form,
if (enable_local)
{
- if (!check_fname_outside_temp_buf())
- fprintf(file, "#");
- Load_log_event::print(file, 1, last_db);
- fprintf(file, "#");
+ Load_log_event::print(file, 1, last_db, !check_fname_outside_temp_buf());
+ /*
+ That one is for "file_id: etc" below: in mysqlbinlog we want the #, in
+ SHOW BINLOG EVENTS we don't.
+ */
+ fprintf(file, "#");
}
fprintf(file, " file_id: %d block_len: %d\n", file_id, block_len);
diff --git a/sql/log_event.h b/sql/log_event.h
index 155da07bebd..1031b940528 100644
--- a/sql/log_event.h
+++ b/sql/log_event.h
@@ -435,6 +435,7 @@ public:
bool use_rli_only_for_errors);
#else
void print(FILE* file, bool short_form = 0, char* last_db = 0);
+ void print(FILE* file, bool short_form, char* last_db, bool commented);
#endif
Load_log_event(const char* buf, int event_len, bool old_format);