diff options
author | mirandac@chromium.org <mirandac@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-08-30 20:55:26 +0000 |
---|---|---|
committer | mirandac@chromium.org <mirandac@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-08-30 20:55:26 +0000 |
commit | bf898dad1b57c6fd436bc8d8c8ef143e3d11755d (patch) | |
tree | a7f37c0ca8b97620ee88586d2dc4cd2c7f7891dd /chrome | |
parent | 63b9eb2c8d3bb29e814f7a0da90568e77a47a42f (diff) | |
download | chromium_src-bf898dad1b57c6fd436bc8d8c8ef143e3d11755d.zip chromium_src-bf898dad1b57c6fd436bc8d8c8ef143e3d11755d.tar.gz chromium_src-bf898dad1b57c6fd436bc8d8c8ef143e3d11755d.tar.bz2 |
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
Diffstat (limited to 'chrome')
-rw-r--r-- | chrome/browser/webdata/web_database.cc | 38 | ||||
-rw-r--r-- | chrome/browser/webdata/web_database.h | 5 |
2 files changed, 25 insertions, 18 deletions
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_; |