提交 1ed92a2e 编写于 作者: R Rafael Mendonça França

Merge pull request #19886 from henders/henders/reload_wipe_query_cache

Cause ActiveRecord::Base::reload to also ignore the QueryCache.
* Clear query cache when `ActiveRecord::Base#relaod` is called.
*Shane Hender*
* Include stored procedures and function on the MySQL structure dump.
*Jonathan Worek*
......
......@@ -382,7 +382,7 @@ def toggle!(attribute)
# # => #<Account id: 1, email: 'account@example.com'>
#
# Attributes are reloaded from the database, and caches busted, in
# particular the associations cache.
# particular the associations cache and the QueryCache.
#
# If the record no longer exists in the database <tt>ActiveRecord::RecordNotFound</tt>
# is raised. Otherwise, in addition to the in-place modification the method
......@@ -418,6 +418,8 @@ def toggle!(attribute)
# end
#
def reload(options = nil)
self.class.connection.clear_query_cache
fresh_object =
if options && options[:lock]
self.class.unscoped { self.class.lock(options[:lock]).find(id) }
......
......@@ -897,6 +897,33 @@ def test_find_via_reload
assert_not post.new_record?
end
def test_reload_via_querycache
ActiveRecord::Base.connection.enable_query_cache!
ActiveRecord::Base.connection.clear_query_cache
assert ActiveRecord::Base.connection.query_cache_enabled, 'cache should be on'
parrot = Parrot.create(:name => 'Shane')
# populate the cache with the SELECT result
found_parrot = Parrot.find(parrot.id)
assert_equal parrot.id, found_parrot.id
# Manually update the 'name' attribute in the DB directly
assert_equal 1, ActiveRecord::Base.connection.query_cache.length
ActiveRecord::Base.uncached do
found_parrot.name = 'Mary'
found_parrot.save
end
# Now reload, and verify that it gets the DB version, and not the querycache version
found_parrot.reload
assert_equal 'Mary', found_parrot.name
found_parrot = Parrot.find(parrot.id)
assert_equal 'Mary', found_parrot.name
ensure
ActiveRecord::Base.connection.disable_query_cache!
end
class SaveTest < ActiveRecord::TestCase
self.use_transactional_tests = false
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册