Commit b5935efd authored by Joshua Bell's avatar Joshua Bell Committed by Commit Bot

IndexedDB: Simplify IndexWriter's member data

An IndexWriter was holding both the index's metadata (including id)
and an "IndexedDBIndexKeys" struct with the index's id and a vector
of keys.

Simplify to just holding the metadata and vector of keys, which
removes an indirection step in a few places in the code. Refactored
out of an upcoming change.

Change-Id: I8efefdc5350c48a61df58b46b51be4c685c94ca5
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1733014
Commit-Queue: Joshua Bell <jsbell@chromium.org>
Commit-Queue: Daniel Murphy <dmurph@chromium.org>
Reviewed-by: default avatarDaniel Murphy <dmurph@chromium.org>
Auto-Submit: Joshua Bell <jsbell@chromium.org>
Cr-Commit-Position: refs/heads/master@{#684107}
parent d4ced263
...@@ -27,8 +27,8 @@ IndexWriter::IndexWriter( ...@@ -27,8 +27,8 @@ IndexWriter::IndexWriter(
: index_metadata_(index_metadata) {} : index_metadata_(index_metadata) {}
IndexWriter::IndexWriter(const IndexedDBIndexMetadata& index_metadata, IndexWriter::IndexWriter(const IndexedDBIndexMetadata& index_metadata,
const IndexedDBIndexKeys& index_keys) const std::vector<IndexedDBKey>& keys)
: index_metadata_(index_metadata), index_keys_(index_keys) {} : index_metadata_(index_metadata), keys_(keys) {}
IndexWriter::~IndexWriter() {} IndexWriter::~IndexWriter() {}
...@@ -42,8 +42,7 @@ bool IndexWriter::VerifyIndexKeys( ...@@ -42,8 +42,7 @@ bool IndexWriter::VerifyIndexKeys(
const IndexedDBKey& primary_key, const IndexedDBKey& primary_key,
base::string16* error_message) const { base::string16* error_message) const {
*can_add_keys = false; *can_add_keys = false;
DCHECK_EQ(index_id, index_keys_.id); for (const auto& key : keys_) {
for (const auto& key : index_keys_.keys) {
bool ok = AddingKeyAllowed(backing_store, transaction, database_id, bool ok = AddingKeyAllowed(backing_store, transaction, database_id,
object_store_id, index_id, key, primary_key, object_store_id, index_id, key, primary_key,
can_add_keys); can_add_keys);
...@@ -70,8 +69,7 @@ void IndexWriter::WriteIndexKeys( ...@@ -70,8 +69,7 @@ void IndexWriter::WriteIndexKeys(
int64_t database_id, int64_t database_id,
int64_t object_store_id) const { int64_t object_store_id) const {
int64_t index_id = index_metadata_.id; int64_t index_id = index_metadata_.id;
DCHECK_EQ(index_id, index_keys_.id); for (const auto& key : keys_) {
for (const auto& key : index_keys_.keys) {
leveldb::Status s = backing_store->PutIndexDataForRecord( leveldb::Status s = backing_store->PutIndexDataForRecord(
transaction, database_id, object_store_id, index_id, key, transaction, database_id, object_store_id, index_id, key,
record_identifier); record_identifier);
...@@ -130,12 +128,13 @@ bool MakeIndexWriters(IndexedDBTransaction* transaction, ...@@ -130,12 +128,13 @@ bool MakeIndexWriters(IndexedDBTransaction* transaction,
if (found == object_store.indexes.end()) if (found == object_store.indexes.end())
continue; continue;
const IndexedDBIndexMetadata& index = found->second; const IndexedDBIndexMetadata& index = found->second;
IndexedDBIndexKeys keys = it; // A copy is made because additional keys may be added.
std::vector<IndexedDBKey> keys = it.keys;
// If the object_store is using auto_increment, then any indexes with an // 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. // 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)) if (key_was_generated && (index.key_path == object_store.key_path))
keys.keys.push_back(primary_key); keys.push_back(primary_key);
std::unique_ptr<IndexWriter> index_writer( std::unique_ptr<IndexWriter> index_writer(
std::make_unique<IndexWriter>(index, keys)); std::make_unique<IndexWriter>(index, keys));
......
...@@ -29,7 +29,7 @@ class IndexWriter { ...@@ -29,7 +29,7 @@ class IndexWriter {
explicit IndexWriter(const blink::IndexedDBIndexMetadata& index_metadata); explicit IndexWriter(const blink::IndexedDBIndexMetadata& index_metadata);
IndexWriter(const blink::IndexedDBIndexMetadata& index_metadata, IndexWriter(const blink::IndexedDBIndexMetadata& index_metadata,
const blink::IndexedDBIndexKeys& index_keys); const std::vector<blink::IndexedDBKey>& keys);
bool VerifyIndexKeys(IndexedDBBackingStore* store, bool VerifyIndexKeys(IndexedDBBackingStore* store,
IndexedDBBackingStore::Transaction* transaction, IndexedDBBackingStore::Transaction* transaction,
...@@ -59,7 +59,7 @@ class IndexWriter { ...@@ -59,7 +59,7 @@ class IndexWriter {
bool* allowed) const WARN_UNUSED_RESULT; bool* allowed) const WARN_UNUSED_RESULT;
const blink::IndexedDBIndexMetadata index_metadata_; const blink::IndexedDBIndexMetadata index_metadata_;
blink::IndexedDBIndexKeys index_keys_; const std::vector<blink::IndexedDBKey> keys_;
DISALLOW_COPY_AND_ASSIGN(IndexWriter); DISALLOW_COPY_AND_ASSIGN(IndexWriter);
}; };
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment