ContactsProvder: Use new _TOKENIZE column token_index
The _TOKENIZE function now uses an extra column, token_index.
This commit changes ContactsProvider to add and
populate the new column.
token_index is not yet used in any query, but it will soon
be used for ordering of seach suggestions, see
http://b/issue?id=1847321
I haven't run the ContactsProvider testsuite, since I can't
get it to run at all:
adb shell am instrument -w com.android.providers.contactstests/android.test.InstrumentationTestRunner
INSTRUMENTATION_RESULT: shortMsg=com.android.providers.contacts.ContactsSyncAdapterTest
INSTRUMENTATION_RESULT: longMsg=java.lang.VerifyError: com.android.providers.contacts.ContactsSyncAdapterTest
INSTRUMENTATION_CODE: 0
log:
E/dalvikvm( 484): Could not find method com.android.providers.contacts.ContactsSyncAdapter.getCanonicalGroupsFeedForAccount, referenced from method com.android.providers.contacts.ContactsSyncAdapterTest.addGroupMembership
W/dalvikvm( 484): VFY: unable to resolve static method 48: Lcom/android/providers/contacts/ContactsSyncAdapter;.getCanonicalGroupsFeedForAccount (Ljava/lang/String;)Ljava/lang/String;
W/dalvikvm( 484): VFY: rejecting opcode 0x71 at 0x000a
W/dalvikvm( 484): VFY: rejected Lcom/android/providers/contacts/ContactsSyncAdapterTest;.addGroupMembership (Lcom/google/wireless/gdata/contacts/data/ContactEntry;Ljava/lang/String;Ljava/lang/String;)V
W/dalvikvm( 484): Verifier rejected class Lcom/android/providers/contacts/ContactsSyncAdapterTest;
diff --git a/src/com/android/providers/contacts/ContactsProvider.java b/src/com/android/providers/contacts/ContactsProvider.java
index ef34a90..0838296 100644
--- a/src/com/android/providers/contacts/ContactsProvider.java
+++ b/src/com/android/providers/contacts/ContactsProvider.java
@@ -345,6 +345,20 @@
oldVersion = 80;
}
+ if (oldVersion == 80) {
+ Log.i(TAG, "Upgrading contacts database from version " + oldVersion + " to " +
+ newVersion + ", which will preserve existing data");
+ // 81 adds the token_index column
+ db.execSQL("DELETE FROM peopleLookup");
+ db.execSQL("ALTER TABLE peopleLookup ADD token_index INTEGER;");
+ String[] tokenize = {"_TOKENIZE('peopleLookup', _id, name, ' ', 1)"};
+ Cursor cursor = db.query("people", tokenize, null, null, null, null, null);
+ int rows = cursor.getCount();
+ cursor.close();
+ Log.i(TAG, "Processed " + rows + " contacts.");
+ oldVersion = 81;
+ }
+
return upgradeWasLossless;
}
@@ -436,7 +450,8 @@
db.execSQL("CREATE TABLE peopleLookup (" +
"token TEXT," +
- "source INTEGER REFERENCES people(_id)" +
+ "source INTEGER REFERENCES people(_id)," +
+ "token_index INTEGER"+
");");
db.execSQL("CREATE INDEX peopleLookupIndex ON peopleLookup (" +
"token," +
@@ -599,11 +614,11 @@
db.execSQL("CREATE TRIGGER peopleLookup_update UPDATE OF name ON people " +
"BEGIN " +
"DELETE FROM peopleLookup WHERE source = new._id;" +
- "SELECT _TOKENIZE('peopleLookup', new._id, new.name, ' ');" +
+ "SELECT _TOKENIZE('peopleLookup', new._id, new.name, ' ', 1);" +
"END");
db.execSQL("CREATE TRIGGER peopleLookup_insert AFTER INSERT ON people " +
"BEGIN " +
- "SELECT _TOKENIZE('peopleLookup', new._id, new.name, ' ');" +
+ "SELECT _TOKENIZE('peopleLookup', new._id, new.name, ' ', 1);" +
"END");
// Triggers to set the _sync_dirty flag when a phone is changed,
@@ -3769,7 +3784,7 @@
private static final String TAG = "ContactsProvider";
/* package private */ static final String DATABASE_NAME = "contacts.db";
- /* package private */ static final int DATABASE_VERSION = 80;
+ /* package private */ static final int DATABASE_VERSION = 81;
protected static final String CONTACTS_AUTHORITY = "contacts";
protected static final String CALL_LOG_AUTHORITY = "call_log";