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

Improve log messages for #insert_all / #upsert_all / #insert / #upsert etc. methods

In #35077, `#insert_all` / `#upsert_all` / `#insert` / `#upsert` etc. methods are added. But Active Record logs only “Bulk Insert” log messages when they are invoked.

This commit improves the log messages to use collect words for how invoked them.
This commit is contained in:
Ryo Hashimoto 2019-04-08 12:22:54 +09:00
parent 57c7cbb162
commit 54dce6870d
2 changed files with 53 additions and 1 deletions

View file

@ -21,7 +21,10 @@ module ActiveRecord
end
def execute
connection.exec_query to_sql, "Bulk Insert"
message = "#{model} "
message += "Bulk " if inserts.many?
message += (on_duplicate == :update ? "Upsert" : "Insert")
connection.exec_query to_sql, message
end
def updatable_columns

View file

@ -143,6 +143,42 @@ class InsertAllTest < ActiveRecord::TestCase
end
end
def test_insert_logs_message_including_model_name
skip unless supports_insert_conflict_target?
capture_log_output do |output|
Book.insert(name: "Rework", author_id: 1)
assert_match "Book Insert", output.string
end
end
def test_insert_all_logs_message_including_model_name
skip unless supports_insert_conflict_target?
capture_log_output do |output|
Book.insert_all [{ name: "Remote", author_id: 1 }, { name: "Renote", author_id: 1 }]
assert_match "Book Bulk Insert", output.string
end
end
def test_upsert_logs_message_including_model_name
skip unless supports_insert_on_duplicate_update?
capture_log_output do |output|
Book.upsert(name: "Remote", author_id: 1)
assert_match "Book Upsert", output.string
end
end
def test_upsert_all_logs_message_including_model_name
skip unless supports_insert_on_duplicate_update?
capture_log_output do |output|
Book.upsert_all [{ name: "Remote", author_id: 1 }, { name: "Renote", author_id: 1 }]
assert_match "Book Bulk Upsert", output.string
end
end
def test_upsert_all_updates_existing_records
skip unless supports_insert_on_duplicate_update?
@ -186,4 +222,17 @@ class InsertAllTest < ActiveRecord::TestCase
Book.insert_all! [{ unknown_attribute: "Test" }]
end
end
private
def capture_log_output
output = StringIO.new
old_logger, ActiveRecord::Base.logger = ActiveRecord::Base.logger, ActiveSupport::Logger.new(output)
begin
yield output
ensure
ActiveRecord::Base.logger = old_logger
end
end
end