Chromium Code Reviews| Index: Source/modules/webdatabase/SQLStatementBackend.cpp |
| diff --git a/Source/modules/webdatabase/SQLStatementBackend.cpp b/Source/modules/webdatabase/SQLStatementBackend.cpp |
| index 9d65703d7a2f5a6c47b01db3c335bf113c24a83f..d0ab7e913d92dad4d5c8342f7400dc648844ab1b 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,23 @@ 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; |
| + m_resultSet->setValid(); |
|
haraken
2014/03/25 07:55:30
In my understanding, setValid() should be always c
tkent
2014/03/25 08:40:32
Right. Done.
|
| 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"); |
| } |