Title: [187998] trunk/Source/WebCore
Revision
187998
Author
ander...@apple.com
Date
2015-08-05 16:17:18 -0700 (Wed, 05 Aug 2015)

Log Message

Move more functions from DatabaseBackendBase to Database
https://bugs.webkit.org/show_bug.cgi?id=147703

Reviewed by Tim Horton.

* Modules/webdatabase/Database.cpp:
(WebCore::fullyQualifiedInfoTableName):
(WebCore::setTextValueInDatabase):
(WebCore::retrieveTextResultFromDatabase):
(WebCore::Database::getVersionFromDatabase):
(WebCore::Database::setVersionInDatabase):
(WebCore::Database::performGetTableNames):
* Modules/webdatabase/Database.h:
* Modules/webdatabase/DatabaseBackendBase.cpp:
(WebCore::DatabaseBackendBase::performOpenAndVerify):
(WebCore::DatabaseBackendBase::getActualVersionForTransaction):
(WebCore::DatabaseBackendBase::databaseInfoTableName): Deleted.
(WebCore::fullyQualifiedInfoTableName): Deleted.
(WebCore::retrieveTextResultFromDatabase): Deleted.
(WebCore::setTextValueInDatabase): Deleted.
(WebCore::DatabaseBackendBase::getVersionFromDatabase): Deleted.
(WebCore::DatabaseBackendBase::setVersionInDatabase): Deleted.
* Modules/webdatabase/DatabaseBackendBase.h:

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (187997 => 187998)


--- trunk/Source/WebCore/ChangeLog	2015-08-05 23:02:25 UTC (rev 187997)
+++ trunk/Source/WebCore/ChangeLog	2015-08-05 23:17:18 UTC (rev 187998)
@@ -1,3 +1,29 @@
+2015-08-05  Anders Carlsson  <ander...@apple.com>
+
+        Move more functions from DatabaseBackendBase to Database
+        https://bugs.webkit.org/show_bug.cgi?id=147703
+
+        Reviewed by Tim Horton.
+
+        * Modules/webdatabase/Database.cpp:
+        (WebCore::fullyQualifiedInfoTableName):
+        (WebCore::setTextValueInDatabase):
+        (WebCore::retrieveTextResultFromDatabase):
+        (WebCore::Database::getVersionFromDatabase):
+        (WebCore::Database::setVersionInDatabase):
+        (WebCore::Database::performGetTableNames):
+        * Modules/webdatabase/Database.h:
+        * Modules/webdatabase/DatabaseBackendBase.cpp:
+        (WebCore::DatabaseBackendBase::performOpenAndVerify):
+        (WebCore::DatabaseBackendBase::getActualVersionForTransaction):
+        (WebCore::DatabaseBackendBase::databaseInfoTableName): Deleted.
+        (WebCore::fullyQualifiedInfoTableName): Deleted.
+        (WebCore::retrieveTextResultFromDatabase): Deleted.
+        (WebCore::setTextValueInDatabase): Deleted.
+        (WebCore::DatabaseBackendBase::getVersionFromDatabase): Deleted.
+        (WebCore::DatabaseBackendBase::setVersionInDatabase): Deleted.
+        * Modules/webdatabase/DatabaseBackendBase.h:
+
 2015-08-05  Alex Christensen  <achristen...@webkit.org>
 
         Build DumpRenderTree with CMake.

Modified: trunk/Source/WebCore/Modules/webdatabase/Database.cpp (187997 => 187998)


--- trunk/Source/WebCore/Modules/webdatabase/Database.cpp	2015-08-05 23:02:25 UTC (rev 187997)
+++ trunk/Source/WebCore/Modules/webdatabase/Database.cpp	2015-08-05 23:17:18 UTC (rev 187998)
@@ -58,11 +58,73 @@
 
 namespace WebCore {
 
+static const char versionKey[] = "WebKitDatabaseVersionKey";
+static const char unqualifiedInfoTableName[] = "__WebKitDatabaseInfoTable__";
+
+static const char* fullyQualifiedInfoTableName()
+{
+    static const char qualifier[] = "main.";
+    static char qualifiedName[sizeof(qualifier) + sizeof(unqualifiedInfoTableName) - 1];
+
+    static std::once_flag onceFlag;
+    std::call_once(onceFlag, [] {
+        strcpy(qualifiedName, qualifier);
+        strcpy(qualifiedName + sizeof(qualifier) - 1, unqualifiedInfoTableName);
+    });
+
+    return qualifiedName;
+}
+
 static String formatErrorMessage(const char* message, int sqliteErrorCode, const char* sqliteErrorMessage)
 {
     return String::format("%s (%d %s)", message, sqliteErrorCode, sqliteErrorMessage);
 }
 
+static bool setTextValueInDatabase(SQLiteDatabase& db, const String& query, const String& value)
+{
+    SQLiteStatement statement(db, query);
+    int result = statement.prepare();
+
+    if (result != SQLITE_OK) {
+        LOG_ERROR("Failed to prepare statement to set value in database (%s)", query.ascii().data());
+        return false;
+    }
+
+    statement.bindText(1, value);
+
+    result = statement.step();
+    if (result != SQLITE_DONE) {
+        LOG_ERROR("Failed to step statement to set value in database (%s)", query.ascii().data());
+        return false;
+    }
+
+    return true;
+}
+
+static bool retrieveTextResultFromDatabase(SQLiteDatabase& db, const String& query, String& resultString)
+{
+    SQLiteStatement statement(db, query);
+    int result = statement.prepare();
+
+    if (result != SQLITE_OK) {
+        LOG_ERROR("Error (%i) preparing statement to read text result from database (%s)", result, query.ascii().data());
+        return false;
+    }
+
+    result = statement.step();
+    if (result == SQLITE_ROW) {
+        resultString = statement.getColumnText(0);
+        return true;
+    }
+    if (result == SQLITE_DONE) {
+        resultString = String();
+        return true;
+    }
+
+    LOG_ERROR("Error (%i) reading text result from database (%s)", result, query.ascii().data());
+    return false;
+}
+
 Database::Database(PassRefPtr<DatabaseContext> databaseContext, const String& name, const String& expectedVersion, const String& displayName, unsigned long estimatedSize)
     : DatabaseBackendBase(databaseContext.get(), name, expectedVersion, displayName, estimatedSize)
     , m_transactionInProgress(false)
@@ -151,6 +213,44 @@
     return false;
 }
 
+bool Database::getVersionFromDatabase(String& version, bool shouldCacheVersion)
+{
+    String query(String("SELECT value FROM ") + fullyQualifiedInfoTableName() +  " WHERE key = '" + versionKey + "';");
+
+    m_databaseAuthorizer->disable();
+
+    bool result = retrieveTextResultFromDatabase(m_sqliteDatabase, query, version);
+    if (result) {
+        if (shouldCacheVersion)
+            setCachedVersion(version);
+    } else
+        LOG_ERROR("Failed to retrieve version from database %s", databaseDebugName().ascii().data());
+
+    m_databaseAuthorizer->enable();
+
+    return result;
+}
+
+bool Database::setVersionInDatabase(const String& version, bool shouldCacheVersion)
+{
+    // The INSERT will replace an existing entry for the database with the new version number, due to the UNIQUE ON CONFLICT REPLACE
+    // clause in the CREATE statement (see Database::performOpenAndVerify()).
+    String query(String("INSERT INTO ") + fullyQualifiedInfoTableName() +  " (key, value) VALUES ('" + versionKey + "', ?);");
+
+    m_databaseAuthorizer->disable();
+
+    bool result = setTextValueInDatabase(m_sqliteDatabase, query, version);
+    if (result) {
+        if (shouldCacheVersion)
+            setCachedVersion(version);
+    } else
+        LOG_ERROR("Failed to set version %s in database (%s)", version.ascii().data(), query.ascii().data());
+
+    m_databaseAuthorizer->enable();
+
+    return result;
+}
+
 void Database::scheduleTransaction()
 {
     ASSERT(!m_transactionInProgressMutex.tryLock()); // Locked by caller.
@@ -347,7 +447,7 @@
     int result;
     while ((result = statement.step()) == SQLITE_ROW) {
         String name = statement.getColumnText(0);
-        if (name != databaseInfoTableName())
+        if (name != unqualifiedInfoTableName)
             tableNames.append(name);
     }
 

Modified: trunk/Source/WebCore/Modules/webdatabase/Database.h (187997 => 187998)


--- trunk/Source/WebCore/Modules/webdatabase/Database.h	2015-08-05 23:02:25 UTC (rev 187997)
+++ trunk/Source/WebCore/Modules/webdatabase/Database.h	2015-08-05 23:17:18 UTC (rev 187998)
@@ -108,6 +108,9 @@
 private:
     Database(PassRefPtr<DatabaseContext>, const String& name, const String& expectedVersion, const String& displayName, unsigned long estimatedSize);
 
+    bool getVersionFromDatabase(String& version, bool shouldCacheVersion = true);
+    bool setVersionInDatabase(const String& version, bool shouldCacheVersion = true);
+
     void scheduleTransaction();
 
     void runTransaction(RefPtr<SQLTransactionCallback>&&, RefPtr<SQLTransactionErrorCallback>&&, RefPtr<VoidCallback>&& successCallback, bool readOnly, const ChangeVersionData* = nullptr);
@@ -124,6 +127,8 @@
     bool m_deleted;
     bool m_hasPendingCreationEvent { false };
 
+    friend class ChangeVersionWrapper;
+    friend class DatabaseBackendBase;
     friend class DatabaseManager;
     friend class DatabaseServer; // FIXME: remove this when the backend has been split out.
     friend class SQLStatement;

Modified: trunk/Source/WebCore/Modules/webdatabase/DatabaseBackendBase.cpp (187997 => 187998)


--- trunk/Source/WebCore/Modules/webdatabase/DatabaseBackendBase.cpp	2015-08-05 23:02:25 UTC (rev 187997)
+++ trunk/Source/WebCore/Modules/webdatabase/DatabaseBackendBase.cpp	2015-08-05 23:17:18 UTC (rev 187998)
@@ -81,78 +81,13 @@
 
 namespace WebCore {
 
-static const char versionKey[] = "WebKitDatabaseVersionKey";
 static const char unqualifiedInfoTableName[] = "__WebKitDatabaseInfoTable__";
 
-const char* DatabaseBackendBase::databaseInfoTableName()
-{
-    return unqualifiedInfoTableName;
-}
-
-static const char* fullyQualifiedInfoTableName()
-{
-    static const char qualifier[] = "main.";
-    static char qualifiedName[sizeof(qualifier) + sizeof(unqualifiedInfoTableName) - 1];
-
-    static std::once_flag onceFlag;
-    std::call_once(onceFlag, []{
-        strcpy(qualifiedName, qualifier);
-        strcpy(qualifiedName + sizeof(qualifier) - 1, unqualifiedInfoTableName);
-    });
-
-    return qualifiedName;
-}
-
 static String formatErrorMessage(const char* message, int sqliteErrorCode, const char* sqliteErrorMessage)
 {
     return String::format("%s (%d %s)", message, sqliteErrorCode, sqliteErrorMessage);
 }
 
-static bool retrieveTextResultFromDatabase(SQLiteDatabase& db, const String& query, String& resultString)
-{
-    SQLiteStatement statement(db, query);
-    int result = statement.prepare();
-
-    if (result != SQLITE_OK) {
-        LOG_ERROR("Error (%i) preparing statement to read text result from database (%s)", result, query.ascii().data());
-        return false;
-    }
-
-    result = statement.step();
-    if (result == SQLITE_ROW) {
-        resultString = statement.getColumnText(0);
-        return true;
-    }
-    if (result == SQLITE_DONE) {
-        resultString = String();
-        return true;
-    }
-
-    LOG_ERROR("Error (%i) reading text result from database (%s)", result, query.ascii().data());
-    return false;
-}
-
-static bool setTextValueInDatabase(SQLiteDatabase& db, const String& query, const String& value)
-{
-    SQLiteStatement statement(db, query);
-    int result = statement.prepare();
-
-    if (result != SQLITE_OK) {
-        LOG_ERROR("Failed to prepare statement to set value in database (%s)", query.ascii().data());
-        return false;
-    }
-
-    statement.bindText(1, value);
-
-    result = statement.step();
-    if (result != SQLITE_DONE) {
-        LOG_ERROR("Failed to step statement to set value in database (%s)", query.ascii().data());
-        return false;
-    }
-
-    return true;
-}
-
 // FIXME: move all guid-related functions to a DatabaseVersionTracker class.
 static std::mutex& guidMutex()
 {
@@ -367,7 +302,7 @@
                     m_sqliteDatabase.close();
                     return false;
                 }
-            } else if (!getVersionFromDatabase(currentVersion, false)) {
+            } else if (!m_frontend->getVersionFromDatabase(currentVersion, false)) {
                 errorMessage = formatErrorMessage("unable to open database, failed to read current version", m_sqliteDatabase.lastError(), m_sqliteDatabase.lastErrorMsg());
                 transaction.rollback();
                 m_sqliteDatabase.close();
@@ -378,7 +313,7 @@
                 LOG(StorageAPI, "Retrieved current version %s from database %s", currentVersion.ascii().data(), databaseDebugName().ascii().data());
             } else if (!m_new || shouldSetVersionInNewDatabase) {
                 LOG(StorageAPI, "Setting version %s in database %s that was just created", m_expectedVersion.ascii().data(), databaseDebugName().ascii().data());
-                if (!setVersionInDatabase(m_expectedVersion, false)) {
+                if (!m_frontend->setVersionInDatabase(m_expectedVersion, false)) {
                     errorMessage = formatErrorMessage("unable to open database, failed to write current version", m_sqliteDatabase.lastError(), m_sqliteDatabase.lastErrorMsg());
                     transaction.rollback();
                     m_sqliteDatabase.close();
@@ -454,44 +389,6 @@
     return DatabaseDetails(stringIdentifier(), displayName(), estimatedSize(), 0, 0, 0);
 }
 
-bool DatabaseBackendBase::getVersionFromDatabase(String& version, bool shouldCacheVersion)
-{
-    String query(String("SELECT value FROM ") + fullyQualifiedInfoTableName() +  " WHERE key = '" + versionKey + "';");
-
-    m_databaseAuthorizer->disable();
-
-    bool result = retrieveTextResultFromDatabase(m_sqliteDatabase, query, version);
-    if (result) {
-        if (shouldCacheVersion)
-            setCachedVersion(version);
-    } else
-        LOG_ERROR("Failed to retrieve version from database %s", databaseDebugName().ascii().data());
-
-    m_databaseAuthorizer->enable();
-
-    return result;
-}
-
-bool DatabaseBackendBase::setVersionInDatabase(const String& version, bool shouldCacheVersion)
-{
-    // The INSERT will replace an existing entry for the database with the new version number, due to the UNIQUE ON CONFLICT REPLACE
-    // clause in the CREATE statement (see Database::performOpenAndVerify()).
-    String query(String("INSERT INTO ") + fullyQualifiedInfoTableName() +  " (key, value) VALUES ('" + versionKey + "', ?);");
-
-    m_databaseAuthorizer->disable();
-
-    bool result = setTextValueInDatabase(m_sqliteDatabase, query, version);
-    if (result) {
-        if (shouldCacheVersion)
-            setCachedVersion(version);
-    } else
-        LOG_ERROR("Failed to set version %s in database (%s)", version.ascii().data(), query.ascii().data());
-
-    m_databaseAuthorizer->enable();
-
-    return result;
-}
-
 void DatabaseBackendBase::setExpectedVersion(const String& version)
 {
     m_expectedVersion = version.isolatedCopy();
@@ -517,7 +414,7 @@
     ASSERT(m_sqliteDatabase.transactionInProgress());
     // Note: In multi-process browsers the cached value may be inaccurate.
     // So we retrieve the value from the database and update the cached value here.
-    return getVersionFromDatabase(actualVersion, true);
+    return m_frontend->getVersionFromDatabase(actualVersion, true);
 }
 
 unsigned long long DatabaseBackendBase::maximumSize() const

Modified: trunk/Source/WebCore/Modules/webdatabase/DatabaseBackendBase.h (187997 => 187998)


--- trunk/Source/WebCore/Modules/webdatabase/DatabaseBackendBase.h	2015-08-05 23:02:25 UTC (rev 187997)
+++ trunk/Source/WebCore/Modules/webdatabase/DatabaseBackendBase.h	2015-08-05 23:17:18 UTC (rev 187998)
@@ -81,16 +81,12 @@
 
     virtual bool performOpenAndVerify(bool shouldSetVersionInNewDatabase, DatabaseError&, String& errorMessage);
 
-    bool getVersionFromDatabase(String& version, bool shouldCacheVersion = true);
-    bool setVersionInDatabase(const String& version, bool shouldCacheVersion = true);
     void setExpectedVersion(const String&);
     const String& expectedVersion() const { return m_expectedVersion; }
     String getCachedVersion()const;
     void setCachedVersion(const String&);
     bool getActualVersionForTransaction(String& version);
 
-    static const char* databaseInfoTableName();
-
 #if !LOG_DISABLED || !ERROR_DISABLED
     String databaseDebugName() const;
 #endif
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to