2017/09/08分のコミットです。
CHANGELOGへの追加はありませんでした。
Fix quote_default_expression for UUID with array default
activerecord/lib/active_record/connection_adapters/postgresql/quoting.rbの修正です。
PostgreSQLでmigrationにuuid型をArrayで使用している、かつ、デフォルト値を設定した場合(e.g. add_column :some_table, :some_column, :uuid, array: true, default: [])にmigration実行時にエラーになってしまうバグがあったのを修正しています。
Add an extra assertion to ensure dumping schema default as expected
activerecord/test/cases/adapters/postgresql/uuid_test.rbの修正です。
migrationにuuid型をArrayで使用している、かつ、デフォルト値を設定した場合のテストで、schemaファイルに期待通りのmigrationが出力される事を確認するテストを追加しています。
Remove unused primary_key_type and quoted_table_name in Reflection
activerecord/lib/active_record/reflection.rbの修正です。
ActiveRecord::Reflection moduleから、使用していないprimary_key_typeメソッドとquoted_table_nameメソッドを削除しています。
Remove duplicated klass method in AssociationReflection
activerecord/lib/active_record/reflection.rbの修正です。
AssociationReflection#klassメソッドを削除しています。親クラス(MacroReflection)にまったく同じ内容のメソッドがもうある為。
Gemfileの修正です。
使用していないqu-redis gemをコメントアウトしています。
Active Jobのqu adapterのテスト用に入れていたのですが、qu adapterのテストは長い事動いておらず(qu gemがRails 5.1に対応していない為)、不要な為インストールしないようにしています。
Remove unnecessary join_type in AssociationScope
activerecord/lib/active_record/associations/association_scope.rbの修正です。
AssociationScope#join_typeメソッドを削除しています。
上記メソッドはAssociationScope#joinメソッドでtableのcreate_joinの引数として渡すよう使っており、Arel::Nodes::InnerJoinを返すようになっていたのですが、default join klassがArel::Nodes::InnerJoinになっており明示的に値を渡す必要がそもそも無い為、メソッドを削除し引数は指定しないようにしています。
Merge pull request #30524 from tgxworld/recover_plucK_performance
activerecord/lib/active_record/relation/query_methods.rbの修正です。
QueryMethods::WhereChain#default_value_forメソッドで値を返すのにcase / whenを使用していたのを、事前にHashを作成しておいて、そこから値をfetchするよう修正しています。
+ DEFAULT_VALUES = { + create_with: FROZEN_EMPTY_HASH, + readonly: false, + where: Relation::WhereClause.empty, + having: Relation::WhereClause.empty, + from: Relation::FromClause.empty + } + + Relation::MULTI_VALUE_METHODS.each do |value| + DEFAULT_VALUES[value] ||= FROZEN_EMPTY_ARRAY + end + + Relation::SINGLE_VALUE_METHODS.each do |value| + DEFAULT_VALUES[value] = nil if DEFAULT_VALUES[value].nil? + end + def default_value_for(name) - case name - when :create_with - FROZEN_EMPTY_HASH - when :readonly - false - when :where, :having - Relation::WhereClause.empty - when :from - Relation::FromClause.empty - when *Relation::MULTI_VALUE_METHODS - FROZEN_EMPTY_ARRAY - when *Relation::SINGLE_VALUE_METHODS - nil - else + DEFAULT_VALUES.fetch(name) do raise ArgumentError, "unknown relation value #{name.inspect}" end
Rails 5系になってからpluckメソッドの性能が4系と比べて悪化しており、それを調べていた所case / whenのチェック処理(Symbol#===の呼び出し)で重くなっていたようだった為、上記の対応を行ったという事です。
Merge pull request #30536 from y-yagi/reorganize_secrets_test
railties/test/secrets_test.rbの修正です。
secretsのテストで、本来同時に使うべきではないabstract_unitとisolation/abstract_unitを同時に使用していた為、isolation/abstract_unitだけを使用するようテストを整理しています。