#include "config.h"
#include "SQLStatement.h"
#if ENABLE(SQL_DATABASE)
#include "AbstractDatabaseServer.h"
#include "AbstractSQLStatementBackend.h"
#include "Database.h"
#include "DatabaseManager.h"
#include "Logging.h"
#include "SQLStatementCallback.h"
#include "SQLStatementErrorCallback.h"
#include "SQLTransaction.h"
#include "SQLValue.h"
#include "SQLiteDatabase.h"
#include "SQLiteStatement.h"
#include <wtf/text/CString.h>
namespace WebCore {
SQLStatement::SQLStatement(Database* database, PassRefPtr<SQLStatementCallback> callback,
PassRefPtr<SQLStatementErrorCallback> errorCallback)
: m_statementCallbackWrapper(callback, database->scriptExecutionContext())
, m_statementErrorCallbackWrapper(errorCallback, database->scriptExecutionContext())
{
}
void SQLStatement::setBackend(AbstractSQLStatementBackend* backend)
{
m_backend = backend;
}
bool SQLStatement::hasCallback()
{
return m_statementCallbackWrapper.hasCallback();
}
bool SQLStatement::hasErrorCallback()
{
return m_statementErrorCallbackWrapper.hasCallback();
}
bool SQLStatement::performCallback(SQLTransaction* transaction)
{
ASSERT(transaction);
ASSERT(m_backend);
bool callbackError = false;
RefPtr<SQLStatementCallback> callback = m_statementCallbackWrapper.unwrap();
RefPtr<SQLStatementErrorCallback> errorCallback = m_statementErrorCallbackWrapper.unwrap();
RefPtr<SQLError> error = m_backend->sqlError();
if (error) {
if (errorCallback)
callbackError = errorCallback->handleEvent(transaction, error.get());
} else if (callback) {
RefPtr<SQLResultSet> resultSet = m_backend->sqlResultSet();
callbackError = !callback->handleEvent(transaction, resultSet.get());
}
return callbackError;
}
}
#endif // ENABLE(SQL_DATABASE)