From bf898dad1b57c6fd436bc8d8c8ef143e3d11755d Mon Sep 17 00:00:00 2001 From: "mirandac@chromium.org" Date: Mon, 30 Aug 2010 20:55:26 +0000 Subject: Fix credit card table migration step by ensuring that we're not trying to add a column which is already present. If we create a table as part of the init process, don't try to alter the table, because it already exists. BUG=10913 TEST= search engine dialog works, search engines don't disappear. Review URL: http://codereview.chromium.org/3239006 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@57902 0039d316-1c4b-4281-b951-d872f2087c98 --- chrome/browser/webdata/web_database.cc | 38 ++++++++++++++++++++-------------- chrome/browser/webdata/web_database.h | 5 +++-- 2 files changed, 25 insertions(+), 18 deletions(-) (limited to 'chrome') diff --git a/chrome/browser/webdata/web_database.cc b/chrome/browser/webdata/web_database.cc index 81582a1..fa325f3 100644 --- a/chrome/browser/webdata/web_database.cc +++ b/chrome/browser/webdata/web_database.cc @@ -446,16 +446,18 @@ sql::InitStatus WebDatabase::Init(const FilePath& db_name) { } // Initialize the tables. + bool credit_card_table_created = false; if (!InitKeywordsTable() || !InitLoginsTable() || !InitWebAppIconsTable() || !InitWebAppsTable() || !InitAutofillTable() || !InitAutofillDatesTable() || !InitAutoFillProfilesTable() || - !InitCreditCardsTable() || !InitTokenServiceTable()) { + !InitCreditCardsTable(&credit_card_table_created) || + !InitTokenServiceTable()) { LOG(WARNING) << "Unable to initialize the web database."; return sql::INIT_FAILURE; } // If the file on disk is an older database version, bring it up to date. - MigrateOldVersionsAsNeeded(); + MigrateOldVersionsAsNeeded(credit_card_table_created); return transaction.Commit() ? sql::INIT_OK : sql::INIT_FAILURE; } @@ -759,7 +761,7 @@ bool WebDatabase::InitAutoFillProfilesTable() { return true; } -bool WebDatabase::InitCreditCardsTable() { +bool WebDatabase::InitCreditCardsTable(bool* table_was_created) { if (!db_.DoesTableExist("credit_cards")) { if (!db_.Execute("CREATE TABLE credit_cards ( " "label VARCHAR, " @@ -777,6 +779,7 @@ bool WebDatabase::InitCreditCardsTable() { NOTREACHED(); return false; } + *table_was_created = true; if (!db_.Execute("CREATE INDEX credit_cards_label_index " "ON credit_cards (label)")) { NOTREACHED(); @@ -1870,7 +1873,7 @@ bool WebDatabase::RemoveFormElementForID(int64 pair_id) { return false; } -void WebDatabase::MigrateOldVersionsAsNeeded() { +void WebDatabase::MigrateOldVersionsAsNeeded(bool credit_card_table_created) { // Migrate if necessary. int current_version = meta_table_.GetVersionNumber(); switch (current_version) { @@ -1907,18 +1910,21 @@ void WebDatabase::MigrateOldVersionsAsNeeded() { // FALL THROUGH case 22: - // Add the card_number_encrypted column. - if (!db_.Execute("ALTER TABLE credit_cards ADD COLUMN " - "card_number_encrypted BLOB DEFAULT NULL")) { - NOTREACHED(); - LOG(WARNING) << "Unable to update web database to version 23."; - return; - } - if (!db_.Execute("ALTER TABLE credit_cards ADD COLUMN " - "verification_code_encrypted BLOB DEFAULT NULL")) { - NOTREACHED(); - LOG(WARNING) << "Unable to update web database to version 23."; - return; + // Add the card_number_encrypted column if credit card table was not + // created in this build. + if (!credit_card_table_created) { + if (!db_.Execute("ALTER TABLE credit_cards ADD COLUMN " + "card_number_encrypted BLOB DEFAULT NULL")) { + NOTREACHED(); + LOG(WARNING) << "Unable to update web database to version 23."; + return; + } + if (!db_.Execute("ALTER TABLE credit_cards ADD COLUMN " + "verification_code_encrypted BLOB DEFAULT NULL")) { + NOTREACHED(); + LOG(WARNING) << "Unable to update web database to version 23."; + return; + } } meta_table_.SetVersionNumber(23); diff --git a/chrome/browser/webdata/web_database.h b/chrome/browser/webdata/web_database.h index 34b7aa6..23938a8 100644 --- a/chrome/browser/webdata/web_database.h +++ b/chrome/browser/webdata/web_database.h @@ -329,12 +329,13 @@ class WebDatabase { bool InitAutofillTable(); bool InitAutofillDatesTable(); bool InitAutoFillProfilesTable(); - bool InitCreditCardsTable(); + // Out parameter |credit_card_table_created| true if table created here. + bool InitCreditCardsTable(bool* table_was_created); bool InitTokenServiceTable(); bool InitWebAppIconsTable(); bool InitWebAppsTable(); - void MigrateOldVersionsAsNeeded(); + void MigrateOldVersionsAsNeeded(bool credit_card_table_created); sql::Connection db_; sql::MetaTable meta_table_; -- cgit v1.1