diff options
author | Eileen M. Uchitelle <eileencodes@users.noreply.github.com> | 2019-02-04 08:46:10 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-02-04 08:46:10 -0500 |
commit | 7d85d3847e33f879c50626a1a097ad4f5d7bf897 (patch) | |
tree | cc408e16e9bad98ae05e56632fa9c82dd099657b /activerecord/lib | |
parent | f4aed53e440a63ef617b4634f160f4c512824870 (diff) | |
parent | 183c0eb472a33e4f1f2cd9502f238d4b6027f887 (diff) | |
download | rails-7d85d3847e33f879c50626a1a097ad4f5d7bf897.tar.gz rails-7d85d3847e33f879c50626a1a097ad4f5d7bf897.tar.bz2 rails-7d85d3847e33f879c50626a1a097ad4f5d7bf897.zip |
Merge pull request #35089 from eileencodes/fix-query-cache-for-database-switching
Invalidate all query caches for current thread
Diffstat (limited to 'activerecord/lib')
-rw-r--r-- | activerecord/lib/active_record/connection_adapters/abstract/query_cache.rb | 2 | ||||
-rw-r--r-- | activerecord/lib/active_record/connection_handling.rb | 9 |
2 files changed, 10 insertions, 1 deletions
diff --git a/activerecord/lib/active_record/connection_adapters/abstract/query_cache.rb b/activerecord/lib/active_record/connection_adapters/abstract/query_cache.rb index 8aeb934ec2..4e55fcae2f 100644 --- a/activerecord/lib/active_record/connection_adapters/abstract/query_cache.rb +++ b/activerecord/lib/active_record/connection_adapters/abstract/query_cache.rb @@ -17,7 +17,7 @@ module ActiveRecord method_names.each do |method_name| base.class_eval <<-end_code, __FILE__, __LINE__ + 1 def #{method_name}(*) - clear_query_cache if @query_cache_enabled + ActiveRecord::Base.clear_query_caches_for_current_thread if @query_cache_enabled super end end_code diff --git a/activerecord/lib/active_record/connection_handling.rb b/activerecord/lib/active_record/connection_handling.rb index 558cdeccf2..53069cd899 100644 --- a/activerecord/lib/active_record/connection_handling.rb +++ b/activerecord/lib/active_record/connection_handling.rb @@ -176,6 +176,15 @@ module ActiveRecord config_hash end + # Clears the query cache for all connections associated with the current thread. + def clear_query_caches_for_current_thread + ActiveRecord::Base.connection_handlers.each_value do |handler| + handler.connection_pool_list.each do |pool| + pool.connection.clear_query_cache if pool.active_connection? + end + end + end + # Returns the connection currently associated with the class. This can # also be used to "borrow" the connection to do database work unrelated # to any of the specific Active Records. |