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:
parent
57c7cbb162
commit
54dce6870d
2 changed files with 53 additions and 1 deletions
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue