# File lib/innodb/undo_record.rb, line 237
  def prev_by_history
    unless has_previous_version?
      # This undo record type has no previous version information.
      return nil
    end

    undo_log = roll_ptr[:undo_log]
    older_undo_page = @undo_page.space.page(undo_log[:page])

    unless older_undo_page and older_undo_page.is_a?(Innodb::Page::UndoLog)
      # The page was probably re-used for something else.
      return nil
    end

    older_undo_record = new_subordinate(older_undo_page,
                                        undo_log[:offset])

    unless older_undo_record and table_id == older_undo_record.table_id
      # The record space was probably re-used for something else.
      return nil
    end

    unless older_undo_record.trx_id.nil? or trx_id >= older_undo_record.trx_id
      # The trx_id should not be newer; but may be absent (for insert).
      return nil
    end

    older_undo_record
  end