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

Side by Side Diff: chrome/browser/webdata/keyword_table.cc

Issue 7232023: Added last_modified field to TemplateURL and database. Updated unit tests, including refactoring ... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: '' Created 9 years, 6 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 | Annotate | Revision Log
Property Changes:
Added: svn:eol-style
+ LF
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/webdata/keyword_table.h" 5 #include "chrome/browser/webdata/keyword_table.h"
6 6
7 #include "app/sql/statement.h" 7 #include "app/sql/statement.h"
8 #include "base/logging.h" 8 #include "base/logging.h"
9 #include "base/string_split.h" 9 #include "base/string_split.h"
10 #include "base/string_util.h" 10 #include "base/string_util.h"
11 #include "base/utf_string_conversions.h" 11 #include "base/utf_string_conversions.h"
12 #include "chrome/browser/history/history_database.h" 12 #include "chrome/browser/history/history_database.h"
13 #include "chrome/browser/search_engines/template_url.h" 13 #include "chrome/browser/search_engines/template_url.h"
14 #include "googleurl/src/gurl.h" 14 #include "googleurl/src/gurl.h"
15 15
16 using base::Time; 16 using base::Time;
17 17
18 namespace { 18 namespace {
19 19
20 // ID of the url column in keywords. 20 // ID of the url column in keywords.
21 const int kUrlIdPosition = 16; 21 const int kUrlIdPosition = 17;
22 22
23 // Keys used in the meta table. 23 // Keys used in the meta table.
24 const char* kDefaultSearchProviderKey = "Default Search Provider ID"; 24 const char* kDefaultSearchProviderKey = "Default Search Provider ID";
25 const char* kBuiltinKeywordVersion = "Builtin Keyword Version"; 25 const char* kBuiltinKeywordVersion = "Builtin Keyword Version";
26 26
27 void BindURLToStatement(const TemplateURL& url, sql::Statement* s) { 27 void BindURLToStatement(const TemplateURL& url, sql::Statement* s) {
28 s->BindString(0, UTF16ToUTF8(url.short_name())); 28 s->BindString(0, UTF16ToUTF8(url.short_name()));
29 s->BindString(1, UTF16ToUTF8(url.keyword())); 29 s->BindString(1, UTF16ToUTF8(url.keyword()));
30 GURL favicon_url = url.GetFaviconURL(); 30 GURL favicon_url = url.GetFaviconURL();
31 if (!favicon_url.is_valid()) { 31 if (!favicon_url.is_valid()) {
(...skipping 15 matching lines...) Expand all
47 s->BindString(8, JoinString(url.input_encodings(), ';')); 47 s->BindString(8, JoinString(url.input_encodings(), ';'));
48 s->BindInt(9, url.show_in_default_list() ? 1 : 0); 48 s->BindInt(9, url.show_in_default_list() ? 1 : 0);
49 s->BindString(10, url.suggestions_url() ? url.suggestions_url()->url() : 49 s->BindString(10, url.suggestions_url() ? url.suggestions_url()->url() :
50 std::string()); 50 std::string());
51 s->BindInt(11, url.prepopulate_id()); 51 s->BindInt(11, url.prepopulate_id());
52 s->BindInt(12, url.autogenerate_keyword() ? 1 : 0); 52 s->BindInt(12, url.autogenerate_keyword() ? 1 : 0);
53 s->BindInt(13, url.logo_id()); 53 s->BindInt(13, url.logo_id());
54 s->BindBool(14, url.created_by_policy()); 54 s->BindBool(14, url.created_by_policy());
55 s->BindString(15, url.instant_url() ? url.instant_url()->url() : 55 s->BindString(15, url.instant_url() ? url.instant_url()->url() :
56 std::string()); 56 std::string());
57 s->BindInt64(16, url.last_modified().ToTimeT());
57 } 58 }
58 } // anonymous namespace 59 } // anonymous namespace
59 60
60 KeywordTable::~KeywordTable() {} 61 KeywordTable::~KeywordTable() {}
61 62
62 bool KeywordTable::Init() { 63 bool KeywordTable::Init() {
63 if (!db_->DoesTableExist("keywords")) { 64 if (!db_->DoesTableExist("keywords")) {
64 if (!db_->Execute("CREATE TABLE keywords (" 65 if (!db_->Execute("CREATE TABLE keywords ("
65 "id INTEGER PRIMARY KEY," 66 "id INTEGER PRIMARY KEY,"
66 "short_name VARCHAR NOT NULL," 67 "short_name VARCHAR NOT NULL,"
67 "keyword VARCHAR NOT NULL," 68 "keyword VARCHAR NOT NULL,"
68 "favicon_url VARCHAR NOT NULL," 69 "favicon_url VARCHAR NOT NULL,"
69 "url VARCHAR NOT NULL," 70 "url VARCHAR NOT NULL,"
70 "show_in_default_list INTEGER," 71 "show_in_default_list INTEGER,"
71 "safe_for_autoreplace INTEGER," 72 "safe_for_autoreplace INTEGER,"
72 "originating_url VARCHAR," 73 "originating_url VARCHAR,"
73 "date_created INTEGER DEFAULT 0," 74 "date_created INTEGER DEFAULT 0,"
74 "usage_count INTEGER DEFAULT 0," 75 "usage_count INTEGER DEFAULT 0,"
75 "input_encodings VARCHAR," 76 "input_encodings VARCHAR,"
76 "suggest_url VARCHAR," 77 "suggest_url VARCHAR,"
77 "prepopulate_id INTEGER DEFAULT 0," 78 "prepopulate_id INTEGER DEFAULT 0,"
78 "autogenerate_keyword INTEGER DEFAULT 0," 79 "autogenerate_keyword INTEGER DEFAULT 0,"
79 "logo_id INTEGER DEFAULT 0," 80 "logo_id INTEGER DEFAULT 0,"
80 "created_by_policy INTEGER DEFAULT 0," 81 "created_by_policy INTEGER DEFAULT 0,"
81 "instant_url VARCHAR)")) { 82 "instant_url VARCHAR,"
83 "last_modified INTEGER DEFAULT 0)")) {
82 NOTREACHED(); 84 NOTREACHED();
83 return false; 85 return false;
84 } 86 }
85 } 87 }
86 return true; 88 return true;
87 } 89 }
88 90
89 bool KeywordTable::IsSyncable() { 91 bool KeywordTable::IsSyncable() {
90 return true; 92 return true;
91 } 93 }
92 94
93 bool KeywordTable::AddKeyword(const TemplateURL& url) { 95 bool KeywordTable::AddKeyword(const TemplateURL& url) {
94 DCHECK(url.id()); 96 DCHECK(url.id());
95 // Be sure to change kUrlIdPosition if you add columns 97 // Be sure to change kUrlIdPosition if you add columns
96 sql::Statement s(db_->GetCachedStatement(SQL_FROM_HERE, 98 sql::Statement s(db_->GetCachedStatement(SQL_FROM_HERE,
97 "INSERT INTO keywords " 99 "INSERT INTO keywords "
98 "(short_name, keyword, favicon_url, url, safe_for_autoreplace, " 100 "(short_name, keyword, favicon_url, url, safe_for_autoreplace, "
99 "originating_url, date_created, usage_count, input_encodings, " 101 "originating_url, date_created, usage_count, input_encodings, "
100 "show_in_default_list, suggest_url, prepopulate_id, " 102 "show_in_default_list, suggest_url, prepopulate_id, "
101 "autogenerate_keyword, logo_id, created_by_policy, instant_url, " 103 "autogenerate_keyword, logo_id, created_by_policy, instant_url, "
102 "id) VALUES " 104 "last_modified, id) VALUES "
103 "(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)")); 105 "(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)"));
104 if (!s) { 106 if (!s) {
105 NOTREACHED() << "Statement prepare failed"; 107 NOTREACHED() << "Statement prepare failed";
106 return false; 108 return false;
107 } 109 }
108 BindURLToStatement(url, &s); 110 BindURLToStatement(url, &s);
109 s.BindInt64(kUrlIdPosition, url.id()); 111 s.BindInt64(kUrlIdPosition, url.id());
110 if (!s.Run()) { 112 if (!s.Run()) {
111 NOTREACHED(); 113 NOTREACHED();
112 return false; 114 return false;
113 } 115 }
(...skipping 11 matching lines...) Expand all
125 s.BindInt64(0, id); 127 s.BindInt64(0, id);
126 return s.Run(); 128 return s.Run();
127 } 129 }
128 130
129 bool KeywordTable::GetKeywords(std::vector<TemplateURL*>* urls) { 131 bool KeywordTable::GetKeywords(std::vector<TemplateURL*>* urls) {
130 sql::Statement s(db_->GetUniqueStatement( 132 sql::Statement s(db_->GetUniqueStatement(
131 "SELECT id, short_name, keyword, favicon_url, url, " 133 "SELECT id, short_name, keyword, favicon_url, url, "
132 "safe_for_autoreplace, originating_url, date_created, " 134 "safe_for_autoreplace, originating_url, date_created, "
133 "usage_count, input_encodings, show_in_default_list, " 135 "usage_count, input_encodings, show_in_default_list, "
134 "suggest_url, prepopulate_id, autogenerate_keyword, logo_id, " 136 "suggest_url, prepopulate_id, autogenerate_keyword, logo_id, "
135 "created_by_policy, instant_url " 137 "created_by_policy, instant_url, last_modified "
136 "FROM keywords ORDER BY id ASC")); 138 "FROM keywords ORDER BY id ASC"));
137 if (!s) { 139 if (!s) {
138 NOTREACHED() << "Statement prepare failed"; 140 NOTREACHED() << "Statement prepare failed";
139 return false; 141 return false;
140 } 142 }
141 while (s.Step()) { 143 while (s.Step()) {
142 TemplateURL* template_url = new TemplateURL(); 144 TemplateURL* template_url = new TemplateURL();
143 template_url->set_id(s.ColumnInt64(0)); 145 template_url->set_id(s.ColumnInt64(0));
144 146
145 std::string tmp; 147 std::string tmp;
(...skipping 30 matching lines...) Expand all
176 template_url->set_prepopulate_id(s.ColumnInt(12)); 178 template_url->set_prepopulate_id(s.ColumnInt(12));
177 179
178 template_url->set_autogenerate_keyword(s.ColumnInt(13) == 1); 180 template_url->set_autogenerate_keyword(s.ColumnInt(13) == 1);
179 181
180 template_url->set_logo_id(s.ColumnInt(14)); 182 template_url->set_logo_id(s.ColumnInt(14));
181 183
182 template_url->set_created_by_policy(s.ColumnBool(15)); 184 template_url->set_created_by_policy(s.ColumnBool(15));
183 185
184 template_url->SetInstantURL(s.ColumnString(16), 0, 0); 186 template_url->SetInstantURL(s.ColumnString(16), 0, 0);
185 187
188 template_url->set_last_modified(Time::FromTimeT(s.ColumnInt64(17)));
189
186 urls->push_back(template_url); 190 urls->push_back(template_url);
187 } 191 }
188 return s.Succeeded(); 192 return s.Succeeded();
189 } 193 }
190 194
191 bool KeywordTable::UpdateKeyword(const TemplateURL& url) { 195 bool KeywordTable::UpdateKeyword(const TemplateURL& url) {
192 DCHECK(url.id()); 196 DCHECK(url.id());
193 // Be sure to change kUrlIdPosition if you add columns 197 // Be sure to change kUrlIdPosition if you add columns
194 sql::Statement s(db_->GetUniqueStatement( 198 sql::Statement s(db_->GetUniqueStatement(
195 "UPDATE keywords " 199 "UPDATE keywords "
196 "SET short_name=?, keyword=?, favicon_url=?, url=?, " 200 "SET short_name=?, keyword=?, favicon_url=?, url=?, "
197 "safe_for_autoreplace=?, originating_url=?, date_created=?, " 201 "safe_for_autoreplace=?, originating_url=?, date_created=?, "
198 "usage_count=?, input_encodings=?, show_in_default_list=?, " 202 "usage_count=?, input_encodings=?, show_in_default_list=?, "
199 "suggest_url=?, prepopulate_id=?, autogenerate_keyword=?, " 203 "suggest_url=?, prepopulate_id=?, autogenerate_keyword=?, "
200 "logo_id=?, created_by_policy=?, instant_url=? WHERE id=?")); 204 "logo_id=?, created_by_policy=?, instant_url=?, last_modified=? "
205 "WHERE id=?"));
201 if (!s) { 206 if (!s) {
202 NOTREACHED() << "Statement prepare failed"; 207 NOTREACHED() << "Statement prepare failed";
203 return false; 208 return false;
204 } 209 }
205 BindURLToStatement(url, &s); 210 BindURLToStatement(url, &s);
206 s.BindInt64(kUrlIdPosition, url.id()); 211 s.BindInt64(kUrlIdPosition, url.id());
207 return s.Run(); 212 return s.Run();
208 } 213 }
209 214
210 bool KeywordTable::SetDefaultSearchProviderID(int64 id) { 215 bool KeywordTable::SetDefaultSearchProviderID(int64 id) {
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
283 } 288 }
284 289
285 if (!db_->Execute("DROP TABLE keywords")) 290 if (!db_->Execute("DROP TABLE keywords"))
286 return false; 291 return false;
287 292
288 if (!db_->Execute("ALTER TABLE keywords_temp RENAME TO keywords")) 293 if (!db_->Execute("ALTER TABLE keywords_temp RENAME TO keywords"))
289 return false; 294 return false;
290 295
291 return true; 296 return true;
292 } 297 }
298
299 bool KeywordTable::MigrateToVersion38AddLastModifiedColumn() {
300 return db_->Execute(
301 "ALTER TABLE keywords ADD COLUMN last_modified INTEGER DEFAULT 0");
302 }
OLDNEW
« no previous file with comments | « chrome/browser/webdata/keyword_table.h ('k') | chrome/browser/webdata/keyword_table_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698