void SQLTransaction::executeSQL(const String& sqlStatement, const Vector<SQLValue>& arguments, PassRefPtr<SQLStatementCallback> callback, PassRefPtr<SQLStatementErrorCallback> callbackError, ExceptionCode& e) { if (!m_executeSqlAllowed || !m_database->opened()) { e = INVALID_STATE_ERR; return; } int permissions = DatabaseAuthorizer::ReadWriteMask; if (!m_database->scriptExecutionContext()->allowDatabaseAccess()) permissions |= DatabaseAuthorizer::NoAccessMask; else if (m_readOnly) permissions |= DatabaseAuthorizer::ReadOnlyMask; RefPtr<SQLStatement> statement = SQLStatement::create(m_database.get(), sqlStatement, arguments, callback, callbackError, permissions); if (m_database->deleted()) statement->setDatabaseDeletedError(); enqueueStatement(statement); }
ExceptionOr<void> SQLTransaction::executeSql(const String& sqlStatement, Optional<Vector<SQLValue>>&& arguments, RefPtr<SQLStatementCallback>&& callback, RefPtr<SQLStatementErrorCallback>&& callbackError) { if (!m_executeSqlAllowed || !m_database->opened()) return Exception { InvalidStateError }; int permissions = DatabaseAuthorizer::ReadWriteMask; if (!m_database->databaseContext().allowDatabaseAccess()) permissions |= DatabaseAuthorizer::NoAccessMask; else if (m_readOnly) permissions |= DatabaseAuthorizer::ReadOnlyMask; auto statement = std::make_unique<SQLStatement>(m_database, sqlStatement, arguments.valueOr(Vector<SQLValue> { }), WTFMove(callback), WTFMove(callbackError), permissions); if (m_database->deleted()) statement->setDatabaseDeletedError(); enqueueStatement(WTFMove(statement)); return { }; }
void SQLTransaction::executeSQL(const String& sqlStatement, const Vector<SQLValue>& arguments, PassRefPtr<SQLStatementCallback> callback, PassRefPtr<SQLStatementErrorCallback> callbackError, ExceptionCode& e) { if (!m_executeSqlAllowed || m_database->stopped()) { e = INVALID_STATE_ERR; return; } bool readOnlyMode = m_readOnly; if (!readOnlyMode) { if (m_database->scriptExecutionContext()->isDatabaseReadOnly()) readOnlyMode = true; } RefPtr<SQLStatement> statement = SQLStatement::create(sqlStatement, arguments, callback, callbackError, readOnlyMode); if (m_database->deleted()) statement->setDatabaseDeletedError(); if (!m_database->versionMatchesExpected()) statement->setVersionMismatchedError(); enqueueStatement(statement); }