• Andrei Elkin's avatar
    BUG#11754117 incorrect logging of INSERT into auto-increment · 49e484c8
    Andrei Elkin authored
    BUG#11761686 insert_id event is not filtered.
      
    Two issues are covered.
      
    INSERT into autoincrement field which is not the first part in the composed primary key 
    is unsafe by autoincrement logging design. The case is specific to MyISAM engine
    because Innodb does not allow such table definition.
      
    However no warnings and row-format logging in the MIXED mode was done, and
    that is fixed.
      
    Int-, Rand-, User-var log-events were not filtered along with their parent
    query that made possible them to screw up execution context of the following
    query.
      
    Fixed with deferring their execution until the parent query.
    
    ******
    Bug#11754117 
    
    Post review fixes.
    
    mysql-test/suite/rpl/r/rpl_auto_increment_bug45679.result:
      a new result file is added.
    mysql-test/suite/rpl/r/rpl_filter_tables_not_exist.result:
      results updated.
    mysql-test/suite/rpl/t/rpl_auto_increment_bug45679.test:
      regression test for BUG#11754117-45670 is added.
    mysql-test/suite/rpl/t/rpl_filter_tables_not_exist.test:
      regression test for filtering issue of BUG#11754117 - 45670 is added.
    sql/log_event.cc:
      Logics are added for deferring and executing events associated 
      with the Query event.
    sql/log_event.h:
      Interface to deferred events batch execution is added.
    sql/rpl_rli.cc:
      initialization for new RLI members is added.
    sql/rpl_rli.h:
      New members to RLI are added to facilitate deferred events gathering
      and execution control;
      two general character RLI cleanup methods are constructed.
    sql/rpl_utility.cc:
      Deferred_log_events methods are difined.
    sql/rpl_utility.h:
      A new class Deferred_log_events is defined to implement
      IRU events gathering, execution and cleanup.
    sql/slave.cc:
      Necessary changes to initialize `rli->deferred_events' and prevent
      deferred event deletion in the main read-exec branch.
    sql/sql_base.cc:
      A new safe-check function for multi-part pk with auto-increment is defined
      and deployed in lock_tables().
    sql/sql_class.cc:
      Initialization for a new member and replication cleanups are added
      to THD class.
    sql/sql_class.h:
      THD class receives a new member to hold a specific execution
      context for slave applier.
    sql/sql_parse.cc:
      Execution of the deferred event in started prior to its parent query.
    49e484c8
sql_base.cc 297 KB