Enhance SQL journal_mode setting code to be less likely to log an error.
authorbeidson@apple.com <beidson@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 8 Nov 2013 06:08:41 +0000 (06:08 +0000)
committerbeidson@apple.com <beidson@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 8 Nov 2013 06:08:41 +0000 (06:08 +0000)
<rdar://problem/15418577> and https://bugs.webkit.org/show_bug.cgi?id=124018

Reviewed by Anders Carlsson.

Even though the docs says SQLITE_ROW will always be returned, apparently SQLITE_OK is sometimes returned.
Change the code to handle that.

* platform/sql/SQLiteDatabase.cpp:
(WebCore::SQLiteDatabase::open): Save the statement result value, and accept SQLITE_OK as a non-error condition.

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

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

index 3eb6330..d37ca4d 100644 (file)
@@ -1,5 +1,18 @@
 2013-11-07  Brady Eidson  <beidson@apple.com>
 
+        Enhance SQL journal_mode setting code to be less likely to log an error.
+        <rdar://problem/15418577> and https://bugs.webkit.org/show_bug.cgi?id=124018
+
+        Reviewed by Anders Carlsson.
+
+        Even though the docs says SQLITE_ROW will always be returned, apparently SQLITE_OK is sometimes returned.
+        Change the code to handle that.
+
+        * platform/sql/SQLiteDatabase.cpp:
+        (WebCore::SQLiteDatabase::open): Save the statement result value, and accept SQLITE_OK as a non-error condition.
+
+2013-11-07  Brady Eidson  <beidson@apple.com>
+
         Update an out-dated ASSERT in IconDatabase code.
         <rdar://problem/15171118> and https://bugs.webkit.org/show_bug.cgi?id=124030.
 
index 1714818..a2e57bc 100644 (file)
@@ -99,13 +99,16 @@ bool SQLiteDatabase::open(const String& filename, bool forWebSQLDatabase)
         LOG_ERROR("SQLite database could not set temp_store to memory");
 
     SQLiteStatement walStatement(*this, ASCIILiteral("PRAGMA journal_mode=WAL;"));
-    if (walStatement.step() != SQLITE_ROW)
+    int result = walStatement.step();
+    if (result != SQLITE_OK && result != 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());
+    if (result == SQLITE_ROW) {
+        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();