summaryrefslogtreecommitdiffstats
path: root/chrome
diff options
context:
space:
mode:
authorzork@google.com <zork@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2009-12-18 22:40:42 +0000
committerzork@google.com <zork@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2009-12-18 22:40:42 +0000
commita8c8b34888746435dfe73ff529aaf3b1d9ace3e3 (patch)
tree31e3a982a8f9768f0b2a1095de5a3f7470bb9a87 /chrome
parent41e4a1db55ae404445a3b70a4b266709a5dddb1b (diff)
downloadchromium_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-xchrome/browser/sync/syncable/directory_backing_store.cc71
-rw-r--r--chrome/browser/sync/syncable/syncable_id.cc9
-rw-r--r--chrome/browser/sync/syncable/syncable_id.h6
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 <<