mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-06-09 09:34:57 +09:00
LibWeb/IDB: Resolve FIXME regarding removing from indecies
This commit is contained in:
parent
46ecf239c4
commit
13674c1b32
Notes:
github-actions[bot]
2025-05-14 15:18:50 +00:00
Author: https://github.com/stelar7
Commit: 13674c1b32
Pull-request: https://github.com/LadybirdBrowser/ladybird/pull/4727
Reviewed-by: https://github.com/gmta ✅
Reviewed-by: https://github.com/shannonbooth
3 changed files with 12 additions and 1 deletions
|
@ -1318,7 +1318,10 @@ JS::Value delete_records_from_an_object_store(GC::Ref<ObjectStore> store, GC::Re
|
||||||
// 1. Remove all records, if any, from store’s list of records with key in range.
|
// 1. Remove all records, if any, from store’s list of records with key in range.
|
||||||
store->remove_records_in_range(range);
|
store->remove_records_in_range(range);
|
||||||
|
|
||||||
// FIXME: 2. For each index which references store, remove every record from index’s list of records whose value is in range, if any such records exist.
|
// 2. For each index which references store, remove every record from index’s list of records whose value is in range, if any such records exist.
|
||||||
|
for (auto const& [name, index] : store->index_set()) {
|
||||||
|
index->remove_records_with_value_in_range(range);
|
||||||
|
}
|
||||||
|
|
||||||
// 3. Return undefined.
|
// 3. Return undefined.
|
||||||
return JS::js_undefined();
|
return JS::js_undefined();
|
||||||
|
|
|
@ -122,4 +122,11 @@ void Index::store_a_record(IndexRecord const& record)
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Index::remove_records_with_value_in_range(GC::Ref<IDBKeyRange> range)
|
||||||
|
{
|
||||||
|
m_records.remove_all_matching([&](auto const& record) {
|
||||||
|
return range->is_in_range(record.value);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -45,6 +45,7 @@ public:
|
||||||
GC::ConservativeVector<IndexRecord> first_n_in_range(GC::Ref<IDBKeyRange> range, Optional<WebIDL::UnsignedLong> count);
|
GC::ConservativeVector<IndexRecord> first_n_in_range(GC::Ref<IDBKeyRange> range, Optional<WebIDL::UnsignedLong> count);
|
||||||
u64 count_records_in_range(GC::Ref<IDBKeyRange> range);
|
u64 count_records_in_range(GC::Ref<IDBKeyRange> range);
|
||||||
void store_a_record(IndexRecord const& record);
|
void store_a_record(IndexRecord const& record);
|
||||||
|
void remove_records_with_value_in_range(GC::Ref<IDBKeyRange> range);
|
||||||
|
|
||||||
HTML::SerializationRecord referenced_value(IndexRecord const& index_record) const;
|
HTML::SerializationRecord referenced_value(IndexRecord const& index_record) const;
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue