提交 7d83ef4f 编写于 作者: R Ryuta Kamizono

Ensure that preventing writes is invoked before `materialize_transactions` consistently

上级 4dd06452
......@@ -40,8 +40,6 @@ def execute(sql, name = nil)
end
def exec_query(sql, name = "SQL", binds = [], prepare: false)
materialize_transactions
if without_prepared_statement?(binds)
execute_and_free(sql, name) do |result|
if result
......@@ -62,8 +60,6 @@ def exec_query(sql, name = "SQL", binds = [], prepare: false)
end
def exec_delete(sql, name = nil, binds = [])
materialize_transactions
if without_prepared_statement?(binds)
execute_and_free(sql, name) { @connection.affected_rows }
else
......@@ -126,6 +122,8 @@ def exec_stmt_and_free(sql, name, binds, cache_stmt: false)
raise ActiveRecord::ReadOnlyError, "Write query attempted while in readonly mode: #{sql}"
end
materialize_transactions
# make sure we carry over any changes to ActiveRecord::Base.default_timezone that have been
# made since we established the connection
@connection.query_options[:database_timezone] = ActiveRecord::Base.default_timezone
......
......@@ -166,9 +166,13 @@ class << @connection
end
def test_errors_when_an_insert_query_is_called_while_preventing_writes
assert_raises(ActiveRecord::ReadOnlyError) do
@connection.while_preventing_writes do
@connection.insert("INSERT INTO subscribers(nick) VALUES ('138853948594')")
assert_no_queries do
assert_raises(ActiveRecord::ReadOnlyError) do
@connection.while_preventing_writes do
@connection.transaction do
@connection.insert("INSERT INTO subscribers(nick) VALUES ('138853948594')", nil, false)
end
end
end
end
end
......@@ -176,9 +180,13 @@ def test_errors_when_an_insert_query_is_called_while_preventing_writes
def test_errors_when_an_update_query_is_called_while_preventing_writes
@connection.insert("INSERT INTO subscribers(nick) VALUES ('138853948594')")
assert_raises(ActiveRecord::ReadOnlyError) do
@connection.while_preventing_writes do
@connection.update("UPDATE subscribers SET nick = '9989' WHERE nick = '138853948594'")
assert_no_queries do
assert_raises(ActiveRecord::ReadOnlyError) do
@connection.while_preventing_writes do
@connection.transaction do
@connection.update("UPDATE subscribers SET nick = '9989' WHERE nick = '138853948594'")
end
end
end
end
end
......@@ -186,9 +194,13 @@ def test_errors_when_an_update_query_is_called_while_preventing_writes
def test_errors_when_a_delete_query_is_called_while_preventing_writes
@connection.insert("INSERT INTO subscribers(nick) VALUES ('138853948594')")
assert_raises(ActiveRecord::ReadOnlyError) do
@connection.while_preventing_writes do
@connection.delete("DELETE FROM subscribers WHERE nick = '138853948594'")
assert_no_queries do
assert_raises(ActiveRecord::ReadOnlyError) do
@connection.while_preventing_writes do
@connection.transaction do
@connection.delete("DELETE FROM subscribers WHERE nick = '138853948594'")
end
end
end
end
end
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册