# File lib/innodb/log_record.rb, line 181
  def read_payload(type, c)
    case type
    when :MLOG_1BYTE, :MLOG_2BYTE, :MLOG_4BYTE
      {
        :page_offset => c.name("page_offset") { c.get_uint16 },
        :value       => c.name("value")  { c.get_ic_uint32 }
      }
    when :MLOG_8BYTE
      {
        :offset   => c.name("offset") { c.get_uint16 },
        :value    => c.name("value")  { c.get_ic_uint64 }
      }
    when :UNDO_HDR_CREATE, :UNDO_HDR_REUSE
      {
        :trx_id   => c.name("trx_id") { c.get_ic_uint64 }
      }
    when :UNDO_INSERT
      {
        :length   => len = c.name("length") { c.get_uint16 },
        :value    => c.name("value") { c.get_bytes(len) }
      }
    when :REC_INSERT
      {
        :record   => c.name("record") { read_insert_record(c) }
      }
    when :COMP_REC_INSERT
      {
        :index    => c.name("index")  { read_index(c) },
        :record   => c.name("record") { read_insert_record(c) }
      }
    when :COMP_REC_UPDATE_IN_PLACE
      {
        :index    => c.name("index")  { read_index(c) },
        :record   => c.name("record") { read_update_in_place_record(c) }
      }
    when :REC_UPDATE_IN_PLACE
      {
        :record   => c.name("record") { read_update_in_place_record(c) }
      }
    when :WRITE_STRING
      {
        :offset   => c.name("offset") { c.get_uint16 },
        :length   => length = c.name("length") { c.get_uint16 },
        :value    => c.name("value")  { c.get_bytes(length) },
      }
    when :UNDO_INIT
      {
        :type     => c.name("type")   { UNDO_TYPES[c.get_ic_uint32] }
      }
    when :FILE_CREATE, :FILE_DELETE
      {
        :name_len => len = c.name("name_len") { c.get_uint16 },
        :name     => c.name("name") { c.get_bytes(len) },
      }
    when :FILE_CREATE2
      {
        :flags    => c.name("flags") { c.get_uint32 },
        :name_len => len = c.name("name_len") { c.get_uint16 },
        :name     => c.name("name") { c.get_bytes(len) },
      }
    when :FILE_RENAME
      {
        :old => {
          :name_len => len = c.name("name_len") { c.get_uint16 },
          :name     => c.name("name") { c.get_bytes(len) },
        },
        :new => {
          :name_len => len = c.name("name_len") { c.get_uint16 },
          :name     => c.name("name") { c.get_bytes(len) },
        }
      }
    when :COMP_REC_CLUST_DELETE_MARK
      {
        :index    => c.name("index")  { read_index(c) },
        :record   => c.name("record") { read_clust_delete_mark(c) }
      }
    when :REC_CLUST_DELETE_MARK
      {
        :record   => c.name("record") { read_clust_delete_mark(c) }
      }
    when :COMP_REC_SEC_DELETE_MARK
      {
        :index    => c.name("index")  { read_index(c) },
        :value    => c.name("value")  { c.get_uint8 },
        :offset   => c.name("offset") { c.get_uint16 },
      }
    when :REC_SEC_DELETE_MARK
      {
        :value    => c.name("value")  { c.get_uint8 },
        :offset   => c.name("offset") { c.get_uint16 },
      }
    when :REC_DELETE
      {
        :offset   => c.name("offset") { c.get_uint16 },
      }
    when :COMP_REC_DELETE
      {
        :index    => c.name("index")  { read_index(c) },
        :offset   => c.name("offset") { c.get_uint16 },
      }
    when :REC_MIN_MARK, :COMP_REC_MIN_MARK
      {
        :offset   => c.name("offset") { c.get_uint16 },
      }
    when :LIST_START_DELETE, :LIST_END_DELETE
      {
        :offset   => c.name("offset") { c.get_uint16 },
      }
    when :COMP_LIST_START_DELETE, :COMP_LIST_END_DELETE
      {
        :index    => c.name("index")  { read_index(c) },
        :offset   => c.name("offset") { c.get_uint16 },
      }
    when :LIST_END_COPY_CREATED
      {
        :length   => len = c.name("length") { c.get_uint32 },
        :data     => c.name("data") { c.get_bytes(len) }
      }
    when :COMP_LIST_END_COPY_CREATE
      {
        :index    => c.name("index")  { read_index(c) },
        :length   => len = c.name("length") { c.get_uint32 },
        :data     => c.name("data") { c.get_bytes(len) }
      }
    when :COMP_PAGE_REORGANIZE
      {
        :index    => c.name("index")  { read_index(c) },
      }
    when :DUMMY_RECORD, :MULTI_REC_END, :INIT_FILE_PAGE,
         :IBUF_BITMAP_INIT, :PAGE_CREATE, :COMP_PAGE_CREATE,
         :PAGE_REORGANIZE, :UNDO_ERASE_END, :UNDO_HDR_DISCARD
      {}
    else
      raise "Unsupported log record type: #{type.to_s}"
    end
  end