Ectoで生成されるidカラムの名前を変える
Phoenix v0.14.0, mariaex v0.3.2.
発端としては、デフォルトでつくられるid
の名前をevent_id
にしたかった。というか、事情によりしなければならなかった。table/2
にprimary_key: false
を与えるとid
が作られないというのはすぐにわかったのだけれど、auto_incrementをどうやって設定するか、ドキュメントやソースを読んでも見当たらなかったのです。
いろいろ考えていたところ、かなり邪道な方法を思いついたので書いときます。
ここでvalidate_type!
が呼ばれているのですが、どうやらString
とかのモジュール名で指定しちゃってるばあいに、:string
みたいにアトムで書いてね〜っていうエラーを出しているだけなので、例えば:hogehoge
とか、:'varchar(255)'
も通るんですね。通ったらどうやらそのままSQLに埋め込まれるっぽいんですね。そこで調子に乗って、:'int(11) auto_increment'
とか書くじゃないですか。
create table(:service_event, primary_key: false, engine: "InnoDB") do add :event_id, :'int(11) auto_increment', null: false, primary_key: true add :title, :'varchar(255)', null: false # 略 end
mysql> desc app_dev.events; +----------+--------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +----------+--------------+------+-----+---------+----------------+ | event_id | int(11) | NO | PRI | NULL | auto_increment | | title | varchar(255) | NO | | 0 | | # 略
できちゃってる〜。インジェクションまがい〜。