Chromium Code Reviews| OLD | NEW |
|---|---|
| (Empty) | |
| 1 // Copyright (c) 2017 The Chromium Authors. All rights reserved. | |
|
sky
2017/03/01 04:15:24
no (c)
Gang Wu
2017/03/02 05:41:12
Done.
| |
| 2 // Use of this source code is governed by a BSD-style license that can be | |
| 3 // found in the LICENSE file. | |
| 4 | |
| 5 #include "components/history/core/browser/typed_url_sync_metadata_database.h" | |
| 6 | |
| 7 #include "sql/statement.h" | |
| 8 | |
| 9 namespace history { | |
| 10 | |
| 11 TypedURLSyncMetadataDatabase::TypedURLSyncMetadataDatabase() {} | |
| 12 | |
| 13 TypedURLSyncMetadataDatabase::~TypedURLSyncMetadataDatabase() {} | |
| 14 | |
| 15 bool TypedURLSyncMetadataDatabase::GetAllSyncMetadata( | |
| 16 syncer::ModelType model_type, | |
| 17 syncer::MetadataBatch* metadata_batch) { | |
| 18 DCHECK_EQ(model_type, syncer::TYPED_URLS) | |
| 19 << "Only the TYPED_URLS model type is supported"; | |
| 20 syncer::EntityMetadataMap metadata_records; | |
| 21 if (GetAllSyncEntityMetadata(model_type, &metadata_records)) { | |
| 22 for (const auto& pair : metadata_records) { | |
|
sky
2017/03/01 04:15:24
no {}
Gang Wu
2017/03/02 05:41:12
Done.
| |
| 23 metadata_batch->AddMetadata(pair.first, pair.second); | |
|
sky
2017/03/01 04:15:24
Using std::pair for this class makes for hard to u
Gang Wu
2017/03/02 05:41:12
This is C++ STL auto iterator for std::map, I cann
| |
| 24 } | |
| 25 } else { | |
| 26 return false; | |
| 27 } | |
| 28 | |
| 29 sync_pb::ModelTypeState model_type_state; | |
| 30 if (GetModelTypeState(model_type, &model_type_state)) { | |
| 31 metadata_batch->SetModelTypeState(model_type_state); | |
| 32 } else { | |
| 33 return false; | |
| 34 } | |
| 35 | |
| 36 return true; | |
| 37 } | |
| 38 | |
| 39 bool TypedURLSyncMetadataDatabase::UpdateSyncMetadata( | |
| 40 syncer::ModelType model_type, | |
| 41 const std::string& storage_key, | |
| 42 const sync_pb::EntityMetadata& metadata) { | |
| 43 DCHECK_EQ(model_type, syncer::TYPED_URLS) | |
| 44 << "Only the TYPED_URLS model type is supported"; | |
| 45 | |
| 46 sql::Statement s(GetDB().GetUniqueStatement( | |
| 47 "INSERT OR REPLACE INTO typed_url_sync_metadata " | |
| 48 "(storage_key, value) VALUES(?, ?)")); | |
| 49 s.BindString(0, storage_key); | |
| 50 s.BindString(1, metadata.SerializeAsString()); | |
|
sky
2017/03/01 04:15:24
Who handles versioning of this string?
Gang Wu
2017/03/02 05:41:12
protobuf will control backward compatibility for m
| |
| 51 | |
| 52 return s.Run(); | |
| 53 } | |
| 54 | |
| 55 bool TypedURLSyncMetadataDatabase::ClearSyncMetadata( | |
| 56 syncer::ModelType model_type, | |
| 57 const std::string& storage_key) { | |
| 58 DCHECK_EQ(model_type, syncer::TYPED_URLS) | |
| 59 << "Only the TYPED_URLS model type is supported"; | |
| 60 | |
| 61 sql::Statement s(GetDB().GetUniqueStatement( | |
| 62 "DELETE FROM typed_url_sync_metadata WHERE storage_key=?")); | |
| 63 s.BindString(0, storage_key); | |
| 64 | |
| 65 return s.Run(); | |
| 66 } | |
| 67 | |
| 68 bool TypedURLSyncMetadataDatabase::UpdateModelTypeState( | |
| 69 syncer::ModelType model_type, | |
| 70 const sync_pb::ModelTypeState& model_type_state) { | |
| 71 DCHECK_EQ(model_type, syncer::TYPED_URLS) | |
| 72 << "Only the TYPED_URLS model type is supported"; | |
| 73 | |
| 74 // Hardcode the id to force a collision, ensuring that there remains only a | |
| 75 // single entry. | |
| 76 sql::Statement s(GetDB().GetUniqueStatement( | |
| 77 "INSERT OR REPLACE INTO typed_url_model_type_state (id, value) " | |
| 78 "VALUES(1,?)")); | |
| 79 s.BindString(0, model_type_state.SerializeAsString()); | |
| 80 | |
| 81 return s.Run(); | |
| 82 } | |
| 83 | |
| 84 bool TypedURLSyncMetadataDatabase::ClearModelTypeState( | |
| 85 syncer::ModelType model_type) { | |
| 86 DCHECK_EQ(model_type, syncer::TYPED_URLS) | |
| 87 << "Only the TYPED_URLS model type is supported"; | |
| 88 | |
| 89 sql::Statement s(GetDB().GetUniqueStatement( | |
| 90 "DELETE FROM typed_url_model_type_state WHERE id=1")); | |
| 91 | |
| 92 return s.Run(); | |
| 93 } | |
| 94 | |
| 95 bool TypedURLSyncMetadataDatabase::InitSyncTable() { | |
| 96 return InitTypedURLSyncMetadataTable() && InitModelTypeStateTable(); | |
| 97 } | |
| 98 | |
| 99 bool TypedURLSyncMetadataDatabase::InitTypedURLSyncMetadataTable() { | |
| 100 if (!GetDB().DoesTableExist("typed_url_sync_metadata")) { | |
| 101 if (!GetDB().Execute("CREATE TABLE typed_url_sync_metadata (" | |
| 102 "storage_key VARCHAR PRIMARY KEY NOT NULL," | |
|
sky
2017/03/01 04:15:23
Document what storage_key is. In fact please docum
Gang Wu
2017/03/02 05:41:12
Done.
| |
| 103 "value BLOB)")) { | |
| 104 NOTREACHED(); | |
| 105 return false; | |
| 106 } | |
| 107 } | |
| 108 return true; | |
| 109 } | |
| 110 | |
| 111 bool TypedURLSyncMetadataDatabase::InitModelTypeStateTable() { | |
| 112 if (!GetDB().DoesTableExist("typed_url_model_type_state")) { | |
| 113 if (!GetDB().Execute("CREATE TABLE typed_url_model_type_state (id INTEGER " | |
| 114 "PRIMARY KEY, value BLOB)")) { | |
| 115 NOTREACHED(); | |
| 116 return false; | |
| 117 } | |
| 118 } | |
| 119 return true; | |
| 120 } | |
| 121 | |
| 122 bool TypedURLSyncMetadataDatabase::GetAllSyncEntityMetadata( | |
| 123 syncer::ModelType model_type, | |
| 124 syncer::EntityMetadataMap* metadata_records) { | |
| 125 DCHECK_EQ(model_type, syncer::TYPED_URLS) | |
| 126 << "Only the TYPED_URLS model type is supported"; | |
| 127 | |
| 128 sql::Statement s(GetDB().GetUniqueStatement( | |
| 129 "SELECT storage_key, value FROM typed_url_sync_metadata")); | |
| 130 | |
| 131 while (s.Step()) { | |
| 132 std::string storage_key = s.ColumnString(0); | |
| 133 std::string serialized_metadata = s.ColumnString(1); | |
| 134 sync_pb::EntityMetadata metadata_record; | |
| 135 if (metadata_record.ParseFromString(serialized_metadata)) { | |
| 136 metadata_records->insert(std::make_pair(storage_key, metadata_record)); | |
| 137 } else { | |
| 138 return false; | |
| 139 } | |
| 140 } | |
| 141 return true; | |
| 142 } | |
| 143 | |
| 144 bool TypedURLSyncMetadataDatabase::GetModelTypeState( | |
| 145 syncer::ModelType model_type, | |
| 146 sync_pb::ModelTypeState* state) { | |
| 147 DCHECK_EQ(model_type, syncer::TYPED_URLS) | |
| 148 << "Only the TYPED_URLS model type is supported"; | |
| 149 | |
| 150 sql::Statement s(GetDB().GetUniqueStatement( | |
| 151 "SELECT value FROM typed_url_model_type_state WHERE id=1")); | |
| 152 | |
| 153 if (!s.Step()) { | |
| 154 return true; | |
| 155 } | |
| 156 | |
| 157 std::string serialized_state = s.ColumnString(0); | |
| 158 return state->ParseFromString(serialized_state); | |
| 159 } | |
| 160 | |
| 161 } // namespace history | |
| OLD | NEW |