なるようになるブログ

読書感想文かrailsについてかrubyについてか

rails commit log流し読み(2023/07/10)

2023/07/10分のコミットです。

CHANGELOGにのったコミットは以下の通りです。

activerecord/CHANGELOG.md

activemodel/CHANGELOG.md


Active Record commit transaction on return, break and throw

Active Recordの修正です。

transaction block内でreturnbreakthrowを使用した場合に、transactionをrollbackするかcommitするかをconfig(config.active_record.commit_transaction_on_non_local_return)で指定出来るよう修正しています。

Rails 6.0までは、transaction block内でreturnbreakthrowを使用した場合にtransactionをcommitするようになっていたのですが、timeout gemの挙動の変更(timeout時にthrowを使用)に伴い、rollbackを行うよう挙動の変更が行われました。しかし、timeout gem 0.4.0で再度exceptionをraiseするようtimeout gemの挙動が戻った為、transaction block内でreturnbreakthrowを使用した場合にtransactionをcommitすることが再度出来るようになりました。

元の挙動が自然だろうと考えられていた為、既存の挙動を壊さず再度元の挙動を使用出来るようにする為、config.active_record.commit_transaction_on_non_local_returnがtrueの場合はcommit、falseの場合はrollbackを行うよう対応しています。


Merge pull request #48698 from basecamp/active-model-load-hook

activemodel/lib/active_model/model.rbの修正です。

ActiveModel::Model load時に実行するhook(active_model)を追加しています。


Merge pull request #48690 from adrianna-chang-shopify/ac-merge-target-list-cpk-fix

activerecord/lib/active_record/associations/collection_association.rbの修正です。

composite primary keyを使用しているassociationで、primary keyの1つにidを使用している場合に、persistedデータとin-memoryのデータをマージする際にidnilになってしまうバグがあったのを修正しています。


Improve QueryCacheMutableParamTest

activerecord/test/cases/query_cache_test.rbの修正です。

QueryCacheMutableParamTestでテスト用のpayloadを作成するのにHashのsubclassを使用していたのを、Structを使用するよう修正しています。HashだとPredicateBuilderdupが実行される処理が行われてしまい、値が変わらない事を確認するテストが行えない為。