• unknown's avatar
    Bug #56662 Assertion failed: next_insert_id == 0, file .\handler.cc · 10092e7c
    unknown authored
    Normally, auto_increment value is generated for the column by
    inserting either NULL or 0 into it. NO_AUTO_VALUE_ON_ZERO
    suppresses this behavior for 0 so that only NULL generates
    the auto_increment value. This behavior is also followed by
    a slave, specifically by the SQL Thread, when applying events
    in the statement format from a master. However, when applying
    events in the row format, the flag was ignored thus causing
    an assertion failure:
    "Assertion failed: next_insert_id == 0, file .\handler.cc"
    
    In fact, we never need to generate a auto_increment value for
    the column when applying events in row format on slave. So we
    don't allow it to happen by using 'MODE_NO_AUTO_VALUE_ON_ZERO'.
    
    Refactoring: Get rid of all the sql_mode checks to rows_log_event
    when applying it for avoiding problems caused by the inconsistency
    of the sql_mode on slave and master as the sql_mode is not set for
    Rows_log_event.
    
    mysql-test/extra/rpl_tests/rpl_auto_increment.test:
      Added test to verify if the assertion of "next_insert_id == 0"
      will fail in ha_external_lock() function.
    mysql-test/suite/rpl/r/rpl_auto_increment.result:
      Test result for bug#56662.
    sql/log_event.cc:
      Added code to not allow generation of auto_increment value when
      processing rows event by adding 'MODE_NO_AUTO_VALUE_ON_ZERO' to
      sql_mode.
    sql/rpl_record.cc:
      Added code to get rid of the 'MODE_STRICT_TRANS_TABLES'  and
      MODE_STRICT_ALL_TABLES check to the table when appling the
      rows event and treat it as no strict.
    10092e7c
rpl_record.cc 12.2 KB