Module: ActiveRecord::ConnectionAdapters::QueryCache

Defined in:
lib/active_record/connection_adapters/abstract/query_cache.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.dirties_query_cache(base, *method_names) ⇒ Object



15
16
17
18
19
20
21
22
23
24
25
26
# File 'lib/active_record/connection_adapters/abstract/query_cache.rb', line 15

def dirties_query_cache(base, *method_names)
  method_names.each do |method_name|
    base.class_eval <<-end_code, __FILE__, __LINE__
      def #{method_name}_with_query_dirty(*args)
        clear_query_cache if @query_cache_enabled
        #{method_name}_without_query_dirty(*args)
      end

      alias_method_chain :#{method_name}, :query_dirty
    end_code
  end
end

.included(base) ⇒ Object



5
6
7
8
9
10
11
12
13
# File 'lib/active_record/connection_adapters/abstract/query_cache.rb', line 5

def included(base)
  base.class_eval do
    attr_accessor :query_cache_enabled
    alias_method_chain :columns, :query_cache
    alias_method_chain :select_all, :query_cache
  end

  dirties_query_cache base, :insert, :update, :delete
end

Instance Method Details

#cacheObject

Enable the query cache within the block.



30
31
32
33
34
35
36
37
# File 'lib/active_record/connection_adapters/abstract/query_cache.rb', line 30

def cache
  old, @query_cache_enabled = @query_cache_enabled, true
  @query_cache ||= {}
  yield
ensure
  clear_query_cache
  @query_cache_enabled = old
end

#clear_query_cacheObject



47
48
49
# File 'lib/active_record/connection_adapters/abstract/query_cache.rb', line 47

def clear_query_cache
  @query_cache.clear if @query_cache
end

#columns_with_query_cache(*args) ⇒ Object



59
60
61
62
63
64
65
# File 'lib/active_record/connection_adapters/abstract/query_cache.rb', line 59

def columns_with_query_cache(*args)
  if @query_cache_enabled
    @query_cache["SHOW FIELDS FROM #{args.first}"] ||= columns_without_query_cache(*args)
  else
    columns_without_query_cache(*args)
  end
end

#select_all_with_query_cache(*args) ⇒ Object



51
52
53
54
55
56
57
# File 'lib/active_record/connection_adapters/abstract/query_cache.rb', line 51

def select_all_with_query_cache(*args)
  if @query_cache_enabled
    cache_sql(args.first) { select_all_without_query_cache(*args) }
  else
    select_all_without_query_cache(*args)
  end
end

#uncachedObject

Disable the query cache within the block.



40
41
42
43
44
45
# File 'lib/active_record/connection_adapters/abstract/query_cache.rb', line 40

def uncached
  old, @query_cache_enabled = @query_cache_enabled, false
  yield
ensure
  @query_cache_enabled = old
end