Namespace

Module

Methods

Attributes

[R] query_cache
[R] query_cache_enabled

Class Public methods

dirties_query_cache(base, *method_names)

📝 Source code
# 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
                super
              end
            end_code
          end
        end
🔎 See on GitHub

new(*)

📝 Source code
# 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
🔎 See on GitHub

Instance Public methods

cache()

Enable the query cache within the block.

📝 Source code
# 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
🔎 See on GitHub

clear_query_cache()

Clears the query cache.

One reason you may wish to call this method explicitly is between queries that ask the database to randomize results. Otherwise the cache would see the same SQL query and repeatedly return the same result each time, silently undermining the randomness you were expecting.

📝 Source code
# 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
🔎 See on GitHub

disable_query_cache!()

📝 Source code
# 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
🔎 See on GitHub

enable_query_cache!()

📝 Source code
# File activerecord/lib/active_record/connection_adapters/abstract/query_cache.rb, line 67
      def enable_query_cache!
        @query_cache_enabled = true
      end
🔎 See on GitHub

select_all(arel, name = nil, binds = [], preparable: nil)

📝 Source code
# 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, preparable = to_sql_and_binds(arel, binds, preparable)

          cache_sql(sql, name, binds) { super(sql, name, binds, preparable: preparable) }
        else
          super
        end
      end
🔎 See on GitHub

uncached()

Disable the query cache within the block.

📝 Source code
# 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
🔎 See on GitHub