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"); |
} |