Index: content/browser/indexed_db/indexed_db_index_writer.cc |
diff --git a/content/browser/indexed_db/indexed_db_index_writer.cc b/content/browser/indexed_db/indexed_db_index_writer.cc |
index 0ea24b67e850e1446d231a194b20fc57a9189091..13711cec122f08d3946c9944a05200adb7a76cc5 100644 |
--- a/content/browser/indexed_db/indexed_db_index_writer.cc |
+++ b/content/browser/indexed_db/indexed_db_index_writer.cc |
@@ -38,13 +38,14 @@ bool IndexWriter::VerifyIndexKeys( |
const IndexedDBKey& primary_key, |
base::string16* error_message) const { |
*can_add_keys = false; |
- for (size_t i = 0; i < index_keys_.size(); ++i) { |
+ DCHECK_EQ(index_id, index_keys_.first); |
+ for (size_t i = 0; i < index_keys_.second.size(); ++i) { |
bool ok = AddingKeyAllowed(backing_store, |
transaction, |
database_id, |
object_store_id, |
index_id, |
- (index_keys_)[i], |
+ (index_keys_.second)[i], |
primary_key, |
can_add_keys); |
if (!ok) |
@@ -70,12 +71,13 @@ void IndexWriter::WriteIndexKeys( |
int64 database_id, |
int64 object_store_id) const { |
int64 index_id = index_metadata_.id; |
- for (size_t i = 0; i < index_keys_.size(); ++i) { |
+ DCHECK_EQ(index_id, index_keys_.first); |
+ for (size_t i = 0; i < index_keys_.second.size(); ++i) { |
bool ok = backing_store->PutIndexDataForRecord(transaction, |
database_id, |
object_store_id, |
index_id, |
- index_keys_[i], |
+ index_keys_.second[i], |
record_identifier); |
// This should have already been verified as a valid write during |
// verify_index_keys. |
@@ -122,29 +124,27 @@ bool MakeIndexWriters( |
const IndexedDBObjectStoreMetadata& object_store, |
const IndexedDBKey& primary_key, // makes a copy |
bool key_was_generated, |
- const std::vector<int64>& index_ids, |
const std::vector<IndexedDBDatabase::IndexKeys>& index_keys, |
ScopedVector<IndexWriter>* index_writers, |
base::string16* error_message, |
bool* completed) { |
- DCHECK_EQ(index_ids.size(), index_keys.size()); |
*completed = false; |
- std::map<int64, IndexedDBDatabase::IndexKeys> index_key_map; |
- for (size_t i = 0; i < index_ids.size(); ++i) |
- index_key_map[index_ids[i]] = index_keys[i]; |
- |
- for (IndexedDBObjectStoreMetadata::IndexMap::const_iterator it = |
- object_store.indexes.begin(); |
- it != object_store.indexes.end(); |
+ for (std::vector<IndexedDBDatabase::IndexKeys>::const_iterator it = |
+ index_keys.begin(); |
+ it != index_keys.end(); |
++it) { |
- const IndexedDBIndexMetadata& index = it->second; |
+ IndexedDBObjectStoreMetadata::IndexMap::const_iterator found = |
+ object_store.indexes.find(it->first); |
+ if (found == object_store.indexes.end()) |
+ continue; |
+ const IndexedDBIndexMetadata& index = found->second; |
+ IndexedDBDatabase::IndexKeys keys = *it; |
- IndexedDBDatabase::IndexKeys keys = index_key_map[it->first]; |
// If the object_store is using auto_increment, then any indexes with an |
// identical key_path need to also use the primary (generated) key as a key. |
if (key_was_generated && (index.key_path == object_store.key_path)) |
- keys.push_back(primary_key); |
+ keys.second.push_back(primary_key); |
scoped_ptr<IndexWriter> index_writer(new IndexWriter(index, keys)); |
bool can_add_keys = false; |