MySQL

DB Error: unknown error を追いかける

More than 5 years have passed since last update.


背景

UNITテストがない本番稼働コードに手を入れなければならないのでUNITテストを実装して走らせると、

DB Error: unknown error (SQL: INSERT INTO hoge (blog_id, no, reg_date) SELECT ?, MAX(no) + 1, NOW() FROM hoge WHERE blog_id = ?)

何てエラーが出てくれます。


問題

本番稼働していて本番でエラーが起きているわけではないのでテスト環境に問題があるのだと思われるが、unknown errorじゃどうすりゃいいのかわからない。


解法

PEAR_Errorオブジェクトにもう少しましな情報はないかなと言うことでMWorks_PearExceptionをthrowする手前で、PEAR_Error::getDebugInfo()を呼んでみたら、

INSERT INTO hoge (blog_id, no, reg_date) SELECT 21742, MAX(no) + 1, NOW() FROM hoge WHERE blog_id = 21742 [nativecode=1137 ** Can't reopen table: 'hoge']

と教えてくれた。

テスト環境ではDBのtableをTEMPORARYにしているんですが、TEMPORARYテーブルは自己結合できなくてエラーになってたんですね。

UNITテストを導入するより前に実装されたコードなので致し方なしなのか・・・


参考リンク

http://dev.mysql.com/doc/refman/5.1/ja/temporary-table-problems.html