Reviewed by Brady.
authormjs <mjs@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 23 Aug 2006 06:50:38 +0000 (06:50 +0000)
committermjs <mjs@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 23 Aug 2006 06:50:38 +0000 (06:50 +0000)
        - assorted style cleanup of icon loader code:

        - wrapped all implementation files in namespace WebCore {} instead of "using namespace WebCore;" at top
        - split headers to be one per class, to match impl files
        - made files that are purely local in IconDatabase.cpp static
        - make each impl file include config.h as first header (and no config.h includes in other headers)
        - avoid multiple copies of Vector<unsigned char> for image data

        * WebCore.xcodeproj/project.pbxproj:
        * loader/icon/IconDataCache.cpp:
        * loader/icon/IconDataCache.h: Added.
        (WebCore::):
        (WebCore::IconDataCache::getTimestamp):
        (WebCore::IconDataCache::setTimestamp):
        (WebCore::IconDataCache::getIconURL):
        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::imageDataForIconURL):
        (WebCore::IconDatabase::iconForPageURL):
        (WebCore::pageURLTableIsEmptyQuery):
        (WebCore::imageDataForIconURLQuery):
        (WebCore::timeStampForIconURLQuery):
        (WebCore::iconURLForPageURLQuery):
        (WebCore::forgetPageURLQuery):
        (WebCore::setIconIDForPageURLQuery):
        (WebCore::getIconIDForIconURLQuery):
        (WebCore::addIconForIconURLQuery):
        (WebCore::hasIconForIconURLQuery):
        * loader/icon/IconDatabase.h:
        * loader/icon/SQLDatabase.cpp:
        * loader/icon/SQLDatabase.h:
        * loader/icon/SQLStatement.cpp:
        (WebCore::SQLStatement::getColumnBlobAsVector):
        * loader/icon/SQLStatement.h: Added.
        (WebCore::SQLStatement::isPrepared):
        (WebCore::SQLStatement::prepareAndStep):
        (WebCore::SQLStatement::lastError):
        (WebCore::SQLStatement::lastErrorMsg):
        * loader/icon/SQLTransaction.cpp:
        * loader/icon/SQLTransaction.h: Added.

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

12 files changed:
WebCore/ChangeLog
WebCore/WebCore.xcodeproj/project.pbxproj
WebCore/loader/icon/IconDataCache.cpp
WebCore/loader/icon/IconDataCache.h [new file with mode: 0644]
WebCore/loader/icon/IconDatabase.cpp
WebCore/loader/icon/IconDatabase.h
WebCore/loader/icon/SQLDatabase.cpp
WebCore/loader/icon/SQLDatabase.h
WebCore/loader/icon/SQLStatement.cpp
WebCore/loader/icon/SQLStatement.h [new file with mode: 0644]
WebCore/loader/icon/SQLTransaction.cpp
WebCore/loader/icon/SQLTransaction.h [new file with mode: 0644]

index 6bba1d3c93856e313be4219ae4ece69972363907..b66c4feb1c16c47dfdd3bffa7b4592968a998a70 100644 (file)
@@ -1,3 +1,47 @@
+2006-08-22  Maciej Stachowiak  <mjs@apple.com>
+
+        Reviewed by Brady.
+
+        - assorted style cleanup of icon loader code:
+        
+        - wrapped all implementation files in namespace WebCore {} instead of "using namespace WebCore;" at top
+        - split headers to be one per class, to match impl files
+        - made files that are purely local in IconDatabase.cpp static
+        - make each impl file include config.h as first header (and no config.h includes in other headers)
+        - avoid multiple copies of Vector<unsigned char> for image data
+
+        * WebCore.xcodeproj/project.pbxproj:
+        * loader/icon/IconDataCache.cpp:
+        * loader/icon/IconDataCache.h: Added.
+        (WebCore::):
+        (WebCore::IconDataCache::getTimestamp):
+        (WebCore::IconDataCache::setTimestamp):
+        (WebCore::IconDataCache::getIconURL):
+        * loader/icon/IconDatabase.cpp:
+        (WebCore::IconDatabase::imageDataForIconURL):
+        (WebCore::IconDatabase::iconForPageURL):
+        (WebCore::pageURLTableIsEmptyQuery):
+        (WebCore::imageDataForIconURLQuery):
+        (WebCore::timeStampForIconURLQuery):
+        (WebCore::iconURLForPageURLQuery):
+        (WebCore::forgetPageURLQuery):
+        (WebCore::setIconIDForPageURLQuery):
+        (WebCore::getIconIDForIconURLQuery):
+        (WebCore::addIconForIconURLQuery):
+        (WebCore::hasIconForIconURLQuery):
+        * loader/icon/IconDatabase.h:
+        * loader/icon/SQLDatabase.cpp:
+        * loader/icon/SQLDatabase.h:
+        * loader/icon/SQLStatement.cpp:
+        (WebCore::SQLStatement::getColumnBlobAsVector):
+        * loader/icon/SQLStatement.h: Added.
+        (WebCore::SQLStatement::isPrepared):
+        (WebCore::SQLStatement::prepareAndStep):
+        (WebCore::SQLStatement::lastError):
+        (WebCore::SQLStatement::lastErrorMsg):
+        * loader/icon/SQLTransaction.cpp:
+        * loader/icon/SQLTransaction.h: Added.
+
 2006-08-22  Brady Eidson  <beidson@apple.com>
 
         Reviewed by Maciej
index a66ac1268acdd4c14cded684b45f71aceeb7d6e9..c6054bf1043cf0734b46a2dfc81d27ff7e679fc0 100644 (file)
                6565820009D1508D000E61D7 /* SVGNames.h in Headers */ = {isa = PBXBuildFile; fileRef = 656581E909D1508D000E61D7 /* SVGNames.h */; };
                6565820209D1508D000E61D7 /* XLinkNames.h in Headers */ = {isa = PBXBuildFile; fileRef = 656581EB09D1508D000E61D7 /* XLinkNames.h */; };
                6565821309D15111000E61D7 /* ksvgcssvalues.h in Headers */ = {isa = PBXBuildFile; fileRef = 6565820F09D15111000E61D7 /* ksvgcssvalues.h */; };
+               657429170A9C2D0B00C52C97 /* IconDataCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 657429140A9C2D0B00C52C97 /* IconDataCache.h */; };
+               657429180A9C2D0B00C52C97 /* SQLStatement.h in Headers */ = {isa = PBXBuildFile; fileRef = 657429150A9C2D0B00C52C97 /* SQLStatement.h */; };
+               657429190A9C2D0B00C52C97 /* SQLTransaction.h in Headers */ = {isa = PBXBuildFile; fileRef = 657429160A9C2D0B00C52C97 /* SQLTransaction.h */; };
                65743B52097076F8001E7CEF /* RenderSVGText.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 65743B50097076F8001E7CEF /* RenderSVGText.cpp */; };
                65743B53097076F8001E7CEF /* RenderSVGText.h in Headers */ = {isa = PBXBuildFile; fileRef = 65743B51097076F8001E7CEF /* RenderSVGText.h */; };
                657BD74D09AFDC54005A2056 /* StreamingTextDecoder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 657BD74909AFDC54005A2056 /* StreamingTextDecoder.cpp */; };
                6565820E09D15111000E61D7 /* ksvgcssvalues.gperf */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = ksvgcssvalues.gperf; sourceTree = "<group>"; };
                6565820F09D15111000E61D7 /* ksvgcssvalues.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = ksvgcssvalues.h; sourceTree = "<group>"; };
                6565821009D15111000E61D7 /* ksvgcssvalues.in */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = ksvgcssvalues.in; sourceTree = "<group>"; };
+               657429140A9C2D0B00C52C97 /* IconDataCache.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = IconDataCache.h; sourceTree = "<group>"; };
+               657429150A9C2D0B00C52C97 /* SQLStatement.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = SQLStatement.h; sourceTree = "<group>"; };
+               657429160A9C2D0B00C52C97 /* SQLTransaction.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = SQLTransaction.h; sourceTree = "<group>"; };
                65743B50097076F8001E7CEF /* RenderSVGText.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = RenderSVGText.cpp; sourceTree = "<group>"; };
                65743B51097076F8001E7CEF /* RenderSVGText.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = RenderSVGText.h; sourceTree = "<group>"; };
                657BD74909AFDC54005A2056 /* StreamingTextDecoder.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; lineEnding = 0; path = StreamingTextDecoder.cpp; sourceTree = "<group>"; };
                        isa = PBXGroup;
                        children = (
                                5126E6B90A2E3B12005C29FA /* IconDatabase.cpp */,
+                               657429140A9C2D0B00C52C97 /* IconDataCache.h */,
+                               657429150A9C2D0B00C52C97 /* SQLStatement.h */,
+                               657429160A9C2D0B00C52C97 /* SQLTransaction.h */,
                                5126E6BA0A2E3B12005C29FA /* IconDatabase.h */,
                                5186C0550A9C21470034FE94 /* IconDataCache.cpp */,
                                51D3EA130A3D24D300BADA35 /* SQLDatabase.cpp */,
                                1ACE53F70A8D19470022947D /* JSXMLSerializer.h in Headers */,
                                1A750D5D0A90DEE1000FF215 /* JSTreeWalker.h in Headers */,
                                1A750D8E0A90E521000FF215 /* JSNodeIterator.h in Headers */,
+                               657429170A9C2D0B00C52C97 /* IconDataCache.h in Headers */,
+                               657429180A9C2D0B00C52C97 /* SQLStatement.h in Headers */,
+                               657429190A9C2D0B00C52C97 /* SQLTransaction.h in Headers */,
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
index d1c27cbac458f36eed6bc23127e37cf50cdebe8a..69dcab06c0f57c171378ed0a4f08eacd6dff7429 100644 (file)
  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
  */
-#include "IconDatabase.h"
+
+#include "config.h"
+#include "IconDataCache.h"
 
 #include "Logging.h"
 #include "Image.h"
 #include <limits.h>
+#include "SQLStatement.h"
+
 
-using namespace WebCore;
+namespace WebCore {
 
 IconDataCache::IconDataCache(const String& url)
     : m_iconURL(url)
@@ -117,5 +121,4 @@ ImageDataStatus IconDataCache::imageDataStatus()
     return ImageDataStatusPresent;
 }
 
-    
-
+} // namespace WebCore    
diff --git a/WebCore/loader/icon/IconDataCache.h b/WebCore/loader/icon/IconDataCache.h
new file mode 100644 (file)
index 0000000..7d16905
--- /dev/null
@@ -0,0 +1,79 @@
+/*
+ * Copyright (C) 2006 Apple Computer, Inc.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
+ */
+#ifndef ICONDATACACHE_H
+#define ICONDATACACHE_H
+
+#include "PlatformString.h"
+
+namespace WebCore { 
+
+class Image;
+class IntSize;
+class SQLDatabase;
+
+enum ImageDataStatus {
+    ImageDataStatusPresent, ImageDataStatusMissing, ImageDataStatusUnknown
+};
+    
+class IconDataCache {
+public:
+    IconDataCache(const String& url); 
+    ~IconDataCache();
+    
+    time_t getTimestamp() { return m_stamp; }
+    void setTimestamp(time_t stamp) { m_stamp = stamp; }
+        
+    Image* getImage(const IntSize&);    
+    String getIconURL() { return m_iconURL; }
+
+    void setImageData(unsigned char* data, int size);
+    
+    void writeToDatabase(SQLDatabase& db);
+    
+    ImageDataStatus imageDataStatus();
+    
+private:
+    String m_iconURL;
+    time_t m_stamp;
+    Image* m_image;
+    
+    // This allows us to cache whether or not a SiteIcon has had its data set yet
+    // This helps the IconDatabase know if it has to set the data on a new object or not,
+    // and also to determine if the icon is missing data or if it just hasn't been brought
+    // in from the DB yet
+    bool m_dataSet;
+    
+    // FIXME - Right now WebCore::Image doesn't have a very good API for accessing multiple representations
+    // Even the NSImage way of doing things that we do in WebKit isn't very clean...  once we come up with a 
+    // better way of handling that, we'll likely have a map of size-to-images similar to below
+    // typedef HashMap<IntSize, Image*> SizeImageMap;
+    // SizeImageMap m_images;
+};
+
+
+} //namespace WebCore
+
+#endif
index c1214cf51a31a62615cbb055c3fbdc33c22b8db0..089bd63009df70ba6d951d97d44b338c2969bf7f 100644 (file)
@@ -26,6 +26,7 @@
 #include "config.h"
 #include "IconDatabase.h"
 
+#include "IconDataCache.h"
 #include "Image.h"
 #include "Logging.h"
 #include "PlatformString.h"
@@ -33,6 +34,7 @@
 #include <sys/stat.h>
 #include <sys/types.h>
 #include <time.h>
+#include "SQLStatement.h"
 
 
 // FIXME - One optimization to be made when this is no longer in flux is to make query construction smarter - that is queries that are created from
@@ -63,23 +65,23 @@ const String& IconDatabase::defaultDatabaseFilename()
 }
 
 // Query - Checks for at least 1 entry in the PageURL table
-bool pageURLTableIsEmptyQuery(SQLDatabase&);
+static bool pageURLTableIsEmptyQuery(SQLDatabase&);
 // Query - Returns the time stamp for an Icon entry
-int timeStampForIconURLQuery(SQLDatabase&, const String& iconURL);    
+static int timeStampForIconURLQuery(SQLDatabase&, const String& iconURL);    
 // Query - Returns the IconURL for a PageURL
-String iconURLForPageURLQuery(SQLDatabase&, const String& pageURL);    
+static String iconURLForPageURLQuery(SQLDatabase&, const String& pageURL);    
 // Query - Checks for the existence of the given IconURL in the Icon table
-bool hasIconForIconURLQuery(SQLDatabase& db, const String& iconURL);
+static bool hasIconForIconURLQuery(SQLDatabase& db, const String& iconURL);
 // Query - Deletes a PageURL from the PageURL table
-void forgetPageURLQuery(SQLDatabase& db, const String& pageURL);
+static void forgetPageURLQuery(SQLDatabase& db, const String& pageURL);
 // Query - Sets the Icon.iconID for a PageURL in the PageURL table
-void setIconIDForPageURLQuery(SQLDatabase& db, int64_t, const String&);
+static void setIconIDForPageURLQuery(SQLDatabase& db, int64_t, const String&);
 // Query - Returns the iconID for the given IconURL
-int64_t getIconIDForIconURLQuery(SQLDatabase& db, const String& iconURL);
+static int64_t getIconIDForIconURLQuery(SQLDatabase& db, const String& iconURL);
 // Query - Creates the Icon entry for the given IconURL and returns the resulting iconID
-int64_t addIconForIconURLQuery(SQLDatabase& db, const String& iconURL);
+static int64_t addIconForIconURLQuery(SQLDatabase& db, const String& iconURL);
 // Query - Returns the image data from the given database for the given IconURL
-Vector<unsigned char> imageDataForIconURLQuery(SQLDatabase& db, const String& iconURL);   
+static void imageDataForIconURLQuery(SQLDatabase& db, const String& iconURL, Vector<unsigned char>& result);
 
 IconDatabase* IconDatabase::sharedIconDatabase()
 {
@@ -220,17 +222,17 @@ void IconDatabase::createDatabaseTables(SQLDatabase& db)
     }
 }    
 
-Vector<unsigned char> IconDatabase::imageDataForIconURL(const String& iconURL)
+void IconDatabase::imageDataForIconURL(const String& iconURL, Vector<unsigned char>& result)
 {      
     // If private browsing is enabled, we'll check there first as the most up-to-date data for an icon will be there
     if (m_privateBrowsingEnabled) {    
-        Vector<unsigned char> blob = imageDataForIconURLQuery(m_privateBrowsingDB, iconURL);
-        if (!blob.isEmpty())
-            return blob;
+        imageDataForIconURLQuery(m_privateBrowsingDB, iconURL, result);
+        if (!result.isEmpty())
+            return;
     } 
     
     // It wasn't found there, so lets check the main tables
-    return imageDataForIconURLQuery(m_mainDB, iconURL);
+    imageDataForIconURLQuery(m_mainDB, iconURL, result);
 }
 
 void IconDatabase::setPrivateBrowsingEnabled(bool flag)
@@ -265,7 +267,8 @@ Image* IconDatabase::iconForPageURL(const String& pageURL, const IntSize& size,
     // If it's a new IconDataCache object that doesn't have its imageData set yet,
     // we'll read in that image data now
     if (icon->imageDataStatus() == ImageDataStatusUnknown) {
-        Vector<unsigned char> data = imageDataForIconURL(iconURL);
+        Vector<unsigned char> data;
+        imageDataForIconURL(iconURL, data);
         icon->setImageData(data.data(), data.size());
     }
         
@@ -738,19 +741,19 @@ IconDatabase::~IconDatabase()
 }
 
 // Query helper functions
-bool pageURLTableIsEmptyQuery(SQLDatabase& db)
+static bool pageURLTableIsEmptyQuery(SQLDatabase& db)
 {
     return !(SQLStatement(db, "SELECT iconID FROM PageURL LIMIT 1;").returnsAtLeastOneResult());
 }
 
-Vector<unsigned char> imageDataForIconURLQuery(SQLDatabase& db, const String& iconURL)
+static void imageDataForIconURLQuery(SQLDatabase& db, const String& iconURL, Vector<unsigned char>& result)
 {
     String escapedIconURL = iconURL;
     escapedIconURL.replace('\'', "''");
-    return SQLStatement(db, "SELECT Icon.data FROM Icon WHERE Icon.url = '" + escapedIconURL + "';").getColumnBlobAsVector(0);
+    SQLStatement(db, "SELECT Icon.data FROM Icon WHERE Icon.url = '" + escapedIconURL + "';").getColumnBlobAsVector(0, result);
 }
 
-int timeStampForIconURLQuery(SQLDatabase& db, const String& iconURL)
+static int timeStampForIconURLQuery(SQLDatabase& db, const String& iconURL)
 {
     String escapedIconURL = iconURL;
     escapedIconURL.replace('\'', "''");
@@ -758,14 +761,14 @@ int timeStampForIconURLQuery(SQLDatabase& db, const String& iconURL)
 }
 
 
-String iconURLForPageURLQuery(SQLDatabase& db, const String& pageURL)
+static String iconURLForPageURLQuery(SQLDatabase& db, const String& pageURL)
 {
     String escapedPageURL = pageURL;
     escapedPageURL.replace('\'', "''");
     return SQLStatement(db, "SELECT Icon.url FROM Icon, PageURL WHERE PageURL.url = '" + escapedPageURL + "' AND Icon.iconID = PageURL.iconID").getColumnText16(0);
 }
 
-void forgetPageURLQuery(SQLDatabase& db, const String& pageURL)
+static void forgetPageURLQuery(SQLDatabase& db, const String& pageURL)
 {
     String escapedPageURL = pageURL;
     escapedPageURL.replace('\'', "''");
@@ -773,7 +776,7 @@ void forgetPageURLQuery(SQLDatabase& db, const String& pageURL)
     db.executeCommand("DELETE FROM PageURL WHERE url = '" + escapedPageURL + "';");
 }
 
-void setIconIDForPageURLQuery(SQLDatabase& db, int64_t iconID, const String& pageURL)
+static void setIconIDForPageURLQuery(SQLDatabase& db, int64_t iconID, const String& pageURL)
 {
     String escapedPageURL = pageURL;
     escapedPageURL.replace('\'', "''");
@@ -781,14 +784,14 @@ void setIconIDForPageURLQuery(SQLDatabase& db, int64_t iconID, const String& pag
         LOG_ERROR("Failed to set iconid %lli for PageURL %s", iconID, pageURL.ascii().data());
 }
 
-int64_t getIconIDForIconURLQuery(SQLDatabase& db, const String& iconURL)
+static int64_t getIconIDForIconURLQuery(SQLDatabase& db, const String& iconURL)
 {
     String escapedIconURL = iconURL;
     escapedIconURL.replace('\'', "''");
     return SQLStatement(db, "SELECT Icon.iconID FROM Icon WHERE Icon.url = '" + escapedIconURL + "';").getColumnInt64(0);
 }
 
-int64_t addIconForIconURLQuery(SQLDatabase& db, const String& iconURL)
+static int64_t addIconForIconURLQuery(SQLDatabase& db, const String& iconURL)
 {
     String escapedIconURL = iconURL;
     escapedIconURL.replace('\'', "''");
@@ -797,7 +800,7 @@ int64_t addIconForIconURLQuery(SQLDatabase& db, const String& iconURL)
     return 0;
 }
 
-bool hasIconForIconURLQuery(SQLDatabase& db, const String& iconURL)
+static bool hasIconForIconURLQuery(SQLDatabase& db, const String& iconURL)
 {
     String escapedIconURL = iconURL;
     escapedIconURL.replace('\'', "''");
index aca575c5501704c253b239165a0dff093f507244..bd713f64c6a49d1407bc8efd741aa90ad72aab7a 100644 (file)
@@ -50,46 +50,7 @@ namespace WTF {
 namespace WebCore { 
 
 class Image;
-
-typedef enum {
-    ImageDataStatusPresent, ImageDataStatusMissing, ImageDataStatusUnknown
-} ImageDataStatus;
-    
-class IconDataCache {
-public:
-    IconDataCache(const String& url); 
-    ~IconDataCache();
-    
-    time_t getTimestamp() { return m_stamp; }
-    void setTimestamp(time_t stamp) { m_stamp = stamp; }
-        
-    Image* getImage(const IntSize&);    
-    String getIconURL() { return m_iconURL; }
-
-    void setImageData(unsigned char* data, int size);
-    
-    void writeToDatabase(SQLDatabase& db);
-    
-    ImageDataStatus imageDataStatus();
-    
-private:
-    String m_iconURL;
-    time_t m_stamp;
-    Image* m_image;
-    
-    // This allows us to cache whether or not a SiteIcon has had its data set yet
-    // This helps the IconDatabase know if it has to set the data on a new object or not,
-    // and also to determine if the icon is missing data or if it just hasn't been brought
-    // in from the DB yet
-    bool m_dataSet;
-    
-    // FIXME - Right now WebCore::Image doesn't have a very good API for accessing multiple representations
-    // Even the NSImage way of doing things that we do in WebKit isn't very clean...  once we come up with a 
-    // better way of handling that, we'll likely have a map of size-to-images similar to below
-    // typedef HashMap<IntSize, Image*> SizeImageMap;
-    // SizeImageMap m_images;
-};
-
+class IconDataCache;
 
 class IconDatabase
 {
@@ -178,7 +139,7 @@ private:
     void createDatabaseTables(SQLDatabase&);
     
     // Returns the image data for the given IconURL, checking both databases if necessary
-    Vector<unsigned char> imageDataForIconURL(const String&);
+    void imageDataForIconURL(const String& iconURL, Vector<unsigned char>&);
     
     // Retains an iconURL, bringing it back from the brink if it was pending deletion
     void retainIconURL(const String& iconURL);
index 8513f7c44746cd28923defef3cb82420ca4e6357..3b368167a26012fcc65334b8147a3d84d41ef124 100644 (file)
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
  */
 
+#include "config.h"
 #include "SQLDatabase.h"
+
+#include "SQLStatement.h"
+
 #include "Logging.h"
 
-using namespace WebCore;
+namespace WebCore {
 
 SQLDatabase::SQLDatabase()
     : m_db(0)
@@ -122,5 +126,6 @@ int64_t SQLDatabase::lastInsertRowID()
     return sqlite3_last_insert_rowid(m_db);
 }
 
+} // namespace WebCore
 
 
index 6f8c3b39fceb85ce8ae61babae7354792e1120cf..ee516c8616ddb9703518c6fe725b53940925fb7c 100644 (file)
@@ -26,8 +26,6 @@
 #ifndef SQLDatabase_H
 #define SQLDatabase_H
 
-#include "config.h"
-
 #include "PlatformString.h"
 #include <sqlite3.h>
 #include <wtf/Noncopyable.h>
@@ -80,80 +78,6 @@ private:
     
 }; // class SQLDatabase
 
-class SQLTransaction : public Noncopyable
-{
-public:
-    SQLTransaction(SQLDatabase& db, bool start = false);
-    ~SQLTransaction();
-    
-    void begin();
-    void commit();
-    void rollback();
-    
-private:
-    SQLDatabase& m_db;
-    bool m_began;
-
-};
-
-class SQLStatement : public Noncopyable
-{
-public:
-    SQLStatement(SQLDatabase& db, const String&);
-    ~SQLStatement();
-    
-    int prepare();
-    bool isPrepared() { return m_statement; }
-    int bindBlob(int index, const void* blob, int size, bool copy = true);
-    int bindText(int index, const char* text, bool copy = true);
-    int bindInt64(int index, int64_t integer);
-
-    int step();
-    int finalize();
-    int reset();
-    
-    int prepareAndStep() { prepare();  return step(); }
-    
-    // prepares, steps, and finalizes the query.
-    // returns true if all 3 steps succeed with step() returning SQLITE_DONE
-    // returns false otherwise  
-    bool executeCommand();
-    
-    // prepares, steps, and finalizes.  
-    // returns true is step() returns SQLITE_ROW
-    // returns false otherwise
-    bool returnsAtLeastOneResult();
-    
-    // Returns -1 on last-step failing.  Otherwise, returns number of rows
-    // returned in the last step()
-    int columnCount();
-    
-    String getColumnName(int col);
-    String getColumnName16(int col);
-    String getColumnText(int col);
-    String getColumnText16(int col);
-    double getColumnDouble(int col);
-    int getColumnInt(int col);
-    int64_t getColumnInt64(int col);
-    const void* getColumnBlob(int col, int& size);
-    Vector<unsigned char> getColumnBlobAsVector(int col);
-
-    bool returnTextResults(int col, Vector<String>& v);
-    bool returnTextResults16(int col, Vector<String>& v);
-    bool returnIntResults(int col, Vector<int>& v);
-    bool returnInt64Results(int col, Vector<int64_t>& v);
-    bool returnDoubleResults(int col, Vector<double>& v);
-
-    int lastError() { return m_database.lastError(); }
-    const char* lastErrorMsg() { return m_database.lastErrorMsg(); }
-    
-private:
-    SQLDatabase& m_database;
-    String      m_query;
-
-    sqlite3_stmt* m_statement;
-};
-
 } // namespace WebCore
 
 
index 333719df1b547c48f321b646bbd08e252b2e981e..39d1b5f55f90ad3e8099f913ab5aebf2b4e9c32b 100644 (file)
@@ -24,7 +24,7 @@
  */
 
 #include "config.h"
-#include "SQLDatabase.h"
+#include "SQLStatement.h"
 
 #include "Logging.h"
 #include <wtf/Assertions.h>
@@ -216,23 +216,29 @@ int64_t SQLStatement::getColumnInt64(int col)
     return sqlite3_column_int64(m_statement, col);
 }
     
-Vector<unsigned char> SQLStatement::getColumnBlobAsVector(int col)
+void SQLStatement::getColumnBlobAsVector(int col, Vector<unsigned char>& result)
 {
-    if (!m_statement)
-        if (prepareAndStep() != SQLITE_ROW)
-            return Vector<unsigned char>();
-    if (columnCount() <= col)
-        return Vector<unsigned char>();
+    if (!m_statement && prepareAndStep() != SQLITE_ROW) {
+        result.clear();
+        return;
+    }
+
+    if (columnCount() <= col) {
+        result.clear();
+        return;
+    }
+
  
     const void* blob = sqlite3_column_blob(m_statement, col);
-    if (!blob) 
-        return Vector<unsigned char>();
+    if (!blob) {
+        result.clear();
+        return;
+    }
         
     int size = sqlite3_column_bytes(m_statement, col);
-    Vector<unsigned char> result((size_t)size);
+    result.resize((size_t)size);
     for (int i = 0; i < size; ++i)
         result[i] = ((const unsigned char*)blob)[i];
-    return result;
 }
 
 const void* SQLStatement::getColumnBlob(int col, int& size)
diff --git a/WebCore/loader/icon/SQLStatement.h b/WebCore/loader/icon/SQLStatement.h
new file mode 100644 (file)
index 0000000..012dbec
--- /dev/null
@@ -0,0 +1,98 @@
+/*
+ * Copyright (C) 2006 Apple Computer, Inc.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
+ */
+
+#ifndef SQLStatement_H
+#define SQLStatement_H
+
+#include "PlatformString.h"
+#include "SQLDatabase.h"
+#include <sqlite3.h>
+#include <wtf/Noncopyable.h>
+
+namespace WebCore {
+
+class SQLDatabase;
+
+class SQLStatement : public Noncopyable
+{
+public:
+    SQLStatement(SQLDatabase& db, const String&);
+    ~SQLStatement();
+    
+    int prepare();
+    bool isPrepared() { return m_statement; }
+    int bindBlob(int index, const void* blob, int size, bool copy = true);
+    int bindText(int index, const char* text, bool copy = true);
+    int bindInt64(int index, int64_t integer);
+
+    int step();
+    int finalize();
+    int reset();
+    
+    int prepareAndStep() { prepare();  return step(); }
+    
+    // prepares, steps, and finalizes the query.
+    // returns true if all 3 steps succeed with step() returning SQLITE_DONE
+    // returns false otherwise  
+    bool executeCommand();
+    
+    // prepares, steps, and finalizes.  
+    // returns true is step() returns SQLITE_ROW
+    // returns false otherwise
+    bool returnsAtLeastOneResult();
+    
+    // Returns -1 on last-step failing.  Otherwise, returns number of rows
+    // returned in the last step()
+    int columnCount();
+    
+    String getColumnName(int col);
+    String getColumnName16(int col);
+    String getColumnText(int col);
+    String getColumnText16(int col);
+    double getColumnDouble(int col);
+    int getColumnInt(int col);
+    int64_t getColumnInt64(int col);
+    const void* getColumnBlob(int col, int& size);
+    void getColumnBlobAsVector(int col, Vector<unsigned char>&);
+
+    bool returnTextResults(int col, Vector<String>&);
+    bool returnTextResults16(int col, Vector<String>&);
+    bool returnIntResults(int col, Vector<int>&);
+    bool returnInt64Results(int col, Vector<int64_t>&);
+    bool returnDoubleResults(int col, Vector<double>&);
+
+    int lastError() { return m_database.lastError(); }
+    const char* lastErrorMsg() { return m_database.lastErrorMsg(); }
+    
+private:
+    SQLDatabase& m_database;
+    String      m_query;
+
+    sqlite3_stmt* m_statement;
+};
+
+} // namespace WebCore
+
+#endif SQLStatement_H
index d57df835306e193fa2631e31111d73e282435cb9..478dccef1e726e41552f8ca5932e2540b223cebe 100644 (file)
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
  */
 
-#include "SQLDatabase.h"
+#include "config.h"
+#include "SQLTransaction.h"
 
-using namespace WebCore;
+#include "SQLDatabase.h"
 
+namespace WebCore {
 
 SQLTransaction::SQLTransaction(SQLDatabase& db, bool start)
     : m_db(db)
@@ -62,6 +64,4 @@ void SQLTransaction::rollback()
         m_db.executeCommand("ROLLBACK;");
 }
     
-
-
-
+} // namespace WebCore
diff --git a/WebCore/loader/icon/SQLTransaction.h b/WebCore/loader/icon/SQLTransaction.h
new file mode 100644 (file)
index 0000000..5c237a1
--- /dev/null
@@ -0,0 +1,54 @@
+/*
+ * Copyright (C) 2006 Apple Computer, Inc.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
+ */
+
+#ifndef SQLTransaction_H
+#define SQLTransaction_H
+
+#include <wtf/Noncopyable.h>
+
+namespace WebCore {
+
+class SQLDatabase;
+
+class SQLTransaction : public Noncopyable
+{
+public:
+    SQLTransaction(SQLDatabase& db, bool start = false);
+    ~SQLTransaction();
+    
+    void begin();
+    void commit();
+    void rollback();
+    
+private:
+    SQLDatabase& m_db;
+    bool m_began;
+
+};
+
+} // namespace WebCore
+
+#endif // SQLTransation_H
+