Index: chrome/browser/webdata/web_database.cc |
=================================================================== |
--- chrome/browser/webdata/web_database.cc (revision 26110) |
+++ chrome/browser/webdata/web_database.cc (working copy) |
@@ -1,4 +1,4 @@ |
-// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. |
+// Copyright (c) 2009 The Chromium Authors. All rights reserved. |
// Use of this source code is governed by a BSD-style license that can be |
// found in the LICENSE file. |
@@ -9,6 +9,8 @@ |
#include <vector> |
#include "app/l10n_util.h" |
+#include "app/sql/statement.h" |
+#include "app/sql/transaction.h" |
#include "base/gfx/png_decoder.h" |
#include "base/gfx/png_encoder.h" |
#include "base/string_util.h" |
@@ -117,65 +119,44 @@ |
return result; |
} |
-WebDatabase::WebDatabase() : db_(NULL), transaction_nesting_(0) { |
+WebDatabase::WebDatabase() { |
} |
WebDatabase::~WebDatabase() { |
- if (db_) { |
- DCHECK(transaction_nesting_ == 0) << |
- "Forgot to close the transaction on shutdown"; |
- sqlite3_close(db_); |
- db_ = NULL; |
- } |
} |
void WebDatabase::BeginTransaction() { |
- DCHECK(db_); |
- if (transaction_nesting_ == 0) { |
- int rv = sqlite3_exec(db_, "BEGIN TRANSACTION", NULL, NULL, NULL); |
- DCHECK(rv == SQLITE_OK) << "Failed to begin transaction"; |
- } |
- transaction_nesting_++; |
+ db_.BeginTransaction(); |
} |
void WebDatabase::CommitTransaction() { |
- DCHECK(db_); |
- DCHECK(transaction_nesting_ > 0) << "Committing too many transaction"; |
- transaction_nesting_--; |
- if (transaction_nesting_ == 0) { |
- int rv = sqlite3_exec(db_, "COMMIT", NULL, NULL, NULL); |
- DCHECK(rv == SQLITE_OK) << "Failed to commit transaction"; |
- } |
+ db_.CommitTransaction(); |
} |
-bool WebDatabase::Init(const std::wstring& db_name) { |
- // Open the database, using the narrow version of open so that |
- // the DB is in UTF-8. |
- if (sqlite3_open(WideToUTF8(db_name).c_str(), &db_) != SQLITE_OK) { |
- LOG(WARNING) << "Unable to open the web database."; |
- return false; |
- } |
- |
+bool WebDatabase::Init(const FilePath& db_name) { |
// We don't store that much data in the tables so use a small page size. |
// This provides a large benefit for empty tables (which is very likely with |
// the tables we create). |
- sqlite3_exec(db_, "PRAGMA page_size=2048", NULL, NULL, NULL); |
+ db_.set_page_size(2048); |
// We shouldn't have much data and what access we currently have is quite |
// infrequent. So we go with a small cache size. |
- sqlite3_exec(db_, "PRAGMA cache_size=32", NULL, NULL, NULL); |
+ db_.set_cache_size(32); |
// Run the database in exclusive mode. Nobody else should be accessing the |
// database while we're running, and this will give somewhat improved perf. |
- sqlite3_exec(db_, "PRAGMA locking_mode=EXCLUSIVE", NULL, NULL, NULL); |
+ db_.set_exclusive_locking(); |
+ if (!db_.Init(db_name)) |
+ return false; |
+ |
// Initialize various tables |
- SQLTransaction transaction(db_); |
- transaction.Begin(); |
+ sql::Transaction transaction(&db_); |
+ if (!transaction.Begin()) |
+ return false; |
// Version check. |
- if (!meta_table_.Init(std::string(), kCurrentVersionNumber, |
- kCompatibleVersionNumber, db_)) |
+ if (!meta_table_.Init(&db_, kCurrentVersionNumber, kCompatibleVersionNumber)) |
return false; |
if (meta_table_.GetCompatibleVersionNumber() > kCurrentVersionNumber) { |
LOG(WARNING) << "Web database is too new."; |
@@ -193,48 +174,50 @@ |
// If the file on disk is an older database version, bring it up to date. |
MigrateOldVersionsAsNeeded(); |
- return (transaction.Commit() == SQLITE_OK); |
+ return transaction.Commit(); |
} |
-bool WebDatabase::SetWebAppImage(const GURL& url, |
- const SkBitmap& image) { |
- SQLStatement s; |
- if (s.prepare(db_, |
- "INSERT OR REPLACE INTO web_app_icons " |
- "(url, width, height, image) VALUES (?, ?, ?, ?)") |
- != SQLITE_OK) { |
- NOTREACHED() << "Statement prepare failed"; |
+bool WebDatabase::SetWebAppImage(const GURL& url, const SkBitmap& image) { |
+ // Don't bother with a cached statement since this will be a relatively |
+ // infrequent operation. |
+ sql::Statement s(db_.GetUniqueStatement( |
+ "INSERT OR REPLACE INTO web_app_icons " |
+ "(url, width, height, image) VALUES (?, ?, ?, ?)")); |
+ if (!s) |
return false; |
- } |
std::vector<unsigned char> image_data; |
PNGEncoder::EncodeBGRASkBitmap(image, false, &image_data); |
- s.bind_string(0, history::HistoryDatabase::GURLToDatabaseURL(url)); |
- s.bind_int(1, image.width()); |
- s.bind_int(2, image.height()); |
- s.bind_blob(3, &image_data.front(), static_cast<int>(image_data.size())); |
- return s.step() == SQLITE_DONE; |
+ s.BindString(0, history::HistoryDatabase::GURLToDatabaseURL(url)); |
+ s.BindInt(1, image.width()); |
+ s.BindInt(2, image.height()); |
+ s.BindBlob(3, &image_data.front(), static_cast<int>(image_data.size())); |
+ return s.Run(); |
} |
bool WebDatabase::GetWebAppImages(const GURL& url, |
- std::vector<SkBitmap>* images) const { |
- SQLStatement s; |
- if (s.prepare(db_, "SELECT image FROM web_app_icons WHERE url=?") != |
- SQLITE_OK) { |
+ std::vector<SkBitmap>* images) { |
+ sql::Statement s(db_.GetUniqueStatement( |
+ "SELECT image FROM web_app_icons WHERE url=?")); |
+ if (!s) { |
NOTREACHED() << "Statement prepare failed"; |
return false; |
} |
- s.bind_string(0, history::HistoryDatabase::GURLToDatabaseURL(url)); |
- while (s.step() == SQLITE_ROW) { |
+ s.BindString(0, history::HistoryDatabase::GURLToDatabaseURL(url)); |
+ while (s.Step()) { |
SkBitmap image; |
std::vector<unsigned char> image_data; |
- s.column_blob_as_vector(0, &image_data); |
- if (PNGDecoder::Decode(&image_data, &image)) { |
- images->push_back(image); |
- } else { |
- // Should only have valid image data in the db. |
- NOTREACHED(); |
+ int col_bytes = s.ColumnByteLength(0); |
+ if (col_bytes > 0) { |
+ image_data.resize(col_bytes); |
+ memcpy(&image_data[0], s.ColumnBlob(0), col_bytes); |
+ if (PNGDecoder::Decode(&image_data, &image)) { |
+ images->push_back(image); |
+ } else { |
+ // Should only have valid image data in the db. |
+ NOTREACHED(); |
+ } |
} |
} |
return true; |
@@ -242,52 +225,52 @@ |
bool WebDatabase::SetWebAppHasAllImages(const GURL& url, |
bool has_all_images) { |
- SQLStatement s; |
- if (s.prepare(db_, "INSERT OR REPLACE INTO web_apps (url, has_all_images) " |
- "VALUES (?, ?)") != SQLITE_OK) { |
+ sql::Statement s(db_.GetUniqueStatement( |
+ "INSERT OR REPLACE INTO web_apps (url, has_all_images) VALUES (?, ?)")); |
+ if (!s) { |
NOTREACHED() << "Statement prepare failed"; |
return false; |
} |
- s.bind_string(0, history::HistoryDatabase::GURLToDatabaseURL(url)); |
- s.bind_int(1, has_all_images ? 1 : 0); |
- return (s.step() == SQLITE_DONE); |
+ s.BindString(0, history::HistoryDatabase::GURLToDatabaseURL(url)); |
+ s.BindInt(1, has_all_images ? 1 : 0); |
+ return s.Run(); |
} |
-bool WebDatabase::GetWebAppHasAllImages(const GURL& url) const { |
- SQLStatement s; |
- if (s.prepare(db_, "SELECT has_all_images FROM web_apps " |
- "WHERE url=?") != SQLITE_OK) { |
+bool WebDatabase::GetWebAppHasAllImages(const GURL& url) { |
+ sql::Statement s(db_.GetUniqueStatement( |
+ "SELECT has_all_images FROM web_apps WHERE url=?")); |
+ if (!s) { |
NOTREACHED() << "Statement prepare failed"; |
return false; |
} |
- s.bind_string(0, history::HistoryDatabase::GURLToDatabaseURL(url)); |
- return (s.step() == SQLITE_ROW && s.column_int(0) == 1); |
+ s.BindString(0, history::HistoryDatabase::GURLToDatabaseURL(url)); |
+ return (s.Step() && s.ColumnInt(0) == 1); |
} |
bool WebDatabase::RemoveWebApp(const GURL& url) { |
- SQLStatement delete_s; |
- if (delete_s.prepare(db_, "DELETE FROM web_app_icons WHERE url = ?") != |
- SQLITE_OK) { |
+ sql::Statement delete_s(db_.GetUniqueStatement( |
+ "DELETE FROM web_app_icons WHERE url = ?")); |
+ if (!delete_s) { |
NOTREACHED() << "Statement prepare failed"; |
return false; |
} |
- delete_s.bind_string(0, history::HistoryDatabase::GURLToDatabaseURL(url)); |
- if (delete_s.step() != SQLITE_DONE) |
+ delete_s.BindString(0, history::HistoryDatabase::GURLToDatabaseURL(url)); |
+ if (!delete_s.Run()) |
return false; |
- SQLStatement delete_s2; |
- if (delete_s2.prepare(db_, "DELETE FROM web_apps WHERE url = ?") != |
- SQLITE_OK) { |
+ sql::Statement delete_s2(db_.GetUniqueStatement( |
+ "DELETE FROM web_apps WHERE url = ?")); |
+ if (!delete_s2) { |
NOTREACHED() << "Statement prepare failed"; |
return false; |
} |
- delete_s2.bind_string(0, history::HistoryDatabase::GURLToDatabaseURL(url)); |
- return (delete_s2.step() == SQLITE_DONE); |
+ delete_s2.BindString(0, history::HistoryDatabase::GURLToDatabaseURL(url)); |
+ return delete_s2.Run(); |
} |
bool WebDatabase::InitKeywordsTable() { |
- if (!DoesSqliteTableExist(db_, "keywords")) { |
- if (sqlite3_exec(db_, "CREATE TABLE keywords (" |
+ if (!db_.DoesTableExist("keywords")) { |
+ if (!db_.Execute("CREATE TABLE keywords (" |
"id INTEGER PRIMARY KEY," |
"short_name VARCHAR NOT NULL," |
"keyword VARCHAR NOT NULL," |
@@ -301,8 +284,7 @@ |
"input_encodings VARCHAR," |
"suggest_url VARCHAR," |
"prepopulate_id INTEGER DEFAULT 0," |
- "autogenerate_keyword INTEGER DEFAULT 0)", |
- NULL, NULL, NULL) != SQLITE_OK) { |
+ "autogenerate_keyword INTEGER DEFAULT 0)")) { |
NOTREACHED(); |
return false; |
} |
@@ -311,9 +293,8 @@ |
} |
bool WebDatabase::InitLoginsTable() { |
- if (!DoesSqliteTableExist(db_, "logins")) { |
- // First time |
- if (sqlite3_exec(db_, "CREATE TABLE logins (" |
+ if (!db_.DoesTableExist("logins")) { |
+ if (!db_.Execute("CREATE TABLE logins (" |
"origin_url VARCHAR NOT NULL, " |
"action_url VARCHAR, " |
"username_element VARCHAR, " |
@@ -330,35 +311,29 @@ |
"UNIQUE " |
"(origin_url, username_element, " |
"username_value, password_element, " |
- "submit_element, signon_realm))", |
- NULL, NULL, NULL) != SQLITE_OK) { |
+ "submit_element, signon_realm))")) { |
NOTREACHED(); |
return false; |
} |
- if (sqlite3_exec(db_, "CREATE INDEX logins_signon ON " |
- "logins (signon_realm)", |
- NULL, NULL, NULL) != SQLITE_OK) { |
+ if (!db_.Execute("CREATE INDEX logins_signon ON logins (signon_realm)")) { |
NOTREACHED(); |
return false; |
} |
} |
#if defined(OS_WIN) |
- if (!DoesSqliteTableExist(db_, "ie7_logins")) { |
- // First time |
- if (sqlite3_exec(db_, "CREATE TABLE ie7_logins (" |
+ if (!db_.DoesTableExist("ie7_logins")) { |
+ if (!db_.Execute("CREATE TABLE ie7_logins (" |
"url_hash VARCHAR NOT NULL, " |
"password_value BLOB, " |
"date_created INTEGER NOT NULL," |
"UNIQUE " |
- "(url_hash))", |
- NULL, NULL, NULL) != SQLITE_OK) { |
+ "(url_hash))")) { |
NOTREACHED(); |
return false; |
} |
- if (sqlite3_exec(db_, "CREATE INDEX ie7_logins_hash ON " |
- "ie7_logins (url_hash)", |
- NULL, NULL, NULL) != SQLITE_OK) { |
+ if (!db_.Execute("CREATE INDEX ie7_logins_hash ON " |
+ "ie7_logins (url_hash)")) { |
NOTREACHED(); |
return false; |
} |
@@ -369,29 +344,22 @@ |
} |
bool WebDatabase::InitAutofillTable() { |
- if (!DoesSqliteTableExist(db_, "autofill")) { |
- if (sqlite3_exec(db_, |
- "CREATE TABLE autofill (" |
+ if (!db_.DoesTableExist("autofill")) { |
+ if (!db_.Execute("CREATE TABLE autofill (" |
"name VARCHAR, " |
"value VARCHAR, " |
"value_lower VARCHAR, " |
"pair_id INTEGER PRIMARY KEY, " |
- "count INTEGER DEFAULT 1)", |
- NULL, NULL, NULL) != SQLITE_OK) { |
+ "count INTEGER DEFAULT 1)")) { |
NOTREACHED(); |
return false; |
} |
- if (sqlite3_exec(db_, |
- "CREATE INDEX autofill_name ON " |
- "autofill (name)", |
- NULL, NULL, NULL) != SQLITE_OK) { |
+ if (!db_.Execute("CREATE INDEX autofill_name ON autofill (name)")) { |
NOTREACHED(); |
return false; |
} |
- if (sqlite3_exec(db_, |
- "CREATE INDEX autofill_name_value_lower ON " |
- "autofill (name, value_lower)", |
- NULL, NULL, NULL) != SQLITE_OK) { |
+ if (!db_.Execute("CREATE INDEX autofill_name_value_lower ON " |
+ "autofill (name, value_lower)")) { |
NOTREACHED(); |
return false; |
} |
@@ -400,34 +368,29 @@ |
} |
bool WebDatabase::InitAutofillDatesTable() { |
- if (!DoesSqliteTableExist(db_, "autofill_dates")) { |
- if (sqlite3_exec(db_, |
- "CREATE TABLE autofill_dates ( " |
+ if (!db_.DoesTableExist("autofill_dates")) { |
+ if (!db_.Execute("CREATE TABLE autofill_dates ( " |
"pair_id INTEGER DEFAULT 0, " |
- "date_created INTEGER DEFAULT 0)", |
- NULL, NULL, NULL) != SQLITE_OK) { |
+ "date_created INTEGER DEFAULT 0)")) { |
NOTREACHED(); |
return false; |
} |
- if (sqlite3_exec(db_, |
- "CREATE INDEX autofill_dates_pair_id ON " |
- "autofill_dates (pair_id)", |
- NULL, NULL, NULL) != SQLITE_OK) { |
- NOTREACHED(); |
- return false; |
+ if (!db_.Execute("CREATE INDEX autofill_dates_pair_id ON " |
+ "autofill_dates (pair_id)")) { |
+ NOTREACHED(); |
+ return false; |
} |
} |
return true; |
} |
bool WebDatabase::InitWebAppIconsTable() { |
- if (!DoesSqliteTableExist(db_, "web_app_icons")) { |
- if (sqlite3_exec(db_, "CREATE TABLE web_app_icons (" |
+ if (!db_.DoesTableExist("web_app_icons")) { |
+ if (!db_.Execute("CREATE TABLE web_app_icons (" |
"url LONGVARCHAR," |
"width int," |
"height int," |
- "image BLOB, UNIQUE (url, width, height))", |
- NULL, NULL, NULL) != SQLITE_OK) { |
+ "image BLOB, UNIQUE (url, width, height))")) { |
NOTREACHED(); |
return false; |
} |
@@ -436,16 +399,14 @@ |
} |
bool WebDatabase::InitWebAppsTable() { |
- if (!DoesSqliteTableExist(db_, "web_apps")) { |
- if (sqlite3_exec(db_, "CREATE TABLE web_apps (" |
+ if (!db_.DoesTableExist("web_apps")) { |
+ if (!db_.Execute("CREATE TABLE web_apps (" |
"url LONGVARCHAR UNIQUE," |
- "has_all_images INTEGER NOT NULL)", |
- NULL, NULL, NULL) != SQLITE_OK) { |
+ "has_all_images INTEGER NOT NULL)")) { |
NOTREACHED(); |
return false; |
} |
- if (sqlite3_exec(db_, "CREATE INDEX web_apps_url_index ON " |
- "web_apps (url)", NULL, NULL, NULL) != SQLITE_OK) { |
+ if (!db_.Execute("CREATE INDEX web_apps_url_index ON web_apps (url)")) { |
NOTREACHED(); |
return false; |
} |
@@ -453,56 +414,55 @@ |
return true; |
} |
-static void BindURLToStatement(const TemplateURL& url, SQLStatement* s) { |
- s->bind_wstring(0, url.short_name()); |
- s->bind_wstring(1, url.keyword()); |
+static void BindURLToStatement(const TemplateURL& url, sql::Statement* s) { |
+ s->BindString(0, WideToUTF8(url.short_name())); |
+ s->BindString(1, WideToUTF8(url.keyword())); |
GURL favicon_url = url.GetFavIconURL(); |
if (!favicon_url.is_valid()) { |
- s->bind_string(2, ""); |
+ s->BindString(2, std::string()); |
} else { |
- s->bind_string(2, history::HistoryDatabase::GURLToDatabaseURL( |
+ s->BindString(2, history::HistoryDatabase::GURLToDatabaseURL( |
url.GetFavIconURL())); |
} |
if (url.url()) |
- s->bind_wstring(3, url.url()->url()); |
+ s->BindString(3, WideToUTF8(url.url()->url())); |
else |
- s->bind_wstring(3, std::wstring()); |
- s->bind_int(4, url.safe_for_autoreplace() ? 1 : 0); |
+ s->BindString(3, std::string()); |
+ s->BindInt(4, url.safe_for_autoreplace() ? 1 : 0); |
if (!url.originating_url().is_valid()) { |
- s->bind_string(5, std::string()); |
+ s->BindString(5, std::string()); |
} else { |
- s->bind_string(5, history::HistoryDatabase::GURLToDatabaseURL( |
+ s->BindString(5, history::HistoryDatabase::GURLToDatabaseURL( |
url.originating_url())); |
} |
- s->bind_int64(6, url.date_created().ToTimeT()); |
- s->bind_int(7, url.usage_count()); |
- s->bind_string(8, JoinStrings(";", url.input_encodings())); |
- s->bind_int(9, url.show_in_default_list() ? 1 : 0); |
+ s->BindInt64(6, url.date_created().ToTimeT()); |
+ s->BindInt(7, url.usage_count()); |
+ s->BindString(8, JoinStrings(";", url.input_encodings())); |
+ s->BindInt(9, url.show_in_default_list() ? 1 : 0); |
if (url.suggestions_url()) |
- s->bind_wstring(10, url.suggestions_url()->url()); |
+ s->BindString(10, WideToUTF8(url.suggestions_url()->url())); |
else |
- s->bind_wstring(10, std::wstring()); |
- s->bind_int(11, url.prepopulate_id()); |
- s->bind_int(12, url.autogenerate_keyword() ? 1 : 0); |
+ s->BindString(10, std::string()); |
+ s->BindInt(11, url.prepopulate_id()); |
+ s->BindInt(12, url.autogenerate_keyword() ? 1 : 0); |
} |
bool WebDatabase::AddKeyword(const TemplateURL& url) { |
DCHECK(url.id()); |
- SQLStatement s; |
- if (s.prepare(db_, |
- "INSERT INTO keywords " |
- "(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, " |
- "autogenerate_keyword, id) VALUES " |
- "(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)") |
- != SQLITE_OK) { |
+ sql::Statement s(db_.GetCachedStatement(SQL_FROM_HERE, |
+ "INSERT INTO keywords " |
+ "(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, " |
+ "autogenerate_keyword, id) VALUES " |
+ "(?,?,?,?,?,?,?,?,?,?,?,?,?,?)")); |
+ if (!s) { |
NOTREACHED() << "Statement prepare failed"; |
return false; |
} |
BindURLToStatement(url, &s); |
- s.bind_int64(13, url.id()); |
- if (s.step() != SQLITE_DONE) { |
+ s.BindInt64(13, url.id()); |
+ if (!s.Run()) { |
NOTREACHED(); |
return false; |
} |
@@ -511,92 +471,89 @@ |
bool WebDatabase::RemoveKeyword(TemplateURL::IDType id) { |
DCHECK(id); |
- SQLStatement s; |
- if (s.prepare(db_, |
- "DELETE FROM keywords WHERE id = ?") != SQLITE_OK) { |
+ sql::Statement s(db_.GetUniqueStatement("DELETE FROM keywords WHERE id = ?")); |
+ if (!s) { |
NOTREACHED() << "Statement prepare failed"; |
return false; |
} |
- s.bind_int64(0, id); |
- return s.step() == SQLITE_DONE; |
+ s.BindInt64(0, id); |
+ return s.Run(); |
} |
-bool WebDatabase::GetKeywords(std::vector<TemplateURL*>* urls) const { |
- SQLStatement s; |
- if (s.prepare(db_, |
- "SELECT id, 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, autogenerate_keyword " |
- "FROM keywords ORDER BY id ASC") != SQLITE_OK) { |
+bool WebDatabase::GetKeywords(std::vector<TemplateURL*>* urls) { |
+ sql::Statement s(db_.GetUniqueStatement( |
+ "SELECT id, 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, autogenerate_keyword " |
+ "FROM keywords ORDER BY id ASC")); |
+ if (!s) { |
NOTREACHED() << "Statement prepare failed"; |
return false; |
} |
- int result; |
- while ((result = s.step()) == SQLITE_ROW) { |
+ while (s.Step()) { |
TemplateURL* template_url = new TemplateURL(); |
- std::wstring tmp; |
- template_url->set_id(s.column_int64(0)); |
+ template_url->set_id(s.ColumnInt64(0)); |
- s.column_wstring(1, &tmp); |
+ std::string tmp; |
+ tmp = s.ColumnString(1); |
DCHECK(!tmp.empty()); |
- template_url->set_short_name(tmp); |
+ template_url->set_short_name(UTF8ToWide(tmp)); |
- s.column_wstring(2, &tmp); |
- template_url->set_keyword(tmp); |
+ tmp = s.ColumnString(2); |
+ template_url->set_keyword(UTF8ToWide(tmp)); |
- s.column_wstring(3, &tmp); |
+ tmp = s.ColumnString(3); |
if (!tmp.empty()) |
- template_url->SetFavIconURL(GURL(WideToUTF8(tmp))); |
+ template_url->SetFavIconURL(GURL(tmp)); |
- s.column_wstring(4, &tmp); |
- template_url->SetURL(tmp, 0, 0); |
+ tmp = s.ColumnString(4); |
+ template_url->SetURL(UTF8ToWide(tmp), 0, 0); |
- template_url->set_safe_for_autoreplace(s.column_int(5) == 1); |
+ template_url->set_safe_for_autoreplace(s.ColumnInt(5) == 1); |
- s.column_wstring(6, &tmp); |
+ tmp = s.ColumnString(6); |
if (!tmp.empty()) |
- template_url->set_originating_url(GURL(WideToUTF8(tmp))); |
+ template_url->set_originating_url(GURL(tmp)); |
- template_url->set_date_created(Time::FromTimeT(s.column_int64(7))); |
+ template_url->set_date_created(Time::FromTimeT(s.ColumnInt64(7))); |
- template_url->set_usage_count(s.column_int(8)); |
+ template_url->set_usage_count(s.ColumnInt(8)); |
std::vector<std::string> encodings; |
- SplitString(s.column_string(9), ';', &encodings); |
+ SplitString(s.ColumnString(9), ';', &encodings); |
template_url->set_input_encodings(encodings); |
- template_url->set_show_in_default_list(s.column_int(10) == 1); |
+ template_url->set_show_in_default_list(s.ColumnInt(10) == 1); |
- s.column_wstring(11, &tmp); |
- template_url->SetSuggestionsURL(tmp, 0, 0); |
+ tmp = s.ColumnString(11); |
+ template_url->SetSuggestionsURL(UTF8ToWide(tmp), 0, 0); |
- template_url->set_prepopulate_id(s.column_int(12)); |
+ template_url->set_prepopulate_id(s.ColumnInt(12)); |
- template_url->set_autogenerate_keyword(s.column_int(13) == 1); |
+ template_url->set_autogenerate_keyword(s.ColumnInt(13) == 1); |
urls->push_back(template_url); |
} |
- return result == SQLITE_DONE; |
+ return s.Succeeded(); |
} |
bool WebDatabase::UpdateKeyword(const TemplateURL& url) { |
DCHECK(url.id()); |
- SQLStatement s; |
- if (s.prepare(db_, |
- "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=?, autogenerate_keyword=? " |
- "WHERE id=?") |
- != SQLITE_OK) { |
+ sql::Statement s(db_.GetUniqueStatement( |
+ "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=?, autogenerate_keyword=? " |
+ "WHERE id=?")); |
+ if (!s) { |
NOTREACHED() << "Statement prepare failed"; |
return false; |
} |
BindURLToStatement(url, &s); |
- s.bind_int64(13, url.id()); |
- return s.step() == SQLITE_DONE; |
+ s.BindInt64(13, url.id()); |
+ return s.Run(); |
} |
bool WebDatabase::SetDefaultSearchProviderID(int64 id) { |
@@ -620,37 +577,37 @@ |
} |
bool WebDatabase::AddLogin(const PasswordForm& form) { |
- SQLStatement s; |
- std::string encrypted_password; |
- if (s.prepare(db_, |
- "INSERT OR REPLACE INTO logins " |
- "(origin_url, action_url, username_element, username_value, " |
- " password_element, password_value, submit_element, " |
- " signon_realm, ssl_valid, preferred, date_created, " |
- " blacklisted_by_user, scheme) " |
- "VALUES " |
- "(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)") != SQLITE_OK) { |
+ sql::Statement s(db_.GetUniqueStatement( |
+ "INSERT OR REPLACE INTO logins " |
+ "(origin_url, action_url, username_element, username_value, " |
+ " password_element, password_value, submit_element, " |
+ " signon_realm, ssl_valid, preferred, date_created, " |
+ " blacklisted_by_user, scheme) " |
+ "VALUES " |
+ "(?,?,?,?,?,?,?,?,?,?,?,?,?)")); |
+ if (!s) { |
NOTREACHED() << "Statement prepare failed"; |
return false; |
} |
- s.bind_string(0, form.origin.spec()); |
- s.bind_string(1, form.action.spec()); |
- s.bind_wstring(2, form.username_element); |
- s.bind_wstring(3, form.username_value); |
- s.bind_wstring(4, form.password_element); |
+ std::string encrypted_password; |
+ s.BindString(0, form.origin.spec()); |
+ s.BindString(1, form.action.spec()); |
+ s.BindString(2, WideToUTF8(form.username_element)); |
+ s.BindString(3, WideToUTF8(form.username_value)); |
+ s.BindString(4, WideToUTF8(form.password_element)); |
Encryptor::EncryptString16(WideToUTF16Hack(form.password_value), |
&encrypted_password); |
- s.bind_blob(5, encrypted_password.data(), |
- static_cast<int>(encrypted_password.length())); |
- s.bind_wstring(6, form.submit_element); |
- s.bind_string(7, form.signon_realm); |
- s.bind_int(8, form.ssl_valid); |
- s.bind_int(9, form.preferred); |
- s.bind_int64(10, form.date_created.ToTimeT()); |
- s.bind_int(11, form.blacklisted_by_user); |
- s.bind_int(12, form.scheme); |
- if (s.step() != SQLITE_DONE) { |
+ s.BindBlob(5, encrypted_password.data(), |
+ static_cast<int>(encrypted_password.length())); |
+ s.BindString(6, WideToUTF8(form.submit_element)); |
+ s.BindString(7, form.signon_realm); |
+ s.BindInt(8, form.ssl_valid); |
+ s.BindInt(9, form.preferred); |
+ s.BindInt64(10, form.date_created.ToTimeT()); |
+ s.BindInt(11, form.blacklisted_by_user); |
+ s.BindInt(12, form.scheme); |
+ if (!s.Run()) { |
NOTREACHED(); |
return false; |
} |
@@ -658,36 +615,37 @@ |
} |
bool WebDatabase::UpdateLogin(const PasswordForm& form) { |
- SQLStatement s; |
- std::string encrypted_password; |
- if (s.prepare(db_, "UPDATE logins SET " |
- "action_url = ?, " |
- "password_value = ?, " |
- "ssl_valid = ?, " |
- "preferred = ? " |
- "WHERE origin_url = ? AND " |
- "username_element = ? AND " |
- "username_value = ? AND " |
- "password_element = ? AND " |
- "signon_realm = ?") != SQLITE_OK) { |
+ sql::Statement s(db_.GetUniqueStatement( |
+ "UPDATE logins SET " |
+ "action_url = ?, " |
+ "password_value = ?, " |
+ "ssl_valid = ?, " |
+ "preferred = ? " |
+ "WHERE origin_url = ? AND " |
+ "username_element = ? AND " |
+ "username_value = ? AND " |
+ "password_element = ? AND " |
+ "signon_realm = ?")); |
+ if (!s) { |
NOTREACHED() << "Statement prepare failed"; |
return false; |
} |
- s.bind_string(0, form.action.spec()); |
+ s.BindString(0, form.action.spec()); |
+ std::string encrypted_password; |
Encryptor::EncryptString16(WideToUTF16Hack(form.password_value), |
&encrypted_password); |
- s.bind_blob(1, encrypted_password.data(), |
- static_cast<int>(encrypted_password.length())); |
- s.bind_int(2, form.ssl_valid); |
- s.bind_int(3, form.preferred); |
- s.bind_string(4, form.origin.spec()); |
- s.bind_wstring(5, form.username_element); |
- s.bind_wstring(6, form.username_value); |
- s.bind_wstring(7, form.password_element); |
- s.bind_string(8, form.signon_realm); |
+ s.BindBlob(1, encrypted_password.data(), |
+ static_cast<int>(encrypted_password.length())); |
+ s.BindInt(2, form.ssl_valid); |
+ s.BindInt(3, form.preferred); |
+ s.BindString(4, form.origin.spec()); |
+ s.BindString(5, WideToUTF8(form.username_element)); |
+ s.BindString(6, WideToUTF8(form.username_value)); |
+ s.BindString(7, WideToUTF8(form.password_element)); |
+ s.BindString(8, form.signon_realm); |
- if (s.step() != SQLITE_DONE) { |
+ if (!s.Run()) { |
NOTREACHED(); |
return false; |
} |
@@ -695,127 +653,130 @@ |
} |
bool WebDatabase::RemoveLogin(const PasswordForm& form) { |
- SQLStatement s; |
// Remove a login by UNIQUE-constrained fields. |
- if (s.prepare(db_, |
- "DELETE FROM logins WHERE " |
- "origin_url = ? AND " |
- "username_element = ? AND " |
- "username_value = ? AND " |
- "password_element = ? AND " |
- "submit_element = ? AND " |
- "signon_realm = ? ") != SQLITE_OK) { |
+ sql::Statement s(db_.GetUniqueStatement( |
+ "DELETE FROM logins WHERE " |
+ "origin_url = ? AND " |
+ "username_element = ? AND " |
+ "username_value = ? AND " |
+ "password_element = ? AND " |
+ "submit_element = ? AND " |
+ "signon_realm = ?")); |
+ if (!s) { |
NOTREACHED() << "Statement prepare failed"; |
return false; |
} |
- s.bind_string(0, form.origin.spec()); |
- s.bind_wstring(1, form.username_element); |
- s.bind_wstring(2, form.username_value); |
- s.bind_wstring(3, form.password_element); |
- s.bind_wstring(4, form.submit_element); |
- s.bind_string(5, form.signon_realm); |
+ s.BindString(0, form.origin.spec()); |
+ s.BindString(1, WideToUTF8(form.username_element)); |
+ s.BindString(2, WideToUTF8(form.username_value)); |
+ s.BindString(3, WideToUTF8(form.password_element)); |
+ s.BindString(4, WideToUTF8(form.submit_element)); |
+ s.BindString(5, form.signon_realm); |
- if (s.step() != SQLITE_DONE) { |
+ if (!s.Run()) { |
NOTREACHED(); |
return false; |
} |
return true; |
} |
-bool WebDatabase::RemoveLoginsCreatedBetween(const Time delete_begin, |
- const Time delete_end) { |
- SQLStatement s1; |
- if (s1.prepare(db_, |
- "DELETE FROM logins WHERE " |
- "date_created >= ? AND date_created < ?") != SQLITE_OK) { |
+bool WebDatabase::RemoveLoginsCreatedBetween(base::Time delete_begin, |
+ base::Time delete_end) { |
+ sql::Statement s1(db_.GetUniqueStatement( |
+ "DELETE FROM logins WHERE " |
+ "date_created >= ? AND date_created < ?")); |
+ if (!s1) { |
NOTREACHED() << "Statement 1 prepare failed"; |
return false; |
} |
- s1.bind_int64(0, delete_begin.ToTimeT()); |
- s1.bind_int64(1, |
- delete_end.is_null() ? |
- std::numeric_limits<int64>::max() : |
- delete_end.ToTimeT()); |
- bool success = s1.step() == SQLITE_DONE; |
+ s1.BindInt64(0, delete_begin.ToTimeT()); |
+ s1.BindInt64(1, |
+ delete_end.is_null() ? |
+ std::numeric_limits<int64>::max() : |
+ delete_end.ToTimeT()); |
+ bool success = s1.Run(); |
#if defined(OS_WIN) |
- SQLStatement s2; |
- if (s2.prepare(db_, |
- "DELETE FROM ie7_logins WHERE " |
- "date_created >= ? AND date_created < ?") != SQLITE_OK) { |
+ sql::Statement s2(db_.GetUniqueStatement( |
+ "DELETE FROM ie7_logins WHERE date_created >= ? AND date_created < ?")); |
+ if (!s2) { |
NOTREACHED() << "Statement 2 prepare failed"; |
return false; |
} |
- s2.bind_int64(0, delete_begin.ToTimeT()); |
- s2.bind_int64(1, |
- delete_end.is_null() ? |
- std::numeric_limits<int64>::max() : |
- delete_end.ToTimeT()); |
- success = success && (s2.step() == SQLITE_DONE); |
+ s2.BindInt64(0, delete_begin.ToTimeT()); |
+ s2.BindInt64(1, |
+ delete_end.is_null() ? |
+ std::numeric_limits<int64>::max() : |
+ delete_end.ToTimeT()); |
+ success = success && s2.Run(); |
#endif |
return success; |
} |
static void InitPasswordFormFromStatement(PasswordForm* form, |
- SQLStatement* s) { |
- std::string encrypted_password; |
+ sql::Statement* s) { |
std::string tmp; |
string16 decrypted_password; |
- s->column_string(0, &tmp); |
+ tmp = s->ColumnString(0); |
form->origin = GURL(tmp); |
- s->column_string(1, &tmp); |
+ tmp = s->ColumnString(1); |
form->action = GURL(tmp); |
- s->column_wstring(2, &form->username_element); |
- s->column_wstring(3, &form->username_value); |
- s->column_wstring(4, &form->password_element); |
- s->column_blob_as_string(5, &encrypted_password); |
- Encryptor::DecryptString16(encrypted_password, &decrypted_password); |
+ form->username_element = UTF8ToWide(s->ColumnString(2)); |
+ form->username_value = UTF8ToWide(s->ColumnString(3)); |
+ form->password_element = UTF8ToWide(s->ColumnString(4)); |
+ |
+ int encrypted_password_len = s->ColumnByteLength(5); |
+ std::string encrypted_password; |
+ if (encrypted_password_len) { |
+ encrypted_password.resize(encrypted_password_len); |
+ memcpy(&encrypted_password[0], s->ColumnBlob(5), encrypted_password_len); |
+ Encryptor::DecryptString16(encrypted_password, &decrypted_password); |
+ } |
+ |
form->password_value = UTF16ToWideHack(decrypted_password); |
- s->column_wstring(6, &form->submit_element); |
- s->column_string(7, &tmp); |
+ form->submit_element = UTF8ToWide(s->ColumnString(6)); |
+ tmp = s->ColumnString(7); |
form->signon_realm = tmp; |
- form->ssl_valid = (s->column_int(8) > 0); |
- form->preferred = (s->column_int(9) > 0); |
- form->date_created = Time::FromTimeT(s->column_int64(10)); |
- form->blacklisted_by_user = (s->column_int(11) > 0); |
- int scheme_int = s->column_int(12); |
+ form->ssl_valid = (s->ColumnInt(8) > 0); |
+ form->preferred = (s->ColumnInt(9) > 0); |
+ form->date_created = Time::FromTimeT(s->ColumnInt64(10)); |
+ form->blacklisted_by_user = (s->ColumnInt(11) > 0); |
+ int scheme_int = s->ColumnInt(12); |
DCHECK((scheme_int >= 0) && (scheme_int <= PasswordForm::SCHEME_OTHER)); |
form->scheme = static_cast<PasswordForm::Scheme>(scheme_int); |
} |
bool WebDatabase::GetLogins(const PasswordForm& form, |
- std::vector<PasswordForm*>* forms) const { |
+ std::vector<PasswordForm*>* forms) { |
DCHECK(forms); |
- SQLStatement s; |
- if (s.prepare(db_, |
+ sql::Statement s(db_.GetUniqueStatement( |
"SELECT origin_url, action_url, " |
"username_element, username_value, " |
"password_element, password_value, " |
"submit_element, signon_realm, " |
"ssl_valid, preferred, " |
"date_created, blacklisted_by_user, scheme FROM logins " |
- "WHERE signon_realm == ? ") != SQLITE_OK) { |
+ "WHERE signon_realm == ?")); |
+ if (!s) { |
NOTREACHED() << "Statement prepare failed"; |
return false; |
} |
- s.bind_string(0, form.signon_realm); |
+ s.BindString(0, form.signon_realm); |
- int result; |
- while ((result = s.step()) == SQLITE_ROW) { |
+ while (s.Step()) { |
PasswordForm* new_form = new PasswordForm(); |
InitPasswordFormFromStatement(new_form, &s); |
forms->push_back(new_form); |
} |
- return result == SQLITE_DONE; |
+ return s.Succeeded(); |
} |
bool WebDatabase::GetAllLogins(std::vector<PasswordForm*>* forms, |
- bool include_blacklisted) const { |
+ bool include_blacklisted) { |
DCHECK(forms); |
- SQLStatement s; |
std::string stmt = "SELECT origin_url, action_url, " |
"username_element, username_value, " |
"password_element, password_value, " |
@@ -825,19 +786,19 @@ |
stmt.append("WHERE blacklisted_by_user == 0 "); |
stmt.append("ORDER BY origin_url"); |
- if (s.prepare(db_, stmt.c_str()) != SQLITE_OK) { |
+ sql::Statement s(db_.GetUniqueStatement(stmt.c_str())); |
+ if (!s) { |
NOTREACHED() << "Statement prepare failed"; |
return false; |
} |
- int result; |
- while ((result = s.step()) == SQLITE_ROW) { |
+ while (s.Step()) { |
PasswordForm* new_form = new PasswordForm(); |
InitPasswordFormFromStatement(new_form, &s); |
forms->push_back(new_form); |
} |
- return result == SQLITE_DONE; |
+ return s.Succeeded(); |
} |
bool WebDatabase::AddAutofillFormElements( |
@@ -853,18 +814,16 @@ |
} |
bool WebDatabase::ClearAutofillEmptyValueElements() { |
- SQLStatement s; |
- |
- if (s.prepare(db_, "SELECT pair_id FROM autofill " |
- "WHERE TRIM(value)= \"\"") != SQLITE_OK) { |
+ sql::Statement s(db_.GetUniqueStatement( |
+ "SELECT pair_id FROM autofill WHERE TRIM(value)= \"\"")); |
+ if (!s) { |
NOTREACHED() << "Statement prepare failed"; |
return false; |
} |
std::set<int64> ids; |
- int result; |
- while ((result = s.step()) == SQLITE_ROW) |
- ids.insert(s.column_int64(0)); |
+ while (s.Step()) |
+ ids.insert(s.ColumnInt64(0)); |
bool success = true; |
for (std::set<int64>::const_iterator iter = ids.begin(); iter != ids.end(); |
@@ -877,93 +836,84 @@ |
} |
bool WebDatabase::GetIDAndCountOfFormElement( |
- const AutofillForm::Element& element, int64* pair_id, int* count) const { |
- SQLStatement s; |
- |
- if (s.prepare(db_, "SELECT pair_id, count FROM autofill " |
- " WHERE name = ? AND value = ?") != SQLITE_OK) { |
+ const AutofillForm::Element& element, |
+ int64* pair_id, |
+ int* count) { |
+ sql::Statement s(db_.GetUniqueStatement( |
+ "SELECT pair_id, count FROM autofill " |
+ "WHERE name = ? AND value = ?")); |
+ if (!s) { |
NOTREACHED() << "Statement prepare failed"; |
return false; |
} |
- s.bind_wstring(0, element.name); |
- s.bind_wstring(1, element.value); |
+ s.BindString(0, WideToUTF8(element.name)); |
+ s.BindString(1, WideToUTF8(element.value)); |
- int result; |
- |
*count = 0; |
- if ((result = s.step()) == SQLITE_ROW) { |
- *pair_id = s.column_int64(0); |
- *count = s.column_int(1); |
+ if (s.Step()) { |
+ *pair_id = s.ColumnInt64(0); |
+ *count = s.ColumnInt(1); |
} |
return true; |
} |
-bool WebDatabase::GetCountOfFormElement(int64 pair_id, int* count) const { |
- SQLStatement s; |
- |
- if (s.prepare(db_, "SELECT count FROM autofill " |
- " WHERE pair_id = ?") != SQLITE_OK) { |
+bool WebDatabase::GetCountOfFormElement(int64 pair_id, int* count) { |
+ sql::Statement s(db_.GetUniqueStatement( |
+ "SELECT count FROM autofill WHERE pair_id = ?")); |
+ if (!s) { |
NOTREACHED() << "Statement prepare failed"; |
return false; |
} |
- s.bind_int64(0, pair_id); |
+ s.BindInt64(0, pair_id); |
- int result; |
- if ((result = s.step()) == SQLITE_ROW) { |
- *count = s.column_int(0); |
- } else { |
- return false; |
+ if (s.Step()) { |
+ *count = s.ColumnInt(0); |
+ return true; |
} |
- |
- return true; |
+ return false; |
} |
bool WebDatabase::InsertFormElement(const AutofillForm::Element& element, |
int64* pair_id) { |
- SQLStatement s; |
- |
- if (s.prepare(db_, "INSERT INTO autofill " |
- "(name, value, value_lower) " |
- "VALUES (?, ?, ?)") |
- != SQLITE_OK) { |
+ sql::Statement s(db_.GetUniqueStatement( |
+ "INSERT INTO autofill (name, value, value_lower) VALUES (?,?,?)")); |
+ if (!s) { |
NOTREACHED() << "Statement prepare failed"; |
return false; |
} |
- s.bind_wstring(0, element.name); |
- s.bind_wstring(1, element.value); |
- s.bind_wstring(2, l10n_util::ToLower(element.value)); |
+ s.BindString(0, WideToUTF8(element.name)); |
+ s.BindString(1, WideToUTF8(element.value)); |
+ s.BindString(2, UTF16ToUTF8( |
+ l10n_util::ToLower(WideToUTF16Hack(element.value)))); |
- if (s.step() != SQLITE_DONE) { |
+ if (!s.Run()) { |
NOTREACHED(); |
return false; |
} |
- *pair_id = sqlite3_last_insert_rowid(db_); |
- |
+ *pair_id = db_.GetLastInsertRowId(); |
return true; |
} |
bool WebDatabase::InsertPairIDAndDate(int64 pair_id, |
- const Time date_created) { |
- SQLStatement s; |
- |
- if (s.prepare(db_, |
- "INSERT INTO autofill_dates " |
- "(pair_id, date_created) VALUES (?, ?)") |
- != SQLITE_OK) { |
+ base::Time date_created) { |
+ sql::Statement s(db_.GetUniqueStatement( |
+ "INSERT INTO autofill_dates " |
+ "(pair_id, date_created) VALUES (?, ?)")); |
+ if (!s) { |
NOTREACHED() << "Statement prepare failed"; |
return false; |
} |
- s.bind_int64(0, pair_id); |
- s.bind_int64(1, date_created.ToTimeT()); |
+ s.BindInt64(0, pair_id); |
+ s.BindInt64(1, date_created.ToTimeT()); |
- if (s.step() != SQLITE_DONE) { |
+ if (!s.Run()) { |
NOTREACHED(); |
return false; |
} |
@@ -972,20 +922,16 @@ |
} |
bool WebDatabase::SetCountOfFormElement(int64 pair_id, int count) { |
- SQLStatement s; |
- |
- if (s.prepare(db_, |
- "UPDATE autofill SET count = ? " |
- "WHERE pair_id = ?") |
- != SQLITE_OK) { |
+ sql::Statement s(db_.GetUniqueStatement( |
+ "UPDATE autofill SET count = ? WHERE pair_id = ?")); |
+ if (!s) { |
NOTREACHED() << "Statement prepare failed"; |
return false; |
} |
- s.bind_int(0, count); |
- s.bind_int64(1, pair_id); |
- |
- if (s.step() != SQLITE_DONE) { |
+ s.BindInt(0, count); |
+ s.BindInt64(1, pair_id); |
+ if (!s.Run()) { |
NOTREACHED(); |
return false; |
} |
@@ -994,7 +940,6 @@ |
} |
bool WebDatabase::AddAutofillFormElement(const AutofillForm::Element& element) { |
- SQLStatement s; |
int count = 0; |
int64 pair_id; |
@@ -1009,73 +954,74 @@ |
} |
bool WebDatabase::GetFormValuesForElementName(const std::wstring& name, |
- const std::wstring& prefix, |
- std::vector<std::wstring>* values, |
- int limit) const { |
+ const std::wstring& prefix, |
+ std::vector<std::wstring>* values, |
+ int limit) { |
DCHECK(values); |
- SQLStatement s; |
+ sql::Statement s; |
if (prefix.empty()) { |
- if (s.prepare(db_, "SELECT value FROM autofill " |
- "WHERE name = ? " |
- "ORDER BY count DESC " |
- "LIMIT ?") != SQLITE_OK) { |
+ s.Assign(db_.GetUniqueStatement( |
+ "SELECT value FROM autofill " |
+ "WHERE name = ? " |
+ "ORDER BY count DESC " |
+ "LIMIT ?")); |
+ if (!s) { |
NOTREACHED() << "Statement prepare failed"; |
return false; |
} |
- s.bind_wstring(0, name); |
- s.bind_int(1, limit); |
+ s.BindString(0, WideToUTF8(name)); |
+ s.BindInt(1, limit); |
} else { |
- std::wstring prefix_lower = l10n_util::ToLower(prefix); |
- std::wstring next_prefix = prefix_lower; |
+ string16 prefix_lower = l10n_util::ToLower(WideToUTF16Hack(prefix)); |
+ string16 next_prefix = prefix_lower; |
next_prefix[next_prefix.length() - 1]++; |
- if (s.prepare(db_, "SELECT value FROM autofill " |
- "WHERE name = ? AND " |
- "value_lower >= ? AND " |
- "value_lower < ? " |
- "ORDER BY count DESC " |
- "LIMIT ?") != SQLITE_OK) { |
+ s.Assign(db_.GetUniqueStatement( |
+ "SELECT value FROM autofill " |
+ "WHERE name = ? AND " |
+ "value_lower >= ? AND " |
+ "value_lower < ? " |
+ "ORDER BY count DESC " |
+ "LIMIT ?")); |
+ if (!s) { |
NOTREACHED() << "Statement prepare failed"; |
return false; |
} |
- s.bind_wstring(0, name); |
- s.bind_wstring(1, prefix_lower); |
- s.bind_wstring(2, next_prefix); |
- s.bind_int(3, limit); |
+ s.BindString(0, WideToUTF8(name)); |
+ s.BindString(1, UTF16ToUTF8(prefix_lower)); |
+ s.BindString(2, UTF16ToUTF8(next_prefix)); |
+ s.BindInt(3, limit); |
} |
values->clear(); |
- int result; |
- while ((result = s.step()) == SQLITE_ROW) |
- values->push_back(s.column_wstring(0)); |
- |
- return result == SQLITE_DONE; |
+ while (s.Step()) |
+ values->push_back(UTF8ToWide(s.ColumnString(0))); |
+ return s.Succeeded(); |
} |
-bool WebDatabase::RemoveFormElementsAddedBetween(const Time delete_begin, |
- const Time delete_end) { |
- SQLStatement s; |
- if (s.prepare(db_, |
- "SELECT DISTINCT pair_id FROM autofill_dates WHERE " |
- "date_created >= ? AND date_created < ?") != SQLITE_OK) { |
+bool WebDatabase::RemoveFormElementsAddedBetween(base::Time delete_begin, |
+ base::Time delete_end) { |
+ sql::Statement s(db_.GetUniqueStatement( |
+ "SELECT DISTINCT pair_id FROM autofill_dates " |
+ "WHERE date_created >= ? AND date_created < ?")); |
+ if (!s) { |
NOTREACHED() << "Statement 1 prepare failed"; |
return false; |
} |
- s.bind_int64(0, delete_begin.ToTimeT()); |
- s.bind_int64(1, |
- delete_end.is_null() ? |
- std::numeric_limits<int64>::max() : |
- delete_end.ToTimeT()); |
+ s.BindInt64(0, delete_begin.ToTimeT()); |
+ s.BindInt64(1, |
+ delete_end.is_null() ? |
+ std::numeric_limits<int64>::max() : |
+ delete_end.ToTimeT()); |
std::vector<int64> pair_ids; |
- int result; |
- while ((result = s.step()) == SQLITE_ROW) |
- pair_ids.push_back(s.column_int64(0)); |
+ while (s.Step()) |
+ pair_ids.push_back(s.ColumnInt64(0)); |
- if (result != SQLITE_DONE) { |
+ if (!s.Succeeded()) { |
NOTREACHED(); |
return false; |
} |
@@ -1099,21 +1045,21 @@ |
const Time delete_begin, |
const Time delete_end, |
int* how_many) { |
- SQLStatement s; |
- if (s.prepare(db_, |
- "DELETE FROM autofill_dates WHERE pair_id = ? AND " |
- "date_created >= ? AND date_created < ?") != SQLITE_OK) { |
+ sql::Statement s(db_.GetUniqueStatement( |
+ "DELETE FROM autofill_dates WHERE pair_id = ? AND " |
+ "date_created >= ? AND date_created < ?")); |
+ if (!s) { |
NOTREACHED() << "Statement 1 prepare failed"; |
return false; |
} |
- s.bind_int64(0, pair_id); |
- s.bind_int64(1, delete_begin.is_null() ? 0 : delete_begin.ToTimeT()); |
- s.bind_int64(2, delete_end.is_null() ? std::numeric_limits<int64>::max() : |
- delete_end.ToTimeT()); |
+ s.BindInt64(0, pair_id); |
+ s.BindInt64(1, delete_begin.is_null() ? 0 : delete_begin.ToTimeT()); |
+ s.BindInt64(2, delete_end.is_null() ? std::numeric_limits<int64>::max() : |
+ delete_end.ToTimeT()); |
- bool result = (s.step() == SQLITE_DONE); |
+ bool result = s.Run(); |
if (how_many) |
- *how_many = sqlite3_changes(db_); |
+ *how_many = db_.GetLastChangeCount(); |
return result; |
} |
@@ -1121,21 +1067,18 @@ |
bool WebDatabase::RemoveFormElement(const std::wstring& name, |
const std::wstring& value) { |
// Find the id for that pair. |
- SQLStatement s; |
- if (s.prepare(db_, |
- "SELECT pair_id FROM autofill WHERE name = ? AND value= ?") != |
- SQLITE_OK) { |
+ sql::Statement s(db_.GetUniqueStatement( |
+ "SELECT pair_id FROM autofill WHERE name = ? AND value= ?")); |
+ if (!s) { |
NOTREACHED() << "Statement 1 prepare failed"; |
return false; |
} |
- s.bind_wstring(0, name); |
- s.bind_wstring(1, value); |
+ s.BindString(0, WideToUTF8(name)); |
+ s.BindString(1, WideToUTF8(value)); |
- int result = s.step(); |
- if (result != SQLITE_ROW) |
- return false; |
- |
- return RemoveFormElementForID(s.column_int64(0)); |
+ if (s.Step()) |
+ return RemoveFormElementForID(s.ColumnInt64(0)); |
+ return false; |
} |
bool WebDatabase::AddToCountOfFormElement(int64 pair_id, int delta) { |
@@ -1155,17 +1098,18 @@ |
} |
bool WebDatabase::RemoveFormElementForID(int64 pair_id) { |
- SQLStatement s; |
- if (s.prepare(db_, |
- "DELETE FROM autofill WHERE pair_id = ?") != SQLITE_OK) { |
+ sql::Statement s(db_.GetUniqueStatement( |
+ "DELETE FROM autofill WHERE pair_id = ?")); |
+ if (!s) { |
NOTREACHED() << "Statement prepare failed"; |
return false; |
} |
- s.bind_int64(0, pair_id); |
- if (s.step() != SQLITE_DONE) |
- return false; |
- |
- return RemoveFormElementForTimeRange(pair_id, Time(), Time(), NULL); |
+ s.BindInt64(0, pair_id); |
+ if (s.Run()) { |
+ return RemoveFormElementForTimeRange(pair_id, base::Time(), base::Time(), |
+ NULL); |
+ } |
+ return false; |
} |
void WebDatabase::MigrateOldVersionsAsNeeded() { |
@@ -1184,9 +1128,8 @@ |
case 20: |
// Add the autogenerate_keyword column. |
- if (sqlite3_exec(db_, |
- "ALTER TABLE keywords ADD COLUMN autogenerate_keyword " |
- "INTEGER DEFAULT 0", NULL, NULL, NULL) != SQLITE_OK) { |
+ if (!db_.Execute("ALTER TABLE keywords ADD COLUMN autogenerate_keyword " |
+ "INTEGER DEFAULT 0")) { |
NOTREACHED(); |
LOG(WARNING) << "Unable to update web database to version 21."; |
return; |