void MemoryObjectStore::maybeRestoreDeletedIndex(Ref<MemoryIndex>&& index) { LOG(IndexedDB, "MemoryObjectStore::maybeRestoreDeletedIndex"); if (m_info.hasIndex(index->info().name())) return; m_info.addExistingIndex(index->info()); ASSERT(!m_indexesByIdentifier.contains(index->info().identifier())); index->clearIndexValueStore(); auto error = populateIndexWithExistingRecords(index.get()); // Since this index was installed in the object store before this transaction started, // assuming things were in a valid state then, we should definitely be able to successfully // repopulate the index with the object store's pre-transaction records. ASSERT_UNUSED(error, error.isNull()); registerIndex(WTFMove(index)); }
IDBError MemoryObjectStore::createIndex(MemoryBackingStoreTransaction& transaction, const IDBIndexInfo& info) { LOG(IndexedDB, "MemoryObjectStore::createIndex"); if (!m_writeTransaction || !m_writeTransaction->isVersionChange() || m_writeTransaction != &transaction) return IDBError(IDBDatabaseException::ConstraintError); ASSERT(!m_indexesByIdentifier.contains(info.identifier())); auto index = MemoryIndex::create(info, *this); // If there was an error populating the new index, then the current records in the object store violate its contraints auto error = populateIndexWithExistingRecords(*index); if (!error.isNull()) return error; m_info.addExistingIndex(info); transaction.addNewIndex(*index); registerIndex(WTFMove(index)); return { }; }