summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoremancebo <emancebo@cyngn.com>2015-04-02 15:28:00 -0700
committeremancebo <emancebo@cyngn.com>2015-04-02 16:07:49 -0700
commite61272843fcf01c20b2db960fe31131bb81d18a2 (patch)
tree77b35c12660366c70ee9e368b3395eae850ca6eb
parent3bb16cce3e7b174d3430149c0b4ec7dff40c1e31 (diff)
downloadandroid_packages_providers_ContactsProvider-stable/cm-12.0-YNG3C.tar.gz
android_packages_providers_ContactsProvider-stable/cm-12.0-YNG3C.tar.bz2
android_packages_providers_ContactsProvider-stable/cm-12.0-YNG3C.zip
Fix upgrade path for phone_lookup tablestable/cm-12.0-YNG4Nstable/cm-12.0-YNG3Ccm-12.0
Previously the phone_lookup table had a column named NORMALIZED which had a non-null constraint. That column is no longer populated but there is no upgrade path to remove it, hence new contacts cannot be inserted into phone_lookup when the old schema is present. Change-Id: Iba35003f4fa122a174af804ed94e3991a320e416
-rwxr-xr-xsrc/com/android/providers/contacts/ContactsDatabaseHelper.java68
1 files changed, 67 insertions, 1 deletions
diff --git a/src/com/android/providers/contacts/ContactsDatabaseHelper.java b/src/com/android/providers/contacts/ContactsDatabaseHelper.java
index 570f5d07..797d6be6 100755
--- a/src/com/android/providers/contacts/ContactsDatabaseHelper.java
+++ b/src/com/android/providers/contacts/ContactsDatabaseHelper.java
@@ -119,7 +119,7 @@ public class ContactsDatabaseHelper extends SQLiteOpenHelper {
* 900-999 L
* </pre>
*/
- static final int DATABASE_VERSION = 911;
+ static final int DATABASE_VERSION = 912;
public interface Tables {
public static final String CONTACTS = "contacts";
@@ -2821,6 +2821,11 @@ public class ContactsDatabaseHelper extends SQLiteOpenHelper {
oldVersion = 911;
}
+ if (oldVersion < 912) {
+ upgradeToVersion912(db);
+ oldVersion = 912;
+ }
+
if (upgradeViewsAndTriggers) {
createContactsViews(db);
createGroupsView(db);
@@ -4253,6 +4258,67 @@ public class ContactsDatabaseHelper extends SQLiteOpenHelper {
+ " INTEGER NOT NULL DEFAULT " + Calls.DURATION_TYPE_ACTIVE + ";");
}
+ // Must recreate phone_lookup table because we no longer use NORMALIZED column
+ // which had a not-null constraint
+ private void upgradeToVersion912(SQLiteDatabase db) {
+ db.execSQL("DROP TABLE IF EXISTS phone_lookup;");
+ db.execSQL("CREATE TABLE " + Tables.PHONE_LOOKUP + " (" +
+ PhoneLookupColumns.DATA_ID
+ + " INTEGER REFERENCES data(_id) NOT NULL," +
+ PhoneLookupColumns.RAW_CONTACT_ID
+ + " INTEGER REFERENCES raw_contacts(_id) NOT NULL," +
+ PhoneLookupColumns.NORMALIZED_NUMBER + " TEXT NOT NULL," +
+ PhoneLookupColumns.MIN_MATCH + " TEXT NOT NULL" +
+ ");");
+
+ db.execSQL("CREATE INDEX phone_lookup_index ON " + Tables.PHONE_LOOKUP + " (" +
+ PhoneLookupColumns.NORMALIZED_NUMBER + "," +
+ PhoneLookupColumns.RAW_CONTACT_ID + "," +
+ PhoneLookupColumns.DATA_ID +
+ ");");
+
+ db.execSQL("CREATE INDEX phone_lookup_min_match_index ON " + Tables.PHONE_LOOKUP + " (" +
+ PhoneLookupColumns.MIN_MATCH + "," +
+ PhoneLookupColumns.RAW_CONTACT_ID + "," +
+ PhoneLookupColumns.DATA_ID +
+ ");");
+
+ db.execSQL("CREATE INDEX phone_lookup_data_id_min_match_index ON " + Tables.PHONE_LOOKUP +
+ " (" + PhoneLookupColumns.DATA_ID + ", " + PhoneLookupColumns.MIN_MATCH + ");");
+
+ final long mimeTypeId = lookupMimeTypeId(db, Phone.CONTENT_ITEM_TYPE);
+ if (mimeTypeId == -1) {
+ return;
+ }
+
+ Cursor cursor = db.rawQuery(
+ "SELECT _id, " + Phone.RAW_CONTACT_ID + ", " + Phone.NUMBER +
+ " FROM " + Tables.DATA +
+ " WHERE " + DataColumns.MIMETYPE_ID + "=" + mimeTypeId
+ + " AND " + Phone.NUMBER + " NOT NULL", null);
+
+ ContentValues phoneValues = new ContentValues();
+ try {
+ while (cursor.moveToNext()) {
+ long dataID = cursor.getLong(0);
+ long rawContactID = cursor.getLong(1);
+ String number = cursor.getString(2);
+ String normalizedNumber = PhoneNumberUtils.normalizeNumber(number);
+ if (!TextUtils.isEmpty(normalizedNumber)) {
+ phoneValues.clear();
+ phoneValues.put(PhoneLookupColumns.RAW_CONTACT_ID, rawContactID);
+ phoneValues.put(PhoneLookupColumns.DATA_ID, dataID);
+ phoneValues.put(PhoneLookupColumns.NORMALIZED_NUMBER, normalizedNumber);
+ phoneValues.put(PhoneLookupColumns.MIN_MATCH,
+ PhoneNumberUtils.toCallerIDMinMatch(normalizedNumber));
+ db.insert(Tables.PHONE_LOOKUP, null, phoneValues);
+ }
+ }
+ } finally {
+ cursor.close();
+ }
+ }
+
public String extractHandleFromEmailAddress(String email) {
Rfc822Token[] tokens = Rfc822Tokenizer.tokenize(email);
if (tokens.length == 0) {