void IDBDatabaseInfo::addExistingObjectStore(const IDBObjectStoreInfo& info) { ASSERT(!m_objectStoreMap.contains(info.identifier())); if (info.identifier() > m_maxObjectStoreID) m_maxObjectStoreID = info.identifier(); m_objectStoreMap.set(info.identifier(), info); }
IDBError MemoryIDBBackingStore::addRecord(const IDBResourceIdentifier& transactionIdentifier, const IDBObjectStoreInfo& objectStoreInfo, const IDBKeyData& keyData, const IDBValue& value) { LOG(IndexedDB, "MemoryIDBBackingStore::addRecord"); ASSERT(objectStoreInfo.identifier()); auto transaction = m_transactions.get(transactionIdentifier); if (!transaction) return { IDBDatabaseException::UnknownError, ASCIILiteral("No backing store transaction found to put record") }; MemoryObjectStore* objectStore = m_objectStoresByIdentifier.get(objectStoreInfo.identifier()); if (!objectStore) return { IDBDatabaseException::UnknownError, ASCIILiteral("No backing store object store found to put record") }; return objectStore->addRecord(*transaction, keyData, value); }
Ref<IDBObjectStore> IDBTransaction::createObjectStore(const IDBObjectStoreInfo& info) { LOG(IndexedDB, "IDBTransaction::createObjectStore"); ASSERT(isVersionChange()); Ref<IDBObjectStore> objectStore = IDBObjectStore::create(info, *this); m_referencedObjectStores.set(info.name(), &objectStore.get()); auto operation = createTransactionOperation(*this, &IDBTransaction::didCreateObjectStoreOnServer, &IDBTransaction::createObjectStoreOnServer, info); scheduleOperation(WTFMove(operation)); return objectStore; }
IDBError MemoryIDBBackingStore::createObjectStore(const IDBResourceIdentifier& transactionIdentifier, const IDBObjectStoreInfo& info) { LOG(IndexedDB, "MemoryIDBBackingStore::createObjectStore - adding OS %s with ID %" PRIu64, info.name().utf8().data(), info.identifier()); ASSERT(m_databaseInfo); if (m_databaseInfo->hasObjectStore(info.name())) return { IDBDatabaseException::ConstraintError }; ASSERT(!m_objectStoresByIdentifier.contains(info.identifier())); auto objectStore = MemoryObjectStore::create(info); m_databaseInfo->addExistingObjectStore(info); auto rawTransaction = m_transactions.get(transactionIdentifier); ASSERT(rawTransaction); ASSERT(rawTransaction->isVersionChange()); rawTransaction->addNewObjectStore(objectStore.get()); registerObjectStore(WTFMove(objectStore)); return { }; }
CrossThreadCopierBase<false, false, IDBObjectStoreInfo>::Type CrossThreadCopierBase<false, false, IDBObjectStoreInfo>::copy(const IDBObjectStoreInfo& info) { return info.isolatedCopy(); }