Skip to content
Browse files

Currently, we clear query_cache in cache block finish, even if we may…

… already have cache true.

This commit takes into account the last cache_enabled value, before clearing query_cache.
  • Loading branch information...
1 parent b6f189e commit 1ed81e85ca1d2518400b56c167f3c196c51afede @vipulnsward vipulnsward committed
5 activerecord/
@@ -1,3 +1,8 @@
+* Fix `QueryCache` to work with nested blocks, so that it will only clear the existing cache
+ after leaving the outer block instead of clearing it right after the inner block is finished.
+ *Vipul A M*
* The ERB in fixture files is no longer evaluated in the context of the main
object. Helper methods used by multiple fixtures should be defined on the
class object returned by `ActiveRecord::FixtureSet.context_class`.
2 activerecord/lib/active_record/connection_adapters/abstract/query_cache.rb
@@ -31,8 +31,8 @@ def cache
old, @query_cache_enabled = @query_cache_enabled, true
- clear_query_cache
@query_cache_enabled = old
+ clear_query_cache unless @query_cache_enabled
def enable_query_cache!
9 activerecord/test/cases/query_cache_test.rb
@@ -134,6 +134,15 @@ def test_find_queries_with_cache_multi_record
+ def test_find_queries_with_multi_cache_blocks
+ Task.cache do
+ Task.cache do
+ assert_queries(2) { Task.find(1); Task.find(2) }
+ end
+ assert_queries(0) { Task.find(1); Task.find(1); Task.find(2) }
+ end
+ end
def test_count_queries_with_cache
Task.cache do
assert_queries(1) { Task.count; Task.count }

0 comments on commit 1ed81e8

Please sign in to comment.
Something went wrong with that request. Please try again.