Reviewed by Anders and Tim Hatcher
authorbeidson <beidson@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sat, 8 Jul 2006 00:27:22 +0000 (00:27 +0000)
committerbeidson <beidson@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sat, 8 Jul 2006 00:27:22 +0000 (00:27 +0000)
        Added an accessor to a SQLite config option to change its disk-syncing behavior.
        Used this accessor to significantly speed up writes to the Icon DB.

        * icon/IconDatabase.cpp:
        (WebCore::IconDatabase::open):  Disable full syncing to the SQLite db to speed up writes to the icondb

        * icon/SQLDatabase.cpp:
        (SQLDatabase::setFullsync):
        (SQLDatabase::setSynchronous):
        * icon/SQLDatabase.h:
        (WebCore::SQLDatabase::):  Added accessor to the SQLite config pragma "synchronous"

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

WebCore/ChangeLog
WebCore/icon/IconDatabase.cpp
WebCore/icon/SQLDatabase.cpp
WebCore/icon/SQLDatabase.h

index 3dbb360131a6f7ec56c2366a351730a4be01866f..6ffe5eeb610d1d53cd2af09fa70c27fd225600d3 100644 (file)
@@ -1,3 +1,19 @@
+2006-07-07  Brady Eidson  <beidson@apple.com>
+
+        Reviewed by Anders and Tim Hatcher
+
+        Added an accessor to a SQLite config option to change its disk-syncing behavior.
+        Used this accessor to significantly speed up writes to the Icon DB.
+
+        * icon/IconDatabase.cpp:
+        (WebCore::IconDatabase::open):  Disable full syncing to the SQLite db to speed up writes to the icondb
+
+        * icon/SQLDatabase.cpp:
+        (SQLDatabase::setFullsync):
+        (SQLDatabase::setSynchronous):
+        * icon/SQLDatabase.h:
+        (WebCore::SQLDatabase::):  Added accessor to the SQLite config pragma "synchronous"
+
 2006-07-07  Darin Adler  <darin@apple.com>
 
         Reviewed by Maciej.
index d3b638032f908ba06c1f58f3944cb8e127b936bc..c3ecca748457050b8dcf277f7fee639e7072b8ee 100644 (file)
@@ -72,8 +72,11 @@ bool IconDatabase::open(const String& databasePath)
         clearDatabase();
         recreateDatabase();
     }
-    
+
+    // These are actually two different SQLite config options - not my fault they are named confusingly  ;)
+    m_db.setSynchronous(SQLDatabase::SyncOff);    
     m_db.setFullsync(false);
+    
     return isOpen();
 }
 
index c1aa40feee1f3b846c1b27b957137799ea902750..8513f7c44746cd28923defef3cb82420ca4e6357 100644 (file)
@@ -67,9 +67,14 @@ void SQLDatabase::close()
 void SQLDatabase::setFullsync(bool fsync) 
 {
     if (fsync) 
-        SQLStatement(*this,"PRAGMA fullfsync = 1;").executeCommand();
+        executeCommand("PRAGMA fullfsync = 1;");
     else
-        SQLStatement(*this,"PRAGMA fullfsync = 0;").executeCommand();
+        executeCommand("PRAGMA fullfsync = 0;");
+}
+
+void SQLDatabase::setSynchronous(SynchronousPragma sync)
+{
+    executeCommand(String::sprintf("PRAGMA synchronous = %i", sync));
 }
 
 void SQLDatabase::setBusyTimeout(int ms)
index 3c38866250aed934dd6b41e38bf6f9d2c7cccd8f..cea0fb54b2fc059206bd297b87b1179e87c431a0 100644 (file)
@@ -61,6 +61,15 @@ public:
     // TODO - add pragma and sqlite_master accessors here
     void setFullsync(bool);
     
+    // The SQLite SYNCHRONOUS pragma can be either FULL, NORMAL, or OFF
+    // FULL - Any writing calls to the DB block until the data is actually on the disk surface
+    // NORMAL - SQLite pauses at some critical moments when writing, but much less than FULL
+    // OFF - Calls return immediately after the data has been passed to disk
+    enum SynchronousPragma {
+        SyncOff = 0, SyncNormal = 1, SyncFull = 2
+    };
+    void setSynchronous(SynchronousPragma);
+    
     int lastError() { return m_db ? sqlite3_errcode(m_db) : SQLITE_ERROR; }
     const char* lastErrorMsg() { return sqlite3_errmsg(m_db); }