移行によってユーザーが作成されたことを確認する移行テストを作成しています。ユーザーが存在しない場合、テストはエラーをスローする必要があります。最初は、ゼロ除算エラーを使用して、必要なものを取得できると考えていました。
SET SESSION sql_mode = 'error_for_division_by_zero';
SELECT 1/COUNT(*) FROM mysql.user WHERE user = 'foo';
ただし、存在しなくてもエラーにfoo
はなりません。andステートメントerror_for_division_by_zero
のみに影響INSERT
UPDATE
することが判明しました。
次に、間違った数の引数で関数を呼び出すことができるのではないかと考えました。
SELECT IF(COUNT(*) = 1, 1, date_format(1, 2, 3))
FROM mysql.user WHERE user = 'foo';
foo
しかし、おそらくパーサーが誤ったパラメーター数に気付いたために、存在する場合でもこれは停止します。
例外の発生をエミュレートする関数を書くことはできましたが、それを避けようとしていました。条件付きで実行時例外をスローするように MySQL を強制する方法はありませんか?