Diff
Modified: trunk/Source/WebCore/CMakeLists.txt (188088 => 188089)
--- trunk/Source/WebCore/CMakeLists.txt 2015-08-06 23:31:53 UTC (rev 188088)
+++ trunk/Source/WebCore/CMakeLists.txt 2015-08-06 23:35:12 UTC (rev 188089)
@@ -1013,7 +1013,7 @@
Modules/webdatabase/SQLException.cpp
Modules/webdatabase/SQLResultSet.cpp
Modules/webdatabase/SQLResultSetRowList.cpp
- Modules/webdatabase/SQLStatementBackend.cpp
+ Modules/webdatabase/SQLStatement.cpp
Modules/webdatabase/SQLTransaction.cpp
Modules/webdatabase/SQLTransactionBackend.cpp
Modules/webdatabase/SQLTransactionClient.cpp
Modified: trunk/Source/WebCore/ChangeLog (188088 => 188089)
--- trunk/Source/WebCore/ChangeLog 2015-08-06 23:31:53 UTC (rev 188088)
+++ trunk/Source/WebCore/ChangeLog 2015-08-06 23:35:12 UTC (rev 188089)
@@ -1,3 +1,41 @@
+2015-08-06 Anders Carlsson <ander...@apple.com>
+
+ Rename SQLStatementBackend to SQLStatement
+ https://bugs.webkit.org/show_bug.cgi?id=147755
+
+ Reviewed by Geoffrey Garen.
+
+ * CMakeLists.txt:
+ * Modules/webdatabase/SQLStatement.h: Renamed from Source/WebCore/Modules/webdatabase/SQLStatementBackend.h.
+ (WebCore::SQLStatement::hasStatementCallback):
+ (WebCore::SQLStatement::hasStatementErrorCallback):
+ * Modules/webdatabase/SQLStatementBackend.cpp: Removed.
+ (WebCore::SQLStatementBackend::SQLStatementBackend): Deleted.
+ (WebCore::SQLStatementBackend::~SQLStatementBackend): Deleted.
+ (WebCore::SQLStatementBackend::sqlError): Deleted.
+ (WebCore::SQLStatementBackend::sqlResultSet): Deleted.
+ (WebCore::SQLStatementBackend::execute): Deleted.
+ (WebCore::SQLStatementBackend::performCallback): Deleted.
+ (WebCore::SQLStatementBackend::setDatabaseDeletedError): Deleted.
+ (WebCore::SQLStatementBackend::setVersionMismatchedError): Deleted.
+ (WebCore::SQLStatementBackend::setFailureDueToQuota): Deleted.
+ (WebCore::SQLStatementBackend::clearFailureDueToQuota): Deleted.
+ (WebCore::SQLStatementBackend::lastExecutionFailedDueToQuota): Deleted.
+ * Modules/webdatabase/SQLStatementBackend.h:
+ (WebCore::SQLStatementBackend::hasStatementCallback): Deleted.
+ (WebCore::SQLStatementBackend::hasStatementErrorCallback): Deleted.
+ * Modules/webdatabase/SQLTransaction.cpp:
+ (WebCore::SQLTransaction::deliverStatementCallback):
+ (WebCore::SQLTransaction::executeSQL):
+ * Modules/webdatabase/SQLTransactionBackend.cpp:
+ (WebCore::SQLTransactionBackend::currentStatement):
+ (WebCore::SQLTransactionBackend::enqueueStatementBackend):
+ (WebCore::SQLTransactionBackend::executeSQL):
+ * Modules/webdatabase/SQLTransactionBackend.h:
+ * WebCore.vcxproj/WebCore.vcxproj:
+ * WebCore.vcxproj/WebCore.vcxproj.filters:
+ * WebCore.xcodeproj/project.pbxproj:
+
2015-08-06 Myles C. Maxfield <mmaxfi...@apple.com>
Make FontDescriptionKey sensitive to FontFeatureSettings
Copied: trunk/Source/WebCore/Modules/webdatabase/SQLStatement.cpp (from rev 188088, trunk/Source/WebCore/Modules/webdatabase/SQLStatementBackend.cpp) (0 => 188089)
--- trunk/Source/WebCore/Modules/webdatabase/SQLStatement.cpp (rev 0)
+++ trunk/Source/WebCore/Modules/webdatabase/SQLStatement.cpp 2015-08-06 23:35:12 UTC (rev 188089)
@@ -0,0 +1,254 @@
+/*
+ * Copyright (C) 2007, 2013 Apple 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.
+ * 3. Neither the name of Apple Inc. ("Apple") nor the names of
+ * its contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "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 OR ITS 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.
+ */
+#include "config.h"
+#include "SQLStatement.h"
+
+#include "Database.h"
+#include "Logging.h"
+#include "SQLError.h"
+#include "SQLResultSet.h"
+#include "SQLStatementCallback.h"
+#include "SQLStatementErrorCallback.h"
+#include "SQLValue.h"
+#include "SQLiteDatabase.h"
+#include "SQLiteStatement.h"
+#include <wtf/text/CString.h>
+
+
+// The Life-Cycle of a SQLStatement i.e. Who's keeping the SQLStatement alive?
+// ==========================================================================
+// The RefPtr chain goes something like this:
+//
+// At birth (in SQLTransactionBackend::executeSQL()):
+// =================================================
+// SQLTransactionBackend // Deque<RefPtr<SQLStatement>> m_statementQueue points to ...
+// --> SQLStatement // std::unique_ptr<SQLStatement> m_frontend points to ...
+// --> SQLStatement
+//
+// After grabbing the statement for execution (in SQLTransactionBackend::getNextStatement()):
+// =========================================================================================
+// SQLTransactionBackend // RefPtr<SQLStatement> m_currentStatementBackend points to ...
+// --> SQLStatement // std::unique_ptr<SQLStatement> m_frontend points to ...
+// --> SQLStatement
+//
+// Then we execute the statement in SQLTransactionBackend::runCurrentStatementAndGetNextState().
+// And we callback to the script in SQLTransaction::deliverStatementCallback() if
+// necessary.
+// - Inside SQLTransaction::deliverStatementCallback(), we operate on a raw SQLStatement*.
+// This pointer is valid because it is owned by SQLTransactionBackend's
+// SQLTransactionBackend::m_currentStatementBackend.
+//
+// After we're done executing the statement (in SQLTransactionBackend::getNextStatement()):
+// =======================================================================================
+// When we're done executing, we'll grab the next statement. But before we
+// do that, getNextStatement() nullify SQLTransactionBackend::m_currentStatementBackend.
+// This will trigger the deletion of the SQLStatement and SQLStatement.
+//
+// Note: unlike with SQLTransaction, there is no JS representation of SQLStatement.
+// Hence, there is no GC dependency at play here.
+
+namespace WebCore {
+
+SQLStatement::SQLStatement(Database& database, const String& statement, const Vector<SQLValue>& arguments, PassRefPtr<SQLStatementCallback> callback, PassRefPtr<SQLStatementErrorCallback> errorCallback, int permissions)
+ : m_statement(statement.isolatedCopy())
+ , m_arguments(arguments)
+ , m_statementCallbackWrapper(callback, database.scriptExecutionContext())
+ , m_statementErrorCallbackWrapper(errorCallback, database.scriptExecutionContext())
+ , m_permissions(permissions)
+{
+}
+
+SQLStatement::~SQLStatement()
+{
+}
+
+PassRefPtr<SQLError> SQLStatement::sqlError() const
+{
+ return m_error;
+}
+
+PassRefPtr<SQLResultSet> SQLStatement::sqlResultSet() const
+{
+ return m_resultSet;
+}
+
+bool SQLStatement::execute(Database& db)
+{
+ ASSERT(!m_resultSet);
+
+ // If we're re-running this statement after a quota violation, we need to clear that error now
+ clearFailureDueToQuota();
+
+ // This transaction might have been marked bad while it was being set up on the main thread,
+ // so if there is still an error, return false.
+ if (m_error)
+ return false;
+
+ db.setAuthorizerPermissions(m_permissions);
+
+ SQLiteDatabase& database = db.sqliteDatabase();
+
+ SQLiteStatement statement(database, m_statement);
+ int result = statement.prepare();
+
+ if (result != SQLITE_OK) {
+ LOG(StorageAPI, "Unable to verify correctness of statement %s - error %i (%s)", m_statement.ascii().data(), result, database.lastErrorMsg());
+ if (result == SQLITE_INTERRUPT)
+ m_error = SQLError::create(SQLError::DATABASE_ERR, "could not prepare statement", result, "interrupted");
+ else
+ m_error = SQLError::create(SQLError::SYNTAX_ERR, "could not prepare statement", result, database.lastErrorMsg());
+ return false;
+ }
+
+ // FIXME: If the statement uses the ?### syntax supported by sqlite, the bind parameter count is very likely off from the number of question marks.
+ // If this is the case, they might be trying to do something fishy or malicious
+ if (statement.bindParameterCount() != m_arguments.size()) {
+ LOG(StorageAPI, "Bind parameter count doesn't match number of question marks");
+ m_error = SQLError::create(SQLError::SYNTAX_ERR, "number of '?'s in statement string does not match argument count");
+ return false;
+ }
+
+ for (unsigned i = 0; i < m_arguments.size(); ++i) {
+ result = statement.bindValue(i + 1, m_arguments[i]);
+ if (result == SQLITE_FULL) {
+ setFailureDueToQuota();
+ return false;
+ }
+
+ if (result != SQLITE_OK) {
+ LOG(StorageAPI, "Failed to bind value index %i to statement for query '%s'", i + 1, m_statement.ascii().data());
+ m_error = SQLError::create(SQLError::DATABASE_ERR, "could not bind value", result, database.lastErrorMsg());
+ return false;
+ }
+ }
+
+ RefPtr<SQLResultSet> resultSet = SQLResultSet::create();
+
+ // Step so we can fetch the column names.
+ result = statement.step();
+ switch (result) {
+ case SQLITE_ROW: {
+ int columnCount = statement.columnCount();
+ SQLResultSetRowList* rows = resultSet->rows();
+
+ for (int i = 0; i < columnCount; i++)
+ rows->addColumn(statement.getColumnName(i));
+
+ do {
+ for (int i = 0; i < columnCount; i++)
+ rows->addResult(statement.getColumnValue(i));
+
+ result = statement.step();
+ } while (result == SQLITE_ROW);
+
+ if (result != SQLITE_DONE) {
+ m_error = SQLError::create(SQLError::DATABASE_ERR, "could not iterate results", result, database.lastErrorMsg());
+ return false;
+ }
+ break;
+ }
+ case SQLITE_DONE: {
+ // Didn't find anything, or was an insert
+ if (db.lastActionWasInsert())
+ resultSet->setInsertId(database.lastInsertRowID());
+ break;
+ }
+ case SQLITE_FULL:
+ // Return the Quota error - the delegate will be asked for more space and this statement might be re-run
+ setFailureDueToQuota();
+ return false;
+ case SQLITE_CONSTRAINT:
+ m_error = SQLError::create(SQLError::CONSTRAINT_ERR, "could not execute statement due to a constaint failure", result, database.lastErrorMsg());
+ return false;
+ default:
+ m_error = SQLError::create(SQLError::DATABASE_ERR, "could not execute statement", result, database.lastErrorMsg());
+ return false;
+ }
+
+ // FIXME: If the spec allows triggers, and we want to be "accurate" in a different way, we'd use
+ // sqlite3_total_changes() here instead of sqlite3_changed, because that includes rows modified from within a trigger
+ // For now, this seems sufficient
+ resultSet->setRowsAffected(database.lastChanges());
+
+ m_resultSet = resultSet;
+ return true;
+}
+
+bool SQLStatement::performCallback(SQLTransaction* transaction)
+{
+ ASSERT(transaction);
+
+ bool callbackError = false;
+
+ RefPtr<SQLStatementCallback> callback = m_statementCallbackWrapper.unwrap();
+ RefPtr<SQLStatementErrorCallback> errorCallback = m_statementErrorCallbackWrapper.unwrap();
+ RefPtr<SQLError> error = sqlError();
+
+ // Call the appropriate statement callback and track if it resulted in an error,
+ // because then we need to jump to the transaction error callback.
+ if (error) {
+ if (errorCallback)
+ callbackError = errorCallback->handleEvent(transaction, error.get());
+ } else if (callback) {
+ RefPtr<SQLResultSet> resultSet = sqlResultSet();
+ callbackError = !callback->handleEvent(transaction, resultSet.get());
+ }
+
+ return callbackError;
+}
+
+void SQLStatement::setDatabaseDeletedError()
+{
+ ASSERT(!m_error && !m_resultSet);
+ m_error = SQLError::create(SQLError::UNKNOWN_ERR, "unable to execute statement, because the user deleted the database");
+}
+
+void SQLStatement::setVersionMismatchedError()
+{
+ ASSERT(!m_error && !m_resultSet);
+ m_error = SQLError::create(SQLError::VERSION_ERR, "current version of the database and `oldVersion` argument do not match");
+}
+
+void SQLStatement::setFailureDueToQuota()
+{
+ ASSERT(!m_error && !m_resultSet);
+ m_error = SQLError::create(SQLError::QUOTA_ERR, "there was not enough remaining storage space, or the storage quota was reached and the user declined to allow more space");
+}
+
+void SQLStatement::clearFailureDueToQuota()
+{
+ if (lastExecutionFailedDueToQuota())
+ m_error = nullptr;
+}
+
+bool SQLStatement::lastExecutionFailedDueToQuota() const
+{
+ return m_error && m_error->code() == SQLError::QUOTA_ERR;
+}
+
+} // namespace WebCore
Copied: trunk/Source/WebCore/Modules/webdatabase/SQLStatement.h (from rev 188088, trunk/Source/WebCore/Modules/webdatabase/SQLStatementBackend.h) (0 => 188089)
--- trunk/Source/WebCore/Modules/webdatabase/SQLStatement.h (rev 0)
+++ trunk/Source/WebCore/Modules/webdatabase/SQLStatement.h 2015-08-06 23:35:12 UTC (rev 188089)
@@ -0,0 +1,81 @@
+/*
+ * Copyright (C) 2007, 2013 Apple 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.
+ * 3. Neither the name of Apple Inc. ("Apple") nor the names of
+ * its contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "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 OR ITS 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 "SQLCallbackWrapper.h"
+#include "SQLStatementCallback.h"
+#include "SQLStatementErrorCallback.h"
+#include "SQLValue.h"
+#include <wtf/Forward.h>
+#include <wtf/Vector.h>
+#include <wtf/text/WTFString.h>
+
+namespace WebCore {
+
+class Database;
+class SQLError;
+class SQLResultSet;
+class SQLTransactionBackend;
+
+class SQLStatement {
+public:
+ SQLStatement(Database&, const String&, const Vector<SQLValue>&, PassRefPtr<SQLStatementCallback>, PassRefPtr<SQLStatementErrorCallback>, int permissions);
+ ~SQLStatement();
+
+ bool execute(Database&);
+ bool lastExecutionFailedDueToQuota() const;
+
+ bool hasStatementCallback() const { return m_statementCallbackWrapper.hasCallback(); }
+ bool hasStatementErrorCallback() const { return m_statementErrorCallbackWrapper.hasCallback(); }
+ bool performCallback(SQLTransaction*);
+
+ void setDatabaseDeletedError();
+ void setVersionMismatchedError();
+
+ PassRefPtr<SQLError> sqlError() const;
+ PassRefPtr<SQLResultSet> sqlResultSet() const;
+
+private:
+ void setFailureDueToQuota();
+ void clearFailureDueToQuota();
+
+ String m_statement;
+ Vector<SQLValue> m_arguments;
+ SQLCallbackWrapper<SQLStatementCallback> m_statementCallbackWrapper;
+ SQLCallbackWrapper<SQLStatementErrorCallback> m_statementErrorCallbackWrapper;
+
+ RefPtr<SQLError> m_error;
+ RefPtr<SQLResultSet> m_resultSet;
+
+ int m_permissions;
+};
+
+} // namespace WebCore
+
+#endif // SQLStatement_h
Deleted: trunk/Source/WebCore/Modules/webdatabase/SQLStatementBackend.cpp (188088 => 188089)
--- trunk/Source/WebCore/Modules/webdatabase/SQLStatementBackend.cpp 2015-08-06 23:31:53 UTC (rev 188088)
+++ trunk/Source/WebCore/Modules/webdatabase/SQLStatementBackend.cpp 2015-08-06 23:35:12 UTC (rev 188089)
@@ -1,254 +0,0 @@
-/*
- * Copyright (C) 2007, 2013 Apple 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.
- * 3. Neither the name of Apple Inc. ("Apple") nor the names of
- * its contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "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 OR ITS 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.
- */
-#include "config.h"
-#include "SQLStatementBackend.h"
-
-#include "Database.h"
-#include "Logging.h"
-#include "SQLError.h"
-#include "SQLResultSet.h"
-#include "SQLStatementCallback.h"
-#include "SQLStatementErrorCallback.h"
-#include "SQLValue.h"
-#include "SQLiteDatabase.h"
-#include "SQLiteStatement.h"
-#include <wtf/text/CString.h>
-
-
-// The Life-Cycle of a SQLStatement i.e. Who's keeping the SQLStatement alive?
-// ==========================================================================
-// The RefPtr chain goes something like this:
-//
-// At birth (in SQLTransactionBackend::executeSQL()):
-// =================================================
-// SQLTransactionBackend // Deque<RefPtr<SQLStatementBackend>> m_statementQueue points to ...
-// --> SQLStatementBackend // std::unique_ptr<SQLStatement> m_frontend points to ...
-// --> SQLStatement
-//
-// After grabbing the statement for execution (in SQLTransactionBackend::getNextStatement()):
-// =========================================================================================
-// SQLTransactionBackend // RefPtr<SQLStatementBackend> m_currentStatementBackend points to ...
-// --> SQLStatementBackend // std::unique_ptr<SQLStatement> m_frontend points to ...
-// --> SQLStatement
-//
-// Then we execute the statement in SQLTransactionBackend::runCurrentStatementAndGetNextState().
-// And we callback to the script in SQLTransaction::deliverStatementCallback() if
-// necessary.
-// - Inside SQLTransaction::deliverStatementCallback(), we operate on a raw SQLStatement*.
-// This pointer is valid because it is owned by SQLTransactionBackend's
-// SQLTransactionBackend::m_currentStatementBackend.
-//
-// After we're done executing the statement (in SQLTransactionBackend::getNextStatement()):
-// =======================================================================================
-// When we're done executing, we'll grab the next statement. But before we
-// do that, getNextStatement() nullify SQLTransactionBackend::m_currentStatementBackend.
-// This will trigger the deletion of the SQLStatementBackend and SQLStatement.
-//
-// Note: unlike with SQLTransaction, there is no JS representation of SQLStatement.
-// Hence, there is no GC dependency at play here.
-
-namespace WebCore {
-
-SQLStatementBackend::SQLStatementBackend(Database& database, const String& statement, const Vector<SQLValue>& arguments, PassRefPtr<SQLStatementCallback> callback, PassRefPtr<SQLStatementErrorCallback> errorCallback, int permissions)
- : m_statement(statement.isolatedCopy())
- , m_arguments(arguments)
- , m_statementCallbackWrapper(callback, database.scriptExecutionContext())
- , m_statementErrorCallbackWrapper(errorCallback, database.scriptExecutionContext())
- , m_permissions(permissions)
-{
-}
-
-SQLStatementBackend::~SQLStatementBackend()
-{
-}
-
-PassRefPtr<SQLError> SQLStatementBackend::sqlError() const
-{
- return m_error;
-}
-
-PassRefPtr<SQLResultSet> SQLStatementBackend::sqlResultSet() const
-{
- return m_resultSet;
-}
-
-bool SQLStatementBackend::execute(Database& db)
-{
- ASSERT(!m_resultSet);
-
- // If we're re-running this statement after a quota violation, we need to clear that error now
- clearFailureDueToQuota();
-
- // This transaction might have been marked bad while it was being set up on the main thread,
- // so if there is still an error, return false.
- if (m_error)
- return false;
-
- db.setAuthorizerPermissions(m_permissions);
-
- SQLiteDatabase& database = db.sqliteDatabase();
-
- SQLiteStatement statement(database, m_statement);
- int result = statement.prepare();
-
- if (result != SQLITE_OK) {
- LOG(StorageAPI, "Unable to verify correctness of statement %s - error %i (%s)", m_statement.ascii().data(), result, database.lastErrorMsg());
- if (result == SQLITE_INTERRUPT)
- m_error = SQLError::create(SQLError::DATABASE_ERR, "could not prepare statement", result, "interrupted");
- else
- m_error = SQLError::create(SQLError::SYNTAX_ERR, "could not prepare statement", result, database.lastErrorMsg());
- return false;
- }
-
- // FIXME: If the statement uses the ?### syntax supported by sqlite, the bind parameter count is very likely off from the number of question marks.
- // If this is the case, they might be trying to do something fishy or malicious
- if (statement.bindParameterCount() != m_arguments.size()) {
- LOG(StorageAPI, "Bind parameter count doesn't match number of question marks");
- m_error = SQLError::create(SQLError::SYNTAX_ERR, "number of '?'s in statement string does not match argument count");
- return false;
- }
-
- for (unsigned i = 0; i < m_arguments.size(); ++i) {
- result = statement.bindValue(i + 1, m_arguments[i]);
- if (result == SQLITE_FULL) {
- setFailureDueToQuota();
- return false;
- }
-
- if (result != SQLITE_OK) {
- LOG(StorageAPI, "Failed to bind value index %i to statement for query '%s'", i + 1, m_statement.ascii().data());
- m_error = SQLError::create(SQLError::DATABASE_ERR, "could not bind value", result, database.lastErrorMsg());
- return false;
- }
- }
-
- RefPtr<SQLResultSet> resultSet = SQLResultSet::create();
-
- // Step so we can fetch the column names.
- result = statement.step();
- switch (result) {
- case SQLITE_ROW: {
- int columnCount = statement.columnCount();
- SQLResultSetRowList* rows = resultSet->rows();
-
- for (int i = 0; i < columnCount; i++)
- rows->addColumn(statement.getColumnName(i));
-
- do {
- for (int i = 0; i < columnCount; i++)
- rows->addResult(statement.getColumnValue(i));
-
- result = statement.step();
- } while (result == SQLITE_ROW);
-
- if (result != SQLITE_DONE) {
- m_error = SQLError::create(SQLError::DATABASE_ERR, "could not iterate results", result, database.lastErrorMsg());
- return false;
- }
- break;
- }
- case SQLITE_DONE: {
- // Didn't find anything, or was an insert
- if (db.lastActionWasInsert())
- resultSet->setInsertId(database.lastInsertRowID());
- break;
- }
- case SQLITE_FULL:
- // Return the Quota error - the delegate will be asked for more space and this statement might be re-run
- setFailureDueToQuota();
- return false;
- case SQLITE_CONSTRAINT:
- m_error = SQLError::create(SQLError::CONSTRAINT_ERR, "could not execute statement due to a constaint failure", result, database.lastErrorMsg());
- return false;
- default:
- m_error = SQLError::create(SQLError::DATABASE_ERR, "could not execute statement", result, database.lastErrorMsg());
- return false;
- }
-
- // FIXME: If the spec allows triggers, and we want to be "accurate" in a different way, we'd use
- // sqlite3_total_changes() here instead of sqlite3_changed, because that includes rows modified from within a trigger
- // For now, this seems sufficient
- resultSet->setRowsAffected(database.lastChanges());
-
- m_resultSet = resultSet;
- return true;
-}
-
-bool SQLStatementBackend::performCallback(SQLTransaction* transaction)
-{
- ASSERT(transaction);
-
- bool callbackError = false;
-
- RefPtr<SQLStatementCallback> callback = m_statementCallbackWrapper.unwrap();
- RefPtr<SQLStatementErrorCallback> errorCallback = m_statementErrorCallbackWrapper.unwrap();
- RefPtr<SQLError> error = sqlError();
-
- // Call the appropriate statement callback and track if it resulted in an error,
- // because then we need to jump to the transaction error callback.
- if (error) {
- if (errorCallback)
- callbackError = errorCallback->handleEvent(transaction, error.get());
- } else if (callback) {
- RefPtr<SQLResultSet> resultSet = sqlResultSet();
- callbackError = !callback->handleEvent(transaction, resultSet.get());
- }
-
- return callbackError;
-}
-
-void SQLStatementBackend::setDatabaseDeletedError()
-{
- ASSERT(!m_error && !m_resultSet);
- m_error = SQLError::create(SQLError::UNKNOWN_ERR, "unable to execute statement, because the user deleted the database");
-}
-
-void SQLStatementBackend::setVersionMismatchedError()
-{
- ASSERT(!m_error && !m_resultSet);
- m_error = SQLError::create(SQLError::VERSION_ERR, "current version of the database and `oldVersion` argument do not match");
-}
-
-void SQLStatementBackend::setFailureDueToQuota()
-{
- ASSERT(!m_error && !m_resultSet);
- m_error = SQLError::create(SQLError::QUOTA_ERR, "there was not enough remaining storage space, or the storage quota was reached and the user declined to allow more space");
-}
-
-void SQLStatementBackend::clearFailureDueToQuota()
-{
- if (lastExecutionFailedDueToQuota())
- m_error = nullptr;
-}
-
-bool SQLStatementBackend::lastExecutionFailedDueToQuota() const
-{
- return m_error && m_error->code() == SQLError::QUOTA_ERR;
-}
-
-} // namespace WebCore
Deleted: trunk/Source/WebCore/Modules/webdatabase/SQLStatementBackend.h (188088 => 188089)
--- trunk/Source/WebCore/Modules/webdatabase/SQLStatementBackend.h 2015-08-06 23:31:53 UTC (rev 188088)
+++ trunk/Source/WebCore/Modules/webdatabase/SQLStatementBackend.h 2015-08-06 23:35:12 UTC (rev 188089)
@@ -1,81 +0,0 @@
-/*
- * Copyright (C) 2007, 2013 Apple 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.
- * 3. Neither the name of Apple Inc. ("Apple") nor the names of
- * its contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "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 OR ITS 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 SQLStatementBackend_h
-#define SQLStatementBackend_h
-
-#include "SQLCallbackWrapper.h"
-#include "SQLStatementCallback.h"
-#include "SQLStatementErrorCallback.h"
-#include "SQLValue.h"
-#include <wtf/Forward.h>
-#include <wtf/Vector.h>
-#include <wtf/text/WTFString.h>
-
-namespace WebCore {
-
-class Database;
-class SQLError;
-class SQLResultSet;
-class SQLTransactionBackend;
-
-class SQLStatementBackend {
-public:
- SQLStatementBackend(Database&, const String&, const Vector<SQLValue>&, PassRefPtr<SQLStatementCallback>, PassRefPtr<SQLStatementErrorCallback>, int permissions);
- ~SQLStatementBackend();
-
- bool execute(Database&);
- bool lastExecutionFailedDueToQuota() const;
-
- bool hasStatementCallback() const { return m_statementCallbackWrapper.hasCallback(); }
- bool hasStatementErrorCallback() const { return m_statementErrorCallbackWrapper.hasCallback(); }
- bool performCallback(SQLTransaction*);
-
- void setDatabaseDeletedError();
- void setVersionMismatchedError();
-
- PassRefPtr<SQLError> sqlError() const;
- PassRefPtr<SQLResultSet> sqlResultSet() const;
-
-private:
- void setFailureDueToQuota();
- void clearFailureDueToQuota();
-
- String m_statement;
- Vector<SQLValue> m_arguments;
- SQLCallbackWrapper<SQLStatementCallback> m_statementCallbackWrapper;
- SQLCallbackWrapper<SQLStatementErrorCallback> m_statementErrorCallbackWrapper;
-
- RefPtr<SQLError> m_error;
- RefPtr<SQLResultSet> m_resultSet;
-
- int m_permissions;
-};
-
-} // namespace WebCore
-
-#endif // SQLStatementBackend_h
Modified: trunk/Source/WebCore/Modules/webdatabase/SQLTransaction.cpp (188088 => 188089)
--- trunk/Source/WebCore/Modules/webdatabase/SQLTransaction.cpp 2015-08-06 23:31:53 UTC (rev 188088)
+++ trunk/Source/WebCore/Modules/webdatabase/SQLTransaction.cpp 2015-08-06 23:35:12 UTC (rev 188089)
@@ -35,7 +35,7 @@
#include "ExceptionCode.h"
#include "Logging.h"
#include "SQLError.h"
-#include "SQLStatementBackend.h"
+#include "SQLStatement.h"
#include "SQLStatementCallback.h"
#include "SQLStatementErrorCallback.h"
#include "SQLTransactionBackend.h"
@@ -185,7 +185,7 @@
// Otherwise, continue to loop through the statement queue
m_executeSqlAllowed = true;
- SQLStatementBackend* currentStatement = m_backend->currentStatement();
+ SQLStatement* currentStatement = m_backend->currentStatement();
ASSERT(currentStatement);
bool result = currentStatement->performCallback(this);
@@ -258,7 +258,7 @@
else if (m_readOnly)
permissions |= DatabaseAuthorizer::ReadOnlyMask;
- auto statement = std::make_unique<SQLStatementBackend>(m_database, sqlStatement, arguments, WTF::move(callback), WTF::move(callbackError), permissions);
+ auto statement = std::make_unique<SQLStatement>(m_database, sqlStatement, arguments, WTF::move(callback), WTF::move(callbackError), permissions);
m_backend->executeSQL(WTF::move(statement));
}
Modified: trunk/Source/WebCore/Modules/webdatabase/SQLTransactionBackend.cpp (188088 => 188089)
--- trunk/Source/WebCore/Modules/webdatabase/SQLTransactionBackend.cpp 2015-08-06 23:31:53 UTC (rev 188088)
+++ trunk/Source/WebCore/Modules/webdatabase/SQLTransactionBackend.cpp 2015-08-06 23:35:12 UTC (rev 188089)
@@ -38,7 +38,7 @@
#include "Logging.h"
#include "OriginLock.h"
#include "SQLError.h"
-#include "SQLStatementBackend.h"
+#include "SQLStatement.h"
#include "SQLStatementCallback.h"
#include "SQLStatementErrorCallback.h"
#include "SQLTransaction.h"
@@ -423,7 +423,7 @@
m_wrapper = nullptr;
}
-SQLStatementBackend* SQLTransactionBackend::currentStatement()
+SQLStatement* SQLTransactionBackend::currentStatement()
{
return m_currentStatementBackend.get();
}
@@ -463,7 +463,7 @@
return stateFunctions[static_cast<int>(state)];
}
-void SQLTransactionBackend::enqueueStatementBackend(std::unique_ptr<SQLStatementBackend> statementBackend)
+void SQLTransactionBackend::enqueueStatementBackend(std::unique_ptr<SQLStatement> statementBackend)
{
MutexLocker locker(m_statementMutex);
m_statementQueue.append(WTF::move(statementBackend));
@@ -523,7 +523,7 @@
}
#endif
-void SQLTransactionBackend::executeSQL(std::unique_ptr<SQLStatementBackend> statementBackend)
+void SQLTransactionBackend::executeSQL(std::unique_ptr<SQLStatement> statementBackend)
{
if (m_database->deleted())
statementBackend->setDatabaseDeletedError();
Modified: trunk/Source/WebCore/Modules/webdatabase/SQLTransactionBackend.h (188088 => 188089)
--- trunk/Source/WebCore/Modules/webdatabase/SQLTransactionBackend.h 2015-08-06 23:31:53 UTC (rev 188088)
+++ trunk/Source/WebCore/Modules/webdatabase/SQLTransactionBackend.h 2015-08-06 23:35:12 UTC (rev 188089)
@@ -42,7 +42,7 @@
class OriginLock;
class SQLError;
class SQLiteTransaction;
-class SQLStatementBackend;
+class SQLStatement;
class SQLTransaction;
class SQLTransactionBackend;
class SQLValue;
@@ -76,16 +76,16 @@
// APIs called from the frontend published via SQLTransactionBackend:
void requestTransitToState(SQLTransactionState);
PassRefPtr<SQLError> transactionError();
- SQLStatementBackend* currentStatement();
+ SQLStatement* currentStatement();
void setShouldRetryCurrentStatement(bool);
- void executeSQL(std::unique_ptr<SQLStatementBackend>);
+ void executeSQL(std::unique_ptr<SQLStatement>);
private:
SQLTransactionBackend(Database*, PassRefPtr<SQLTransaction>, PassRefPtr<SQLTransactionWrapper>, bool readOnly);
void doCleanup();
- void enqueueStatementBackend(std::unique_ptr<SQLStatementBackend>);
+ void enqueueStatementBackend(std::unique_ptr<SQLStatement>);
// State Machine functions:
virtual StateFunction stateFunctionFor(SQLTransactionState) override;
@@ -112,7 +112,7 @@
void releaseOriginLockIfNeeded();
RefPtr<SQLTransaction> m_frontend; // Has a reference cycle, and will break in doCleanup().
- std::unique_ptr<SQLStatementBackend> m_currentStatementBackend;
+ std::unique_ptr<SQLStatement> m_currentStatementBackend;
RefPtr<Database> m_database;
RefPtr<SQLTransactionWrapper> m_wrapper;
@@ -128,7 +128,7 @@
bool m_hasVersionMismatch;
Mutex m_statementMutex;
- Deque<std::unique_ptr<SQLStatementBackend>> m_statementQueue;
+ Deque<std::unique_ptr<SQLStatement>> m_statementQueue;
std::unique_ptr<SQLiteTransaction> m_sqliteTransaction;
RefPtr<OriginLock> m_originLock;
Modified: trunk/Source/WebCore/WebCore.vcxproj/WebCore.vcxproj (188088 => 188089)
--- trunk/Source/WebCore/WebCore.vcxproj/WebCore.vcxproj 2015-08-06 23:31:53 UTC (rev 188088)
+++ trunk/Source/WebCore/WebCore.vcxproj/WebCore.vcxproj 2015-08-06 23:35:12 UTC (rev 188089)
@@ -6819,7 +6819,7 @@
<ClCompile Include="..\Modules\webdatabase\SQLException.cpp" />
<ClCompile Include="..\Modules\webdatabase\SQLResultSet.cpp" />
<ClCompile Include="..\Modules\webdatabase\SQLResultSetRowList.cpp" />
- <ClCompile Include="..\Modules\webdatabase\SQLStatementBackend.cpp" />
+ <ClCompile Include="..\Modules\webdatabase\SQLStatement.cpp" />
<ClCompile Include="..\Modules\webdatabase\SQLTransaction.cpp" />
<ClCompile Include="..\Modules\webdatabase\SQLTransactionBackend.cpp" />
<ClCompile Include="..\Modules\webdatabase\SQLTransactionClient.cpp" />
@@ -20561,7 +20561,7 @@
<ClInclude Include="..\Modules\webdatabase\SQLException.h" />
<ClInclude Include="..\Modules\webdatabase\SQLResultSet.h" />
<ClInclude Include="..\Modules\webdatabase\SQLResultSetRowList.h" />
- <ClInclude Include="..\Modules\webdatabase\SQLStatementBackend.h" />
+ <ClInclude Include="..\Modules\webdatabase\SQLStatement.h" />
<ClInclude Include="..\Modules\webdatabase\SQLStatementCallback.h" />
<ClInclude Include="..\Modules\webdatabase\SQLStatementErrorCallback.h" />
<ClInclude Include="..\Modules\webdatabase\SQLTransaction.h" />
Modified: trunk/Source/WebCore/WebCore.vcxproj/WebCore.vcxproj.filters (188088 => 188089)
--- trunk/Source/WebCore/WebCore.vcxproj/WebCore.vcxproj.filters 2015-08-06 23:31:53 UTC (rev 188088)
+++ trunk/Source/WebCore/WebCore.vcxproj/WebCore.vcxproj.filters 2015-08-06 23:35:12 UTC (rev 188089)
@@ -516,7 +516,7 @@
<ClCompile Include="..\Modules\webdatabase\SQLResultSetRowList.cpp">
<Filter>Modules\webdatabase</Filter>
</ClCompile>
- <ClCompile Include="..\Modules\webdatabase\SQLStatementBackend.cpp">
+ <ClCompile Include="..\Modules\webdatabase\SQLStatement.cpp">
<Filter>Modules\webdatabase</Filter>
</ClCompile>
<ClCompile Include="..\Modules\webdatabase\SQLTransaction.cpp">
@@ -7487,7 +7487,7 @@
<ClInclude Include="..\Modules\webdatabase\SQLResultSetRowList.h">
<Filter>Modules\webdatabase</Filter>
</ClInclude>
- <ClInclude Include="..\Modules\webdatabase\SQLStatementBackend.h">
+ <ClInclude Include="..\Modules\webdatabase\SQLStatement.h">
<Filter>Modules\webdatabase</Filter>
</ClInclude>
<ClInclude Include="..\Modules\webdatabase\SQLStatementCallback.h">
Modified: trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj (188088 => 188089)
--- trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj 2015-08-06 23:31:53 UTC (rev 188088)
+++ trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj 2015-08-06 23:35:12 UTC (rev 188089)
@@ -6833,8 +6833,8 @@
FE80DA660E9C4703000D6F75 /* JSGeoposition.h in Headers */ = {isa = PBXBuildFile; fileRef = FE80DA620E9C4703000D6F75 /* JSGeoposition.h */; };
FE80DA710E9C472F000D6F75 /* JSPositionError.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FE80DA6D0E9C472F000D6F75 /* JSPositionError.cpp */; };
FE80DA720E9C472F000D6F75 /* JSPositionError.h in Headers */ = {isa = PBXBuildFile; fileRef = FE80DA6E0E9C472F000D6F75 /* JSPositionError.h */; };
- FE8A674716CDD19E00930BF8 /* SQLStatementBackend.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FE8A674516CDD19E00930BF8 /* SQLStatementBackend.cpp */; };
- FE8A674816CDD19E00930BF8 /* SQLStatementBackend.h in Headers */ = {isa = PBXBuildFile; fileRef = FE8A674616CDD19E00930BF8 /* SQLStatementBackend.h */; };
+ FE8A674716CDD19E00930BF8 /* SQLStatement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FE8A674516CDD19E00930BF8 /* SQLStatement.cpp */; };
+ FE8A674816CDD19E00930BF8 /* SQLStatement.h in Headers */ = {isa = PBXBuildFile; fileRef = FE8A674616CDD19E00930BF8 /* SQLStatement.h */; };
FE9E89FB16E2DC0500A908F8 /* OriginLock.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FE9E89F916E2DC0400A908F8 /* OriginLock.cpp */; };
FE9E89FC16E2DC0500A908F8 /* OriginLock.h in Headers */ = {isa = PBXBuildFile; fileRef = FE9E89FA16E2DC0400A908F8 /* OriginLock.h */; settings = {ATTRIBUTES = (Private, ); }; };
FEAF6654167970320062D0C5 /* DatabaseServer.h in Headers */ = {isa = PBXBuildFile; fileRef = FEAF6653167970070062D0C5 /* DatabaseServer.h */; settings = {ATTRIBUTES = (Private, ); }; };
@@ -14594,8 +14594,8 @@
FE80DA620E9C4703000D6F75 /* JSGeoposition.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSGeoposition.h; sourceTree = "<group>"; };
FE80DA6D0E9C472F000D6F75 /* JSPositionError.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSPositionError.cpp; sourceTree = "<group>"; };
FE80DA6E0E9C472F000D6F75 /* JSPositionError.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSPositionError.h; sourceTree = "<group>"; };
- FE8A674516CDD19E00930BF8 /* SQLStatementBackend.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SQLStatementBackend.cpp; sourceTree = "<group>"; };
- FE8A674616CDD19E00930BF8 /* SQLStatementBackend.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SQLStatementBackend.h; sourceTree = "<group>"; };
+ FE8A674516CDD19E00930BF8 /* SQLStatement.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SQLStatement.cpp; sourceTree = "<group>"; };
+ FE8A674616CDD19E00930BF8 /* SQLStatement.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SQLStatement.h; sourceTree = "<group>"; };
FE9E89F916E2DC0400A908F8 /* OriginLock.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = OriginLock.cpp; sourceTree = "<group>"; };
FE9E89FA16E2DC0400A908F8 /* OriginLock.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OriginLock.h; sourceTree = "<group>"; };
FEAF6653167970070062D0C5 /* DatabaseServer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DatabaseServer.h; sourceTree = "<group>"; };
@@ -18806,8 +18806,8 @@
97BC6A021505F081001B74AC /* SQLResultSetRowList.cpp */,
97BC6A031505F081001B74AC /* SQLResultSetRowList.h */,
97BC6A041505F081001B74AC /* SQLResultSetRowList.idl */,
- FE8A674516CDD19E00930BF8 /* SQLStatementBackend.cpp */,
- FE8A674616CDD19E00930BF8 /* SQLStatementBackend.h */,
+ FE8A674516CDD19E00930BF8 /* SQLStatement.cpp */,
+ FE8A674616CDD19E00930BF8 /* SQLStatement.h */,
97BC6A071505F081001B74AC /* SQLStatementCallback.h */,
97BC6A081505F081001B74AC /* SQLStatementCallback.idl */,
97BC6A091505F081001B74AC /* SQLStatementErrorCallback.h */,
@@ -26720,7 +26720,7 @@
1A22464E0CC98DDB00C05240 /* SQLiteTransaction.h in Headers */,
97BC6A421505F081001B74AC /* SQLResultSet.h in Headers */,
97BC6A451505F081001B74AC /* SQLResultSetRowList.h in Headers */,
- FE8A674816CDD19E00930BF8 /* SQLStatementBackend.h in Headers */,
+ FE8A674816CDD19E00930BF8 /* SQLStatement.h in Headers */,
97BC6A491505F081001B74AC /* SQLStatementCallback.h in Headers */,
97BC6A4B1505F081001B74AC /* SQLStatementErrorCallback.h in Headers */,
97BC6A501505F081001B74AC /* SQLTransaction.h in Headers */,
@@ -30188,7 +30188,7 @@
1A22464D0CC98DDB00C05240 /* SQLiteTransaction.cpp in Sources */,
97BC6A411505F081001B74AC /* SQLResultSet.cpp in Sources */,
97BC6A441505F081001B74AC /* SQLResultSetRowList.cpp in Sources */,
- FE8A674716CDD19E00930BF8 /* SQLStatementBackend.cpp in Sources */,
+ FE8A674716CDD19E00930BF8 /* SQLStatement.cpp in Sources */,
97BC6A4F1505F081001B74AC /* SQLTransaction.cpp in Sources */,
FEE1811316C319E800084849 /* SQLTransactionBackend.cpp in Sources */,
97BC6A541505F081001B74AC /* SQLTransactionClient.cpp in Sources */,