Made db migration more robust by wrapping in transaction.
This commit is contained in:
parent
b4e0bde57f
commit
94c9114862
@ -320,22 +320,28 @@ class DBHelper extends SQLiteOpenHelper {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void migrateAppPrimaryKeyToRowId(SQLiteDatabase db, int oldVersion) {
|
private void migrateAppPrimaryKeyToRowId(SQLiteDatabase db, int oldVersion) {
|
||||||
if (oldVersion < 58) {
|
if (oldVersion < 58 && !columnExists(db, ApkTable.NAME, ApkTable.Cols.APP_ID)) {
|
||||||
db.execSQL("CREATE INDEX IF NOT EXISTS name ON " + AppTable.NAME + " (" + AppTable.Cols.NAME + ")");
|
db.beginTransaction();
|
||||||
db.execSQL("CREATE INDEX IF NOT EXISTS added ON " + AppTable.NAME + " (" + AppTable.Cols.ADDED + ")");
|
try {
|
||||||
|
db.execSQL("CREATE INDEX IF NOT EXISTS name ON " + AppTable.NAME + " (" + AppTable.Cols.NAME + ")");
|
||||||
|
db.execSQL("CREATE INDEX IF NOT EXISTS added ON " + AppTable.NAME + " (" + AppTable.Cols.ADDED + ")");
|
||||||
|
|
||||||
final String alter = "ALTER TABLE " + ApkTable.NAME + " ADD COLUMN " + ApkTable.Cols.APP_ID + " NUMERIC";
|
final String alter = "ALTER TABLE " + ApkTable.NAME + " ADD COLUMN " + ApkTable.Cols.APP_ID + " NUMERIC";
|
||||||
Log.i(TAG, "Adding appId foreign key to " + ApkTable.NAME);
|
Log.i(TAG, "Adding appId foreign key to " + ApkTable.NAME);
|
||||||
Utils.debugLog(TAG, alter);
|
Utils.debugLog(TAG, alter);
|
||||||
db.execSQL(alter);
|
db.execSQL(alter);
|
||||||
|
|
||||||
final String update = "UPDATE " + ApkTable.NAME + " SET " + ApkTable.Cols.APP_ID + " = ( " +
|
final String update = "UPDATE " + ApkTable.NAME + " SET " + ApkTable.Cols.APP_ID + " = ( " +
|
||||||
"SELECT app." + AppTable.Cols.ROW_ID + " " +
|
"SELECT app." + AppTable.Cols.ROW_ID + " " +
|
||||||
"FROM " + AppTable.NAME + " AS app " +
|
"FROM " + AppTable.NAME + " AS app " +
|
||||||
"WHERE " + ApkTable.NAME + "." + ApkTable.Cols.PACKAGE_NAME + " = app." + AppTable.Cols.PACKAGE_NAME + ")";
|
"WHERE " + ApkTable.NAME + "." + ApkTable.Cols.PACKAGE_NAME + " = app." + AppTable.Cols.PACKAGE_NAME + ")";
|
||||||
Log.i(TAG, "Updating foreign key from " + ApkTable.NAME + " to " + AppTable.NAME + " to use numeric foreign key.");
|
Log.i(TAG, "Updating foreign key from " + ApkTable.NAME + " to " + AppTable.NAME + " to use numeric foreign key.");
|
||||||
Utils.debugLog(TAG, update);
|
Utils.debugLog(TAG, update);
|
||||||
db.execSQL(update);
|
db.execSQL(update);
|
||||||
|
db.setTransactionSuccessful();
|
||||||
|
} finally {
|
||||||
|
db.endTransaction();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user