std::unique_ptr<IDBDatabaseMetadata> UniqueIDBDatabaseBackingStoreSQLite::getOrEstablishMetadata() { ASSERT(!isMainThread()); String dbFilename = pathByAppendingComponent(m_absoluteDatabaseDirectory, "IndexedDB.sqlite3"); m_sqliteDB = openSQLiteDatabaseAtPath(dbFilename); if (!m_sqliteDB) return nullptr; RefPtr<UniqueIDBDatabaseBackingStoreSQLite> protector(this); m_sqliteDB->setCollationFunction("IDBKEY", [this](int aLength, const void* a, int bLength, const void* b) { return collate(aLength, a, bLength, b); }); std::unique_ptr<IDBDatabaseMetadata> metadata = extractExistingMetadata(); if (!metadata) metadata = createAndPopulateInitialMetadata(); if (!metadata) LOG_ERROR("Unable to establish IDB database at path '%s'", dbFilename.utf8().data()); // The database id is a runtime concept and doesn't need to be stored in the metadata database. metadata->id = generateDatabaseId(); return metadata; }
std::unique_ptr<IDBDatabaseMetadata> UniqueIDBDatabaseBackingStoreSQLite::getOrEstablishMetadata() { ASSERT(!isMainThread()); String dbFilename = pathByAppendingComponent(m_absoluteDatabaseDirectory, "IndexedDB.sqlite3"); m_sqliteDB = openSQLiteDatabaseAtPath(dbFilename); if (!m_sqliteDB) return nullptr; std::unique_ptr<IDBDatabaseMetadata> metadata = extractExistingMetadata(); if (!metadata) metadata = createAndPopulateInitialMetadata(); if (!metadata) LOG_ERROR("Unable to establish IDB database at path '%s'", dbFilename.utf8().data()); // The database id is a runtime concept and doesn't need to be stored in the metadata database. metadata->id = generateDatabaseId(); return metadata; }