RefPtr<IDBObjectStore> LegacyTransaction::objectStore(const String& name, ExceptionCode& ec) { if (m_state == Finished) { ec = IDBDatabaseException::InvalidStateError; return 0; } IDBObjectStoreMap::iterator it = m_objectStoreMap.find(name); if (it != m_objectStoreMap.end()) return it->value; if (!isVersionChange() && !m_objectStoreNames.contains(name)) { ec = IDBDatabaseException::NotFoundError; return 0; } int64_t objectStoreId = m_database->findObjectStoreId(name); if (objectStoreId == IDBObjectStoreMetadata::InvalidId) { ASSERT(isVersionChange()); ec = IDBDatabaseException::NotFoundError; return 0; } const IDBDatabaseMetadata& metadata = m_database->metadata(); RefPtr<LegacyObjectStore> objectStore = LegacyObjectStore::create(metadata.objectStores.get(objectStoreId), this); objectStoreCreated(name, objectStore); return objectStore.release(); }
IDBObjectStore* IDBTransaction::objectStore(const String& name, ExceptionState& exceptionState) { if (m_state == Finished) { exceptionState.throwDOMException(InvalidStateError, IDBDatabase::transactionFinishedErrorMessage); return nullptr; } IDBObjectStoreMap::iterator it = m_objectStoreMap.find(name); if (it != m_objectStoreMap.end()) return it->value; if (!isVersionChange() && !m_objectStoreNames.contains(name)) { exceptionState.throwDOMException(NotFoundError, IDBDatabase::noSuchObjectStoreErrorMessage); return nullptr; } int64_t objectStoreId = m_database->findObjectStoreId(name); if (objectStoreId == IDBObjectStoreMetadata::InvalidId) { ASSERT(isVersionChange()); exceptionState.throwDOMException(NotFoundError, IDBDatabase::noSuchObjectStoreErrorMessage); return nullptr; } const IDBDatabaseMetadata& metadata = m_database->metadata(); IDBObjectStore* objectStore = IDBObjectStore::create(metadata.objectStores.get(objectStoreId), this); objectStoreCreated(name, objectStore); return objectStore; }
PassRefPtr<IDBObjectStore> IDBTransaction::objectStore(const String& name, ExceptionCode& ec) { if (m_transactionFinished) { ec = IDBDatabaseException::IDB_INVALID_STATE_ERR; return 0; } IDBObjectStoreMap::iterator it = m_objectStoreMap.find(name); if (it != m_objectStoreMap.end()) return it->second; RefPtr<IDBObjectStoreBackendInterface> objectStoreBackend = m_backend->objectStore(name, ec); if (!objectStoreBackend) { ASSERT(ec); return 0; } RefPtr<IDBObjectStore> objectStore = IDBObjectStore::create(objectStoreBackend, this); objectStoreCreated(name, objectStore); return objectStore.release(); }