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
)にまったく同じ内容のメソッドがもうある為。
Do not install unused gem
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#===
の呼び出し)で重くなっていたようだった為、上記の対応を行ったという事です。
ベンチマークの結果等はPRを参照。
Merge pull request #30536 from y-yagi/reorganize_secrets_test
railties/test/secrets_test.rb
の修正です。
secretsのテストで、本来同時に使うべきではないabstract_unit
とisolation/abstract_unit
を同時に使用していた為、isolation/abstract_unit
だけを使用するようテストを整理しています。