I can see the .wal and .shm files getting created and don't see a reason
why SQLite would suddenly have issues accessing those files.

The error does not come up immediately, creating tables works fine, making
inserts works fine, it's only when I start making updates (from multiple
threads) where this error starts showing up.

// Sascha


On Fri, Oct 4, 2013 at 12:53 PM, Dan Kennedy <[email protected]> wrote:

> On 10/05/2013 01:55 AM, Sascha Sertel wrote:
>
>> Hello everybody,
>>
>> I'm hoping someone might have some insights on a particular issue I've
>> been
>> running into. Here some details:
>>
>> I'm working on a multi-platform app that uses a cross-platform library
>> with
>> SQLite 3.7.16.1 built into it (i.e. not using the built-in SQLite version
>> in Android or other platforms). We make (re)use of prepared statements for
>> INSERT and UPDATE on the database, and we use FULLMUTEX serialized
>> threading mode. We use explicit transactions for some bulk INSERT
>> operations, but most other calls use implicit transactions.
>>
>> Everything worked fine until I switched journal_mode from MEMORY to WAL.
>> Now when I run the app I started seeing SQLite errors pop up, the first
>> error is
>>
>>
>> sqlite3_step failed: unable to open database file (error code: 14)
>>
>
> That error usually indicates that SQLite failed to open
> or create some require file. Is there some reason the app
> might fail to open or create a *-wal or *-shm file in the
> same directory as the database file?
>
> Dan.
>
>
>
>
>
>>
>> and after that I get a lot of follow-up errors from my prepared statements
>> such as
>>
>>
>> sqlite3_bind_text failed: library routine called out of sequence
>> (error code: 21)
>>
>>
>> This does not happen on iOS or other platforms using the same
>> cross-platform library, leading me to believe this might be an Android
>> specific issue, maybe due to VFS differences or something like that.
>>
>> There are multiple threads in the same process accessing the database, all
>> using the same shared connection. My understanding is that due to the
>> FULLMUTEX mode SQLite is serializing all these calls. Now WAL basically
>> reenables concurrent reads and writes, my suspicion is that the error is
>> caused by trying to do concurrent writes even though it shouldn't.
>> However,
>> in that case I would expect to see a database locked error instead of this
>> weird unable to open database file issue.
>>
>> Does any of this sound familiar to anyone? I wasn't able to fix it by any
>> means other than setting journal_mode back, actually all other journaling
>> modes work fine except WAL. I looked around and couldn't really find much
>> on people having issues with WAL on Android, so it might be something
>> about
>> the combination of WAL with prepared statements and FULLMUTEX?
>>
>> Any help is appreciated!
>>
>> // Sascha
>> ______________________________**_________________
>> sqlite-users mailing list
>> [email protected]
>> http://sqlite.org:8080/cgi-**bin/mailman/listinfo/sqlite-**users<http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users>
>>
>
> ______________________________**_________________
> sqlite-users mailing list
> [email protected]
> http://sqlite.org:8080/cgi-**bin/mailman/listinfo/sqlite-**users<http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users>
>
_______________________________________________
sqlite-users mailing list
[email protected]
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to