SQLiteIDBTransaction.h [plain text]
#pragma once
#if ENABLE(INDEXED_DATABASE)
#include "IDBError.h"
#include "IDBResourceIdentifier.h"
#include "IDBTransactionInfo.h"
#include "IndexedDB.h"
#include <wtf/HashMap.h>
#include <wtf/HashSet.h>
#include <wtf/Noncopyable.h>
namespace WebCore {
class IDBCursorInfo;
class SQLiteDatabase;
class SQLiteTransaction;
struct IDBKeyRangeData;
namespace IDBServer {
class SQLiteIDBBackingStore;
class SQLiteIDBCursor;
class SQLiteIDBTransaction {
WTF_MAKE_FAST_ALLOCATED;
WTF_MAKE_NONCOPYABLE(SQLiteIDBTransaction);
public:
SQLiteIDBTransaction(SQLiteIDBBackingStore&, const IDBTransactionInfo&);
~SQLiteIDBTransaction();
const IDBResourceIdentifier& transactionIdentifier() const { return m_info.identifier(); }
IDBError begin(SQLiteDatabase&);
IDBError commit();
IDBError abort();
std::unique_ptr<SQLiteIDBCursor> maybeOpenBackingStoreCursor(uint64_t objectStoreID, uint64_t indexID, const IDBKeyRangeData&);
SQLiteIDBCursor* maybeOpenCursor(const IDBCursorInfo&);
void closeCursor(SQLiteIDBCursor&);
void notifyCursorsOfChanges(int64_t objectStoreID);
IDBTransactionMode mode() const { return m_info.mode(); }
bool inProgress() const;
SQLiteTransaction* sqliteTransaction() const { return m_sqliteTransaction.get(); }
SQLiteIDBBackingStore& backingStore() { return m_backingStore; }
void addBlobFile(const String& temporaryPath, const String& storedFilename);
void addRemovedBlobFile(const String& removedFilename);
private:
void clearCursors();
void reset();
void moveBlobFilesIfNecessary();
void deleteBlobFilesIfNecessary();
IDBTransactionInfo m_info;
SQLiteIDBBackingStore& m_backingStore;
std::unique_ptr<SQLiteTransaction> m_sqliteTransaction;
HashMap<IDBResourceIdentifier, std::unique_ptr<SQLiteIDBCursor>> m_cursors;
HashSet<SQLiteIDBCursor*> m_backingStoreCursors;
Vector<std::pair<String, String>> m_blobTemporaryAndStoredFilenames;
HashSet<String> m_blobRemovedFilenames;
};
} }
#endif // ENABLE(INDEXED_DATABASE)