Use SQLite journal mode WAL (WriteAheadLogging)
authorbeidson@apple.com <beidson@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 7 Nov 2013 20:49:56 +0000 (20:49 +0000)
committerbeidson@apple.com <beidson@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 7 Nov 2013 20:49:56 +0000 (20:49 +0000)
https://bugs.webkit.org/show_bug.cgi?id=124009

Reviewed by Anders Carlsson.

WriteAheadLogging journalling is better than the traditional rollback model.

* platform/sql/SQLiteDatabase.cpp:
(WebCore::SQLiteDatabase::open): Use a PRAGMA to set journal_mode to WAL.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@158865 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/WebCore/ChangeLog
Source/WebCore/platform/sql/SQLiteDatabase.cpp

index ebb22fa..9af3612 100644 (file)
@@ -1,3 +1,15 @@
+2013-11-07  Brady Eidson  <beidson@apple.com>
+
+        Use SQLite journal mode WAL (WriteAheadLogging)
+        https://bugs.webkit.org/show_bug.cgi?id=124009
+
+        Reviewed by Anders Carlsson.
+
+        WriteAheadLogging journalling is better than the traditional rollback model.
+
+        * platform/sql/SQLiteDatabase.cpp:
+        (WebCore::SQLiteDatabase::open): Use a PRAGMA to set journal_mode to WAL.
+
 2013-11-07  Mark Lam  <mark.lam@apple.com>
 
         Cosmetic: rename xxxId to xxxID for ScriptId, SourceId, and BreakpointId.
index 2418fc1..1714818 100644 (file)
@@ -98,6 +98,16 @@ bool SQLiteDatabase::open(const String& filename, bool forWebSQLDatabase)
     if (!SQLiteStatement(*this, ASCIILiteral("PRAGMA temp_store = MEMORY;")).executeCommand())
         LOG_ERROR("SQLite database could not set temp_store to memory");
 
+    SQLiteStatement walStatement(*this, ASCIILiteral("PRAGMA journal_mode=WAL;"));
+    if (walStatement.step() != SQLITE_ROW)
+        LOG_ERROR("SQLite database failed to set journal_mode to WAL, error: %s",  lastErrorMsg());
+
+#ifndef NDEBUG
+    String mode = walStatement.getColumnText(0);
+    if (!equalIgnoringCase(mode, "wal"))
+        LOG_ERROR("journal_mode of database should be 'wal', but is '%s'", mode.utf8().data());
+#endif
+
     return isOpen();
 }