2017/12/03分のコミットです。
CHANGELOGへの追加はありませんでした。
Merge pull request #31230 from dinahshi/postgresql_extract_sql
Active Recordの修正です。
PostgreSQL adapterのsql fragment の生成処理を、メソッド(change_column_for_alter
、change_column_default_for_alter
、change_column_null_for_alter
)に切り出しています。
このリファクタリングは、change_table bulk:true
のようなbulk処理をサポートする為の前準備との事です。
また、合わせて、PostgreSQL adapterのmigration処理で、not nullとdefault
が同時に指定された場合に、明示的にdefault
を指定する処理を行わないよう修正しています。他のadapterと挙動を合わせる為、のようです。
Refactor length
, order
, and opclass
index options dumping
Active Recordの修正です。
migrationのlength
, order
, 及び opclass
optionのdump処理のリファクタとして、 不要な分岐の削除、左記indexの生成処理に同じメソッドを仕様するよう修正、等を行っています。
Fix warning: assigned but unused variable - t
activerecord/test/cases/migration/compatibility_test.rb
の修正です。
Rubyのwarning(Fix warning: assigned but unused variable
)が出力されていたのを出力しています。
Extract duplicated index column options normalization as options_for_index_columns
Active Recordの修正です。
重複してあったindex column optionsのノーマライゼーション処理をoptions_for_index_columns
メソッドの切り出しています。
合わせて、add_options_for_index_columns
メソッドをschema_statements.rb
に移動しています。類似メソッドはschema_statements.rb
に定義されており、schema_statements.rb
にまとまっていた方がコードを探す際にわかりやすいため。
Fix test_add_column_with_timestamp_type
failure
activerecord/test/cases/migration/change_schema_test.rb
の修正です。
test_add_column_with_timestamp_type
がfailしていたのを修正しています。 Migration::CompatibilityTest
でschemaを変更した後cacheをそのままにしていたのが原因だったので、左記テストの後処理でcacheをclearするよう修正しています。
合わせて、不要な変数の削除、複数回呼び出しをしている値を変数に保持、等の修正を行っています。
Fix s/klass.connection/connection/
activerecord/test/cases/migration/change_schema_test.rb
の修正です。
上記テストの修正で削除した変数を参照している箇所が残っていたのを修正しています。
Purge variants with their blobs
Active Storageの修正です。
blobを削除する際にvariants(resize等変換したファイル)が残ってしまっていたのを、variantsもまとめて削除するよう修正しています。
change_column_default
should be executed after type changing
Active Recordの修正です。
change_column
メソッドで最初に型の変更を行うよう修正しています。
型の変更を先に行わないと、defaultの値によってはdefaultの設定処理でエラーになってしまう為。
Emulate JSON types for SQLite3 adapter (#29664)
Active Recordの修正です。
SQLite3 adapterでJSON typeをエミュレートするよう修正しています。これにより、migrationファイルでjson
type(e.g. t.json "payload", default: {}
)が使えるようになります。
SQLite3にはJSON Storageは無い(TEXTとして保存されるだけ)のですが、JSON typeをエミュレートする事でDBに依存しないmigrationファイルが書けるようになる為、対応したとの事です。
SQLite3 valid integer value should be 8 bytes (64-bit signed integer) (#28379)
activerecord/lib/active_record/connection_adapters/sqlite3_adapter.rb
の修正です。
SQLite3 adapterでintegerのデフォルトが4 bytesとして扱われていたのを、8 bytesとして扱うよう修正しています。
SQLite3はintegerを最大8 bytesで格納するようにあっており、Active Recordで4 bytesとして扱ってしまうと、実際にDBに保存されているデータの取得が出来ない、という問題があった為、8 bytesとして扱うよう修正しています。