Commit 726917a2 authored by unknown's avatar unknown

Fix for BUG#3415 "mysqlbinlog loses a USE command when LOAD DATA INFILE is involved":

if you are printing LOAD DATA INFILE and its USE as comments, don't update 'last_db' (because you
have not actually changed the db in the server).


sql/log_event.cc:
  if you are printing LOAD DATA INFILE and its USE as comments, don't update 'last_db' (because you
  have not actually changed the db in the server).
parent 1f50a034
...@@ -891,15 +891,15 @@ void Query_log_event::print(FILE* file, bool short_form, char* last_db) ...@@ -891,15 +891,15 @@ void Query_log_event::print(FILE* file, bool short_form, char* last_db)
(ulong) thread_id, (ulong) exec_time, error_code); (ulong) thread_id, (ulong) exec_time, error_code);
} }
bool same_db = 0; bool different_db= 1;
if (db && last_db) if (db && last_db)
{ {
if (!(same_db = !memcmp(last_db, db, db_len + 1))) if (different_db= memcmp(last_db, db, db_len + 1))
memcpy(last_db, db, db_len + 1); memcpy(last_db, db, db_len + 1);
} }
if (db && db[0] && !same_db) if (db && db[0] && different_db)
fprintf(file, "use %s;\n", db); fprintf(file, "use %s;\n", db);
end=int10_to_str((long) when, strmov(buff,"SET TIMESTAMP="),10); end=int10_to_str((long) when, strmov(buff,"SET TIMESTAMP="),10);
*end++=';'; *end++=';';
...@@ -1324,14 +1324,21 @@ void Load_log_event::print(FILE* file, bool short_form, char* last_db, ...@@ -1324,14 +1324,21 @@ void Load_log_event::print(FILE* file, bool short_form, char* last_db,
thread_id, exec_time); thread_id, exec_time);
} }
bool same_db = 0; bool different_db= 1;
if (db && last_db) if (db && last_db)
{ {
if (!(same_db = !memcmp(last_db, db, db_len + 1))) /*
If the database is different from the one of the previous statement, we
need to print the "use" command, and we update the last_db.
But if commented, the "use" is going to be commented so we should not
update the last_db.
*/
if ((different_db= memcmp(last_db, db, db_len + 1)) &&
!commented)
memcpy(last_db, db, db_len + 1); memcpy(last_db, db, db_len + 1);
} }
if (db && db[0] && !same_db) if (db && db[0] && different_db)
fprintf(file, "%suse %s;\n", fprintf(file, "%suse %s;\n",
commented ? "# " : "", commented ? "# " : "",
db); db);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment