| OLD | NEW |
| 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "content/browser/indexed_db/indexed_db_index_writer.h" | 5 #include "content/browser/indexed_db/indexed_db_index_writer.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 #include <utility> | 8 #include <utility> |
| 9 | 9 |
| 10 #include "base/logging.h" | 10 #include "base/logging.h" |
| (...skipping 24 matching lines...) Expand all Loading... |
| 35 IndexedDBBackingStore* backing_store, | 35 IndexedDBBackingStore* backing_store, |
| 36 IndexedDBBackingStore::Transaction* transaction, | 36 IndexedDBBackingStore::Transaction* transaction, |
| 37 int64_t database_id, | 37 int64_t database_id, |
| 38 int64_t object_store_id, | 38 int64_t object_store_id, |
| 39 int64_t index_id, | 39 int64_t index_id, |
| 40 bool* can_add_keys, | 40 bool* can_add_keys, |
| 41 const IndexedDBKey& primary_key, | 41 const IndexedDBKey& primary_key, |
| 42 base::string16* error_message) const { | 42 base::string16* error_message) const { |
| 43 *can_add_keys = false; | 43 *can_add_keys = false; |
| 44 DCHECK_EQ(index_id, index_keys_.first); | 44 DCHECK_EQ(index_id, index_keys_.first); |
| 45 for (size_t i = 0; i < index_keys_.second.size(); ++i) { | 45 for (const auto& key : index_keys_.second) { |
| 46 bool ok = AddingKeyAllowed(backing_store, | 46 bool ok = AddingKeyAllowed(backing_store, transaction, database_id, |
| 47 transaction, | 47 object_store_id, index_id, key, primary_key, |
| 48 database_id, | |
| 49 object_store_id, | |
| 50 index_id, | |
| 51 (index_keys_.second)[i], | |
| 52 primary_key, | |
| 53 can_add_keys); | 48 can_add_keys); |
| 54 if (!ok) | 49 if (!ok) |
| 55 return false; | 50 return false; |
| 56 if (!*can_add_keys) { | 51 if (!*can_add_keys) { |
| 57 if (error_message) { | 52 if (error_message) { |
| 58 *error_message = ASCIIToUTF16("Unable to add key to index '") + | 53 *error_message = ASCIIToUTF16("Unable to add key to index '") + |
| 59 index_metadata_.name + | 54 index_metadata_.name + |
| 60 ASCIIToUTF16("': at least one key does not satisfy " | 55 ASCIIToUTF16("': at least one key does not satisfy " |
| 61 "the uniqueness requirements."); | 56 "the uniqueness requirements."); |
| 62 } | 57 } |
| 63 return true; | 58 return true; |
| 64 } | 59 } |
| 65 } | 60 } |
| 66 *can_add_keys = true; | 61 *can_add_keys = true; |
| 67 return true; | 62 return true; |
| 68 } | 63 } |
| 69 | 64 |
| 70 void IndexWriter::WriteIndexKeys( | 65 void IndexWriter::WriteIndexKeys( |
| 71 const IndexedDBBackingStore::RecordIdentifier& record_identifier, | 66 const IndexedDBBackingStore::RecordIdentifier& record_identifier, |
| 72 IndexedDBBackingStore* backing_store, | 67 IndexedDBBackingStore* backing_store, |
| 73 IndexedDBBackingStore::Transaction* transaction, | 68 IndexedDBBackingStore::Transaction* transaction, |
| 74 int64_t database_id, | 69 int64_t database_id, |
| 75 int64_t object_store_id) const { | 70 int64_t object_store_id) const { |
| 76 int64_t index_id = index_metadata_.id; | 71 int64_t index_id = index_metadata_.id; |
| 77 DCHECK_EQ(index_id, index_keys_.first); | 72 DCHECK_EQ(index_id, index_keys_.first); |
| 78 for (size_t i = 0; i < index_keys_.second.size(); ++i) { | 73 for (const auto& key : index_keys_.second) { |
| 79 leveldb::Status s = | 74 leveldb::Status s = backing_store->PutIndexDataForRecord( |
| 80 backing_store->PutIndexDataForRecord(transaction, | 75 transaction, database_id, object_store_id, index_id, key, |
| 81 database_id, | 76 record_identifier); |
| 82 object_store_id, | |
| 83 index_id, | |
| 84 index_keys_.second[i], | |
| 85 record_identifier); | |
| 86 // This should have already been verified as a valid write during | 77 // This should have already been verified as a valid write during |
| 87 // verify_index_keys. | 78 // verify_index_keys. |
| 88 DCHECK(s.ok()); | 79 DCHECK(s.ok()); |
| 89 } | 80 } |
| 90 } | 81 } |
| 91 | 82 |
| 92 bool IndexWriter::AddingKeyAllowed( | 83 bool IndexWriter::AddingKeyAllowed( |
| 93 IndexedDBBackingStore* backing_store, | 84 IndexedDBBackingStore* backing_store, |
| 94 IndexedDBBackingStore::Transaction* transaction, | 85 IndexedDBBackingStore::Transaction* transaction, |
| 95 int64_t database_id, | 86 int64_t database_id, |
| (...skipping 26 matching lines...) Expand all Loading... |
| 122 } | 113 } |
| 123 | 114 |
| 124 bool MakeIndexWriters( | 115 bool MakeIndexWriters( |
| 125 IndexedDBTransaction* transaction, | 116 IndexedDBTransaction* transaction, |
| 126 IndexedDBBackingStore* backing_store, | 117 IndexedDBBackingStore* backing_store, |
| 127 int64_t database_id, | 118 int64_t database_id, |
| 128 const IndexedDBObjectStoreMetadata& object_store, | 119 const IndexedDBObjectStoreMetadata& object_store, |
| 129 const IndexedDBKey& primary_key, // makes a copy | 120 const IndexedDBKey& primary_key, // makes a copy |
| 130 bool key_was_generated, | 121 bool key_was_generated, |
| 131 const std::vector<IndexedDBDatabase::IndexKeys>& index_keys, | 122 const std::vector<IndexedDBDatabase::IndexKeys>& index_keys, |
| 132 ScopedVector<IndexWriter>* index_writers, | 123 std::vector<std::unique_ptr<IndexWriter>>* index_writers, |
| 133 base::string16* error_message, | 124 base::string16* error_message, |
| 134 bool* completed) { | 125 bool* completed) { |
| 135 *completed = false; | 126 *completed = false; |
| 136 | 127 |
| 137 for (const auto& it : index_keys) { | 128 for (const auto& it : index_keys) { |
| 138 const auto& found = object_store.indexes.find(it.first); | 129 const auto& found = object_store.indexes.find(it.first); |
| 139 if (found == object_store.indexes.end()) | 130 if (found == object_store.indexes.end()) |
| 140 continue; | 131 continue; |
| 141 const IndexedDBIndexMetadata& index = found->second; | 132 const IndexedDBIndexMetadata& index = found->second; |
| 142 IndexedDBDatabase::IndexKeys keys = it; | 133 IndexedDBDatabase::IndexKeys keys = it; |
| (...skipping 21 matching lines...) Expand all Loading... |
| 164 return true; | 155 return true; |
| 165 | 156 |
| 166 index_writers->push_back(std::move(index_writer)); | 157 index_writers->push_back(std::move(index_writer)); |
| 167 } | 158 } |
| 168 | 159 |
| 169 *completed = true; | 160 *completed = true; |
| 170 return true; | 161 return true; |
| 171 } | 162 } |
| 172 | 163 |
| 173 } // namespace content | 164 } // namespace content |
| OLD | NEW |