IndexedDB 2.0: Encapsulate cursor iteration parameters for easy future expansion.
[WebKit-https.git] / Source / WebCore / Modules / indexeddb / server / MemoryIDBBackingStore.cpp
index f94a0f8..b8e1a8a 100644 (file)
@@ -32,6 +32,7 @@
 #include "IDBGetAllRecordsData.h"
 #include "IDBGetResult.h"
 #include "IDBIndexInfo.h"
+#include "IDBIterateCursorData.h"
 #include "IDBKeyRangeData.h"
 #include "Logging.h"
 #include "MemoryIndexCursor.h"
@@ -375,11 +376,19 @@ IDBError MemoryIDBBackingStore::getAllRecords(const IDBResourceIdentifier& trans
     if (!m_transactions.contains(transactionIdentifier))
         return { IDBDatabaseException::UnknownError, ASCIILiteral("No backing store transaction found to get all records") };
 
-    MemoryObjectStore* objectStore = m_objectStoresByIdentifier.get(getAllRecordsData.objectStoreIdentifier);
+    auto* objectStore = m_objectStoresByIdentifier.get(getAllRecordsData.objectStoreIdentifier);
     if (!objectStore)
         return { IDBDatabaseException::UnknownError, ASCIILiteral("No backing store object store found") };
 
-    objectStore->getAllRecords(getAllRecordsData.keyRangeData, getAllRecordsData.count, getAllRecordsData.getAllType, result);
+    if (getAllRecordsData.indexIdentifier) {
+        auto* index = objectStore->indexForIdentifier(getAllRecordsData.indexIdentifier);
+        if (!index)
+            return { IDBDatabaseException::UnknownError, ASCIILiteral("No backing store index found") };
+
+        index->getAllRecords(getAllRecordsData.keyRangeData, getAllRecordsData.count, getAllRecordsData.getAllType, result);
+    } else
+        objectStore->getAllRecords(getAllRecordsData.keyRangeData, getAllRecordsData.count, getAllRecordsData.getAllType, result);
+
     return { };
 }
 
@@ -518,7 +527,7 @@ IDBError MemoryIDBBackingStore::openCursor(const IDBResourceIdentifier& transact
     return { };
 }
 
-IDBError MemoryIDBBackingStore::iterateCursor(const IDBResourceIdentifier& transactionIdentifier, const IDBResourceIdentifier& cursorIdentifier, const IDBKeyData& key, uint32_t count, IDBGetResult& outData)
+IDBError MemoryIDBBackingStore::iterateCursor(const IDBResourceIdentifier& transactionIdentifier, const IDBResourceIdentifier& cursorIdentifier, const IDBIterateCursorData& data, IDBGetResult& outData)
 {
     LOG(IndexedDB, "MemoryIDBBackingStore::iterateCursor");
 
@@ -529,7 +538,7 @@ IDBError MemoryIDBBackingStore::iterateCursor(const IDBResourceIdentifier& trans
     if (!cursor)
         return { IDBDatabaseException::UnknownError, ASCIILiteral("No backing store cursor found in which to iterate cursor") };
 
-    cursor->iterate(key, count, outData);
+    cursor->iterate(data.keyData, data.count, outData);
 
     return { };
 }