Method: ActiveRecord::ConnectionAdapters::QueryCache#select_all

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

#select_all(arel, name = nil, binds = [], preparable: nil, async: false, allow_retry: false) ⇒ Object

:nodoc:



247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
# File 'lib/active_record/connection_adapters/abstract/query_cache.rb', line 247

def select_all(arel, name = nil, binds = [], preparable: nil, async: false, allow_retry: false) # :nodoc:
  arel = arel_from_relation(arel)

  # If arel is locked this is a SELECT ... FOR UPDATE or somesuch.
  # Such queries should not be cached.
  if query_cache_enabled && !(arel.respond_to?(:locked) && arel.locked)
    sql, binds, preparable, allow_retry = to_sql_and_binds(arel, binds, preparable)

    if async
      result = lookup_sql_cache(sql, name, binds) || super(sql, name, binds, preparable: preparable, async: async, allow_retry: allow_retry)
      FutureResult.wrap(result)
    else
      cache_sql(sql, name, binds) { super(sql, name, binds, preparable: preparable, async: async, allow_retry: allow_retry) }
    end
  else
    super
  end
end