Raise if updating columns in batches within a transaction
This commit is contained in:
parent
4e8d6507bf
commit
e4d42a62d9
|
@ -222,6 +222,12 @@ module Gitlab
|
|||
#
|
||||
# rubocop: disable Metrics/AbcSize
|
||||
def update_column_in_batches(table, column, value)
|
||||
if transaction_open?
|
||||
raise 'update_column_in_batches can not be run inside a transaction, ' \
|
||||
'you can disable transactions by calling disable_ddl_transaction! ' \
|
||||
'in the body of your migration class'
|
||||
end
|
||||
|
||||
table = Arel::Table.new(table)
|
||||
|
||||
count_arel = table.project(Arel.star.count.as('count'))
|
||||
|
|
|
@ -262,7 +262,10 @@ describe Gitlab::Database::MigrationHelpers, lib: true do
|
|||
end
|
||||
|
||||
describe '#update_column_in_batches' do
|
||||
context 'when running outside of a transaction' do
|
||||
before do
|
||||
expect(model).to receive(:transaction_open?).and_return(false)
|
||||
|
||||
create_list(:empty_project, 5)
|
||||
end
|
||||
|
||||
|
@ -299,6 +302,17 @@ describe Gitlab::Database::MigrationHelpers, lib: true do
|
|||
end
|
||||
end
|
||||
|
||||
context 'when running inside the transaction' do
|
||||
it 'raises RuntimeError' do
|
||||
expect(model).to receive(:transaction_open?).and_return(true)
|
||||
|
||||
expect do
|
||||
model.update_column_in_batches(:projects, :star_count, Arel.sql('1+1'))
|
||||
end.to raise_error(RuntimeError)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe '#add_column_with_default' do
|
||||
context 'outside of a transaction' do
|
||||
context 'when a column limit is not set' do
|
||||
|
|
Loading…
Reference in New Issue