2022/11/02分のコミットです。
CHANGELOGにのったコミットは以下の通りです。
- Allow configuring columns list to be used in SQL queries issued by an
ActiveRecord::Base
object - Invalidate transaction as early as possible
- Clear locking column on #dup
Allow specifying columns to use in ActiveRecord::Base
object queries
Active Recordの修正です。
Active Recordのobjectで実行されるqueryで、必ず使用されるカラムをclassに定義出来るよう修正しています。 定義はquery_constraints
メソッドで行えるようになっており、定義したカラムは、更新、削除、再読込の際に使われるようになっています。
class Developer < ActiveRecord::Base query_constraints :company_id, :id end developer = Developer.first developer.update!(name: "Nikita") # => UPDATE "developers" SET "name" = 'Nikita' WHERE "developers"."company_id" = 1 AND "developers"."id" = 1 developer.update!(company_id: 2) # => UPDATE "developers" SET "company_id" = 2 WHERE "developers"."company_id" = 1 AND "developers"."id" = 1 developer.name = "Bob" developer.save! # => UPDATE "developers" SET "name" = 'Bob' WHERE "developers"."company_id" = 1 AND "developers"."id" = 1 developer.destroy! # => DELETE FROM "developers" WHERE "developers"."company_id" = 1 AND "developers"."id" = 1 developer.reload # => SELECT "developers".* FROM "developers" WHERE "developers"."company_id" = 1 AND "developers"."id" = 1 LIMIT 1
default_scope
と違い、query_constraints
で定義されたのが使われるのは、単一のActive Record objectで実行されるqueryのみになっています。
Merge pull request #46386 from lazaronixon/fix-has-one-create-record
activerecord/lib/active_record/associations/singular_association.rb
の修正です。
singular associationの作成処理で、古いassociationの削除と新しいassociationの作成を同じtransaction内で行うよう修正しています。
Merge pull request #46333 from radar/timezone-canberra
activesupport/lib/active_support/values/time_zone.rb
の修正です。
time zoneのmappingで、Canberra
のtime zone idがおかしかかったのを修正しています。
Merge pull request #46395 from jonathanhefner/active_job-deprecator
Active Jobの修正です。
Action Job専用のdeprecator(ActionJob.deprecator
)を追加、及び、Action JobでActiveSupport::Deprecation
を使用していた箇所を、ActionJob.deprecator
を使用するよう修正しています。ActionJob.deprecator
はRails.application.deprecators
追加されるようになっており、Rails.application.deprecators[:action_job]
で参照出来るようになっています。
Merge pull request #46396 from jonathanhefner/active_storage-deprecator
Active Storageの修正です。
Action Storage専用のdeprecator(ActionStorage.deprecator
)を追加、及び、Action StorageでActiveSupport::Deprecation
を使用していた箇所を、ActionStorage.deprecator
を使用するよう修正しています。ActionStorage.deprecator
はRails.application.deprecators
追加されるようになっており、Rails.application.deprecators[:action_storage]
で参照出来るようになっています。
Invalidate transaction as early as possible
activerecord/lib/active_record/connection_adapters/abstract/transaction.rb
、
activerecord/lib/active_record/connection_adapters/abstract_adapter.rb
の修正です。
TransactionRollbackError
が発生した場合に、transactionsの無効化処理が可能な限りはやく行うよう修正しています。transactionがそのままだと、違うエラー(Mysql2::Error: SAVEPOINT active_record_%n% does not exist
など)が発生してしまう可能性があり、それを避けるよういにする為。
Merge pull request #46243 from shouichi/clear-locking-column-on-dup
activerecord/lib/active_record/locking/optimistic.rb
の修正です。
dup
でobjectを複製した場合に、複製したobjectのlocking column(e.g. lock_version
)の値をclearするよう修正しています。
Update docs for ActiveRecord::AttributeMethods#[]=
activerecord/lib/active_record/attribute_methods.rb
のdocの修正です。
ActiveRecord::AttributeMethods#[]=
メソッドのdocに、protectedな#write_attribute
のaliasである旨説明があったのですが、#write_attribute
はpublic APIである、かつ、独自のdocも記載されており、誤っているかつ不要と思われる説明との事で削除されています。