class EM::Synchrony::ActiveRecord::TransactionManager

def _current_stack

def _current_stack
  @stack[Fiber.current.object_id]
end

def begin_transaction(options = {}) #:nodoc:

:nodoc:
def begin_transaction(options = {}) #:nodoc:
  transaction =
    if _current_stack.empty?
      ::ActiveRecord::ConnectionAdapters::RealTransaction.new(@connection, options)
    else
      ::ActiveRecord::ConnectionAdapters::SavepointTransaction.new(@connection, "active_record_#{Fiber.current.object_id}_#{open_transactions}", options)
    end
  _current_stack.push(transaction)
  transaction
end

def commit_transaction #:nodoc:

:nodoc:
def commit_transaction #:nodoc:
  _current_stack.pop.commit
end

def current_transaction #:nodoc:

:nodoc:
def current_transaction #:nodoc:
  _current_stack.last || NULL_TRANSACTION
end

def initialize(*args)

def initialize(*args)
  super
  @stack = Hash.new { |h, k| h[k] = [] }
end

def open_transactions

def open_transactions
  _current_stack.size
end

def rollback_transaction #:nodoc:

:nodoc:
def rollback_transaction #:nodoc:
  _current_stack.pop.rollback
end