Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(75)

Side by Side Diff: components/history/core/browser/typed_url_sync_metadata_database.cc

Issue 2721713002: [sync] Add typed url sync metadata to the history db (Closed)
Patch Set: Pavely review Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698