class ActiveRecord::ConnectionAdapters::OpenTransaction
:nodoc:
def add_record(record)
def add_record(record) if record.has_transactional_callbacks? records << record else record.set_transaction_state(@state) end end
def begin(options = {})
def begin(options = {}) if finishing? parent.begin else SavepointTransaction.new(connection, self, options) end end
def closed?
def closed? false end
def commit
def commit @finishing = true perform_commit parent end
def commit_records
def commit_records @state.set_state(:committed) records.uniq.each do |record| begin record.committed! rescue => e record.logger.error(e) if record.respond_to?(:logger) && record.logger end end end
def finishing?
happen in a commit/rollback. But it's kinda distasteful. Maybe we can
This state is necessary so that we correctly handle stuff that might
def finishing? @finishing end
def initialize(connection, parent, options = {})
def initialize(connection, parent, options = {}) super connection @parent = parent @records = [] @finishing = false @joinable = options.fetch(:joinable, true) end
def joinable?
def joinable? @joinable && !finishing? end
def number
def number if finishing? parent.number else parent.number + 1 end end
def open?
def open? true end
def rollback
def rollback @finishing = true perform_rollback parent end
def rollback_records
def rollback_records @state.set_state(:rolledback) records.uniq.each do |record| begin record.rolledback!(parent.closed?) rescue => e record.logger.error(e) if record.respond_to?(:logger) && record.logger end end end