DBD::SQLite 1.13のWindows対応
1.13はbuggyだというもっぱらの評判だったこともあってうちではいまだに1.12を使い続けているんですが、必要に迫られて(ChangeLogに情報が載っていなかったので)いまさら1.12と1.13のdiffを読んでみた。
いろいろ細かいところが変わっていますが、なにより
+** Note that windows does not allow a file to be deleted if some other +** process has it open. Sometimes a virus scanner or indexing program +** will open a journal file shortly after it is created in order to do +** whatever it is it does. While this other process is holding the +** file open, we will be unable to delete it. To work around this +** problem, we delay 100 milliseconds and try to delete again. Up +** to MX_DELETION_ATTEMPTs deletion attempts are run before giving +** up and returning an error.
とか、
+** Sometimes if we have just deleted a prior journal file, windows +** will fail to open a new one because there is a "pending delete". +** To work around this bug, we pause for 100 milliseconds and attempt +** a second open after the first one fails. The whole operation only +** fails if both open attempts are unsuccessful.
あるいは
+** It is reported that an attempt to close a handle might sometimes +** fail. This is a very unreasonable result, but windows is notorious +** for being unreasonable so I do not doubt that it might happen. If +** the close fails, we pause for 100 milliseconds and try again. As +** many as MX_CLOSE_ATTEMPT attempts to close the handle are made before +** giving up and returning an error.
のように、Win環境でSQLiteに大きく依存しているモジュールのテストが(アンチウイルスやTortoiseSVNなどの影響で)ランダムでこける問題の対処がしてあったというのははじめて知ったような気がする(忘れていただけかもしれない)。問題そのものは以前からわかっていたので、これまでデータベース系のモジュールをインストールするときはいちいちTortoiseSVNのキャッシュを殺したりしていたんですが、ppmも含めてバージョンアップするかどうか、ちょっと悩んでいるところ。