| Index: Source/modules/webdatabase/SQLStatementBackend.cpp
|
| diff --git a/Source/modules/webdatabase/SQLStatementBackend.cpp b/Source/modules/webdatabase/SQLStatementBackend.cpp
|
| index 9d65703d7a2f5a6c47b01db3c335bf113c24a83f..de8bd583d7398bbd07977e0433a3f00754dacac3 100644
|
| --- a/Source/modules/webdatabase/SQLStatementBackend.cpp
|
| +++ b/Source/modules/webdatabase/SQLStatementBackend.cpp
|
| @@ -84,13 +84,15 @@ SQLStatementBackend::SQLStatementBackend(PassOwnPtr<AbstractSQLStatement> fronte
|
| , m_arguments(arguments)
|
| , m_hasCallback(m_frontend->hasCallback())
|
| , m_hasErrorCallback(m_frontend->hasErrorCallback())
|
| + , m_resultSet(SQLResultSet::create())
|
| , m_permissions(permissions)
|
| {
|
| m_frontend->setBackend(this);
|
| }
|
|
|
| -void SQLStatementBackend::trace(Visitor*)
|
| +void SQLStatementBackend::trace(Visitor* visitor)
|
| {
|
| + visitor->trace(m_resultSet);
|
| }
|
|
|
| AbstractSQLStatement* SQLStatementBackend::frontend()
|
| @@ -103,14 +105,14 @@ PassRefPtr<SQLError> SQLStatementBackend::sqlError() const
|
| return m_error;
|
| }
|
|
|
| -PassRefPtr<SQLResultSet> SQLStatementBackend::sqlResultSet() const
|
| +SQLResultSet* SQLStatementBackend::sqlResultSet() const
|
| {
|
| - return m_resultSet;
|
| + return m_resultSet->isValid() ? m_resultSet.get() : 0;
|
| }
|
|
|
| bool SQLStatementBackend::execute(DatabaseBackend* db)
|
| {
|
| - ASSERT(!m_resultSet);
|
| + ASSERT(!m_resultSet->isValid());
|
|
|
| // If we're re-running this statement after a quota violation, we need to clear that error now
|
| clearFailureDueToQuota();
|
| @@ -161,13 +163,11 @@ bool SQLStatementBackend::execute(DatabaseBackend* db)
|
| }
|
| }
|
|
|
| - RefPtr<SQLResultSet> resultSet = SQLResultSet::create();
|
| -
|
| // Step so we can fetch the column names.
|
| result = statement.step();
|
| if (result == SQLResultRow) {
|
| int columnCount = statement.columnCount();
|
| - SQLResultSetRowList* rows = resultSet->rows();
|
| + SQLResultSetRowList* rows = m_resultSet->rows();
|
|
|
| for (int i = 0; i < columnCount; i++)
|
| rows->addColumn(statement.getColumnName(i));
|
| @@ -187,7 +187,7 @@ bool SQLStatementBackend::execute(DatabaseBackend* db)
|
| } else if (result == SQLResultDone) {
|
| // Didn't find anything, or was an insert
|
| if (db->lastActionWasInsert())
|
| - resultSet->setInsertId(database->lastInsertRowID());
|
| + m_resultSet->setInsertId(database->lastInsertRowID());
|
| } else if (result == SQLResultFull) {
|
| // Return the Quota error - the delegate will be asked for more space and this statement might be re-run
|
| setFailureDueToQuota(db);
|
| @@ -205,23 +205,22 @@ bool SQLStatementBackend::execute(DatabaseBackend* db)
|
| // 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->setRowsAffected(database->lastChanges());
|
|
|
| - m_resultSet = resultSet;
|
| db->reportExecuteStatementResult(0, -1, 0); // OK
|
| return true;
|
| }
|
|
|
| void SQLStatementBackend::setVersionMismatchedError(DatabaseBackend* database)
|
| {
|
| - ASSERT(!m_error && !m_resultSet);
|
| + ASSERT(!m_error && !m_resultSet->isValid());
|
| database->reportExecuteStatementResult(7, SQLError::VERSION_ERR, 0);
|
| m_error = SQLError::create(SQLError::VERSION_ERR, "current version of the database and `oldVersion` argument do not match");
|
| }
|
|
|
| void SQLStatementBackend::setFailureDueToQuota(DatabaseBackend* database)
|
| {
|
| - ASSERT(!m_error && !m_resultSet);
|
| + ASSERT(!m_error && !m_resultSet->isValid());
|
| database->reportExecuteStatementResult(8, SQLError::QUOTA_ERR, 0);
|
| 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");
|
| }
|
|
|