16f0739a3d9a9eca1591ae6bada1dd4d1d92c0defFabrice Di Meglio/* 26f0739a3d9a9eca1591ae6bada1dd4d1d92c0defFabrice Di Meglio * Copyright (C) 2014 The Android Open Source Project 36f0739a3d9a9eca1591ae6bada1dd4d1d92c0defFabrice Di Meglio * 46f0739a3d9a9eca1591ae6bada1dd4d1d92c0defFabrice Di Meglio * Licensed under the Apache License, Version 2.0 (the "License"); 56f0739a3d9a9eca1591ae6bada1dd4d1d92c0defFabrice Di Meglio * you may not use this file except in compliance with the License. 66f0739a3d9a9eca1591ae6bada1dd4d1d92c0defFabrice Di Meglio * You may obtain a copy of the License at 76f0739a3d9a9eca1591ae6bada1dd4d1d92c0defFabrice Di Meglio * 86f0739a3d9a9eca1591ae6bada1dd4d1d92c0defFabrice Di Meglio * http://www.apache.org/licenses/LICENSE-2.0 96f0739a3d9a9eca1591ae6bada1dd4d1d92c0defFabrice Di Meglio * 106f0739a3d9a9eca1591ae6bada1dd4d1d92c0defFabrice Di Meglio * Unless required by applicable law or agreed to in writing, software 116f0739a3d9a9eca1591ae6bada1dd4d1d92c0defFabrice Di Meglio * distributed under the License is distributed on an "AS IS" BASIS, 126f0739a3d9a9eca1591ae6bada1dd4d1d92c0defFabrice Di Meglio * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 136f0739a3d9a9eca1591ae6bada1dd4d1d92c0defFabrice Di Meglio * See the License for the specific language governing permissions and 146f0739a3d9a9eca1591ae6bada1dd4d1d92c0defFabrice Di Meglio * limitations under the License. 156f0739a3d9a9eca1591ae6bada1dd4d1d92c0defFabrice Di Meglio */ 166f0739a3d9a9eca1591ae6bada1dd4d1d92c0defFabrice Di Meglio 17fa7dc240e978b1b77bb5c80a78cd1f8c77648301Fabrice Di Megliopackage com.android.settings.search; 186f0739a3d9a9eca1591ae6bada1dd4d1d92c0defFabrice Di Meglio 196f0739a3d9a9eca1591ae6bada1dd4d1d92c0defFabrice Di Meglioimport android.content.Context; 206f0739a3d9a9eca1591ae6bada1dd4d1d92c0defFabrice Di Meglioimport android.database.Cursor; 216f0739a3d9a9eca1591ae6bada1dd4d1d92c0defFabrice Di Meglioimport android.database.sqlite.SQLiteDatabase; 226f0739a3d9a9eca1591ae6bada1dd4d1d92c0defFabrice Di Meglioimport android.database.sqlite.SQLiteOpenHelper; 236f0739a3d9a9eca1591ae6bada1dd4d1d92c0defFabrice Di Meglioimport android.os.Build; 246f0739a3d9a9eca1591ae6bada1dd4d1d92c0defFabrice Di Meglioimport android.util.Log; 256f0739a3d9a9eca1591ae6bada1dd4d1d92c0defFabrice Di Meglio 266f0739a3d9a9eca1591ae6bada1dd4d1d92c0defFabrice Di Megliopublic class IndexDatabaseHelper extends SQLiteOpenHelper { 276f0739a3d9a9eca1591ae6bada1dd4d1d92c0defFabrice Di Meglio 286f0739a3d9a9eca1591ae6bada1dd4d1d92c0defFabrice Di Meglio private static final String TAG = "IndexDatabaseHelper"; 296f0739a3d9a9eca1591ae6bada1dd4d1d92c0defFabrice Di Meglio 306f0739a3d9a9eca1591ae6bada1dd4d1d92c0defFabrice Di Meglio private static final String DATABASE_NAME = "search_index.db"; 31d17a15bbc473a7262755ff136b15a3587f4c7ddbFabrice Di Meglio private static final int DATABASE_VERSION = 115; 326f0739a3d9a9eca1591ae6bada1dd4d1d92c0defFabrice Di Meglio 336f0739a3d9a9eca1591ae6bada1dd4d1d92c0defFabrice Di Meglio public interface Tables { 346f0739a3d9a9eca1591ae6bada1dd4d1d92c0defFabrice Di Meglio public static final String TABLE_PREFS_INDEX = "prefs_index"; 356f0739a3d9a9eca1591ae6bada1dd4d1d92c0defFabrice Di Meglio public static final String TABLE_META_INDEX = "meta_index"; 36ab791fccf94b91c2e70e788743dc03d9123c176bFabrice Di Meglio public static final String TABLE_SAVED_QUERIES = "saved_queries"; 376f0739a3d9a9eca1591ae6bada1dd4d1d92c0defFabrice Di Meglio } 386f0739a3d9a9eca1591ae6bada1dd4d1d92c0defFabrice Di Meglio 396f0739a3d9a9eca1591ae6bada1dd4d1d92c0defFabrice Di Meglio public interface IndexColumns { 4051bfee595c3ce587e2e26565fd9e8f4ae02c3482Fabrice Di Meglio public static final String DOCID = "docid"; 416f0739a3d9a9eca1591ae6bada1dd4d1d92c0defFabrice Di Meglio public static final String LOCALE = "locale"; 426f0739a3d9a9eca1591ae6bada1dd4d1d92c0defFabrice Di Meglio public static final String DATA_RANK = "data_rank"; 436f0739a3d9a9eca1591ae6bada1dd4d1d92c0defFabrice Di Meglio public static final String DATA_TITLE = "data_title"; 44489362c83c11f7d531c8c0c08c285499cd2b3869Fabrice Di Meglio public static final String DATA_TITLE_NORMALIZED = "data_title_normalized"; 459593782d154f378a0c911cd015d410c18fe74a92Fabrice Di Meglio public static final String DATA_SUMMARY_ON = "data_summary_on"; 469593782d154f378a0c911cd015d410c18fe74a92Fabrice Di Meglio public static final String DATA_SUMMARY_ON_NORMALIZED = "data_summary_on_normalized"; 479593782d154f378a0c911cd015d410c18fe74a92Fabrice Di Meglio public static final String DATA_SUMMARY_OFF = "data_summary_off"; 489593782d154f378a0c911cd015d410c18fe74a92Fabrice Di Meglio public static final String DATA_SUMMARY_OFF_NORMALIZED = "data_summary_off_normalized"; 49a41707200b6628376e8fb575e782d8228c0d32a2Fabrice Di Meglio public static final String DATA_ENTRIES = "data_entries"; 506f0739a3d9a9eca1591ae6bada1dd4d1d92c0defFabrice Di Meglio public static final String DATA_KEYWORDS = "data_keywords"; 51fa7dc240e978b1b77bb5c80a78cd1f8c77648301Fabrice Di Meglio public static final String CLASS_NAME = "class_name"; 52fa7dc240e978b1b77bb5c80a78cd1f8c77648301Fabrice Di Meglio public static final String SCREEN_TITLE = "screen_title"; 53fa7dc240e978b1b77bb5c80a78cd1f8c77648301Fabrice Di Meglio public static final String INTENT_ACTION = "intent_action"; 54fa7dc240e978b1b77bb5c80a78cd1f8c77648301Fabrice Di Meglio public static final String INTENT_TARGET_PACKAGE = "intent_target_package"; 55fa7dc240e978b1b77bb5c80a78cd1f8c77648301Fabrice Di Meglio public static final String INTENT_TARGET_CLASS = "intent_target_class"; 566f0739a3d9a9eca1591ae6bada1dd4d1d92c0defFabrice Di Meglio public static final String ICON = "icon"; 5751bfee595c3ce587e2e26565fd9e8f4ae02c3482Fabrice Di Meglio public static final String ENABLED = "enabled"; 58c1457323d271309d5d1955743cd806417c84b9d6Fabrice Di Meglio public static final String DATA_KEY_REF = "data_key_reference"; 59d17a15bbc473a7262755ff136b15a3587f4c7ddbFabrice Di Meglio public static final String USER_ID = "user_id"; 606f0739a3d9a9eca1591ae6bada1dd4d1d92c0defFabrice Di Meglio } 616f0739a3d9a9eca1591ae6bada1dd4d1d92c0defFabrice Di Meglio 626f0739a3d9a9eca1591ae6bada1dd4d1d92c0defFabrice Di Meglio public interface MetaColumns { 636f0739a3d9a9eca1591ae6bada1dd4d1d92c0defFabrice Di Meglio public static final String BUILD = "build"; 646f0739a3d9a9eca1591ae6bada1dd4d1d92c0defFabrice Di Meglio } 656f0739a3d9a9eca1591ae6bada1dd4d1d92c0defFabrice Di Meglio 66ab791fccf94b91c2e70e788743dc03d9123c176bFabrice Di Meglio public interface SavedQueriesColums { 67ab791fccf94b91c2e70e788743dc03d9123c176bFabrice Di Meglio public static final String QUERY = "query"; 68ab791fccf94b91c2e70e788743dc03d9123c176bFabrice Di Meglio public static final String TIME_STAMP = "timestamp"; 69ab791fccf94b91c2e70e788743dc03d9123c176bFabrice Di Meglio } 70ab791fccf94b91c2e70e788743dc03d9123c176bFabrice Di Meglio 716f0739a3d9a9eca1591ae6bada1dd4d1d92c0defFabrice Di Meglio private static final String CREATE_INDEX_TABLE = 726f0739a3d9a9eca1591ae6bada1dd4d1d92c0defFabrice Di Meglio "CREATE VIRTUAL TABLE " + Tables.TABLE_PREFS_INDEX + " USING fts4" + 736f0739a3d9a9eca1591ae6bada1dd4d1d92c0defFabrice Di Meglio "(" + 746f0739a3d9a9eca1591ae6bada1dd4d1d92c0defFabrice Di Meglio IndexColumns.LOCALE + 756f0739a3d9a9eca1591ae6bada1dd4d1d92c0defFabrice Di Meglio ", " + 766f0739a3d9a9eca1591ae6bada1dd4d1d92c0defFabrice Di Meglio IndexColumns.DATA_RANK + 776f0739a3d9a9eca1591ae6bada1dd4d1d92c0defFabrice Di Meglio ", " + 786f0739a3d9a9eca1591ae6bada1dd4d1d92c0defFabrice Di Meglio IndexColumns.DATA_TITLE + 796f0739a3d9a9eca1591ae6bada1dd4d1d92c0defFabrice Di Meglio ", " + 80489362c83c11f7d531c8c0c08c285499cd2b3869Fabrice Di Meglio IndexColumns.DATA_TITLE_NORMALIZED + 81489362c83c11f7d531c8c0c08c285499cd2b3869Fabrice Di Meglio ", " + 829593782d154f378a0c911cd015d410c18fe74a92Fabrice Di Meglio IndexColumns.DATA_SUMMARY_ON + 836f0739a3d9a9eca1591ae6bada1dd4d1d92c0defFabrice Di Meglio ", " + 849593782d154f378a0c911cd015d410c18fe74a92Fabrice Di Meglio IndexColumns.DATA_SUMMARY_ON_NORMALIZED + 859593782d154f378a0c911cd015d410c18fe74a92Fabrice Di Meglio ", " + 869593782d154f378a0c911cd015d410c18fe74a92Fabrice Di Meglio IndexColumns.DATA_SUMMARY_OFF + 879593782d154f378a0c911cd015d410c18fe74a92Fabrice Di Meglio ", " + 889593782d154f378a0c911cd015d410c18fe74a92Fabrice Di Meglio IndexColumns.DATA_SUMMARY_OFF_NORMALIZED + 89489362c83c11f7d531c8c0c08c285499cd2b3869Fabrice Di Meglio ", " + 90a41707200b6628376e8fb575e782d8228c0d32a2Fabrice Di Meglio IndexColumns.DATA_ENTRIES + 91a41707200b6628376e8fb575e782d8228c0d32a2Fabrice Di Meglio ", " + 926f0739a3d9a9eca1591ae6bada1dd4d1d92c0defFabrice Di Meglio IndexColumns.DATA_KEYWORDS + 936f0739a3d9a9eca1591ae6bada1dd4d1d92c0defFabrice Di Meglio ", " + 94fa7dc240e978b1b77bb5c80a78cd1f8c77648301Fabrice Di Meglio IndexColumns.SCREEN_TITLE + 956f0739a3d9a9eca1591ae6bada1dd4d1d92c0defFabrice Di Meglio ", " + 96fa7dc240e978b1b77bb5c80a78cd1f8c77648301Fabrice Di Meglio IndexColumns.CLASS_NAME + 976f0739a3d9a9eca1591ae6bada1dd4d1d92c0defFabrice Di Meglio ", " + 986f0739a3d9a9eca1591ae6bada1dd4d1d92c0defFabrice Di Meglio IndexColumns.ICON + 99fa7dc240e978b1b77bb5c80a78cd1f8c77648301Fabrice Di Meglio ", " + 100fa7dc240e978b1b77bb5c80a78cd1f8c77648301Fabrice Di Meglio IndexColumns.INTENT_ACTION + 101fa7dc240e978b1b77bb5c80a78cd1f8c77648301Fabrice Di Meglio ", " + 102fa7dc240e978b1b77bb5c80a78cd1f8c77648301Fabrice Di Meglio IndexColumns.INTENT_TARGET_PACKAGE + 103fa7dc240e978b1b77bb5c80a78cd1f8c77648301Fabrice Di Meglio ", " + 104fa7dc240e978b1b77bb5c80a78cd1f8c77648301Fabrice Di Meglio IndexColumns.INTENT_TARGET_CLASS + 10551bfee595c3ce587e2e26565fd9e8f4ae02c3482Fabrice Di Meglio ", " + 10651bfee595c3ce587e2e26565fd9e8f4ae02c3482Fabrice Di Meglio IndexColumns.ENABLED + 107c1457323d271309d5d1955743cd806417c84b9d6Fabrice Di Meglio ", " + 108c1457323d271309d5d1955743cd806417c84b9d6Fabrice Di Meglio IndexColumns.DATA_KEY_REF + 109d17a15bbc473a7262755ff136b15a3587f4c7ddbFabrice Di Meglio ", " + 110d17a15bbc473a7262755ff136b15a3587f4c7ddbFabrice Di Meglio IndexColumns.USER_ID + 1116f0739a3d9a9eca1591ae6bada1dd4d1d92c0defFabrice Di Meglio ");"; 1126f0739a3d9a9eca1591ae6bada1dd4d1d92c0defFabrice Di Meglio 1136f0739a3d9a9eca1591ae6bada1dd4d1d92c0defFabrice Di Meglio private static final String CREATE_META_TABLE = 1146f0739a3d9a9eca1591ae6bada1dd4d1d92c0defFabrice Di Meglio "CREATE TABLE " + Tables.TABLE_META_INDEX + 1156f0739a3d9a9eca1591ae6bada1dd4d1d92c0defFabrice Di Meglio "(" + 1166f0739a3d9a9eca1591ae6bada1dd4d1d92c0defFabrice Di Meglio MetaColumns.BUILD + " VARCHAR(32) NOT NULL" + 1176f0739a3d9a9eca1591ae6bada1dd4d1d92c0defFabrice Di Meglio ")"; 1186f0739a3d9a9eca1591ae6bada1dd4d1d92c0defFabrice Di Meglio 119ab791fccf94b91c2e70e788743dc03d9123c176bFabrice Di Meglio private static final String CREATE_SAVED_QUERIES_TABLE = 120ab791fccf94b91c2e70e788743dc03d9123c176bFabrice Di Meglio "CREATE TABLE " + Tables.TABLE_SAVED_QUERIES + 121ab791fccf94b91c2e70e788743dc03d9123c176bFabrice Di Meglio "(" + 122ab791fccf94b91c2e70e788743dc03d9123c176bFabrice Di Meglio SavedQueriesColums.QUERY + " VARCHAR(64) NOT NULL" + 123ab791fccf94b91c2e70e788743dc03d9123c176bFabrice Di Meglio ", " + 124ab791fccf94b91c2e70e788743dc03d9123c176bFabrice Di Meglio SavedQueriesColums.TIME_STAMP + " INTEGER" + 125ab791fccf94b91c2e70e788743dc03d9123c176bFabrice Di Meglio ")"; 126ab791fccf94b91c2e70e788743dc03d9123c176bFabrice Di Meglio 1276f0739a3d9a9eca1591ae6bada1dd4d1d92c0defFabrice Di Meglio private static final String INSERT_BUILD_VERSION = 1286f0739a3d9a9eca1591ae6bada1dd4d1d92c0defFabrice Di Meglio "INSERT INTO " + Tables.TABLE_META_INDEX + 1296f0739a3d9a9eca1591ae6bada1dd4d1d92c0defFabrice Di Meglio " VALUES ('" + Build.VERSION.INCREMENTAL + "');"; 1306f0739a3d9a9eca1591ae6bada1dd4d1d92c0defFabrice Di Meglio 1316f0739a3d9a9eca1591ae6bada1dd4d1d92c0defFabrice Di Meglio private static final String SELECT_BUILD_VERSION = 1326f0739a3d9a9eca1591ae6bada1dd4d1d92c0defFabrice Di Meglio "SELECT " + MetaColumns.BUILD + " FROM " + Tables.TABLE_META_INDEX + " LIMIT 1;"; 1336f0739a3d9a9eca1591ae6bada1dd4d1d92c0defFabrice Di Meglio 1346f0739a3d9a9eca1591ae6bada1dd4d1d92c0defFabrice Di Meglio private static IndexDatabaseHelper sSingleton; 1356f0739a3d9a9eca1591ae6bada1dd4d1d92c0defFabrice Di Meglio 1366f0739a3d9a9eca1591ae6bada1dd4d1d92c0defFabrice Di Meglio public static synchronized IndexDatabaseHelper getInstance(Context context) { 1376f0739a3d9a9eca1591ae6bada1dd4d1d92c0defFabrice Di Meglio if (sSingleton == null) { 1386f0739a3d9a9eca1591ae6bada1dd4d1d92c0defFabrice Di Meglio sSingleton = new IndexDatabaseHelper(context); 1396f0739a3d9a9eca1591ae6bada1dd4d1d92c0defFabrice Di Meglio } 1406f0739a3d9a9eca1591ae6bada1dd4d1d92c0defFabrice Di Meglio return sSingleton; 1416f0739a3d9a9eca1591ae6bada1dd4d1d92c0defFabrice Di Meglio } 1426f0739a3d9a9eca1591ae6bada1dd4d1d92c0defFabrice Di Meglio 1436f0739a3d9a9eca1591ae6bada1dd4d1d92c0defFabrice Di Meglio public IndexDatabaseHelper(Context context) { 1446f0739a3d9a9eca1591ae6bada1dd4d1d92c0defFabrice Di Meglio super(context, DATABASE_NAME, null, DATABASE_VERSION); 1456f0739a3d9a9eca1591ae6bada1dd4d1d92c0defFabrice Di Meglio } 1466f0739a3d9a9eca1591ae6bada1dd4d1d92c0defFabrice Di Meglio 1476f0739a3d9a9eca1591ae6bada1dd4d1d92c0defFabrice Di Meglio @Override 1486f0739a3d9a9eca1591ae6bada1dd4d1d92c0defFabrice Di Meglio public void onCreate(SQLiteDatabase db) { 1496f0739a3d9a9eca1591ae6bada1dd4d1d92c0defFabrice Di Meglio bootstrapDB(db); 1506f0739a3d9a9eca1591ae6bada1dd4d1d92c0defFabrice Di Meglio } 1516f0739a3d9a9eca1591ae6bada1dd4d1d92c0defFabrice Di Meglio 1526f0739a3d9a9eca1591ae6bada1dd4d1d92c0defFabrice Di Meglio private void bootstrapDB(SQLiteDatabase db) { 1536f0739a3d9a9eca1591ae6bada1dd4d1d92c0defFabrice Di Meglio db.execSQL(CREATE_INDEX_TABLE); 1546f0739a3d9a9eca1591ae6bada1dd4d1d92c0defFabrice Di Meglio db.execSQL(CREATE_META_TABLE); 155ab791fccf94b91c2e70e788743dc03d9123c176bFabrice Di Meglio db.execSQL(CREATE_SAVED_QUERIES_TABLE); 1566f0739a3d9a9eca1591ae6bada1dd4d1d92c0defFabrice Di Meglio db.execSQL(INSERT_BUILD_VERSION); 1576f0739a3d9a9eca1591ae6bada1dd4d1d92c0defFabrice Di Meglio Log.i(TAG, "Bootstrapped database"); 1586f0739a3d9a9eca1591ae6bada1dd4d1d92c0defFabrice Di Meglio } 1596f0739a3d9a9eca1591ae6bada1dd4d1d92c0defFabrice Di Meglio 1606f0739a3d9a9eca1591ae6bada1dd4d1d92c0defFabrice Di Meglio @Override 161fb5e639b30e866ba5a379487ab5b7a77fe175a7bFabrice Di Meglio public void onOpen(SQLiteDatabase db) { 162fb5e639b30e866ba5a379487ab5b7a77fe175a7bFabrice Di Meglio super.onOpen(db); 163fb5e639b30e866ba5a379487ab5b7a77fe175a7bFabrice Di Meglio 164fb5e639b30e866ba5a379487ab5b7a77fe175a7bFabrice Di Meglio Log.i(TAG, "Using schema version: " + db.getVersion()); 165fb5e639b30e866ba5a379487ab5b7a77fe175a7bFabrice Di Meglio 166fb5e639b30e866ba5a379487ab5b7a77fe175a7bFabrice Di Meglio if (!Build.VERSION.INCREMENTAL.equals(getBuildVersion(db))) { 167fb5e639b30e866ba5a379487ab5b7a77fe175a7bFabrice Di Meglio Log.w(TAG, "Index needs to be rebuilt as build-version is not the same"); 168fb5e639b30e866ba5a379487ab5b7a77fe175a7bFabrice Di Meglio // We need to drop the tables and recreate them 169fb5e639b30e866ba5a379487ab5b7a77fe175a7bFabrice Di Meglio reconstruct(db); 170fb5e639b30e866ba5a379487ab5b7a77fe175a7bFabrice Di Meglio } else { 171fb5e639b30e866ba5a379487ab5b7a77fe175a7bFabrice Di Meglio Log.i(TAG, "Index is fine"); 172fb5e639b30e866ba5a379487ab5b7a77fe175a7bFabrice Di Meglio } 173fb5e639b30e866ba5a379487ab5b7a77fe175a7bFabrice Di Meglio } 174fb5e639b30e866ba5a379487ab5b7a77fe175a7bFabrice Di Meglio 175fb5e639b30e866ba5a379487ab5b7a77fe175a7bFabrice Di Meglio @Override 1766f0739a3d9a9eca1591ae6bada1dd4d1d92c0defFabrice Di Meglio public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 177dd41dfc483e830bdb33df858dec99e2c4c806bfcFabrice Di Meglio if (oldVersion < DATABASE_VERSION) { 178fb5e639b30e866ba5a379487ab5b7a77fe175a7bFabrice Di Meglio Log.w(TAG, "Detected schema version '" + oldVersion + "'. " + 179fb5e639b30e866ba5a379487ab5b7a77fe175a7bFabrice Di Meglio "Index needs to be rebuilt for schema version '" + newVersion + "'."); 180489362c83c11f7d531c8c0c08c285499cd2b3869Fabrice Di Meglio // We need to drop the tables and recreate them 181fb5e639b30e866ba5a379487ab5b7a77fe175a7bFabrice Di Meglio reconstruct(db); 182489362c83c11f7d531c8c0c08c285499cd2b3869Fabrice Di Meglio } 1836f0739a3d9a9eca1591ae6bada1dd4d1d92c0defFabrice Di Meglio } 1846f0739a3d9a9eca1591ae6bada1dd4d1d92c0defFabrice Di Meglio 185fb5e639b30e866ba5a379487ab5b7a77fe175a7bFabrice Di Meglio @Override 186fb5e639b30e866ba5a379487ab5b7a77fe175a7bFabrice Di Meglio public void onDowngrade(SQLiteDatabase db, int oldVersion, int newVersion) { 187fb5e639b30e866ba5a379487ab5b7a77fe175a7bFabrice Di Meglio Log.w(TAG, "Detected schema version '" + oldVersion + "'. " + 188fb5e639b30e866ba5a379487ab5b7a77fe175a7bFabrice Di Meglio "Index needs to be rebuilt for schema version '" + newVersion + "'."); 189fb5e639b30e866ba5a379487ab5b7a77fe175a7bFabrice Di Meglio // We need to drop the tables and recreate them 190fb5e639b30e866ba5a379487ab5b7a77fe175a7bFabrice Di Meglio reconstruct(db); 191fb5e639b30e866ba5a379487ab5b7a77fe175a7bFabrice Di Meglio } 192fb5e639b30e866ba5a379487ab5b7a77fe175a7bFabrice Di Meglio 193fb5e639b30e866ba5a379487ab5b7a77fe175a7bFabrice Di Meglio private void reconstruct(SQLiteDatabase db) { 194fb5e639b30e866ba5a379487ab5b7a77fe175a7bFabrice Di Meglio dropTables(db); 195fb5e639b30e866ba5a379487ab5b7a77fe175a7bFabrice Di Meglio bootstrapDB(db); 196fb5e639b30e866ba5a379487ab5b7a77fe175a7bFabrice Di Meglio } 197fb5e639b30e866ba5a379487ab5b7a77fe175a7bFabrice Di Meglio 1986f0739a3d9a9eca1591ae6bada1dd4d1d92c0defFabrice Di Meglio private String getBuildVersion(SQLiteDatabase db) { 1996f0739a3d9a9eca1591ae6bada1dd4d1d92c0defFabrice Di Meglio String version = null; 2006f0739a3d9a9eca1591ae6bada1dd4d1d92c0defFabrice Di Meglio Cursor cursor = null; 2016f0739a3d9a9eca1591ae6bada1dd4d1d92c0defFabrice Di Meglio try { 2026f0739a3d9a9eca1591ae6bada1dd4d1d92c0defFabrice Di Meglio cursor = db.rawQuery(SELECT_BUILD_VERSION, null); 2036f0739a3d9a9eca1591ae6bada1dd4d1d92c0defFabrice Di Meglio if (cursor.moveToFirst()) { 2046f0739a3d9a9eca1591ae6bada1dd4d1d92c0defFabrice Di Meglio version = cursor.getString(0); 2056f0739a3d9a9eca1591ae6bada1dd4d1d92c0defFabrice Di Meglio } 2066f0739a3d9a9eca1591ae6bada1dd4d1d92c0defFabrice Di Meglio } 2076f0739a3d9a9eca1591ae6bada1dd4d1d92c0defFabrice Di Meglio catch (Exception e) { 2086f0739a3d9a9eca1591ae6bada1dd4d1d92c0defFabrice Di Meglio Log.e(TAG, "Cannot get build version from Index metadata"); 2096f0739a3d9a9eca1591ae6bada1dd4d1d92c0defFabrice Di Meglio } 2106f0739a3d9a9eca1591ae6bada1dd4d1d92c0defFabrice Di Meglio finally { 2116f0739a3d9a9eca1591ae6bada1dd4d1d92c0defFabrice Di Meglio if (cursor != null) { 2126f0739a3d9a9eca1591ae6bada1dd4d1d92c0defFabrice Di Meglio cursor.close(); 2136f0739a3d9a9eca1591ae6bada1dd4d1d92c0defFabrice Di Meglio } 2146f0739a3d9a9eca1591ae6bada1dd4d1d92c0defFabrice Di Meglio } 2156f0739a3d9a9eca1591ae6bada1dd4d1d92c0defFabrice Di Meglio return version; 2166f0739a3d9a9eca1591ae6bada1dd4d1d92c0defFabrice Di Meglio } 2176f0739a3d9a9eca1591ae6bada1dd4d1d92c0defFabrice Di Meglio 2186f0739a3d9a9eca1591ae6bada1dd4d1d92c0defFabrice Di Meglio private void dropTables(SQLiteDatabase db) { 2196f0739a3d9a9eca1591ae6bada1dd4d1d92c0defFabrice Di Meglio db.execSQL("DROP TABLE IF EXISTS " + Tables.TABLE_META_INDEX); 2206f0739a3d9a9eca1591ae6bada1dd4d1d92c0defFabrice Di Meglio db.execSQL("DROP TABLE IF EXISTS " + Tables.TABLE_PREFS_INDEX); 221ab791fccf94b91c2e70e788743dc03d9123c176bFabrice Di Meglio db.execSQL("DROP TABLE IF EXISTS " + Tables.TABLE_SAVED_QUERIES); 2226f0739a3d9a9eca1591ae6bada1dd4d1d92c0defFabrice Di Meglio } 2236f0739a3d9a9eca1591ae6bada1dd4d1d92c0defFabrice Di Meglio} 224