Spec-Zone.ru › Ruby on Rails 6.0

модуль 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 17
        def dirties_query_cache(base, *method_names)
          method_names.each do |method_name|
            base.class_eval <<-end_code, __FILE__, __LINE__ + 1
              def #{method_name}(*)
                ActiveRecord::Base.clear_query_caches_for_current_thread if @query_cache_enabled
                super
              end
            end_code
          end
        end
new(*) Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract/query_cache.rb, line 52
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 59
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 90
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 71
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 67
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 96
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)

    if preparable.nil?
      preparable = prepared_statements ? visitor.preparable : false
    end

    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 77
def uncached
  old, @query_cache_enabled = @query_cache_enabled, false
  yield
ensure
  @query_cache_enabled = old
end

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

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

Spec-Zone.ru

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