void IDBDatabaseBackendImpl::openConnectionWithVersion(PassRefPtr<IDBCallbacks> prpCallbacks, PassRefPtr<IDBDatabaseCallbacks> prpDatabaseCallbacks, int64_t version) { RefPtr<IDBCallbacks> callbacks = prpCallbacks; RefPtr<IDBDatabaseCallbacks> databaseCallbacks = prpDatabaseCallbacks; if (!m_pendingDeleteCalls.isEmpty() || m_runningVersionChangeTransaction) { m_pendingOpenWithVersionCalls.append(PendingOpenWithVersionCall::create(callbacks, databaseCallbacks, version)); return; } if (m_metadata.id == InvalidId) { if (openInternal()) ASSERT(m_metadata.intVersion == IDBDatabaseMetadata::NoIntVersion); else { callbacks->onError(IDBDatabaseError::create(IDBDatabaseException::UNKNOWN_ERR, "Internal error.")); return; } } if (version > m_metadata.intVersion) { runIntVersionChangeTransaction(version, callbacks, databaseCallbacks); return; } if (version < m_metadata.intVersion) { callbacks->onError(IDBDatabaseError::create(IDBDatabaseException::VER_ERR, String::format("The requested version (%lld) is less than the existing version (%lld).", static_cast<long long>(version), static_cast<long long>(m_metadata.intVersion)))); return; } ASSERT(version == m_metadata.intVersion); m_databaseCallbacksSet.add(databaseCallbacks); callbacks->onSuccess(this); }
void IDBDatabaseBackend::openConnectionInternal(PassRefPtr<IDBCallbacks> prpCallbacks, PassRefPtr<IDBDatabaseCallbacks> prpDatabaseCallbacks, int64_t transactionId, uint64_t version) { ASSERT(m_pendingDeleteCalls.isEmpty()); ASSERT(!m_runningVersionChangeTransaction); RefPtr<IDBCallbacks> callbacks = prpCallbacks; RefPtr<IDBDatabaseCallbacks> databaseCallbacks = prpDatabaseCallbacks; // We infer that the database didn't exist from its lack of either type of version. bool isNewDatabase = m_metadata.version == IDBDatabaseMetadata::NoIntVersion; if (version == IDBDatabaseMetadata::DefaultIntVersion) { // FIXME: this comments was related to Chromium code. It may be incorrect // For unit tests only - skip upgrade steps. Calling from script with DefaultIntVersion throws exception. ASSERT(isNewDatabase); m_databaseCallbacksSet.add(databaseCallbacks); callbacks->onSuccess(this, this->metadata()); return; } if (version == IDBDatabaseMetadata::NoIntVersion) { if (!isNewDatabase) { m_databaseCallbacksSet.add(RefPtr<IDBDatabaseCallbacks>(databaseCallbacks)); callbacks->onSuccess(this, this->metadata()); return; } // Spec says: If no version is specified and no database exists, set database version to 1. version = 1; } if (version > m_metadata.version) { runIntVersionChangeTransaction(callbacks, databaseCallbacks, transactionId, version); return; } if (version < m_metadata.version) { callbacks->onError(IDBDatabaseError::create(IDBDatabaseException::VersionError, String::format("The requested version (%llu) is less than the existing version (%llu).", static_cast<unsigned long long>(version), static_cast<unsigned long long>(m_metadata.version)))); return; } ASSERT(version == m_metadata.version); m_databaseCallbacksSet.add(databaseCallbacks); callbacks->onSuccess(this, this->metadata()); }
void IDBDatabaseBackend::openConnectionInternal(PassRefPtr<IDBCallbacks> prpCallbacks, PassRefPtr<IDBDatabaseCallbacks> prpDatabaseCallbacks, int64_t transactionId, uint64_t version) { ASSERT(m_pendingDeleteCalls.isEmpty()); ASSERT(!m_runningVersionChangeTransaction); RefPtr<IDBCallbacks> callbacks = prpCallbacks; RefPtr<IDBDatabaseCallbacks> databaseCallbacks = prpDatabaseCallbacks; // We infer that the database didn't exist from its lack of version. bool isNewDatabase = m_metadata.version == IDBDatabaseMetadata::NoIntVersion; if (version == IDBDatabaseMetadata::DefaultIntVersion && !isNewDatabase) { m_databaseCallbacksSet.add(databaseCallbacks); callbacks->onSuccess(this, this->metadata()); return; } if (isNewDatabase && version == IDBDatabaseMetadata::DefaultIntVersion) { // Spec says: If no version is specified and no database exists, set database version to 1. version = 1; } if (version > m_metadata.version || m_metadata.version == IDBDatabaseMetadata::NoIntVersion) { runIntVersionChangeTransaction(callbacks, databaseCallbacks, transactionId, version); return; } if (version < m_metadata.version && m_metadata.version != IDBDatabaseMetadata::NoIntVersion) { callbacks->onError(IDBDatabaseError::create(IDBDatabaseException::VersionError, String::format("The requested version (%llu) is less than the existing version (%llu).", static_cast<unsigned long long>(version), static_cast<unsigned long long>(m_metadata.version)))); return; } ASSERT(version == m_metadata.version); m_databaseCallbacksSet.add(databaseCallbacks); callbacks->onSuccess(this, this->metadata()); }