# File lib/innodb/undo_record.rb, line 116
  def read_record
    cursor(pos_record).name("record") do |c|
      this_record = {
        :page => undo_page.offset,
        :offset => position,
        :header => header,
        :undo_no => c.name("undo_no") { c.get_imc_uint64 },
        :table_id => c.name("table_id") { c.get_imc_uint64 },
      }

      if has_previous_version?
        this_record[:info_bits] = c.name("info_bits") { c.get_uint8 }
        this_record[:trx_id] = c.name("trx_id") { c.get_ic_uint64 }
        this_record[:roll_ptr] = c.name("roll_ptr") {
          Innodb::DataType::RollPointerType.parse_roll_pointer(c.get_ic_uint64)
        }
      end

      if index_page
        read_record_fields(this_record, c)
      else
        # Slurp up the remaining data as a string.
        this_record[:data] = c.get_bytes(header[:next] - c.position - 2)
      end

      this_record
    end
  end