mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
91ed21b304
Adds a method to ActiveRecord allowing records to be inserted in bulk without instantiating ActiveRecord models. This method supports options for handling uniqueness violations by skipping duplicate records or overwriting them in an UPSERT operation. ActiveRecord already supports bulk-update and bulk-destroy actions that execute SQL UPDATE and DELETE commands directly. It also supports bulk-read actions through `pluck`. It makes sense for it also to support bulk-creation.
76 lines
2.6 KiB
Ruby
76 lines
2.6 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
require "cases/helper"
|
|
require "models/book"
|
|
|
|
module ActiveRecord
|
|
class InstrumentationTest < ActiveRecord::TestCase
|
|
def setup
|
|
ActiveRecord::Base.connection.schema_cache.add(Book.table_name)
|
|
end
|
|
|
|
def test_payload_name_on_load
|
|
Book.create(name: "test book")
|
|
subscriber = ActiveSupport::Notifications.subscribe("sql.active_record") do |*args|
|
|
event = ActiveSupport::Notifications::Event.new(*args)
|
|
if event.payload[:sql].match "SELECT"
|
|
assert_equal "Book Load", event.payload[:name]
|
|
end
|
|
end
|
|
Book.first
|
|
ensure
|
|
ActiveSupport::Notifications.unsubscribe(subscriber) if subscriber
|
|
end
|
|
|
|
def test_payload_name_on_create
|
|
subscriber = ActiveSupport::Notifications.subscribe("sql.active_record") do |*args|
|
|
event = ActiveSupport::Notifications::Event.new(*args)
|
|
if event.payload[:sql].match "INSERT"
|
|
assert_equal "Book Create", event.payload[:name]
|
|
end
|
|
end
|
|
Book.create(name: "test book")
|
|
ensure
|
|
ActiveSupport::Notifications.unsubscribe(subscriber) if subscriber
|
|
end
|
|
|
|
def test_payload_name_on_update
|
|
subscriber = ActiveSupport::Notifications.subscribe("sql.active_record") do |*args|
|
|
event = ActiveSupport::Notifications::Event.new(*args)
|
|
if event.payload[:sql].match "UPDATE"
|
|
assert_equal "Book Update", event.payload[:name]
|
|
end
|
|
end
|
|
book = Book.create(name: "test book", format: "paperback")
|
|
book.update_attribute(:format, "ebook")
|
|
ensure
|
|
ActiveSupport::Notifications.unsubscribe(subscriber) if subscriber
|
|
end
|
|
|
|
def test_payload_name_on_update_all
|
|
subscriber = ActiveSupport::Notifications.subscribe("sql.active_record") do |*args|
|
|
event = ActiveSupport::Notifications::Event.new(*args)
|
|
if event.payload[:sql].match "UPDATE"
|
|
assert_equal "Book Update All", event.payload[:name]
|
|
end
|
|
end
|
|
Book.create(name: "test book", format: "paperback")
|
|
Book.update_all(format: "ebook")
|
|
ensure
|
|
ActiveSupport::Notifications.unsubscribe(subscriber) if subscriber
|
|
end
|
|
|
|
def test_payload_name_on_destroy
|
|
subscriber = ActiveSupport::Notifications.subscribe("sql.active_record") do |*args|
|
|
event = ActiveSupport::Notifications::Event.new(*args)
|
|
if event.payload[:sql].match "DELETE"
|
|
assert_equal "Book Destroy", event.payload[:name]
|
|
end
|
|
end
|
|
book = Book.create(name: "test book")
|
|
book.destroy
|
|
ensure
|
|
ActiveSupport::Notifications.unsubscribe(subscriber) if subscriber
|
|
end
|
|
end
|
|
end
|