storesafe/cordova-sqlite-storage-help

WAL pitfalls

brodybits opened this issue · 8 comments

As I said in storesafe/cordova-sqlite-storage#643 (comment):

In general I do not really favor WAL (write ahead logging ref: https://www.sqlite.org/wal.html) since it would require the overhead of checkpointing at certain intervals. I also just discovered an interesting issue at http://stackoverflow.com/questions/39149065/sqlite-write-ahead-logging-wal-journal-mode-with-attached-database.

@brodybits What is the current status on WAL? Is it still disabled by default for the cordova-sqlite-** plugins, or is it necessary to disable it manually? I have a weird issue on iOS with https://github.com/litehelpers/Cordova-sqlite-evcore-extbuild-free where the database gets emptied from time to time, but unfortunately I can't reproduce it yet, so I'm trying to ensure that I am not running into any pitfall I'm not aware of.
https://stackoverflow.com/a/18870738/5062057
https://stackoverflow.com/q/17487306/5062057

What is the current status on WAL?

WAL is not be enabled on any platforms. Test at litehelpers / Cordova-sqlite-storage / spec / www / spec / sqlite-version-test.js#L126-L144 shows PRAGMA journal_mode returns delete or persist as described at: https://sqlite.org/pragma.html#pragma_journal_mode

It should be no problem to change using a PRAGMA statement, though I have not tested this.

https://stackoverflow.com/a/18870738/5062057
https://stackoverflow.com/q/17487306/5062057

Links expanded to:

This plugin does not deal with iOS CoreData.

For the next major release (storesafe/cordova-sqlite-storage#687) I would like to update the plugin to explicitly set PRAGMA journal_mode to persist in all cases in order to minimize the number of possible deviations between the different platform implementations.

I was thinking that WAL may be more robust against possible database corruption and found a couple threads that confirm WAL may be more reliable, at least in certain cases:

Adding the following Q&A that I initiated on the SQLite forum for reference (with a single response which I think has no new information):

I just found a couple more resources today:

includes a description of how to use a PRAGMA for manual checkpointing - definitely looks like a drawback to me