ScalikeJDBC を使ったプロジェクトで、本番のデータベースは MySQL だけど、テストは手軽さを優先して H2 を選択して開発を進めています。
データベースのマイグレーションを Flyway で行っており、DDL は MySQL / H2 共有で使っていて、ほとんどのケースで問題なく動いていたのですが、一部 SQL ステートメントエラーになるケースがあったのでメモ。
経緯
マイグレーションファイルを作成していて、テーブルのユニーク制約を削除したかったので以下のような DDL を作成した。
ALTER TABLE articles DROP INDEX articles_title;
MySQL だと動くんですが、H2 では インデックス "ARTICLES_TITLE" が見つかりません
というエラーになります。
H2 の設定で MODE=MySQL
としてもだめでした。
(そもそも構文に互換性を持たせるためのものではなかった。)
原因
どうも 1.4.196
までは ALTER TABLE <table_name> DROP CONSTRAINT <constraint_name>
とする必要があったようです。
→ Issue #570
調べてみると 1.4.197
では上記 Issue が取り込まれ DROP INDEX
でもユニーク制約が削除できるようになっていました🙏
めでたしめでたし。