#include "chrome/browser/sync_file_system/drive_backend/metadata_database_index.h"
#include <tuple>
#include <unordered_set>
#include <utility>
#include "base/containers/contains.h"
#include "base/memory/ptr_util.h"
#include "base/strings/string_number_conversions.h"
#include "base/strings/string_util.h"
#include "base/threading/thread_restrictions.h"
#include "chrome/browser/sync_file_system/drive_backend/drive_backend_constants.h"
#include "chrome/browser/sync_file_system/drive_backend/drive_backend_util.h"
#include "chrome/browser/sync_file_system/drive_backend/leveldb_wrapper.h"
#include "chrome/browser/sync_file_system/drive_backend/metadata_database.h"
#include "chrome/browser/sync_file_system/drive_backend/metadata_database.pb.h"
#include "chrome/browser/sync_file_system/logger.h"
#include "third_party/leveldatabase/src/include/leveldb/db.h"
#include "third_party/leveldatabase/src/include/leveldb/write_batch.h"
namespace sync_file_system {
namespace drive_backend {
ParentIDAndTitle::ParentIDAndTitle() : … { … }
ParentIDAndTitle::ParentIDAndTitle(int64_t parent_id, const std::string& title)
: … { … }
bool operator==(const ParentIDAndTitle& left, const ParentIDAndTitle& right) { … }
bool operator<(const ParentIDAndTitle& left, const ParentIDAndTitle& right) { … }
DatabaseContents::DatabaseContents() { … }
DatabaseContents::~DatabaseContents() { … }
namespace {
template <typename Container>
typename Container::mapped_type FindItem(
const Container& container,
const typename Container::key_type& key) { … }
void ReadDatabaseContents(LevelDBWrapper* db, DatabaseContents* contents) { … }
void RemoveUnreachableItemsFromDB(DatabaseContents* contents,
int64_t sync_root_tracker_id,
LevelDBWrapper* db) { … }
}
std::unique_ptr<MetadataDatabaseIndex> MetadataDatabaseIndex::Create(
LevelDBWrapper* db) { … }
std::unique_ptr<MetadataDatabaseIndex> MetadataDatabaseIndex::CreateForTesting(
DatabaseContents* contents,
LevelDBWrapper* db) { … }
void MetadataDatabaseIndex::Initialize(
std::unique_ptr<ServiceMetadata> service_metadata,
DatabaseContents* contents) { … }
MetadataDatabaseIndex::MetadataDatabaseIndex(LevelDBWrapper* db) : … { … }
MetadataDatabaseIndex::~MetadataDatabaseIndex() { … }
void MetadataDatabaseIndex::RemoveUnreachableItems() { … }
bool MetadataDatabaseIndex::GetFileMetadata(
const std::string& file_id, FileMetadata* metadata) const { … }
bool MetadataDatabaseIndex::GetFileTracker(int64_t tracker_id,
FileTracker* tracker) const { … }
void MetadataDatabaseIndex::StoreFileMetadata(
std::unique_ptr<FileMetadata> metadata) { … }
void MetadataDatabaseIndex::StoreFileTracker(
std::unique_ptr<FileTracker> tracker) { … }
void MetadataDatabaseIndex::RemoveFileMetadata(const std::string& file_id) { … }
void MetadataDatabaseIndex::RemoveFileTracker(int64_t tracker_id) { … }
TrackerIDSet MetadataDatabaseIndex::GetFileTrackerIDsByFileID(
const std::string& file_id) const { … }
int64_t MetadataDatabaseIndex::GetAppRootTracker(
const std::string& app_id) const { … }
TrackerIDSet MetadataDatabaseIndex::GetFileTrackerIDsByParentAndTitle(
int64_t parent_tracker_id,
const std::string& title) const { … }
std::vector<int64_t> MetadataDatabaseIndex::GetFileTrackerIDsByParent(
int64_t parent_tracker_id) const { … }
std::string MetadataDatabaseIndex::PickMultiTrackerFileID() const { … }
ParentIDAndTitle MetadataDatabaseIndex::PickMultiBackingFilePath() const { … }
int64_t MetadataDatabaseIndex::PickDirtyTracker() const { … }
void MetadataDatabaseIndex::DemoteDirtyTracker(int64_t tracker_id) { … }
bool MetadataDatabaseIndex::HasDemotedDirtyTracker() const { … }
bool MetadataDatabaseIndex::IsDemotedDirtyTracker(int64_t tracker_id) const { … }
void MetadataDatabaseIndex::PromoteDemotedDirtyTracker(int64_t tracker_id) { … }
bool MetadataDatabaseIndex::PromoteDemotedDirtyTrackers() { … }
size_t MetadataDatabaseIndex::CountDirtyTracker() const { … }
size_t MetadataDatabaseIndex::CountFileMetadata() const { … }
size_t MetadataDatabaseIndex::CountFileTracker() const { … }
void MetadataDatabaseIndex::SetSyncRootRevalidated() const { … }
void MetadataDatabaseIndex::SetSyncRootTrackerID(int64_t sync_root_id) const { … }
void MetadataDatabaseIndex::SetLargestChangeID(
int64_t largest_change_id) const { … }
void MetadataDatabaseIndex::SetNextTrackerID(int64_t next_tracker_id) const { … }
bool MetadataDatabaseIndex::IsSyncRootRevalidated() const { … }
int64_t MetadataDatabaseIndex::GetSyncRootTrackerID() const { … }
int64_t MetadataDatabaseIndex::GetLargestChangeID() const { … }
int64_t MetadataDatabaseIndex::GetNextTrackerID() const { … }
std::vector<std::string> MetadataDatabaseIndex::GetRegisteredAppIDs() const { … }
std::vector<int64_t> MetadataDatabaseIndex::GetAllTrackerIDs() const { … }
std::vector<std::string> MetadataDatabaseIndex::GetAllMetadataIDs() const { … }
void MetadataDatabaseIndex::AddToAppIDIndex(
const FileTracker& new_tracker) { … }
void MetadataDatabaseIndex::UpdateInAppIDIndex(
const FileTracker& old_tracker,
const FileTracker& new_tracker) { … }
void MetadataDatabaseIndex::RemoveFromAppIDIndex(
const FileTracker& tracker) { … }
void MetadataDatabaseIndex::AddToFileIDIndexes(
const FileTracker& new_tracker) { … }
void MetadataDatabaseIndex::UpdateInFileIDIndexes(
const FileTracker& old_tracker,
const FileTracker& new_tracker) { … }
void MetadataDatabaseIndex::RemoveFromFileIDIndexes(
const FileTracker& tracker) { … }
void MetadataDatabaseIndex::AddToPathIndexes(
const FileTracker& new_tracker) { … }
void MetadataDatabaseIndex::UpdateInPathIndexes(
const FileTracker& old_tracker,
const FileTracker& new_tracker) { … }
void MetadataDatabaseIndex::RemoveFromPathIndexes(
const FileTracker& tracker) { … }
void MetadataDatabaseIndex::AddToDirtyTrackerIndexes(
const FileTracker& new_tracker) { … }
void MetadataDatabaseIndex::UpdateInDirtyTrackerIndexes(
const FileTracker& old_tracker,
const FileTracker& new_tracker) { … }
void MetadataDatabaseIndex::RemoveFromDirtyTrackerIndexes(
const FileTracker& tracker) { … }
}
}