#ifndef Database_h
#define Database_h
#include "DatabaseBackend.h"
#include "DatabaseBasicTypes.h"
#include "DatabaseError.h"
#include <wtf/text/WTFString.h>
namespace WebCore {
class ChangeVersionData;
class DatabaseCallback;
class DatabaseContext;
class ScriptExecutionContext;
class SecurityOrigin;
class SQLTransaction;
class SQLTransactionBackend;
class SQLTransactionCallback;
class SQLTransactionErrorCallback;
class VoidCallback;
class Database final : public DatabaseBackend {
public:
virtual ~Database();
virtual bool openAndVerifyVersion(bool setVersionInNewDatabase, DatabaseError&, String& errorMessage);
void close();
PassRefPtr<SQLTransactionBackend> runTransaction(PassRefPtr<SQLTransaction>, bool readOnly, const ChangeVersionData*);
void scheduleTransactionStep(SQLTransactionBackend*);
void inProgressTransactionCompleted();
bool hasPendingTransaction();
bool hasPendingCreationEvent() const { return m_hasPendingCreationEvent; }
void setHasPendingCreationEvent(bool value) { m_hasPendingCreationEvent = value; }
SQLTransactionClient* transactionClient() const;
SQLTransactionCoordinator* transactionCoordinator() const;
virtual String version() const;
void changeVersion(const String& oldVersion, const String& newVersion, PassRefPtr<SQLTransactionCallback>,
PassRefPtr<SQLTransactionErrorCallback>, PassRefPtr<VoidCallback> successCallback);
void transaction(PassRefPtr<SQLTransactionCallback>, PassRefPtr<SQLTransactionErrorCallback>, PassRefPtr<VoidCallback> successCallback);
void readTransaction(PassRefPtr<SQLTransactionCallback>, PassRefPtr<SQLTransactionErrorCallback>, PassRefPtr<VoidCallback> successCallback);
static Database* from(DatabaseBackend*);
DatabaseContext* databaseContext() const { return m_databaseContext.get(); }
ScriptExecutionContext* scriptExecutionContext() { return m_scriptExecutionContext.get(); }
void logErrorMessage(const String& message);
Vector<String> tableNames();
virtual SecurityOrigin* securityOrigin() const;
virtual void markAsDeletedAndClose();
bool deleted() const { return m_deleted; }
virtual void closeImmediately();
void scheduleTransactionCallback(SQLTransaction*);
private:
Database(PassRefPtr<DatabaseContext>, const String& name, const String& expectedVersion, const String& displayName, unsigned long estimatedSize);
PassRefPtr<DatabaseBackend> backend();
static PassRefPtr<Database> create(ScriptExecutionContext*, PassRefPtr<DatabaseBackendBase>);
virtual bool performOpenAndVerify(bool setVersionInNewDatabase, DatabaseError&, String& errorMessage);
void scheduleTransaction();
void runTransaction(RefPtr<SQLTransactionCallback>&&, RefPtr<SQLTransactionErrorCallback>&&, RefPtr<VoidCallback>&& successCallback, bool readOnly, const ChangeVersionData* = nullptr);
Vector<String> performGetTableNames();
RefPtr<ScriptExecutionContext> m_scriptExecutionContext;
RefPtr<SecurityOrigin> m_databaseThreadSecurityOrigin;
RefPtr<DatabaseContext> m_databaseContext;
bool m_deleted;
bool m_hasPendingCreationEvent { false };
friend class DatabaseManager;
friend class DatabaseServer; friend class DatabaseBackend; friend class SQLStatement;
friend class SQLTransaction;
};
}
#endif // Database_h