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 |