Spec-Zone.ru › Ruby on Rails 5.2

модуль ActiveRecord::ConnectionAdapters::QueryCache

Атрибуты

query_cache[R]
query_cache_enabled[R]

Публичные методы класса

dirties_query_cache(base, *method_names) Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract/query_cache.rb, line 16
        def dirties_query_cache(base, *method_names)
          method_names.each do |method_name|
            base.class_eval <<-end_code, __FILE__, __LINE__ + 1
              def #{method_name}(*)
                clear_query_cache if @query_cache_enabled
                super
              end
            end_code
          end
        end
new(*) Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract/query_cache.rb, line 51
def initialize(*)
  super
  @query_cache         = Hash.new { |h, sql| h[sql] = {} }
  @query_cache_enabled = false
end
Вызывает метод суперкласса

Публичные методы экземпляра

cache() { || ... } Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract/query_cache.rb, line 58
def cache
  old, @query_cache_enabled = @query_cache_enabled, true
  yield
ensure
  @query_cache_enabled = old
  clear_query_cache unless @query_cache_enabled
end

Включить кэш запросов в блоке.

clear_query_cache() Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract/query_cache.rb, line 89
def clear_query_cache
  @lock.synchronize do
    @query_cache.clear
  end
end

Очищает кэш запросов.

Одна из причин, по которым вам может потребоваться явно вызвать этот метод, — это между запросами, которые просят базу данных случайным образом рандомизировать результаты. В противном случае кеш будет видеть тот же SQL-запрос и повторять возвращение того же результата каждый раз, молча подрывая ожидаемую случайность.

disable_query_cache!() Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract/query_cache.rb, line 70
def disable_query_cache!
  @query_cache_enabled = false
  clear_query_cache
end
enable_query_cache!() Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract/query_cache.rb, line 66
def enable_query_cache!
  @query_cache_enabled = true
end
select_all(arel, name = nil, binds = [], preparable: nil) Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract/query_cache.rb, line 95
def select_all(arel, name = nil, binds = [], preparable: nil)
  if @query_cache_enabled && !locked?(arel)
    arel = arel_from_relation(arel)
    sql, binds = to_sql_and_binds(arel, binds)
    cache_sql(sql, name, binds) { super(sql, name, binds, preparable: preparable) }
  else
    super
  end
end
Вызывает метод суперкласса
uncached() { || ... } Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract/query_cache.rb, line 76
def uncached
  old, @query_cache_enabled = @query_cache_enabled, false
  yield
ensure
  @query_cache_enabled = old
end

Отключить кэш запросов в блоке.

© 2004–2018 David Heinemeier Hansson
Licensed under the MIT License.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API