def delete_all
      invalid_methods = INVALID_METHODS_FOR_DELETE_ALL.select do |method|
        value = @values[method]
        method == :distinct ? value : value&.any?
      end
      if invalid_methods.any?
        raise ActiveRecordError.new("delete_all doesn't support #{invalid_methods.join(', ')}")
      end

      if eager_loading?
        relation = apply_join_dependency
        return relation.delete_all
      end

      stmt = Arel::DeleteManager.new
      stmt.from(arel.join_sources.empty? ? table : arel.source)
      stmt.key = arel_attribute(primary_key)
      stmt.take(arel.limit)
      stmt.offset(arel.offset)
      stmt.order(*arel.orders)
      stmt.wheres = arel.constraints

      affected = @klass.connection.delete(stmt, "#{@klass} Destroy")

      reset
      affected
    end
def delete_all
      invalid_methods = INVALID_METHODS_FOR_DELETE_ALL.select do |method|
        value = @values[method]
        method == :distinct ? value : value&.any?
      end
      if invalid_methods.any?
        raise ActiveRecordError.new("delete_all doesn't support #{invalid_methods.join(', ')}")
      end

      if eager_loading?
        relation = apply_join_dependency
        return relation.delete_all
      end

      stmt = Arel::DeleteManager.new
      stmt.from(arel.join_sources.empty? ? table : arel.source)
      stmt.key = arel_attribute(primary_key)
      stmt.take(arel.limit)
      stmt.offset(arel.offset)
      stmt.order(*arel.orders)
      stmt.wheres = arel.constraints

      affected = @klass.connection.delete(stmt, "#{@klass} Destroy")

      reset
      affected
    end
Deletes the records without instantiating the records
 first, and hence not calling the {#destroy}[rdoc-ref:Persistence#destroy]
 method nor invoking callbacks.
 This is a single SQL DELETE statement that goes straight to the database, much more
 efficient than #destroy_all. Be careful with relations though, in particular
 <tt>:dependent</tt> rules defined on associations are not honored. Returns the
 number of rows affected.

   Post.where(person_id: 5).where(category: ['Something', 'Else']).delete_all

 Both calls delete the affected posts all at once with a single DELETE statement.
 If you need to destroy dependent associations or call your <tt>before_*</tt> or
 +after_destroy+ callbacks, use the #destroy_all method instead.

 If an invalid method is supplied, #delete_all raises an ActiveRecordError:

   Post.distinct.delete_all
   # => ActiveRecord::ActiveRecordError: delete_all doesn't support distinct