add offset support to delete_all
Change-Id: I102ba8628d60dbaeea8ebeb9335c655bc822648e Reviewed-on: https://gerrit.instructure.com/69453 Reviewed-by: Simon Williams <simon@instructure.com> Tested-by: Jenkins Product-Review: Cody Cutrer <cody@instructure.com> QA-Review: Cody Cutrer <cody@instructure.com>
This commit is contained in:
parent
3bf7828ad6
commit
e39fb6d8c0
|
@ -870,17 +870,9 @@ ActiveRecord::Relation.class_eval do
|
|||
alias_method_chain :delete_all, :joins
|
||||
|
||||
def delete_all_with_limit(conditions = nil)
|
||||
if limit_value
|
||||
case connection.adapter_name
|
||||
when 'MySQL', 'Mysql2'
|
||||
v = arel.visitor
|
||||
sql = "DELETE #{quoted_table_name} FROM #{quoted_table_name} #{arel.where_sql}
|
||||
ORDER BY #{arel.orders.map { |x| v.send(:visit, x) }.join(', ')} LIMIT #{v.send(:visit, arel.limit)}"
|
||||
return connection.delete(sql, "#{name} Delete all")
|
||||
else
|
||||
scope = except(:select).select("#{quoted_table_name}.#{primary_key}")
|
||||
return unscoped.where(primary_key => scope).delete_all
|
||||
end
|
||||
if limit_value || offset_value
|
||||
scope = except(:select).select("#{quoted_table_name}.#{primary_key}")
|
||||
return unscoped.where(primary_key => scope).delete_all
|
||||
end
|
||||
delete_all_without_limit(conditions)
|
||||
end
|
||||
|
|
|
@ -548,6 +548,17 @@ describe ActiveRecord::Base do
|
|||
p1.reload
|
||||
expect { p2.reload }.to raise_error(ActiveRecord::RecordNotFound)
|
||||
end
|
||||
|
||||
it "does offset too" do
|
||||
u = User.create!
|
||||
p1 = u.pseudonyms.create!(unique_id: 'a', account: Account.default)
|
||||
p2 = u.pseudonyms.create!(unique_id: 'b', account: Account.default)
|
||||
p3 = u.pseudonyms.create!(unique_id: 'c', account: Account.default)
|
||||
u.pseudonyms.scoped.reorder("unique_id DESC").limit(1).offset(1).delete_all
|
||||
p1.reload
|
||||
expect { p2.reload }.to raise_error(ActiveRecord::RecordNotFound)
|
||||
p3.reload
|
||||
end
|
||||
end
|
||||
|
||||
describe "add_index" do
|
||||
|
|
Loading…
Reference in New Issue