mirror of https://github.com/rails/rails
Wrap Mysql count of deleted rows in lock block to avoid conflict in test
This commit is contained in:
parent
95a1d8721c
commit
66762b81f4
|
@ -61,7 +61,9 @@ module ActiveRecord
|
||||||
|
|
||||||
def exec_delete(sql, name = nil, binds = [])
|
def exec_delete(sql, name = nil, binds = [])
|
||||||
if without_prepared_statement?(binds)
|
if without_prepared_statement?(binds)
|
||||||
execute_and_free(sql, name) { @connection.affected_rows }
|
@lock.synchronize do
|
||||||
|
execute_and_free(sql, name) { @connection.affected_rows }
|
||||||
|
end
|
||||||
else
|
else
|
||||||
exec_stmt_and_free(sql, name, binds) { |stmt| stmt.affected_rows }
|
exec_stmt_and_free(sql, name, binds) { |stmt| stmt.affected_rows }
|
||||||
end
|
end
|
||||||
|
|
|
@ -0,0 +1,28 @@
|
||||||
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
require "cases/helper"
|
||||||
|
require "support/connection_helper"
|
||||||
|
require "models/author"
|
||||||
|
require "models/bulb"
|
||||||
|
|
||||||
|
module ActiveRecord
|
||||||
|
class CountDeletedRowsWithLockTest < ActiveRecord::Mysql2TestCase
|
||||||
|
test "delete and create in different threads synchronize correctly" do
|
||||||
|
Bulb.unscoped.delete_all
|
||||||
|
Bulb.create!(name: "Jimmy", color: "blue")
|
||||||
|
|
||||||
|
delete_thread = Thread.new do
|
||||||
|
Bulb.unscoped.delete_all
|
||||||
|
end
|
||||||
|
|
||||||
|
create_thread = Thread.new do
|
||||||
|
Author.create!(name: "Tommy")
|
||||||
|
end
|
||||||
|
|
||||||
|
delete_thread.join
|
||||||
|
create_thread.join
|
||||||
|
|
||||||
|
assert_equal 1, delete_thread.value
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
Loading…
Reference in New Issue