Module: ArCache::ActiveRecord::ConnectionAdapters::Transaction

Includes:
NullTransaction
Defined in:
lib/ar_cache/active_record/connection_adapters/abstract/transaction.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from NullTransaction

#handle_ar_cache_primary_keys

Instance Attribute Details

#ar_cache_primary_keysObject (readonly)

Returns the value of attribute ar_cache_primary_keys.



27
28
29
# File 'lib/ar_cache/active_record/connection_adapters/abstract/transaction.rb', line 27

def ar_cache_primary_keys
  @ar_cache_primary_keys
end

#ar_cache_tablesObject (readonly)

Returns the value of attribute ar_cache_tables.



27
28
29
# File 'lib/ar_cache/active_record/connection_adapters/abstract/transaction.rb', line 27

def ar_cache_tables
  @ar_cache_tables
end

Instance Method Details

#commitObject

FIXME: The cache is removed after transaction commited, so dirty read may occur.



52
53
54
55
56
57
58
59
60
61
62
# File 'lib/ar_cache/active_record/connection_adapters/abstract/transaction.rb', line 52

def commit
  super
ensure
  if @run_commit_callbacks
    handle_ar_cache_primary_keys(ar_cache_primary_keys.uniq) if ar_cache_primary_keys.any?
    ar_cache_tables.uniq(&:name).each(&:update_cache) if ar_cache_tables.any?
  else
    connection.current_transaction.ar_cache_tables.push(*ar_cache_tables)
    connection.current_transaction.ar_cache_primary_keys.push(*ar_cache_primary_keys)
  end
end

#delete_ar_cache_primary_keys(keys, table) ⇒ Object



35
36
37
38
39
40
41
# File 'lib/ar_cache/active_record/connection_adapters/abstract/transaction.rb', line 35

def delete_ar_cache_primary_keys(keys, table)
  connection.transaction_manager.add_transaction_table(table.name)
  return if table.disabled?

  super if read_uncommitted?
  ar_cache_primary_keys.push(*keys)
end

#initializeObject



29
30
31
32
33
# File 'lib/ar_cache/active_record/connection_adapters/abstract/transaction.rb', line 29

def initialize(...)
  super
  @ar_cache_primary_keys = []
  @ar_cache_tables = []
end

#read_uncommitted?Boolean

Returns:

  • (Boolean)


64
65
66
# File 'lib/ar_cache/active_record/connection_adapters/abstract/transaction.rb', line 64

def read_uncommitted?
  isolation_level == :read_uncommitted || !connection.transaction_manager.fully_joinable?
end

#update_ar_cache_table(table) ⇒ Object



43
44
45
46
47
48
49
# File 'lib/ar_cache/active_record/connection_adapters/abstract/transaction.rb', line 43

def update_ar_cache_table(table)
  connection.transaction_manager.add_transaction_table(table.name)
  return if table.disabled?

  super if read_uncommitted?
  ar_cache_tables.push(table)
end