• Luis Soares's avatar
    BUG#11766865: 60091: RBR + NO PK + UPDATE NULL VALUE --> SLAVE BREAK WITH ERROR HA_ERR_END_OF_ · b489c89f
    Luis Soares authored
      
    The slave was not able to find the correct row in the innodb
    table, because the row fetched from the innodb table would not
    match the before image. This happened because the (don't care)
    bytes in the NULLed fields would change once the row was stored
    in the storage engine (from zero to the default value). This
    would make bulk memory comparison (using memcmp) to fail.
      
    We fix this by taking a preventing measure and avoiding memcmp
    for tables that contain nullable fields. Therefore, we protect
    the slave search routine from engines that return arbitrary
    values for don't care bytes (in the nulled fields). Instead, the
    slave thread will only check null_bits and those fields that are
    not set to NULL when comparing the before image against the
    storage engine row.
    
    mysql-test/extra/rpl_tests/rpl_record_compare.test:
      Added test case to the include file so that this is tested 
      with more than one engine.
    mysql-test/suite/rpl/r/rpl_row_rec_comp_innodb.result:
      Result update.
    mysql-test/suite/rpl/r/rpl_row_rec_comp_myisam.result:
      Result update.
    mysql-test/suite/rpl/t/rpl_row_rec_comp_myisam.test:
      Moved the include file last, so that the result from
      BUG#11766865 is not intermixed with the result for
      BUG#11760454.
    sql/log_event.cc:
      Skips memory comparison if the table has nullable 
      columns and compares only non-nulled fields in the
      field comparison loop.
    b489c89f
log_event.cc 306 KB