class Sequent::Core::Transactions::ReadOnlyActiveRecordTransactionProvider

Public Class Methods

new(transaction_provider) click to toggle source
# File lib/sequent/core/transactions/read_only_active_record_transaction_provider.rb, line 7
def initialize(transaction_provider)
  @transaction_provider = transaction_provider
end

Public Instance Methods

transactional(&block) click to toggle source
# File lib/sequent/core/transactions/read_only_active_record_transaction_provider.rb, line 11
def transactional(&block)
  register_call
  @transaction_provider.transactional do
    Sequent::ApplicationRecord.connection.execute('SET TRANSACTION READ ONLY')
    block.call
  rescue ActiveRecord::StatementInvalid
    @skip_set_transaction = true
    raise
  ensure
    deregister_call
    reset_stack_size if stack_size == 0
  end
end

Private Instance Methods

deregister_call() click to toggle source
# File lib/sequent/core/transactions/read_only_active_record_transaction_provider.rb, line 36
def deregister_call
  Thread.current[:read_only_active_record_transaction_provider_calls] -= 1
end
register_call() click to toggle source
# File lib/sequent/core/transactions/read_only_active_record_transaction_provider.rb, line 31
def register_call
  Thread.current[:read_only_active_record_transaction_provider_calls] ||= 0
  Thread.current[:read_only_active_record_transaction_provider_calls] += 1
end
reset_stack_size() click to toggle source
# File lib/sequent/core/transactions/read_only_active_record_transaction_provider.rb, line 40
def reset_stack_size
  Thread.current[:read_only_active_record_transaction_provider_calls] = nil
end
stack_size() click to toggle source
# File lib/sequent/core/transactions/read_only_active_record_transaction_provider.rb, line 27
def stack_size
  Thread.current[:read_only_active_record_transaction_provider_calls]
end