提交 c753ede6 编写于 作者: F Florian Weingarten

Restore query cache on rollback

上级 5ac824ec
......@@ -258,7 +258,18 @@ def commit_db_transaction() end
# Rolls back the transaction (and turns on auto-committing). Must be
# done if the transaction block raises an exception or returns false.
def rollback_db_transaction() end
def rollback_db_transaction
exec_rollback_db_transaction
end
def exec_rollback_db_transaction() end #:nodoc:
def rollback_to_savepoint(name = nil)
exec_rollback_to_savepoint(name)
end
def exec_rollback_to_savepoint(name = nil) #:nodoc:
end
def default_sequence_name(table, column)
nil
......
......@@ -3,7 +3,7 @@ module ConnectionAdapters # :nodoc:
module QueryCache
class << self
def included(base) #:nodoc:
dirties_query_cache base, :insert, :update, :delete
dirties_query_cache base, :insert, :update, :delete, :rollback_to_savepoint, :rollback_db_transaction
end
def dirties_query_cache(base, *method_names)
......
......@@ -9,7 +9,7 @@ def create_savepoint(name = current_savepoint_name)
execute("SAVEPOINT #{name}")
end
def rollback_to_savepoint(name = current_savepoint_name)
def exec_rollback_to_savepoint(name = current_savepoint_name)
execute("ROLLBACK TO SAVEPOINT #{name}")
end
......
......@@ -341,9 +341,6 @@ def raw_connection
def create_savepoint(name = nil)
end
def rollback_to_savepoint(name = nil)
end
def release_savepoint(name = nil)
end
......
......@@ -324,7 +324,7 @@ def commit_db_transaction #:nodoc:
execute "COMMIT"
end
def rollback_db_transaction #:nodoc:
def exec_rollback_db_transaction #:nodoc:
execute "ROLLBACK"
end
......
......@@ -223,7 +223,7 @@ def commit_db_transaction
end
# Aborts a transaction.
def rollback_db_transaction
def exec_rollback_db_transaction
execute "ROLLBACK"
end
end
......
......@@ -361,7 +361,7 @@ def commit_db_transaction #:nodoc:
log('commit transaction',nil) { @connection.commit }
end
def rollback_db_transaction #:nodoc:
def exec_rollback_db_transaction #:nodoc:
log('rollback transaction',nil) { @connection.rollback }
end
......
......@@ -212,6 +212,38 @@ def test_cache_is_available_when_connection_is_connected
ensure
ActiveRecord::Base.configurations = conf
end
def test_query_cache_doesnt_leak_cached_results_of_rolled_back_queries
ActiveRecord::Base.connection.enable_query_cache!
post = Post.first
Post.transaction do
post.update_attributes(title: 'rollback')
assert_equal 1, Post.where(title: 'rollback').to_a.count
raise ActiveRecord::Rollback
end
assert_equal 0, Post.where(title: 'rollback').to_a.count
ActiveRecord::Base.connection.uncached do
assert_equal 0, Post.where(title: 'rollback').to_a.count
end
begin
Post.transaction do
post.update_attributes(title: 'rollback')
assert_equal 1, Post.where(title: 'rollback').to_a.count
raise 'broken'
end
rescue Exception
end
assert_equal 0, Post.where(title: 'rollback').to_a.count
ActiveRecord::Base.connection.uncached do
assert_equal 0, Post.where(title: 'rollback').to_a.count
end
end
end
class QueryCacheExpiryTest < ActiveRecord::TestCase
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册