Allow destructive migrations for WorkDatabase.

This will kick in when the developer downgrades
their version of WorkManager and the downward
migration is no longer present in the code.

Bug: 110416954
Test: Ran tests
Change-Id: I273f2ad8ce757ac82a063d9e562a7b220f9ef705
diff --git a/work/workmanager/src/androidTest/java/androidx/work/WorkDatabaseMigrationTest.java b/work/workmanager/src/androidTest/java/androidx/work/WorkDatabaseMigrationTest.java
index c131117..ba4c5f3 100644
--- a/work/workmanager/src/androidTest/java/androidx/work/WorkDatabaseMigrationTest.java
+++ b/work/workmanager/src/androidTest/java/androidx/work/WorkDatabaseMigrationTest.java
@@ -159,91 +159,6 @@
         database.close();
     }
 
-    @Test
-    @MediumTest
-    public void testMigrationVersion2To1() throws IOException {
-        SupportSQLiteDatabase database =
-                mMigrationTestHelper.createDatabase(TEST_DATABASE, NEW_VERSION);
-
-        String workSpecId1 = UUID.randomUUID().toString();
-        String workSpecId2 = UUID.randomUUID().toString();
-
-        // insert SystemIdInfo
-        database.execSQL(INSERT_SYSTEM_ID_INFO, new Object[]{workSpecId1, 1});
-        database.execSQL(INSERT_SYSTEM_ID_INFO, new Object[]{workSpecId2, 2});
-
-        database.close();
-
-
-        database = mMigrationTestHelper.runMigrationsAndValidate(
-                TEST_DATABASE,
-                OLD_VERSION,
-                VALIDATE_DROPPED_TABLES,
-                WorkDatabaseMigrations.MIGRATION_2_1);
-
-        Cursor cursor = database.query(CHECK_ALARM_INFO);
-        assertThat(cursor.getCount(), is(2));
-        cursor.moveToFirst();
-        assertThat(cursor.getString(cursor.getColumnIndex(COLUMN_WORKSPEC_ID)), is(workSpecId1));
-        assertThat(cursor.getInt(cursor.getColumnIndex(COLUMN_ALARM_ID)), is(1));
-        cursor.moveToNext();
-        assertThat(cursor.getString(cursor.getColumnIndex(COLUMN_WORKSPEC_ID)), is(workSpecId2));
-        assertThat(cursor.getInt(cursor.getColumnIndex(COLUMN_ALARM_ID)), is(2));
-        cursor.close();
-
-        assertThat(checkExists(database, TABLE_SYSTEM_ID_INFO), is(false));
-        assertThat(checkExists(database, TABLE_WORKSPEC), is(true));
-        assertThat(checkExists(database, TABLE_WORKTAG), is(true));
-        assertThat(checkExists(database, TABLE_WORKNAME), is(true));
-        database.close();
-    }
-
-    @Test
-    @MediumTest
-    public void testMigrationVersion1To2To1() throws IOException {
-        SupportSQLiteDatabase database =
-                mMigrationTestHelper.createDatabase(TEST_DATABASE, OLD_VERSION);
-
-        String workSpecId1 = UUID.randomUUID().toString();
-        String workSpecId2 = UUID.randomUUID().toString();
-
-        // insert alarmInfos
-        database.execSQL(INSERT_ALARM_INFO, new Object[]{workSpecId1, 1});
-        database.execSQL(INSERT_ALARM_INFO, new Object[]{workSpecId2, 2});
-
-        database.close();
-
-        database = mMigrationTestHelper.runMigrationsAndValidate(
-                TEST_DATABASE,
-                NEW_VERSION,
-                VALIDATE_DROPPED_TABLES,
-                WorkDatabaseMigrations.MIGRATION_1_2);
-
-        database.close();
-
-        database = mMigrationTestHelper.runMigrationsAndValidate(
-                TEST_DATABASE,
-                OLD_VERSION,
-                VALIDATE_DROPPED_TABLES,
-                WorkDatabaseMigrations.MIGRATION_2_1);
-
-        Cursor cursor = database.query(CHECK_ALARM_INFO);
-        assertThat(cursor.getCount(), is(2));
-        cursor.moveToFirst();
-        assertThat(cursor.getString(cursor.getColumnIndex(COLUMN_WORKSPEC_ID)), is(workSpecId1));
-        assertThat(cursor.getInt(cursor.getColumnIndex(COLUMN_ALARM_ID)), is(1));
-        cursor.moveToNext();
-        assertThat(cursor.getString(cursor.getColumnIndex(COLUMN_WORKSPEC_ID)), is(workSpecId2));
-        assertThat(cursor.getInt(cursor.getColumnIndex(COLUMN_ALARM_ID)), is(2));
-        cursor.close();
-
-        assertThat(checkExists(database, TABLE_SYSTEM_ID_INFO), is(false));
-        assertThat(checkExists(database, TABLE_WORKSPEC), is(true));
-        assertThat(checkExists(database, TABLE_WORKTAG), is(true));
-        assertThat(checkExists(database, TABLE_WORKNAME), is(true));
-        database.close();
-    }
-
     private boolean checkExists(SupportSQLiteDatabase database, String tableName) {
         Cursor cursor = null;
         try {
diff --git a/work/workmanager/src/main/java/androidx/work/impl/WorkDatabase.java b/work/workmanager/src/main/java/androidx/work/impl/WorkDatabase.java
index e5d5f9d..379660a 100644
--- a/work/workmanager/src/main/java/androidx/work/impl/WorkDatabase.java
+++ b/work/workmanager/src/main/java/androidx/work/impl/WorkDatabase.java
@@ -97,7 +97,7 @@
         }
         return builder.addCallback(generateCleanupCallback())
                 .addMigrations(WorkDatabaseMigrations.MIGRATION_1_2)
-                .addMigrations(WorkDatabaseMigrations.MIGRATION_2_1)
+                .fallbackToDestructiveMigration()
                 .build();
     }
 
diff --git a/work/workmanager/src/main/java/androidx/work/impl/WorkDatabaseMigrations.java b/work/workmanager/src/main/java/androidx/work/impl/WorkDatabaseMigrations.java
index 82a26ac..e52d8ff 100644
--- a/work/workmanager/src/main/java/androidx/work/impl/WorkDatabaseMigrations.java
+++ b/work/workmanager/src/main/java/androidx/work/impl/WorkDatabaseMigrations.java
@@ -42,22 +42,11 @@
                     + " INTEGER NOT NULL, PRIMARY KEY(`work_spec_id`), FOREIGN KEY(`work_spec_id`)"
                     + " REFERENCES `WorkSpec`(`id`) ON UPDATE CASCADE ON DELETE CASCADE )";
 
-    private static final String CREATE_ALARM_INFO =
-            "CREATE TABLE IF NOT EXISTS `alarmInfo` (`work_spec_id` TEXT NOT NULL, `alarm_id`"
-                    + " INTEGER NOT NULL, PRIMARY KEY(`work_spec_id`), FOREIGN KEY"
-                    + "(`work_spec_id`) REFERENCES `WorkSpec`(`id`) ON UPDATE CASCADE ON DELETE "
-                    + "CASCADE )";
-
     private static final String MIGRATE_ALARM_INFO_TO_SYSTEM_ID_INFO =
             "INSERT INTO SystemIdInfo(work_spec_id, system_id) "
                     + "SELECT work_spec_id, alarm_id AS system_id FROM alarmInfo";
 
-    private static final String MIGRATE_SYSTEM_ID_INFO_TO_ALARM_INFO =
-            "INSERT INTO alarmInfo(work_spec_id, alarm_id) "
-                    + "SELECT work_spec_id, system_id AS alarm_id FROM SystemIdInfo";
-
     private static final String REMOVE_ALARM_INFO = "DROP TABLE IF EXISTS alarmInfo";
-    private static final String REMOVE_SYSTEM_ID_INFO = "DROP TABLE IF EXISTS SystemIdInfo";
 
     /**
      * Removes the {@code alarmInfo} table and substitutes it for a more general
@@ -74,18 +63,4 @@
                     + "SELECT worker_class_name AS tag, id AS work_spec_id FROM workspec");
         }
     };
-
-    /**
-     * Removes the {@code alarmInfo} table and substitutes it for a more general
-     * {@code SystemIdInfo} table.
-     */
-    public static Migration MIGRATION_2_1 = new Migration(VERSION_2, VERSION_1) {
-        @Override
-        public void migrate(@NonNull SupportSQLiteDatabase database) {
-            database.execSQL(CREATE_ALARM_INFO);
-            database.execSQL(MIGRATE_SYSTEM_ID_INFO_TO_ALARM_INFO);
-            database.execSQL(REMOVE_SYSTEM_ID_INFO);
-            // Don't remove implicit tags; they may have been added by the developer.
-        }
-    };
 }