diff options
author | zork@google.com <zork@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-12-18 22:40:42 +0000 |
---|---|---|
committer | zork@google.com <zork@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-12-18 22:40:42 +0000 |
commit | a8c8b34888746435dfe73ff529aaf3b1d9ace3e3 (patch) | |
tree | 31e3a982a8f9768f0b2a1095de5a3f7470bb9a87 /chrome | |
parent | 41e4a1db55ae404445a3b70a4b266709a5dddb1b (diff) | |
download | chromium_src-a8c8b34888746435dfe73ff529aaf3b1d9ace3e3.zip chromium_src-a8c8b34888746435dfe73ff529aaf3b1d9ace3e3.tar.gz chromium_src-a8c8b34888746435dfe73ff529aaf3b1d9ace3e3.tar.bz2 |
Continuing migration of directory_backing_store.cc to Chromium sqlite wrappers.
BUG=none
TEST=Run sync_unit_tests
Review URL: http://codereview.chromium.org/500114
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@34993 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome')
-rwxr-xr-x | chrome/browser/sync/syncable/directory_backing_store.cc | 71 | ||||
-rw-r--r-- | chrome/browser/sync/syncable/syncable_id.cc | 9 | ||||
-rw-r--r-- | chrome/browser/sync/syncable/syncable_id.h | 6 |
3 files changed, 45 insertions, 41 deletions
diff --git a/chrome/browser/sync/syncable/directory_backing_store.cc b/chrome/browser/sync/syncable/directory_backing_store.cc index 9f59613..69605d6 100755 --- a/chrome/browser/sync/syncable/directory_backing_store.cc +++ b/chrome/browser/sync/syncable/directory_backing_store.cc @@ -103,52 +103,56 @@ static string GenerateCacheGUID() { // Iterate over the fields of |entry| and bind each to |statement| for // updating. Returns the number of args bound. -static int BindFields(const EntryKernel& entry, sqlite3_stmt* statement) { - int index = 1; +int BindFields(const EntryKernel& entry, SQLStatement* statement) { + int index = 0; int i = 0; for (i = BEGIN_FIELDS; i < INT64_FIELDS_END; ++i) { - BindArg(statement, entry.ref(static_cast<Int64Field>(i)), index++); + statement->bind_int64(index++, entry.ref(static_cast<Int64Field>(i))); } for ( ; i < ID_FIELDS_END; ++i) { - BindArg(statement, entry.ref(static_cast<IdField>(i)), index++); + statement->bind_string(index++, entry.ref(static_cast<IdField>(i)).s_); } for ( ; i < BIT_FIELDS_END; ++i) { - BindArg(statement, entry.ref(static_cast<BitField>(i)), index++); + statement->bind_int(index++, entry.ref(static_cast<BitField>(i))); } for ( ; i < STRING_FIELDS_END; ++i) { - BindArg(statement, entry.ref(static_cast<StringField>(i)), index++); + statement->bind_string(index++, entry.ref(static_cast<StringField>(i))); } for ( ; i < BLOB_FIELDS_END; ++i) { - BindArg(statement, entry.ref(static_cast<BlobField>(i)), index++); + uint8* blob = entry.ref(static_cast<BlobField>(i)).empty() ? + NULL : const_cast<uint8*>(&entry.ref(static_cast<BlobField>(i)).at(0)); + statement->bind_blob(index++, blob, + entry.ref(static_cast<BlobField>(i)).size()); } - return index - 1; + return index; } // The caller owns the returned EntryKernel*. -static EntryKernel* UnpackEntry(sqlite3_stmt* statement) { +EntryKernel* UnpackEntry(SQLStatement* statement) { EntryKernel* result = NULL; - int query_result = sqlite3_step(statement); + int query_result = statement->step(); if (SQLITE_ROW == query_result) { result = new EntryKernel; result->clear_dirty(); - CHECK(sqlite3_column_count(statement) == static_cast<int>(FIELD_COUNT)); + CHECK(statement->column_count() == static_cast<int>(FIELD_COUNT)); int i = 0; for (i = BEGIN_FIELDS; i < INT64_FIELDS_END; ++i) { result->ref(static_cast<Int64Field>(i)) = - sqlite3_column_int64(statement, i); + statement->column_int64(i); } for ( ; i < ID_FIELDS_END; ++i) { - GetColumn(statement, i, &result->ref(static_cast<IdField>(i))); + result->ref(static_cast<IdField>(i)).s_ = statement->column_string(i); } for ( ; i < BIT_FIELDS_END; ++i) { result->ref(static_cast<BitField>(i)) = - (0 != sqlite3_column_int(statement, i)); + (0 != statement->column_int(i)); } for ( ; i < STRING_FIELDS_END; ++i) { - GetColumn(statement, i, &result->ref(static_cast<StringField>(i))); + result->ref(static_cast<StringField>(i)) = statement->column_string(i); } for ( ; i < BLOB_FIELDS_END; ++i) { - GetColumn(statement, i, &result->ref(static_cast<BlobField>(i))); + statement->column_blob_as_vector( + i, &result->ref(static_cast<BlobField>(i))); } ZeroFields(result, i); } else { @@ -355,9 +359,10 @@ void DirectoryBackingStore::LoadEntries(MetahandlesIndex* entry_bucket) { joiner = ", "; } select.append(" FROM metas "); - ScopedStatement statement(PrepareQuery(load_dbhandle_, select.c_str())); + SQLStatement statement; + statement.prepare(load_dbhandle_, select.c_str()); base::hash_set<int64> handles; - while (EntryKernel* kernel = UnpackEntry(statement.get())) { + while (EntryKernel* kernel = UnpackEntry(&statement)) { DCHECK(handles.insert(kernel->ref(META_HANDLE)).second); // Only in debug. entry_bucket->insert(kernel); } @@ -365,20 +370,24 @@ void DirectoryBackingStore::LoadEntries(MetahandlesIndex* entry_bucket) { void DirectoryBackingStore::LoadExtendedAttributes( ExtendedAttributes* xattrs_bucket) { - ScopedStatement statement(PrepareQuery(load_dbhandle_, - "SELECT metahandle, key, value FROM extended_attributes")); - int step_result = sqlite3_step(statement.get()); + SQLStatement statement; + statement.prepare( + load_dbhandle_, + "SELECT metahandle, key, value FROM extended_attributes"); + int step_result = statement.step(); while (SQLITE_ROW == step_result) { - int64 metahandle; + int64 metahandle = statement.column_int64(0); + string path_string_key; + DCHECK(statement.column_string(1, &path_string_key)); + ExtendedAttributeValue val; + DCHECK(statement.column_blob_as_vector(2, &(val.value))); val.is_deleted = false; - GetColumn(statement.get(), 0, &metahandle); - GetColumn(statement.get(), 1, &path_string_key); - GetColumn(statement.get(), 2, &(val.value)); + ExtendedAttributeKey key(metahandle, path_string_key); xattrs_bucket->insert(std::make_pair(key, val)); - step_result = sqlite3_step(statement.get()); + step_result = statement.step(); } CHECK(SQLITE_DONE == step_result); } @@ -421,10 +430,12 @@ bool DirectoryBackingStore::SaveEntryToDB(const EntryKernel& entry) { query.append(" ) "); values.append(" )"); query.append(values); - ScopedStatement const statement(PrepareQuery(save_dbhandle_, query.c_str())); - BindFields(entry, statement.get()); - return StepDone(statement.get(), "SaveEntryToDB()") && - 1 == sqlite3_changes(save_dbhandle_); + SQLStatement statement; + statement.prepare(save_dbhandle_, query.c_str()); + BindFields(entry, &statement); + return (SQLITE_DONE == statement.step() && + SQLITE_OK == statement.reset() && + 1 == statement.changes()); } bool DirectoryBackingStore::SaveExtendedAttributeToDB( diff --git a/chrome/browser/sync/syncable/syncable_id.cc b/chrome/browser/sync/syncable/syncable_id.cc index 3c53ad1..93439aa 100644 --- a/chrome/browser/sync/syncable/syncable_id.cc +++ b/chrome/browser/sync/syncable/syncable_id.cc @@ -16,15 +16,6 @@ namespace syncable { const Id kNullId; // Currently == root. } // namespace syncable -sqlite3_stmt* BindArg(sqlite3_stmt* statement, const syncable::Id& id, - int index) { - return BindArg(statement, id.s_.c_str(), index); -} - -void GetColumn(sqlite3_stmt* statement, int index, syncable::Id* id) { - GetColumn(statement, index, &id->s_); -} - ostream& operator << (ostream& out, const syncable::Id& id) { out << id.s_; return out; diff --git a/chrome/browser/sync/syncable/syncable_id.h b/chrome/browser/sync/syncable/syncable_id.h index a5f9aea..f9d75c4 100644 --- a/chrome/browser/sync/syncable/syncable_id.h +++ b/chrome/browser/sync/syncable/syncable_id.h @@ -20,10 +20,12 @@ struct sqlite3_stmt; } namespace syncable { +struct EntryKernel; class Id; } // namespace syncable class MockConnectionManager; +class SQLStatement; sqlite3_stmt* BindArg(sqlite3_stmt*, const syncable::Id&, int index); void GetColumn(sqlite3_stmt*, int index, syncable::Id* value); @@ -44,8 +46,8 @@ namespace syncable { // 2. r for the root item. // 3. s<server provided opaque id> for items that the server knows about. class Id { - friend sqlite3_stmt* ::BindArg(sqlite3_stmt*, const syncable::Id&, int index); - friend void ::GetColumn(sqlite3_stmt*, int index, syncable::Id* value); + friend syncable::EntryKernel* UnpackEntry(SQLStatement* statement); + friend int BindFields(const EntryKernel& entry, SQLStatement* statement); friend std::ostream& ::operator << (std::ostream& out, const syncable::Id& id); friend browser_sync::FastDump& ::operator << |