2 * Copyright (C) 2013 Apple Inc. All rights reserved.
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
13 * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
14 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
15 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
17 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
18 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
19 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
20 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
21 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
22 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
23 * THE POSSIBILITY OF SUCH DAMAGE.
26 #ifndef IDBTransactionBackendOperations_h
27 #define IDBTransactionBackendOperations_h
29 #include "IDBDatabaseBackendImpl.h"
30 #include "IDBOperation.h"
31 #include "IDBTransactionBackend.h"
33 #if ENABLE(INDEXED_DATABASE)
37 class CreateObjectStoreOperation : public IDBOperation {
39 static PassOwnPtr<IDBOperation> create(IDBTransactionBackend* transaction, IDBBackingStoreInterface* backingStore, const IDBObjectStoreMetadata& objectStoreMetadata)
41 return adoptPtr(new CreateObjectStoreOperation(transaction, backingStore, objectStoreMetadata));
43 virtual void perform() OVERRIDE FINAL;
45 CreateObjectStoreOperation(IDBTransactionBackend* transaction, IDBBackingStoreInterface* backingStore, const IDBObjectStoreMetadata& objectStoreMetadata)
46 : m_transaction(transaction)
47 , m_backingStore(backingStore)
48 , m_objectStoreMetadata(objectStoreMetadata)
52 RefPtr<IDBTransactionBackend> m_transaction;
53 const RefPtr<IDBBackingStoreInterface> m_backingStore;
54 const IDBObjectStoreMetadata m_objectStoreMetadata;
57 class DeleteObjectStoreOperation : public IDBOperation {
59 static PassOwnPtr<IDBOperation> create(IDBTransactionBackend* transaction, IDBBackingStoreInterface* backingStore, const IDBObjectStoreMetadata& objectStoreMetadata)
61 return adoptPtr(new DeleteObjectStoreOperation(transaction, backingStore, objectStoreMetadata));
63 virtual void perform() OVERRIDE FINAL;
65 DeleteObjectStoreOperation(IDBTransactionBackend* transaction, IDBBackingStoreInterface* backingStore, const IDBObjectStoreMetadata& objectStoreMetadata)
66 : m_transaction(transaction)
67 , m_backingStore(backingStore)
68 , m_objectStoreMetadata(objectStoreMetadata)
72 RefPtr<IDBTransactionBackend> m_transaction;
73 const RefPtr<IDBBackingStoreInterface> m_backingStore;
74 const IDBObjectStoreMetadata m_objectStoreMetadata;
77 class IDBDatabaseBackendImpl::VersionChangeOperation : public IDBOperation {
79 static PassOwnPtr<IDBOperation> create(IDBTransactionBackend* transaction, int64_t transactionId, int64_t version, PassRefPtr<IDBCallbacks> callbacks, PassRefPtr<IDBDatabaseCallbacks> databaseCallbacks)
81 return adoptPtr(new VersionChangeOperation(transaction, transactionId, version, callbacks, databaseCallbacks));
83 virtual void perform() OVERRIDE FINAL;
85 VersionChangeOperation(IDBTransactionBackend* transaction, int64_t transactionId, int64_t version, PassRefPtr<IDBCallbacks> callbacks, PassRefPtr<IDBDatabaseCallbacks> databaseCallbacks)
86 : m_transaction(transaction)
87 , m_transactionId(transactionId)
89 , m_callbacks(callbacks)
90 , m_databaseCallbacks(databaseCallbacks)
94 RefPtr<IDBTransactionBackend> m_transaction;
95 int64_t m_transactionId;
97 RefPtr<IDBCallbacks> m_callbacks;
98 RefPtr<IDBDatabaseCallbacks> m_databaseCallbacks;
101 class CreateObjectStoreAbortOperation : public IDBOperation {
103 static PassOwnPtr<IDBOperation> create(IDBTransactionBackend* transaction, int64_t objectStoreId)
105 return adoptPtr(new CreateObjectStoreAbortOperation(transaction, objectStoreId));
107 virtual void perform() OVERRIDE FINAL;
109 CreateObjectStoreAbortOperation(IDBTransactionBackend* transaction, int64_t objectStoreId)
110 : m_transaction(transaction)
111 , m_objectStoreId(objectStoreId)
115 RefPtr<IDBTransactionBackend> m_transaction;
116 const int64_t m_objectStoreId;
119 class DeleteObjectStoreAbortOperation : public IDBOperation {
121 static PassOwnPtr<IDBOperation> create(IDBTransactionBackend* transaction, const IDBObjectStoreMetadata& objectStore)
123 return adoptPtr(new DeleteObjectStoreAbortOperation(transaction, objectStore));
125 virtual void perform() OVERRIDE FINAL;
127 DeleteObjectStoreAbortOperation(IDBTransactionBackend* transaction, const IDBObjectStoreMetadata& objectStoreMetadata)
128 : m_transaction(transaction)
129 , m_objectStoreMetadata(objectStoreMetadata)
133 RefPtr<IDBTransactionBackend> m_transaction;
134 IDBObjectStoreMetadata m_objectStoreMetadata;
137 class IDBDatabaseBackendImpl::VersionChangeAbortOperation : public IDBOperation {
139 static PassOwnPtr<IDBOperation> create(IDBTransactionBackend* transaction, const String& previousVersion, int64_t previousIntVersion)
141 return adoptPtr(new VersionChangeAbortOperation(transaction, previousVersion, previousIntVersion));
143 virtual void perform() OVERRIDE FINAL;
145 VersionChangeAbortOperation(IDBTransactionBackend* transaction, const String& previousVersion, int64_t previousIntVersion)
146 : m_transaction(transaction)
147 , m_previousVersion(previousVersion)
148 , m_previousIntVersion(previousIntVersion)
152 RefPtr<IDBTransactionBackend> m_transaction;
153 String m_previousVersion;
154 int64_t m_previousIntVersion;
157 class CreateIndexOperation : public IDBOperation {
159 static PassOwnPtr<IDBOperation> create(IDBTransactionBackend* transaction, IDBBackingStoreInterface* backingStore, int64_t objectStoreId, const IDBIndexMetadata& indexMetadata)
161 return adoptPtr(new CreateIndexOperation(transaction, backingStore, objectStoreId, indexMetadata));
163 virtual void perform() OVERRIDE FINAL;
165 CreateIndexOperation(IDBTransactionBackend* transaction, IDBBackingStoreInterface* backingStore, int64_t objectStoreId, const IDBIndexMetadata& indexMetadata)
166 : m_transaction(transaction)
167 , m_backingStore(backingStore)
168 , m_objectStoreId(objectStoreId)
169 , m_indexMetadata(indexMetadata)
173 RefPtr<IDBTransactionBackend> m_transaction;
174 const RefPtr<IDBBackingStoreInterface> m_backingStore;
175 const int64_t m_objectStoreId;
176 const IDBIndexMetadata m_indexMetadata;
179 class CreateIndexAbortOperation : public IDBOperation {
181 static PassOwnPtr<IDBOperation> create(IDBTransactionBackend* transaction, int64_t objectStoreId, int64_t indexId)
183 return adoptPtr(new CreateIndexAbortOperation(transaction, objectStoreId, indexId));
185 virtual void perform() OVERRIDE FINAL;
187 CreateIndexAbortOperation(IDBTransactionBackend* transaction, int64_t objectStoreId, int64_t indexId)
188 : m_transaction(transaction)
189 , m_objectStoreId(objectStoreId)
194 const RefPtr<IDBTransactionBackend> m_transaction;
195 const int64_t m_objectStoreId;
196 const int64_t m_indexId;
199 class DeleteIndexOperation : public IDBOperation {
201 static PassOwnPtr<IDBOperation> create(IDBTransactionBackend* transaction, IDBBackingStoreInterface* backingStore, int64_t objectStoreId, const IDBIndexMetadata& indexMetadata)
203 return adoptPtr(new DeleteIndexOperation(transaction, backingStore, objectStoreId, indexMetadata));
205 virtual void perform() OVERRIDE FINAL;
207 DeleteIndexOperation(IDBTransactionBackend* transaction, IDBBackingStoreInterface* backingStore, int64_t objectStoreId, const IDBIndexMetadata& indexMetadata)
208 : m_transaction(transaction)
209 , m_backingStore(backingStore)
210 , m_objectStoreId(objectStoreId)
211 , m_indexMetadata(indexMetadata)
215 RefPtr<IDBTransactionBackend> m_transaction;
216 const RefPtr<IDBBackingStoreInterface> m_backingStore;
217 const int64_t m_objectStoreId;
218 const IDBIndexMetadata m_indexMetadata;
221 class DeleteIndexAbortOperation : public IDBOperation {
223 static PassOwnPtr<IDBOperation> create(IDBTransactionBackend* transaction, int64_t objectStoreId, const IDBIndexMetadata& indexMetadata)
225 return adoptPtr(new DeleteIndexAbortOperation(transaction, objectStoreId, indexMetadata));
227 virtual void perform() OVERRIDE FINAL;
229 DeleteIndexAbortOperation(IDBTransactionBackend* transaction, int64_t objectStoreId, const IDBIndexMetadata& indexMetadata)
230 : m_transaction(transaction)
231 , m_objectStoreId(objectStoreId)
232 , m_indexMetadata(indexMetadata)
236 RefPtr<IDBTransactionBackend> m_transaction;
237 const int64_t m_objectStoreId;
238 const IDBIndexMetadata m_indexMetadata;
241 class GetOperation : public IDBOperation {
243 static PassOwnPtr<IDBOperation> create(IDBTransactionBackend* transaction, IDBBackingStoreInterface* backingStore, const IDBDatabaseMetadata& metadata, int64_t objectStoreId, int64_t indexId, PassRefPtr<IDBKeyRange> keyRange, IndexedDB::CursorType cursorType, PassRefPtr<IDBCallbacks> callbacks)
245 return adoptPtr(new GetOperation(transaction, backingStore, metadata, objectStoreId, indexId, keyRange, cursorType, callbacks));
247 virtual void perform() OVERRIDE FINAL;
249 GetOperation(IDBTransactionBackend* transaction, IDBBackingStoreInterface* backingStore, const IDBDatabaseMetadata& metadata, int64_t objectStoreId, int64_t indexId, PassRefPtr<IDBKeyRange> keyRange, IndexedDB::CursorType cursorType, PassRefPtr<IDBCallbacks> callbacks)
250 : m_transaction(transaction)
251 , m_backingStore(backingStore)
252 , m_databaseId(metadata.id)
253 , m_objectStoreId(objectStoreId)
255 , m_keyPath(metadata.objectStores.get(objectStoreId).keyPath)
256 , m_autoIncrement(metadata.objectStores.get(objectStoreId).autoIncrement)
257 , m_keyRange(keyRange)
258 , m_cursorType(cursorType)
259 , m_callbacks(callbacks)
261 ASSERT(metadata.objectStores.contains(objectStoreId));
262 ASSERT(metadata.objectStores.get(objectStoreId).id == objectStoreId);
265 RefPtr<IDBTransactionBackend> m_transaction;
266 const RefPtr<IDBBackingStoreInterface> m_backingStore;
267 const int64_t m_databaseId;
268 const int64_t m_objectStoreId;
269 const int64_t m_indexId;
270 const IDBKeyPath m_keyPath;
271 const bool m_autoIncrement;
272 const RefPtr<IDBKeyRange> m_keyRange;
273 const IndexedDB::CursorType m_cursorType;
274 const RefPtr<IDBCallbacks> m_callbacks;
277 class PutOperation : public IDBOperation {
279 static PassOwnPtr<IDBOperation> create(IDBTransactionBackend* transaction, IDBBackingStoreInterface* backingStore, int64_t databaseId, const IDBObjectStoreMetadata& objectStore, PassRefPtr<SharedBuffer> value, PassRefPtr<IDBKey> key, IDBDatabaseBackendInterface::PutMode putMode, PassRefPtr<IDBCallbacks> callbacks, const Vector<int64_t>& indexIds, const Vector<IndexKeys>& indexKeys)
281 return adoptPtr(new PutOperation(transaction, backingStore, databaseId, objectStore, value, key, putMode, callbacks, indexIds, indexKeys));
283 virtual void perform() OVERRIDE FINAL;
285 PutOperation(IDBTransactionBackend* transaction, IDBBackingStoreInterface* backingStore, int64_t databaseId, const IDBObjectStoreMetadata& objectStore, PassRefPtr<SharedBuffer>& value, PassRefPtr<IDBKey> key, IDBDatabaseBackendInterface::PutMode putMode, PassRefPtr<IDBCallbacks> callbacks, const Vector<int64_t>& indexIds, const Vector<IndexKeys>& indexKeys)
286 : m_transaction(transaction)
287 , m_backingStore(backingStore)
288 , m_databaseId(databaseId)
289 , m_objectStore(objectStore)
293 , m_callbacks(callbacks)
294 , m_indexIds(indexIds)
295 , m_indexKeys(indexKeys)
299 RefPtr<IDBTransactionBackend> m_transaction;
300 const RefPtr<IDBBackingStoreInterface> m_backingStore;
301 const int64_t m_databaseId;
302 const IDBObjectStoreMetadata m_objectStore;
303 const RefPtr<SharedBuffer> m_value;
304 const RefPtr<IDBKey> m_key;
305 const IDBDatabaseBackendInterface::PutMode m_putMode;
306 const RefPtr<IDBCallbacks> m_callbacks;
307 const Vector<int64_t> m_indexIds;
308 const Vector<IndexKeys> m_indexKeys;
311 class SetIndexesReadyOperation : public IDBOperation {
313 static PassOwnPtr<IDBOperation> create(IDBTransactionBackend* transaction, size_t indexCount)
315 return adoptPtr(new SetIndexesReadyOperation(transaction, indexCount));
317 virtual void perform() OVERRIDE FINAL;
319 SetIndexesReadyOperation(IDBTransactionBackend* transaction, size_t indexCount)
320 : m_transaction(transaction)
321 , m_indexCount(indexCount)
325 RefPtr<IDBTransactionBackend> m_transaction;
326 const size_t m_indexCount;
329 class OpenCursorOperation : public IDBOperation {
331 static PassOwnPtr<IDBOperation> create(IDBTransactionBackend* transaction, IDBBackingStoreInterface* backingStore, int64_t databaseId, int64_t objectStoreId, int64_t indexId, PassRefPtr<IDBKeyRange> keyRange, IndexedDB::CursorDirection direction, IndexedDB::CursorType cursorType, IDBDatabaseBackendInterface::TaskType taskType, PassRefPtr<IDBCallbacks> callbacks)
333 return adoptPtr(new OpenCursorOperation(transaction, backingStore, databaseId, objectStoreId, indexId, keyRange, direction, cursorType, taskType, callbacks));
335 virtual void perform() OVERRIDE FINAL;
337 OpenCursorOperation(IDBTransactionBackend* transaction, IDBBackingStoreInterface* backingStore, int64_t databaseId, int64_t objectStoreId, int64_t indexId, PassRefPtr<IDBKeyRange> keyRange, IndexedDB::CursorDirection direction, IndexedDB::CursorType cursorType, IDBDatabaseBackendInterface::TaskType taskType, PassRefPtr<IDBCallbacks> callbacks)
338 : m_transaction(transaction)
339 , m_backingStore(backingStore)
340 , m_databaseId(databaseId)
341 , m_objectStoreId(objectStoreId)
343 , m_keyRange(keyRange)
344 , m_direction(direction)
345 , m_cursorType(cursorType)
346 , m_taskType(taskType)
347 , m_callbacks(callbacks)
351 RefPtr<IDBTransactionBackend> m_transaction;
352 const RefPtr<IDBBackingStoreInterface> m_backingStore;
353 const int64_t m_databaseId;
354 const int64_t m_objectStoreId;
355 const int64_t m_indexId;
356 const PassRefPtr<IDBKeyRange> m_keyRange;
357 const IndexedDB::CursorDirection m_direction;
358 const IndexedDB::CursorType m_cursorType;
359 const IDBDatabaseBackendInterface::TaskType m_taskType;
360 const RefPtr<IDBCallbacks> m_callbacks;
363 class CountOperation : public IDBOperation {
365 static PassOwnPtr<IDBOperation> create(IDBTransactionBackend* transaction, IDBBackingStoreInterface* backingStore, int64_t databaseId, int64_t objectStoreId, int64_t indexId, PassRefPtr<IDBKeyRange> keyRange, PassRefPtr<IDBCallbacks> callbacks)
367 return adoptPtr(new CountOperation(transaction, backingStore, databaseId, objectStoreId, indexId, keyRange, callbacks));
369 virtual void perform() OVERRIDE FINAL;
371 CountOperation(IDBTransactionBackend* transaction, IDBBackingStoreInterface* backingStore, int64_t databaseId, int64_t objectStoreId, int64_t indexId, PassRefPtr<IDBKeyRange> keyRange, PassRefPtr<IDBCallbacks> callbacks)
372 : m_transaction(transaction)
373 , m_backingStore(backingStore)
374 , m_databaseId(databaseId)
375 , m_objectStoreId(objectStoreId)
377 , m_keyRange(keyRange)
378 , m_callbacks(callbacks)
382 RefPtr<IDBTransactionBackend> m_transaction;
383 const RefPtr<IDBBackingStoreInterface> m_backingStore;
384 const int64_t m_databaseId;
385 const int64_t m_objectStoreId;
386 const int64_t m_indexId;
387 const RefPtr<IDBKeyRange> m_keyRange;
388 const RefPtr<IDBCallbacks> m_callbacks;
391 class DeleteRangeOperation : public IDBOperation {
393 static PassOwnPtr<IDBOperation> create(IDBTransactionBackend* transaction, IDBBackingStoreInterface* backingStore, int64_t databaseId, int64_t objectStoreId, PassRefPtr<IDBKeyRange> keyRange, PassRefPtr<IDBCallbacks> callbacks)
395 return adoptPtr(new DeleteRangeOperation(transaction, backingStore, databaseId, objectStoreId, keyRange, callbacks));
397 virtual void perform() OVERRIDE FINAL;
399 DeleteRangeOperation(IDBTransactionBackend* transaction, IDBBackingStoreInterface* backingStore, int64_t databaseId, int64_t objectStoreId, PassRefPtr<IDBKeyRange> keyRange, PassRefPtr<IDBCallbacks> callbacks)
400 : m_transaction(transaction)
401 , m_backingStore(backingStore)
402 , m_databaseId(databaseId)
403 , m_objectStoreId(objectStoreId)
404 , m_keyRange(keyRange)
405 , m_callbacks(callbacks)
409 RefPtr<IDBTransactionBackend> m_transaction;
410 const RefPtr<IDBBackingStoreInterface> m_backingStore;
411 const int64_t m_databaseId;
412 const int64_t m_objectStoreId;
413 const RefPtr<IDBKeyRange> m_keyRange;
414 const RefPtr<IDBCallbacks> m_callbacks;
417 class ClearOperation : public IDBOperation {
419 static PassOwnPtr<IDBOperation> create(IDBTransactionBackend* transaction, IDBBackingStoreInterface* backingStore, int64_t databaseId, int64_t objectStoreId, PassRefPtr<IDBCallbacks> callbacks)
421 return adoptPtr(new ClearOperation(transaction, backingStore, databaseId, objectStoreId, callbacks));
423 virtual void perform() OVERRIDE FINAL;
425 ClearOperation(IDBTransactionBackend* transaction, IDBBackingStoreInterface* backingStore, int64_t databaseId, int64_t objectStoreId, PassRefPtr<IDBCallbacks> callbacks)
426 : m_transaction(transaction)
427 , m_backingStore(backingStore)
428 , m_databaseId(databaseId)
429 , m_objectStoreId(objectStoreId)
430 , m_callbacks(callbacks)
434 RefPtr<IDBTransactionBackend> m_transaction;
435 const RefPtr<IDBBackingStoreInterface> m_backingStore;
436 const int64_t m_databaseId;
437 const int64_t m_objectStoreId;
438 const RefPtr<IDBCallbacks> m_callbacks;
441 } // namespace WebCore
443 #endif // ENABLE(INDEXED_DATABASE)
444 #endif // IDBTransactionBackendOperations_h