• guilhem@mysql.com's avatar
    Fix for BUG#20188 "REPLACE or ON DUPLICATE KEY UPDATE in · a43c4b02
    guilhem@mysql.com authored
    auto_increment breaks binlog":
    if slave's table had a higher auto_increment counter than master's (even
    though all rows of the two tables were identical), then in some cases,
    REPLACE and INSERT ON DUPLICATE KEY UPDATE failed to replicate
    statement-based (it inserted different values on slave from on master).
    write_record() contained a "thd->next_insert_id=0" to force an adjustment
    of thd->next_insert_id after the update or replacement. But it is this
    assigment introduced indeterminism of the statement on the slave, thus
    the bug. For ON DUPLICATE, we replace that assignment by a call to
    handler::adjust_next_insert_id_after_explicit_value() which is deterministic
    (does not depend on slave table's autoinc counter). For REPLACE, this
    assignment can simply be removed (as REPLACE can't insert a number larger
    than thd->next_insert_id).
    We also move a too early restore_auto_increment() down to when we really know
    that we can restore the value.
    a43c4b02
sql_insert.cc 83.1 KB