| Index: sync/syncable/directory_backing_store.cc
|
| diff --git a/sync/syncable/directory_backing_store.cc b/sync/syncable/directory_backing_store.cc
|
| index f87933bea6323bfa9612ed6f2c031141985f2e66..9d18a2dbb3bcc5eb27bc430a0dde410c13187099 100644
|
| --- a/sync/syncable/directory_backing_store.cc
|
| +++ b/sync/syncable/directory_backing_store.cc
|
| @@ -538,8 +538,8 @@ bool DirectoryBackingStore::RefreshColumns() {
|
| return true;
|
| }
|
|
|
| -bool DirectoryBackingStore::LoadEntries(
|
| - Directory::MetahandlesMap* handles_map) {
|
| +bool DirectoryBackingStore::LoadEntries(Directory::MetahandlesMap* handles_map,
|
| + MetahandleSet* metahandles_to_purge) {
|
| string select;
|
| select.reserve(kUpdateStatementBufferSize);
|
| select.append("SELECT ");
|
| @@ -555,11 +555,25 @@ bool DirectoryBackingStore::LoadEntries(
|
| return false;
|
|
|
| int64 handle = kernel->ref(META_HANDLE);
|
| - (*handles_map)[handle] = kernel.release();
|
| + if (SafeToPurgeOnLoading(*kernel))
|
| + metahandles_to_purge->insert(handle);
|
| + else
|
| + (*handles_map)[handle] = kernel.release();
|
| }
|
| return s.Succeeded();
|
| }
|
|
|
| +bool DirectoryBackingStore::SafeToPurgeOnLoading(
|
| + const EntryKernel& entry) const {
|
| + if (entry.ref(IS_DEL)) {
|
| + if (!entry.ref(IS_UNSYNCED) && !entry.ref(IS_UNAPPLIED_UPDATE))
|
| + return true;
|
| + else if (!entry.ref(ID).ServerKnows())
|
| + return true;
|
| + }
|
| + return false;
|
| +}
|
| +
|
| bool DirectoryBackingStore::LoadDeleteJournals(
|
| JournalIndex* delete_journals) {
|
| string select;
|
| @@ -643,21 +657,6 @@ bool DirectoryBackingStore::SaveEntryToDB(sql::Statement* save_statement,
|
| return save_statement->Run();
|
| }
|
|
|
| -bool DirectoryBackingStore::DropDeletedEntries() {
|
| - if (!db_->Execute("DELETE FROM metas "
|
| - "WHERE is_del > 0 "
|
| - "AND is_unsynced < 1 "
|
| - "AND is_unapplied_update < 1")) {
|
| - return false;
|
| - }
|
| - if (!db_->Execute("DELETE FROM metas "
|
| - "WHERE is_del > 0 "
|
| - "AND id LIKE 'c%'")) {
|
| - return false;
|
| - }
|
| - return true;
|
| -}
|
| -
|
| bool DirectoryBackingStore::SafeDropTable(const char* table_name) {
|
| string query = "DROP TABLE IF EXISTS ";
|
| query.append(table_name);
|
|
|