Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(38)

Unified Diff: components/autofill/core/browser/webdata/autofill_table.cc

Issue 212873003: Store the language code for the address in autofill profile. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: components/autofill/core/browser/webdata/autofill_table.cc
diff --git a/components/autofill/core/browser/webdata/autofill_table.cc b/components/autofill/core/browser/webdata/autofill_table.cc
index ce7cebe3908b9a7bfec8ce9444e0588a0c05a768..f8e9b3cc93b8dc425c9fca42607a4a5be1265fa0 100644
--- a/components/autofill/core/browser/webdata/autofill_table.cc
+++ b/components/autofill/core/browser/webdata/autofill_table.cc
@@ -89,6 +89,7 @@ void BindAutofillProfileToStatement(const AutofillProfile& profile,
s->BindString16(index++, GetInfo(profile, ADDRESS_HOME_ZIP));
s->BindString16(index++, GetInfo(profile, ADDRESS_HOME_SORTING_CODE));
s->BindString16(index++, GetInfo(profile, ADDRESS_HOME_COUNTRY));
+ s->BindString(index++, profile.language_code());
s->BindInt64(index++, Time::Now().ToTimeT());
s->BindString(index++, profile.origin());
}
@@ -109,6 +110,7 @@ scoped_ptr<AutofillProfile> AutofillProfileFromStatement(
profile->SetRawInfo(ADDRESS_HOME_ZIP, s.ColumnString16(index++));
profile->SetRawInfo(ADDRESS_HOME_SORTING_CODE, s.ColumnString16(index++));
profile->SetRawInfo(ADDRESS_HOME_COUNTRY, s.ColumnString16(index++));
+ profile->set_language_code(s.ColumnString(index++));
// Intentionally skip column 9, which stores the profile's modification date.
index++;
profile->set_origin(s.ColumnString(index++));
@@ -442,6 +444,9 @@ bool AutofillTable::MigrateToVersion(int version,
case 55:
*update_compatible_version = true;
return MigrateToVersion55MergeAutofillDatesTable();
+ case 56:
+ *update_compatible_version = true;
+ return MigrateToVersion56AddProfileLanguageCodeForFormatting();
}
return true;
}
@@ -549,7 +554,7 @@ bool AutofillTable::RemoveFormElementsAddedBetween(
// Precisely, compute the average amount of time between increments to the
// count in the original range [date_created, date_last_used]:
// avg_delta = (date_last_used_orig - date_created_orig) / (count - 1)
- // The count can be exressed as
+ // The count can be expressed as
// count = 1 + (date_last_used - date_created) / avg_delta
// Hence, update the count to
// count_new = 1 + (date_last_used_new - date_created_new) / avg_delta
@@ -803,8 +808,9 @@ bool AutofillTable::AddAutofillProfile(const AutofillProfile& profile) {
sql::Statement s(db_->GetUniqueStatement(
"INSERT INTO autofill_profiles"
"(guid, company_name, street_address, dependent_locality, city, state,"
- " zipcode, sorting_code, country_code, date_modified, origin)"
- "VALUES (?,?,?,?,?,?,?,?,?,?,?)"));
+ " zipcode, sorting_code, country_code, language_code, date_modified,"
+ " origin)"
+ "VALUES (?,?,?,?,?,?,?,?,?,?,?,?)"));
BindAutofillProfileToStatement(profile, &s);
if (!s.Run())
@@ -819,7 +825,8 @@ bool AutofillTable::GetAutofillProfile(const std::string& guid,
DCHECK(profile);
sql::Statement s(db_->GetUniqueStatement(
"SELECT guid, company_name, street_address, dependent_locality, city,"
- " state, zipcode, sorting_code, country_code, date_modified, origin "
+ " state, zipcode, sorting_code, country_code, language_code,"
+ " date_modified, origin "
"FROM autofill_profiles "
"WHERE guid=?"));
s.BindString(0, guid);
@@ -884,10 +891,10 @@ bool AutofillTable::UpdateAutofillProfile(const AutofillProfile& profile) {
"UPDATE autofill_profiles "
"SET guid=?, company_name=?, street_address=?, dependent_locality=?, "
" city=?, state=?, zipcode=?, sorting_code=?, country_code=?, "
- " date_modified=?, origin=? "
+ " language_code=?, date_modified=?, origin=? "
"WHERE guid=?"));
BindAutofillProfileToStatement(profile, &s);
- s.BindString(11, profile.guid());
+ s.BindString(12, profile.guid());
bool result = s.Run();
DCHECK_GT(db_->GetLastChangeCount(), 0);
@@ -1270,6 +1277,7 @@ bool AutofillTable::InitProfilesTable() {
"zipcode VARCHAR, "
"sorting_code VARCHAR, "
"country_code VARCHAR, "
+ "language_code VARCHAR, "
Scott Hess - ex-Googler 2014/03/28 19:53:57 Since ALTER TABLE can only add new columns, I gene
please use gerrit instead 2014/03/28 22:00:38 Changed the statement to append the column instead
"date_modified INTEGER NOT NULL DEFAULT 0, "
"origin VARCHAR DEFAULT '')")) {
NOTREACHED();
@@ -2260,4 +2268,54 @@ bool AutofillTable::MigrateToVersion55MergeAutofillDatesTable() {
return transaction.Commit();
}
+bool AutofillTable::MigrateToVersion56AddProfileLanguageCodeForFormatting() {
Scott Hess - ex-Googler 2014/03/28 19:53:57 AFAICT, this is just manually implementing ALTER T
please use gerrit instead 2014/03/28 22:00:38 Replaced the manual operations with a single alter
+ sql::Transaction transaction(db_);
+ if (!transaction.Begin())
+ return false;
+
+ // Test the existence of the |language_code| column as an indication that a
+ // migration is needed. It is possible that this column already exists because
+ // the table was newly created when migrating from a pre-version-23 database.
+ if (!db_->DoesColumnExist("autofill_profiles", "language_code")) {
+ // Create a temporary copy of the autofill_profiles table in the (newer)
+ // version 56 format. This table adds a column for |language_code|.
+ if (db_->DoesTableExist("autofill_profiles_temp") ||
+ !db_->Execute("CREATE TABLE autofill_profiles_temp ( "
+ "guid VARCHAR PRIMARY KEY, "
+ "company_name VARCHAR, "
+ "street_address VARCHAR, "
+ "dependent_locality VARCHAR, "
+ "city VARCHAR, "
+ "state VARCHAR, "
+ "zipcode VARCHAR, "
+ "sorting_code VARCHAR, "
+ "country_code VARCHAR, "
+ "language_code VARCHAR, "
+ "date_modified INTEGER NOT NULL DEFAULT 0, "
+ "origin VARCHAR DEFAULT '')")) {
+ return false;
+ }
+
+ // Copy over the data from the autofill_profiles table, initiating the
+ // |language_code| column with an empty string.
+ if (!db_->Execute("INSERT INTO autofill_profiles_temp "
+ "SELECT guid, company_name, street_address, "
+ "dependent_locality, city, state, zipcode, sorting_code, "
+ "country_code, '', date_modified, origin "
+ "FROM autofill_profiles")) {
+ return false;
+ }
+
+ // Delete the existing (version 55) table and replace it with the contents
+ // of the temporary table.
+ if (!db_->Execute("DROP TABLE autofill_profiles") ||
+ !db_->Execute("ALTER TABLE autofill_profiles_temp "
+ "RENAME TO autofill_profiles")) {
+ return false;
+ }
+ }
+
+ return transaction.Commit();
+}
+
} // namespace autofill

Powered by Google App Engine
This is Rietveld 408576698