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..c00e806b26737a58c8197baf19a20e6a9911f589 100644 |
--- a/components/search_engines/keyword_table.cc |
+++ b/components/search_engines/keyword_table.cc |
@@ -81,6 +81,10 @@ const std::string ColumnsForVersion(int version, bool concatenated) { |
// Column added in version 53. |
columns.push_back("new_tab_url"); |
} |
+ if (version >= 68) { |
+ // Remove column "show_in_default_list" |
+ columns.erase(columns.begin() + 10); |
Peter Kasting
2016/11/10 06:41:07
Don't erase things like this -- doing so is fragil
ltian
2016/11/11 03:52:13
Done.
|
+ } |
return base::JoinString(columns, std::string(concatenated ? " || " : ", ")); |
} |
@@ -119,21 +123,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 +174,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 +204,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 +294,56 @@ bool KeywordTable::MigrateToVersion59RemoveExtensionKeywords() { |
"WHERE url LIKE 'chrome-extension://%'"); |
} |
+// SQLite does not support DROP COLUM operation, follows the instructions from |
Peter Kasting
2016/11/10 06:41:07
Nit: COLUMN
ltian
2016/11/11 03:52:13
Done.
|
+// https://www.sqlite.org/lang_altertable.html#otheralter. A new table is |
+// created |
Ian Wen
2016/11/09 19:58:52
1. The comment block is not formatted correctly.
2
ltian
2016/11/11 03:52:13
Done.
|
+// without the show_in_default_list column. Data from all but the dropped column |
+// from the old table are copied into it. After that, the new table is renamed |
+// to |
+// the current one. |
+bool KeywordTable::MigrateToVersion68RemoveShowInDefaultListColumn() { |
+ if (!db_->Execute("CREATE TABLE temp_keywords (" |
Ian Wen
2016/11/09 19:58:52
Do you mean:
return db->Execute() && db->Execute(
ltian
2016/11/11 03:52:13
Yes, it is. Thank you for pointing it out.
|
+ "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 OR REPLACE INTO temp_keywords SELECT " |
Peter Kasting
2016/11/10 06:41:06
No need for OR REPLACE.
ltian
2016/11/11 03:52:13
Done.
|
+ "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") || |
+ !db_->Execute("DROP TABLE keywords") || |
+ !db_->Execute("ALTER TABLE temp_keywords RENAME TO keywords")) { |
+ return false; |
+ } |
+ return true; |
Peter Kasting
2016/11/10 06:41:06
Everything above should be wrapped in a transactio
ltian
2016/11/11 03:52:13
I noticed that when I modified this but I was also
Peter Kasting
2016/11/11 06:13:08
They only have one statement to execute, so it wil
|
+} |
+ |
// static |
bool KeywordTable::GetKeywordDataFromStatement(const sql::Statement& s, |
TemplateURLData* data) { |
@@ -303,32 +358,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,15 +392,16 @@ 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; |
} |
bool KeywordTable::AddKeyword(const TemplateURLData& data) { |
DCHECK(data.id); |
- std::string query("INSERT INTO keywords (" + GetKeywordColumns() + ") " |
- "VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?," |
+ std::string query("INSERT INTO keywords (" + GetKeywordColumns() + |
+ ") " |
Ian Wen
2016/11/09 19:58:52
Merge #402 with #403.
ltian
2016/11/11 03:52:13
Done.
|
+ "VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?," |
" ?)"); |
sql::Statement s(db_->GetCachedStatement(SQL_FROM_HERE, query.c_str())); |
BindURLToStatement(data, &s, 0, 1); |
@@ -369,13 +424,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(); |
} |