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
だけを使用するようテストを整理しています。