なるようになるブログ

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

rails commit log流し読み(2016/12/06)

2016/12/06分のコミットです。

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

activerecord/CHANGELOG.md


Don't try to run multiple insert queries at once

activerecord/lib/active_record/connection_adapters/abstract/schema_statements.rbの修正です。

schema_migrations のinsert処理で、multi-row-insertが使用できない場合複数のINSERT文を一度に実行するようになっていたのを、INSERT文毎に別にSQLを実行するようにしています。

SQLiteのデフォルトのquery interfaceでは、最初のセミコロンの後のqueryは無視されるようになっており、複数のINSERTを同時に実行する事ができない為修正したようです。


Make :auto_increment to internal primary key option

activerecord/lib/active_record/connection_adapters/postgresql/schema_definitions.rbactiverecord/lib/active_record/connection_adapters/sqlite3/schema_definitions.rbの修正です。

schemaのprimary keyを定義する際に、PostgreSQLSQLite adapterでも:auto_incrementオプションを指定出来るよう修正しています。

:auto_incrementオプションが指定された場合、PostgreSQLではserial型、SQLiteではprimary_key(NTEGER PRIMARY KEY AUTOINCREMENT NOT NULL)として扱われるようになっています。primary keyのデフォルトをBIGINTに変える対応(Change Default Primary Keys to BIGINT)が行われており、その対応の関連との事です。


Merge pull request #26266 from jmccartie/jm/bigint

Active Recordの修正です。

新規に作成するテーブルのprimary keyに、PostgreSQLはbigserialを、MySQLではbigintをそれぞれ使用するよう修正しています。

型を変更した事によるパフォーマンスの影響は無く、テーブルが巨大化した場合には当然bigserial / bigintの方が良い為、デフォルトを変更したようです。

参考:"Postgres reminder: train yourself to use BIGSERIAL, and never SERIAL. If your table is small it won't matter, if it's big, you'll need it.")


Do not try to set the content_type if the format is nil

actionpack/lib/action_controller/metal/rendering.rbの修正です。

ActionController::Rendering#_set_rendered_content_typeメソッドで、formatがnilの場合はcontent_typeを設定しないよう修正しています。


Make :auto_increment option works on :bigint

activerecord/lib/active_record/connection_adapters/postgresql/schema_definitions.rbactiverecord/lib/active_record/connection_adapters/sqlite3/schema_definitions.rbの修正です。

先ほどの:auto_incrementオプションの対応について、bigint型の場合も処理が動作するよう修正しています。


Remove unnecessary connection_name variable

activerecord/lib/active_record/migration/compatibility.rbの修正です。

不要なconnection_name変数を削除しています。


Merge pull request #26687 from kamipo/fix_add_index_to_normalize_options https://github.com/rails/rails/commit/5ff0d828f1f39b894a4b6752bddc5b3b96a61ec1

activerecord/lib/active_record/connection_adapters/abstract/schema_statements.rbactiverecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rbの修正です。

add_indexメソッドでcolumn namesとoptionのkeyを全てSymbolに変換するよう修正しています。StringとSymbolが混在した場合にエラーになってしまう問題があった為。


Update puma.rb

railties/lib/rails/generators/rails/app/templates/config/puma.rbの修正です。

デフォルトのpuma.rbのコメントのフォーマットを修正しています。


Translate NOT NULL violation to the specific exception

Active Recordの修正です。

insert or update実行時にNOT NULL violationでエラーになった場合に、StatementInvalidではなく、NOT NULL violation用のエラークラス(NotNullViolation)をraiseするよう修正しています。


Should inherit StatementInvalid rather than WrappedDatabaseException

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

MismatchedForeignKeyクラスの親クラスをWrappedDatabaseExceptionからStatementInvalidに変更しています。

WrappedDatabaseExceptionは互換性の為だけにある無効なクラスで、新規のエラークラスはStatementInvalidを継承するのが適切な為、のようです。