Rails、ActiveRecord+mysql2、SQL実行時にwarning出たらエラーにする

MySQLのwarningって、

  • 文字列が長すぎたから勝手に短くして保存しておいたよ!
  • 数字が大きすぎたから適当な数字を保存しておいたよ!!
  • 数値として解釈できない文字列があったから0とみなして比較したよ!!!

など、無視すると死ぬ系メッセージであることが多いんだけど無視されがちなので困り者。


insert系のwarningについてはsql_modeの設定を変えることでエラーにできるんだけど、その設定がなされてなかったり、selectがヤバイみたいなケースもあったりしてな(;´Д`)


というわけで、ActiveRecord側でチェックするモンキーパッチを書きました(for mysql2)。

1クエリ実行ごとにshow warning投げてるので本番にはおすすめしない。
Mysql2::Client、リリースバージョンにはwarning_countがないので……。HEAD使うか、次バージョンを待ちましょう。