Commit 58e90107 authored by guilhem@mysql.com's avatar guilhem@mysql.com

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).
parent 44a6fcba
......@@ -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);
}
bool same_db = 0;
bool different_db= 1;
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);
}
if (db && db[0] && !same_db)
if (db && db[0] && different_db)
fprintf(file, "use %s;\n", db);
end=int10_to_str((long) when, strmov(buff,"SET TIMESTAMP="),10);
*end++=';';
......@@ -1324,14 +1324,21 @@ void Load_log_event::print(FILE* file, bool short_form, char* last_db,
thread_id, exec_time);
}
bool same_db = 0;
bool different_db= 1;
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);
}
if (db && db[0] && !same_db)
if (db && db[0] && different_db)
fprintf(file, "%suse %s;\n",
commented ? "# " : "",
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