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 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
🔎 See on GitHub

new(*)

📝 Source code
# 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
🔎 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 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
🔎 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 89
      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 70
      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 66
      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 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)

          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
🔎 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 76
      def uncached
        old, @query_cache_enabled = @query_cache_enabled, false
        yield
      ensure
        @query_cache_enabled = old
      end
🔎 See on GitHub