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";