Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(490)

Side by Side Diff: content/browser/indexed_db/indexed_db_index_writer.cc

Issue 138703002: IndexedDB: Replace passing identically-sized vectors with pairs (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebased again Created 6 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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 "base/logging.h" 7 #include "base/logging.h"
8 #include "base/strings/utf_string_conversions.h" 8 #include "base/strings/utf_string_conversions.h"
9 #include "content/browser/indexed_db/indexed_db_backing_store.h" 9 #include "content/browser/indexed_db/indexed_db_backing_store.h"
10 #include "content/browser/indexed_db/indexed_db_tracing.h" 10 #include "content/browser/indexed_db/indexed_db_tracing.h"
(...skipping 20 matching lines...) Expand all
31 bool IndexWriter::VerifyIndexKeys( 31 bool IndexWriter::VerifyIndexKeys(
32 IndexedDBBackingStore* backing_store, 32 IndexedDBBackingStore* backing_store,
33 IndexedDBBackingStore::Transaction* transaction, 33 IndexedDBBackingStore::Transaction* transaction,
34 int64 database_id, 34 int64 database_id,
35 int64 object_store_id, 35 int64 object_store_id,
36 int64 index_id, 36 int64 index_id,
37 bool* can_add_keys, 37 bool* can_add_keys,
38 const IndexedDBKey& primary_key, 38 const IndexedDBKey& primary_key,
39 base::string16* error_message) const { 39 base::string16* error_message) const {
40 *can_add_keys = false; 40 *can_add_keys = false;
41 for (size_t i = 0; i < index_keys_.size(); ++i) { 41 DCHECK_EQ(index_id, index_keys_.first);
42 for (size_t i = 0; i < index_keys_.second.size(); ++i) {
42 bool ok = AddingKeyAllowed(backing_store, 43 bool ok = AddingKeyAllowed(backing_store,
43 transaction, 44 transaction,
44 database_id, 45 database_id,
45 object_store_id, 46 object_store_id,
46 index_id, 47 index_id,
47 (index_keys_)[i], 48 (index_keys_.second)[i],
48 primary_key, 49 primary_key,
49 can_add_keys); 50 can_add_keys);
50 if (!ok) 51 if (!ok)
51 return false; 52 return false;
52 if (!*can_add_keys) { 53 if (!*can_add_keys) {
53 if (error_message) { 54 if (error_message) {
54 *error_message = ASCIIToUTF16("Unable to add key to index '") + 55 *error_message = ASCIIToUTF16("Unable to add key to index '") +
55 index_metadata_.name + 56 index_metadata_.name +
56 ASCIIToUTF16("': at least one key does not satisfy " 57 ASCIIToUTF16("': at least one key does not satisfy "
57 "the uniqueness requirements."); 58 "the uniqueness requirements.");
58 } 59 }
59 return true; 60 return true;
60 } 61 }
61 } 62 }
62 *can_add_keys = true; 63 *can_add_keys = true;
63 return true; 64 return true;
64 } 65 }
65 66
66 void IndexWriter::WriteIndexKeys( 67 void IndexWriter::WriteIndexKeys(
67 const IndexedDBBackingStore::RecordIdentifier& record_identifier, 68 const IndexedDBBackingStore::RecordIdentifier& record_identifier,
68 IndexedDBBackingStore* backing_store, 69 IndexedDBBackingStore* backing_store,
69 IndexedDBBackingStore::Transaction* transaction, 70 IndexedDBBackingStore::Transaction* transaction,
70 int64 database_id, 71 int64 database_id,
71 int64 object_store_id) const { 72 int64 object_store_id) const {
72 int64 index_id = index_metadata_.id; 73 int64 index_id = index_metadata_.id;
73 for (size_t i = 0; i < index_keys_.size(); ++i) { 74 DCHECK_EQ(index_id, index_keys_.first);
75 for (size_t i = 0; i < index_keys_.second.size(); ++i) {
74 bool ok = backing_store->PutIndexDataForRecord(transaction, 76 bool ok = backing_store->PutIndexDataForRecord(transaction,
75 database_id, 77 database_id,
76 object_store_id, 78 object_store_id,
77 index_id, 79 index_id,
78 index_keys_[i], 80 index_keys_.second[i],
79 record_identifier); 81 record_identifier);
80 // This should have already been verified as a valid write during 82 // This should have already been verified as a valid write during
81 // verify_index_keys. 83 // verify_index_keys.
82 DCHECK(ok); 84 DCHECK(ok);
83 } 85 }
84 } 86 }
85 87
86 bool IndexWriter::AddingKeyAllowed( 88 bool IndexWriter::AddingKeyAllowed(
87 IndexedDBBackingStore* backing_store, 89 IndexedDBBackingStore* backing_store,
88 IndexedDBBackingStore::Transaction* transaction, 90 IndexedDBBackingStore::Transaction* transaction,
(...skipping 26 matching lines...) Expand all
115 return true; 117 return true;
116 } 118 }
117 119
118 bool MakeIndexWriters( 120 bool MakeIndexWriters(
119 scoped_refptr<IndexedDBTransaction> transaction, 121 scoped_refptr<IndexedDBTransaction> transaction,
120 IndexedDBBackingStore* backing_store, 122 IndexedDBBackingStore* backing_store,
121 int64 database_id, 123 int64 database_id,
122 const IndexedDBObjectStoreMetadata& object_store, 124 const IndexedDBObjectStoreMetadata& object_store,
123 const IndexedDBKey& primary_key, // makes a copy 125 const IndexedDBKey& primary_key, // makes a copy
124 bool key_was_generated, 126 bool key_was_generated,
125 const std::vector<int64>& index_ids,
126 const std::vector<IndexedDBDatabase::IndexKeys>& index_keys, 127 const std::vector<IndexedDBDatabase::IndexKeys>& index_keys,
127 ScopedVector<IndexWriter>* index_writers, 128 ScopedVector<IndexWriter>* index_writers,
128 base::string16* error_message, 129 base::string16* error_message,
129 bool* completed) { 130 bool* completed) {
130 DCHECK_EQ(index_ids.size(), index_keys.size());
131 *completed = false; 131 *completed = false;
132 132
133 std::map<int64, IndexedDBDatabase::IndexKeys> index_key_map; 133 for (std::vector<IndexedDBDatabase::IndexKeys>::const_iterator it =
134 for (size_t i = 0; i < index_ids.size(); ++i) 134 index_keys.begin();
135 index_key_map[index_ids[i]] = index_keys[i]; 135 it != index_keys.end();
136 ++it) {
137 IndexedDBObjectStoreMetadata::IndexMap::const_iterator found =
138 object_store.indexes.find(it->first);
139 if (found == object_store.indexes.end())
140 continue;
141 const IndexedDBIndexMetadata& index = found->second;
142 IndexedDBDatabase::IndexKeys keys = *it;
136 143
137 for (IndexedDBObjectStoreMetadata::IndexMap::const_iterator it =
138 object_store.indexes.begin();
139 it != object_store.indexes.end();
140 ++it) {
141 const IndexedDBIndexMetadata& index = it->second;
142
143 IndexedDBDatabase::IndexKeys keys = index_key_map[it->first];
144 // If the object_store is using auto_increment, then any indexes with an 144 // If the object_store is using auto_increment, then any indexes with an
145 // identical key_path need to also use the primary (generated) key as a key. 145 // identical key_path need to also use the primary (generated) key as a key.
146 if (key_was_generated && (index.key_path == object_store.key_path)) 146 if (key_was_generated && (index.key_path == object_store.key_path))
147 keys.push_back(primary_key); 147 keys.second.push_back(primary_key);
148 148
149 scoped_ptr<IndexWriter> index_writer(new IndexWriter(index, keys)); 149 scoped_ptr<IndexWriter> index_writer(new IndexWriter(index, keys));
150 bool can_add_keys = false; 150 bool can_add_keys = false;
151 bool backing_store_success = 151 bool backing_store_success =
152 index_writer->VerifyIndexKeys(backing_store, 152 index_writer->VerifyIndexKeys(backing_store,
153 transaction->BackingStoreTransaction(), 153 transaction->BackingStoreTransaction(),
154 database_id, 154 database_id,
155 object_store.id, 155 object_store.id,
156 index.id, 156 index.id,
157 &can_add_keys, 157 &can_add_keys,
158 primary_key, 158 primary_key,
159 error_message); 159 error_message);
160 if (!backing_store_success) 160 if (!backing_store_success)
161 return false; 161 return false;
162 if (!can_add_keys) 162 if (!can_add_keys)
163 return true; 163 return true;
164 164
165 index_writers->push_back(index_writer.release()); 165 index_writers->push_back(index_writer.release());
166 } 166 }
167 167
168 *completed = true; 168 *completed = true;
169 return true; 169 return true;
170 } 170 }
171 171
172 } // namespace content 172 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/indexed_db/indexed_db_index_writer.h ('k') | content/child/indexed_db/indexed_db_dispatcher.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698