Index: components/search_engines/keyword_table.cc |
diff --git a/components/search_engines/keyword_table.cc b/components/search_engines/keyword_table.cc |
index eee2ac8273e98df5be76dc4108e4b8e5e3db0cad..8208f2e9d5a49106215cda317b7b432771b43625 100644 |
--- a/components/search_engines/keyword_table.cc |
+++ b/components/search_engines/keyword_table.cc |
@@ -49,7 +49,10 @@ const std::string ColumnsForVersion(int version, bool concatenated) { |
columns.push_back("date_created"); |
columns.push_back("usage_count"); |
columns.push_back("input_encodings"); |
- columns.push_back("show_in_default_list"); |
+ if (version <= 67) { |
+ // Column removed after version 67. |
+ columns.push_back("show_in_default_list"); |
+ } |
columns.push_back("suggest_url"); |
columns.push_back("prepopulate_id"); |
if (version <= 44) { |
@@ -119,21 +122,20 @@ void BindURLToStatement(const TemplateURLData& data, |
s->BindInt(starting_column + 7, data.usage_count); |
s->BindString(starting_column + 8, |
base::JoinString(data.input_encodings, ";")); |
- s->BindBool(starting_column + 9, data.show_in_default_list); |
- s->BindString(starting_column + 10, data.suggestions_url); |
- s->BindInt(starting_column + 11, data.prepopulate_id); |
- s->BindBool(starting_column + 12, data.created_by_policy); |
- s->BindString(starting_column + 13, data.instant_url); |
- s->BindInt64(starting_column + 14, data.last_modified.ToTimeT()); |
- s->BindString(starting_column + 15, data.sync_guid); |
- s->BindString(starting_column + 16, alternate_urls); |
- s->BindString(starting_column + 17, data.search_terms_replacement_key); |
- s->BindString(starting_column + 18, data.image_url); |
- s->BindString(starting_column + 19, data.search_url_post_params); |
- s->BindString(starting_column + 20, data.suggestions_url_post_params); |
- s->BindString(starting_column + 21, data.instant_url_post_params); |
- s->BindString(starting_column + 22, data.image_url_post_params); |
- s->BindString(starting_column + 23, data.new_tab_url); |
+ s->BindString(starting_column + 9, data.suggestions_url); |
+ s->BindInt(starting_column + 10, data.prepopulate_id); |
+ s->BindBool(starting_column + 11, data.created_by_policy); |
+ s->BindString(starting_column + 12, data.instant_url); |
+ s->BindInt64(starting_column + 13, data.last_modified.ToTimeT()); |
+ s->BindString(starting_column + 14, data.sync_guid); |
+ s->BindString(starting_column + 15, alternate_urls); |
+ s->BindString(starting_column + 16, data.search_terms_replacement_key); |
+ s->BindString(starting_column + 17, data.image_url); |
+ s->BindString(starting_column + 18, data.search_url_post_params); |
+ s->BindString(starting_column + 19, data.suggestions_url_post_params); |
+ s->BindString(starting_column + 20, data.instant_url_post_params); |
+ s->BindString(starting_column + 21, data.image_url_post_params); |
+ s->BindString(starting_column + 22, data.new_tab_url); |
} |
WebDatabaseTable::TypeKey GetKey() { |
@@ -171,7 +173,6 @@ bool KeywordTable::CreateTablesIfNecessary() { |
"date_created INTEGER DEFAULT 0," |
"usage_count INTEGER DEFAULT 0," |
"input_encodings VARCHAR," |
- "show_in_default_list INTEGER," |
"suggest_url VARCHAR," |
"prepopulate_id INTEGER DEFAULT 0," |
"created_by_policy INTEGER DEFAULT 0," |
@@ -202,6 +203,9 @@ bool KeywordTable::MigrateToVersion(int version, |
case 59: |
*update_compatible_version = true; |
return MigrateToVersion59RemoveExtensionKeywords(); |
+ case 68: |
+ *update_compatible_version = true; |
+ return MigrateToVersion68RemoveShowInDefaultListColumn(); |
} |
return true; |
@@ -289,6 +293,55 @@ bool KeywordTable::MigrateToVersion59RemoveExtensionKeywords() { |
"WHERE url LIKE 'chrome-extension://%'"); |
} |
+// SQLite does not support DROP COLUMN operation. So A new table is created |
+// without the show_in_default_list column. Data from all but the dropped column |
+// of the old table is copied into it. After that, the old table is dropped and |
+// the new table is renamed to it. |
+bool KeywordTable::MigrateToVersion68RemoveShowInDefaultListColumn() { |
+ sql::Transaction transaction(db_); |
+ return transaction.Begin() && |
+ db_->Execute( |
+ "CREATE TABLE temp_keywords (" |
+ "id INTEGER PRIMARY KEY," |
+ "short_name VARCHAR NOT NULL," |
+ "keyword VARCHAR NOT NULL," |
+ "favicon_url VARCHAR NOT NULL," |
+ "url VARCHAR NOT NULL," |
+ "safe_for_autoreplace INTEGER," |
+ "originating_url VARCHAR," |
+ "date_created INTEGER DEFAULT 0," |
+ "usage_count INTEGER DEFAULT 0," |
+ "input_encodings VARCHAR," |
+ "suggest_url VARCHAR," |
+ "prepopulate_id INTEGER DEFAULT 0," |
+ "created_by_policy INTEGER DEFAULT 0," |
+ "instant_url VARCHAR," |
+ "last_modified INTEGER DEFAULT 0," |
+ "sync_guid VARCHAR," |
+ "alternate_urls VARCHAR," |
+ "search_terms_replacement_key VARCHAR," |
+ "image_url VARCHAR," |
+ "search_url_post_params VARCHAR," |
+ "suggest_url_post_params VARCHAR," |
+ "instant_url_post_params VARCHAR," |
+ "image_url_post_params VARCHAR," |
+ "new_tab_url VARCHAR)") && |
+ db_->Execute( |
+ "INSERT INTO temp_keywords SELECT " |
+ "id, short_name, keyword, favicon_url, url, " |
+ "safe_for_autoreplace, originating_url, " |
+ "date_created, usage_count, input_encodings, " |
+ "suggest_url, prepopulate_id, created_by_policy, " |
+ "instant_url, last_modified, sync_guid, " |
+ "alternate_urls, search_terms_replacement_key, " |
+ "image_url, search_url_post_params, " |
+ "suggest_url_post_params, instant_url_post_params," |
+ "image_url_post_params, new_tab_url FROM keywords") && |
Peter Kasting
2016/11/14 19:59:16
Nit: Can ColumnsForVersion() be used to shorten th
|
+ db_->Execute("DROP TABLE keywords") && |
+ db_->Execute("ALTER TABLE temp_keywords RENAME TO keywords") && |
+ transaction.Commit(); |
+} |
+ |
// static |
bool KeywordTable::GetKeywordDataFromStatement(const sql::Statement& s, |
TemplateURLData* data) { |
@@ -303,32 +356,31 @@ bool KeywordTable::GetKeywordDataFromStatement(const sql::Statement& s, |
if (s.ColumnString(4).empty()) |
return false; |
data->SetURL(s.ColumnString(4)); |
- data->suggestions_url = s.ColumnString(11); |
- data->instant_url = s.ColumnString(14); |
- data->image_url = s.ColumnString(19); |
- data->new_tab_url = s.ColumnString(24); |
- data->search_url_post_params = s.ColumnString(20); |
- data->suggestions_url_post_params = s.ColumnString(21); |
- data->instant_url_post_params = s.ColumnString(22); |
- data->image_url_post_params = s.ColumnString(23); |
+ data->suggestions_url = s.ColumnString(10); |
+ data->instant_url = s.ColumnString(13); |
+ data->image_url = s.ColumnString(18); |
+ data->new_tab_url = s.ColumnString(23); |
+ data->search_url_post_params = s.ColumnString(19); |
+ data->suggestions_url_post_params = s.ColumnString(20); |
+ data->instant_url_post_params = s.ColumnString(21); |
+ data->image_url_post_params = s.ColumnString(22); |
data->favicon_url = GURL(s.ColumnString(3)); |
data->originating_url = GURL(s.ColumnString(6)); |
- data->show_in_default_list = s.ColumnBool(10); |
data->safe_for_autoreplace = s.ColumnBool(5); |
data->input_encodings = base::SplitString( |
s.ColumnString(9), ";", base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL); |
data->id = s.ColumnInt64(0); |
data->date_created = Time::FromTimeT(s.ColumnInt64(7)); |
- data->last_modified = Time::FromTimeT(s.ColumnInt64(15)); |
- data->created_by_policy = s.ColumnBool(13); |
+ data->last_modified = Time::FromTimeT(s.ColumnInt64(14)); |
+ data->created_by_policy = s.ColumnBool(12); |
data->usage_count = s.ColumnInt(8); |
- data->prepopulate_id = s.ColumnInt(12); |
- data->sync_guid = s.ColumnString(16); |
+ data->prepopulate_id = s.ColumnInt(11); |
+ data->sync_guid = s.ColumnString(15); |
data->alternate_urls.clear(); |
base::JSONReader json_reader; |
std::unique_ptr<base::Value> value( |
- json_reader.ReadToValue(s.ColumnString(17))); |
+ json_reader.ReadToValue(s.ColumnString(16))); |
base::ListValue* alternate_urls_value; |
if (value.get() && value->GetAsList(&alternate_urls_value)) { |
std::string alternate_url; |
@@ -338,7 +390,7 @@ bool KeywordTable::GetKeywordDataFromStatement(const sql::Statement& s, |
} |
} |
- data->search_terms_replacement_key = s.ColumnString(18); |
+ data->search_terms_replacement_key = s.ColumnString(17); |
return true; |
} |
@@ -346,7 +398,7 @@ bool KeywordTable::GetKeywordDataFromStatement(const sql::Statement& s, |
bool KeywordTable::AddKeyword(const TemplateURLData& data) { |
DCHECK(data.id); |
std::string query("INSERT INTO keywords (" + GetKeywordColumns() + ") " |
- "VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?," |
+ "VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?," |
" ?)"); |
sql::Statement s(db_->GetCachedStatement(SQL_FROM_HERE, query.c_str())); |
BindURLToStatement(data, &s, 0, 1); |
@@ -369,13 +421,13 @@ bool KeywordTable::UpdateKeyword(const TemplateURLData& data) { |
SQL_FROM_HERE, |
"UPDATE keywords SET short_name=?, keyword=?, favicon_url=?, url=?, " |
"safe_for_autoreplace=?, originating_url=?, date_created=?, " |
- "usage_count=?, input_encodings=?, show_in_default_list=?, " |
- "suggest_url=?, prepopulate_id=?, created_by_policy=?, instant_url=?, " |
+ "usage_count=?, input_encodings=?, suggest_url=?, " |
+ "prepopulate_id=?, created_by_policy=?, instant_url=?, " |
"last_modified=?, sync_guid=?, alternate_urls=?, " |
"search_terms_replacement_key=?, image_url=?, search_url_post_params=?, " |
"suggest_url_post_params=?, instant_url_post_params=?, " |
"image_url_post_params=?, new_tab_url=? WHERE id=?")); |
- BindURLToStatement(data, &s, 24, 0); // "24" binds id() as the last item. |
+ BindURLToStatement(data, &s, 23, 0); // "23" binds id() as the last item. |
return s.Run(); |
} |