Ridgepole 0.4.8.rc1: executeを追加してみた

スキーマ管理ツール Ridgepole にexecuteメソッドを追加してみました。 https://github.com/winebarrel/ridgepole/tree/v0.4.8#execute

rc1なのでインストールする場合は--preオプションが必要になります。

使い方

executeを使ってforeign keyを貼る例です:

create_table "authors", force: true do |t|
  t.string "name", null: false
end

create_table "books", force: true do |t|
  t.string  "title",                     null: false
  t.integer "author_id", unsigned: true, null: false
end

add_index "books", ["author_id"], name: "idx_author_id", using: :btree

execute("ALTER TABLE books ADD CONSTRAINT fk_author FOREIGN KEY (author_id) REFERENCES authors (id)") do |c|
  # Execute SQL only if there is no foreign key
  c.raw_connection.query("SELECT 1 FROM information_schema.key_column_usage WHERE TABLE_SCHEMA = 'bookshelf' AND CONSTRAINT_NAME = 'fk_author' LIMIT 1").each.length.zero?
end

execute(...)にブロックを渡した場合、ブロックがtrueの場合のみSQLを実行します。 上記の例では少しわかりにくいですが、fk_authorがない場合だけforeign keyを貼っています。

業務上で制約を貼ることがないので、どのくらい役に立つのかきちんとわかっていません。

使う機会があるかたがいたら、ご意見なりIssueなりいただけると助かります m(_ _)m