• unknown's avatar
    Bug #28430 Failure in replication of innodb partitioned tables on row/mixed format. · afd34c69
    unknown authored
    In the ha_partition::position() we don't calculate the number
    of the partition of the record, but use m_last_part value instead,
    relying on that it's previously set by some other call like ::write_row().
    Delete_rows_log_event::do_exec_row() calls find_and_fetch_row(),
    where we used position() + rnd_pos() call for the InnoDB-based PARTITION-ed
    table as there HA_PRIMARY_KEY_REQUIRED_FOR_POSITION enabled.
    
    fixed by introducing new handler::rnd_pos_by_record() method to be
    used for random record-based positioning
    
    
    sql/ha_partition.cc:
      Bug #28430 Failure in replication of innodb partitioned tables on row/mixed format.
      
      ha_partition::rnd_pos_by_record() implemented
    sql/ha_partition.h:
      Bug #28430 Failure in replication of innodb partitioned tables on row/mixed format.
      
      ha_partition::rnd_pos_by_record() declared
    sql/handler.h:
      Bug #28430 Failure in replication of innodb partitioned tables on row/mixed format.
      
      handler::rnd_pos_by_record() introduced
    sql/log_event.cc:
      Bug #28430 Failure in replication of innodb partitioned tables on row/mixed format.
      
      handler::rnd_pos_by_record used instead of position() + rnd_pos() call
    afd34c69
handler.h 69.4 KB