Class: ActiveRecord::ConnectionAdapters::TransactionManager

Inherits:
Object
  • Object
show all
Defined in:
lib/active_record/connection_adapters/abstract/transaction.rb

Overview

:nodoc:

Instance Method Summary collapse

Constructor Details

#initialize(connection) ⇒ TransactionManager

Returns a new instance of TransactionManager.



162
163
164
165
# File 'lib/active_record/connection_adapters/abstract/transaction.rb', line 162

def initialize(connection)
  @stack = []
  @connection = connection
end

Instance Method Details

#begin_transaction(options = {}) ⇒ Object



167
168
169
170
171
172
173
174
175
176
# File 'lib/active_record/connection_adapters/abstract/transaction.rb', line 167

def begin_transaction(options = {})
  transaction =
    if @stack.empty?
      RealTransaction.new(@connection, options)
    else
      SavepointTransaction.new(@connection, "active_record_#{@stack.size}", options)
    end
  @stack.push(transaction)
  transaction
end

#commit_transactionObject



178
179
180
# File 'lib/active_record/connection_adapters/abstract/transaction.rb', line 178

def commit_transaction
  @stack.pop.commit
end

#current_transactionObject



211
212
213
# File 'lib/active_record/connection_adapters/abstract/transaction.rb', line 211

def current_transaction
  @stack.last || NULL_TRANSACTION
end

#open_transactionsObject



207
208
209
# File 'lib/active_record/connection_adapters/abstract/transaction.rb', line 207

def open_transactions
  @stack.size
end

#rollback_transactionObject



182
183
184
# File 'lib/active_record/connection_adapters/abstract/transaction.rb', line 182

def rollback_transaction
  @stack.pop.rollback
end

#within_new_transaction(options = {}) ⇒ Object



186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
# File 'lib/active_record/connection_adapters/abstract/transaction.rb', line 186

def within_new_transaction(options = {})
  transaction = begin_transaction options
  yield
rescue Exception => error
  rollback_transaction if transaction
  raise
ensure
  unless error
    if Thread.current.status == 'aborting'
      rollback_transaction
    else
      begin
        commit_transaction
      rescue Exception
        transaction.rollback unless transaction.state.completed?
        raise
      end
    end
  end
end