• unknown's avatar
    BUG#19459 (BINLOG RBR command does not lock tables correctly causing · d8be3113
    unknown authored
    crash for, e.g., NDB):
    
    Before, mysqlbinlog printed table map events as a separate statement, so
    when executing the event, the opened table was subsequently closed
    when the statement ended. Instead, the row-based events that make up
    a statement are now printed as *one* BINLOG statement, which means
    that the table maps and the following *_rows_log_event events are
    executed fully before the statement ends.
    
    Changing implementation of BINLOG statement to be able to read the 
    emitted format, which now consists of several chunks of BASE64-encoded
    data.
    
    
    client/mysqlbinlog.cc:
      Using IO_CACHE to print events instead of directly to file.
      Factoring out code to write event header and base64 representation into
      separate function.
    mysys/mf_iocache2.c:
      Correcting name in documentation.
    sql/log_event.cc:
      Adding class Write_on_release_cache that holds an IO_CACHE and that
      will write contents of IO_CACHE to a designated file on destruction.
      
      Changing signature of event printing functions print_header() and print_base64()
      to write to IO_CACHE and changing *all* calls in those functions in accordance.
      This means that all printing functions now print to an IO_CACHE instead of to a file,
      and that the IO_CACHE is then copied to the file.
      
      The print() function have the same signature as before, but since it is
      using print_header() and print_base64(), the data will now be printed
      to an IO_CACHE and then copied to the file.
      
      Changing row-based replication events to incrementally build one
      BINLOG statement for all events making up a statement.
    sql/log_event.h:
      Changing signature of event printing functions print_header() and
      print_base64() to write to an IO_CACHE instead of a file.
      
      Changing row-based replication events to incrementally build one
      BINLOG statement for all events making up a statement.
      
      Adding a head_cache and a body_cache to cache statement comment 
      and statement body respectively. In addition, the head_cache is used
      when printing other events than the RBR events.
    sql/sql_binlog.cc:
      Changing code to be able to decode several pieces of base64-encoded data
      for a BINLOG statement. The BINLOG statement now consists of several pieces
      of BASE64-encoded data, so once a block has been decoded and executed, the
      next block has to be read from the statement until there is no more
      data to read.
    d8be3113
sql_binlog.cc 5.63 KB