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