1ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved. 2ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Use of this source code is governed by a BSD-style license that can be 3ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// found in the LICENSE file. 4ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 5ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/webdata/keyword_table.h" 6ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 7ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "app/sql/statement.h" 8ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/logging.h" 9ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/string_split.h" 10ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/string_util.h" 11ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/utf_string_conversions.h" 12ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/history/history_database.h" 13ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/search_engines/template_url.h" 14ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "googleurl/src/gurl.h" 15ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 16ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenusing base::Time; 17ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 18ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsennamespace { 19ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 20ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// ID of the url column in keywords. 21ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenconst int kUrlIdPosition = 16; 22ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 23ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Keys used in the meta table. 24ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenconst char* kDefaultSearchProviderKey = "Default Search Provider ID"; 25ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenconst char* kBuiltinKeywordVersion = "Builtin Keyword Version"; 26ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 27ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvoid BindURLToStatement(const TemplateURL& url, sql::Statement* s) { 28ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen s->BindString(0, UTF16ToUTF8(url.short_name())); 29ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen s->BindString(1, UTF16ToUTF8(url.keyword())); 30ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen GURL favicon_url = url.GetFaviconURL(); 31ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (!favicon_url.is_valid()) { 32ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen s->BindString(2, std::string()); 33ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } else { 34ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen s->BindString(2, history::HistoryDatabase::GURLToDatabaseURL( 35ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen url.GetFaviconURL())); 36ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 37ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen s->BindString(3, url.url() ? url.url()->url() : std::string()); 38ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen s->BindInt(4, url.safe_for_autoreplace() ? 1 : 0); 39ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (!url.originating_url().is_valid()) { 40ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen s->BindString(5, std::string()); 41ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } else { 42ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen s->BindString(5, history::HistoryDatabase::GURLToDatabaseURL( 43ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen url.originating_url())); 44ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 45ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen s->BindInt64(6, url.date_created().ToTimeT()); 46ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen s->BindInt(7, url.usage_count()); 47ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen s->BindString(8, JoinString(url.input_encodings(), ';')); 48ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen s->BindInt(9, url.show_in_default_list() ? 1 : 0); 49ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen s->BindString(10, url.suggestions_url() ? url.suggestions_url()->url() : 50ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::string()); 51ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen s->BindInt(11, url.prepopulate_id()); 52ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen s->BindInt(12, url.autogenerate_keyword() ? 1 : 0); 53ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen s->BindInt(13, url.logo_id()); 54ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen s->BindBool(14, url.created_by_policy()); 55ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen s->BindString(15, url.instant_url() ? url.instant_url()->url() : 56ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::string()); 57ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 58ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} // anonymous namespace 59ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 60ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian MonsenKeywordTable::~KeywordTable() {} 61ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 62ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenbool KeywordTable::Init() { 63ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (!db_->DoesTableExist("keywords")) { 64ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (!db_->Execute("CREATE TABLE keywords (" 65ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen "id INTEGER PRIMARY KEY," 66ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen "short_name VARCHAR NOT NULL," 67ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen "keyword VARCHAR NOT NULL," 68ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen "favicon_url VARCHAR NOT NULL," 69ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen "url VARCHAR NOT NULL," 70ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen "show_in_default_list INTEGER," 71ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen "safe_for_autoreplace INTEGER," 72ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen "originating_url VARCHAR," 73ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen "date_created INTEGER DEFAULT 0," 74ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen "usage_count INTEGER DEFAULT 0," 75ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen "input_encodings VARCHAR," 76ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen "suggest_url VARCHAR," 77ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen "prepopulate_id INTEGER DEFAULT 0," 78ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen "autogenerate_keyword INTEGER DEFAULT 0," 79ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen "logo_id INTEGER DEFAULT 0," 80ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen "created_by_policy INTEGER DEFAULT 0," 81ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen "instant_url VARCHAR)")) { 82ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen NOTREACHED(); 83ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return false; 84ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 85ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 86ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return true; 87ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 88ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 89ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenbool KeywordTable::IsSyncable() { 90ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return true; 91ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 92ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 93ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenbool KeywordTable::AddKeyword(const TemplateURL& url) { 94ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen DCHECK(url.id()); 95ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Be sure to change kUrlIdPosition if you add columns 96ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen sql::Statement s(db_->GetCachedStatement(SQL_FROM_HERE, 97ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen "INSERT INTO keywords " 98ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen "(short_name, keyword, favicon_url, url, safe_for_autoreplace, " 99ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen "originating_url, date_created, usage_count, input_encodings, " 100ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen "show_in_default_list, suggest_url, prepopulate_id, " 101ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen "autogenerate_keyword, logo_id, created_by_policy, instant_url, " 102ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen "id) VALUES " 103ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen "(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)")); 104ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (!s) { 105ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen NOTREACHED() << "Statement prepare failed"; 106ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return false; 107ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 108ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen BindURLToStatement(url, &s); 109ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen s.BindInt64(kUrlIdPosition, url.id()); 110ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (!s.Run()) { 111ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen NOTREACHED(); 112ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return false; 113ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 114ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return true; 115ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 116ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 117ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenbool KeywordTable::RemoveKeyword(TemplateURLID id) { 118ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen DCHECK(id); 119ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen sql::Statement s( 120ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen db_->GetUniqueStatement("DELETE FROM keywords WHERE id = ?")); 121ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (!s) { 122ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen NOTREACHED() << "Statement prepare failed"; 123ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return false; 124ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 125ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen s.BindInt64(0, id); 126ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return s.Run(); 127ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 128ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 129ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenbool KeywordTable::GetKeywords(std::vector<TemplateURL*>* urls) { 130ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen sql::Statement s(db_->GetUniqueStatement( 131ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen "SELECT id, short_name, keyword, favicon_url, url, " 132ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen "safe_for_autoreplace, originating_url, date_created, " 133ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen "usage_count, input_encodings, show_in_default_list, " 134ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen "suggest_url, prepopulate_id, autogenerate_keyword, logo_id, " 135ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen "created_by_policy, instant_url " 136ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen "FROM keywords ORDER BY id ASC")); 137ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (!s) { 138ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen NOTREACHED() << "Statement prepare failed"; 139ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return false; 140ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 141ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen while (s.Step()) { 142ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen TemplateURL* template_url = new TemplateURL(); 143ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen template_url->set_id(s.ColumnInt64(0)); 144ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 145ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::string tmp; 146ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen tmp = s.ColumnString(1); 147ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen DCHECK(!tmp.empty()); 148ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen template_url->set_short_name(UTF8ToUTF16(tmp)); 149ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 150ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen template_url->set_keyword(UTF8ToUTF16(s.ColumnString(2))); 151ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 152ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen tmp = s.ColumnString(3); 153ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (!tmp.empty()) 154ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen template_url->SetFaviconURL(GURL(tmp)); 155ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 156ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen template_url->SetURL(s.ColumnString(4), 0, 0); 157ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 158ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen template_url->set_safe_for_autoreplace(s.ColumnInt(5) == 1); 159ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 160ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen tmp = s.ColumnString(6); 161ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (!tmp.empty()) 162ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen template_url->set_originating_url(GURL(tmp)); 163ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 164ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen template_url->set_date_created(Time::FromTimeT(s.ColumnInt64(7))); 165ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 166ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen template_url->set_usage_count(s.ColumnInt(8)); 167ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 168ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::vector<std::string> encodings; 169ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen base::SplitString(s.ColumnString(9), ';', &encodings); 170ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen template_url->set_input_encodings(encodings); 171ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 172ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen template_url->set_show_in_default_list(s.ColumnInt(10) == 1); 173ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 174ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen template_url->SetSuggestionsURL(s.ColumnString(11), 0, 0); 175ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 176ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen template_url->set_prepopulate_id(s.ColumnInt(12)); 177ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 178ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen template_url->set_autogenerate_keyword(s.ColumnInt(13) == 1); 179ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 180ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen template_url->set_logo_id(s.ColumnInt(14)); 181ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 182ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen template_url->set_created_by_policy(s.ColumnBool(15)); 183ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 184ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen template_url->SetInstantURL(s.ColumnString(16), 0, 0); 185ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 186ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen urls->push_back(template_url); 187ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 188ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return s.Succeeded(); 189ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 190ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 191ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenbool KeywordTable::UpdateKeyword(const TemplateURL& url) { 192ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen DCHECK(url.id()); 193ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Be sure to change kUrlIdPosition if you add columns 194ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen sql::Statement s(db_->GetUniqueStatement( 195ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen "UPDATE keywords " 196ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen "SET short_name=?, keyword=?, favicon_url=?, url=?, " 197ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen "safe_for_autoreplace=?, originating_url=?, date_created=?, " 198ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen "usage_count=?, input_encodings=?, show_in_default_list=?, " 199ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen "suggest_url=?, prepopulate_id=?, autogenerate_keyword=?, " 200ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen "logo_id=?, created_by_policy=?, instant_url=? WHERE id=?")); 201ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (!s) { 202ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen NOTREACHED() << "Statement prepare failed"; 203ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return false; 204ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 205ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen BindURLToStatement(url, &s); 206ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen s.BindInt64(kUrlIdPosition, url.id()); 207ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return s.Run(); 208ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 209ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 210ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenbool KeywordTable::SetDefaultSearchProviderID(int64 id) { 211ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return meta_table_->SetValue(kDefaultSearchProviderKey, id); 212ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 213ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 214ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenint64 KeywordTable::GetDefaulSearchProviderID() { 215ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen int64 value = 0; 216ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen meta_table_->GetValue(kDefaultSearchProviderKey, &value); 217ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return value; 218ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 219ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 220ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenbool KeywordTable::SetBuitinKeywordVersion(int version) { 221ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return meta_table_->SetValue(kBuiltinKeywordVersion, version); 222ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 223ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 224ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenint KeywordTable::GetBuitinKeywordVersion() { 225ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen int version = 0; 226ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen meta_table_->GetValue(kBuiltinKeywordVersion, &version); 227ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return version; 228ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 229ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 230ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenbool KeywordTable::MigrateToVersion21AutoGenerateKeywordColumn() { 231ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return db_->Execute("ALTER TABLE keywords ADD COLUMN autogenerate_keyword " 232ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen "INTEGER DEFAULT 0"); 233ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 234ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 235ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenbool KeywordTable::MigrateToVersion25AddLogoIDColumn() { 236ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return db_->Execute( 237ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen "ALTER TABLE keywords ADD COLUMN logo_id INTEGER DEFAULT 0"); 238ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 239ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 240ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenbool KeywordTable::MigrateToVersion26AddCreatedByPolicyColumn() { 241ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return db_->Execute("ALTER TABLE keywords ADD COLUMN created_by_policy " 242ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen "INTEGER DEFAULT 0"); 243ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 244ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 245ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenbool KeywordTable::MigrateToVersion28SupportsInstantColumn() { 246ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return db_->Execute("ALTER TABLE keywords ADD COLUMN supports_instant " 247ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen "INTEGER DEFAULT 0"); 248ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 249ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 250ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenbool KeywordTable::MigrateToVersion29InstantUrlToSupportsInstant() { 251ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (!db_->Execute("ALTER TABLE keywords ADD COLUMN instant_url VARCHAR")) 252ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return false; 253ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 254ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (!db_->Execute("CREATE TABLE keywords_temp (" 255ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen "id INTEGER PRIMARY KEY," 256ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen "short_name VARCHAR NOT NULL," 257ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen "keyword VARCHAR NOT NULL," 258ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen "favicon_url VARCHAR NOT NULL," 259ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen "url VARCHAR NOT NULL," 260ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen "show_in_default_list INTEGER," 261ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen "safe_for_autoreplace INTEGER," 262ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen "originating_url VARCHAR," 263ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen "date_created INTEGER DEFAULT 0," 264ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen "usage_count INTEGER DEFAULT 0," 265ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen "input_encodings VARCHAR," 266ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen "suggest_url VARCHAR," 267ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen "prepopulate_id INTEGER DEFAULT 0," 268ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen "autogenerate_keyword INTEGER DEFAULT 0," 269ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen "logo_id INTEGER DEFAULT 0," 270ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen "created_by_policy INTEGER DEFAULT 0," 271ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen "instant_url VARCHAR)")) { 272ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return false; 273ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 274ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 275ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (!db_->Execute( 276ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen "INSERT INTO keywords_temp " 277ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen "SELECT id, short_name, keyword, favicon_url, url, " 278ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen "show_in_default_list, safe_for_autoreplace, originating_url, " 279ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen "date_created, usage_count, input_encodings, suggest_url, " 280ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen "prepopulate_id, autogenerate_keyword, logo_id, created_by_policy, " 281ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen "instant_url FROM keywords")) { 282ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return false; 283ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 284ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 285ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (!db_->Execute("DROP TABLE keywords")) 286ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return false; 287ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 288ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (!db_->Execute("ALTER TABLE keywords_temp RENAME TO keywords")) 289ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return false; 290ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 291ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return true; 292ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 293