IDBKeyData IndexValueStore::lowestKeyWithRecordInRange(const IDBKeyRangeData& range) const { LOG(IndexedDB, "IndexValueStore::lowestKeyWithRecordInRange - %s", range.loggingString().utf8().data()); if (range.isExactlyOneKey()) return m_records.contains(range.lowerKey) ? range.lowerKey : IDBKeyData(); auto iterator = lowestIteratorInRange(range); if (iterator == m_orderedKeys.end()) return { }; return *iterator; }
IDBGetResult MemoryIndex::getResultForKeyRange(IndexedDB::IndexRecordType type, const IDBKeyRangeData& range) const { LOG(IndexedDB, "MemoryIndex::getResultForKeyRange - %s", range.loggingString().utf8().data()); if (!m_records) return { }; IDBKeyData keyToLookFor; if (range.isExactlyOneKey()) keyToLookFor = range.lowerKey; else keyToLookFor = m_records->lowestKeyWithRecordInRange(range); if (keyToLookFor.isNull()) return { }; const IDBKeyData* keyValue = m_records->lowestValueForKey(keyToLookFor); if (!keyValue) return { }; return type == IndexedDB::IndexRecordType::Key ? IDBGetResult(*keyValue) : IDBGetResult(m_objectStore.valueForKeyRange(*keyValue)); }