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