SQLite 3でマルチスレッド

SQLite 3ではスレッドセーフなようなのですが、どうもそれがコネクション単位らしいです。

コネクション単位というのはsqlite3_openとかでopenした単位。

何も知らずに他のスレッドから操作しようとすると

library routine called out of sequence

というエラーが出て止まってしまいます。

となるとドキュメントに

If the filename is “:memory:”, then a private, temporary in-memory database is created for the connection.

C/C++ Interface For SQLite Version 3

と書いてあるので、“:memory:”でメモリ内データベースを作ってしまうととたんにマルチスレッドが不可ということになるのかな?

だとするとなぜ今までうまくいっていたのかがまったくわからなす。。。

そうなると内部が思い切り作り直しだなぁ・・・orz。