Ridgepole 0.4.10

利用され具合がいまいちよく分からないのですが、Ridgepole 0.4.10をリリースしました。

https://github.com/winebarrel/ridgepole

変更点

  • テーブルのリネーム時にdry-runをするとこける不具合を直しました

以上です。

Fixの副作用として、dry-run時にshow/selectほげほげが失敗してもエラーが上がらないという問題が発生する可能性があるのですが「リネームこける方が問題かなー」「dry-runに厳密なエラーチェックを期待してもなー」と思ったので、この対応を入れました。 ご意見ありましたらIssueをば(日本語OKです!)

それから、修正はしていないのですが罠になりそうな事例がいくつかあったのでメモしておきます。

PKの変更

PKをbigintにしたいという事例があって、以下のようなDSLがプルリクとしてきたのですが期待通りには動かなかったです。

  create_table "items", id: false, force: true do |t|
    t.integer "id", limit:8, primary_key: true

mysql2 adapter限定の話なのか分からないのですが、primary_key: trueだとPKにならないようです。 試行錯誤した結果をqiitaに書きました。

ActiveRecord 4.1+MySQLで任意のカラムをPKにする

ちなみにPKを任意の型にしている場合、Scemafileは以下のようになりますが

create_table "items", primary_key: 'my_id', id: 'bigint primary key', force: true do |t|
  ...
end

これをRidgepoleでapplyすると[WARNING] Tableitemsoptions cannot be changedという警告が出ます。 これはダンプ時に型の情報が失われScemafileの定義と差異が出てくるためです。 WARNING出さなくするのはできるのですが、実害ないし他の差異でWARNING出なくなっても困るかな…と思ってそのままにしてます。

あと、デフォルトのPKが作成済みの状態で

create_table "items", primary_key: 'my_id', id: 'bigint primary key', force: true do |t|

とか

create_table "items", id: false, force: true do |t|
  t.integer 'id', primary_key: true

とかやっても現状のPKを変更するALTER文は実行されません。 今のところ、カラムの定義はcreate_tableのブロック内の情報から取得しているので…

たぶん、すごーくがんばって「:idがfalseならあれしてこうして…」とかやれば差分を抽出できそうですが、必要な場面は多くないかなーと思っているので、もっと賢くする予定はいまのとこないです。

signedでbigintのカラムを作成できない

activerecord-mysql-unsignedのバグでsignedなintegerでlimit:8を指定してもbigintにならないという事例がありました。 プルリクは投げてますがいつマージされるかはよく分からないです。

とりあえず某社では、forkしたバージョンを使おうかと思ってます。

その他

どんだけいるかよく分からないですが、「業務で使ってて今すぐFixが必要なんだよ。コミット権よこせ」という方がいましたらば、すぐに対応いたしますのでご連絡いただければと。