1
0
Fork 0
mirror of https://github.com/rails/rails.git synced 2022-11-09 12:12:34 -05:00

Merge pull request #40178 from tgxworld/raise_error_from_delete_all

Raise error when `from` is used with `delete_all`.
This commit is contained in:
Eileen M. Uchitelle 2020-09-04 09:12:04 -04:00 committed by GitHub
commit b8ab1f89fc
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 4 additions and 2 deletions

View file

@ -11,7 +11,7 @@ module ActiveRecord
:reverse_order, :distinct, :create_with, :skip_query_cache]
CLAUSE_METHODS = [:where, :having, :from]
INVALID_METHODS_FOR_DELETE_ALL = [:distinct, :group, :having]
INVALID_METHODS_FOR_DELETE_ALL = [:distinct, :group, :having, :from]
VALUE_METHODS = MULTI_VALUE_METHODS + SINGLE_VALUE_METHODS + CLAUSE_METHODS
@ -577,8 +577,9 @@ module ActiveRecord
def delete_all
invalid_methods = INVALID_METHODS_FOR_DELETE_ALL.select do |method|
value = @values[method]
method == :distinct ? value : value&.any?
[:distinct, :from].include?(method) ? value : value&.any?
end
if invalid_methods.any?
raise ActiveRecordError.new("delete_all doesn't support #{invalid_methods.join(', ')}")
end

View file

@ -50,6 +50,7 @@ class DeleteAllTest < ActiveRecord::TestCase
assert_raises(ActiveRecord::ActiveRecordError) { Author.distinct.delete_all }
assert_raises(ActiveRecord::ActiveRecordError) { Author.group(:name).delete_all }
assert_raises(ActiveRecord::ActiveRecordError) { Author.having("SUM(id) < 3").delete_all }
assert_raises(ActiveRecord::ActiveRecordError) { Author.from("(SELECT * FROM authors) AS authors").delete_all }
end
def test_delete_all_with_joins_and_where_part_is_hash