Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Room Migration Alter Table not adding new column & migrate getting called again and again

So basically i am using room and trying to add migration from database version 1 to 2 but my alter command is not working My current implementation is below :

 void init() {
    db = Room.databaseBuilder(Global.getInstance(),
            AppDatabase.class, "feed").addMigrations(MIGRATION_1_2).build();
}

Migration property :

static final Migration MIGRATION_1_2 = new Migration(1,2) {
    @Override
    public void migrate(SupportSQLiteDatabase database) {


        database.execSQL("ALTER TABLE 'post' ADD COLUMN 'age' INTEGER NOT NULL DEFAULT 0");
        Log.d("VROM","Migration");
    }
};

Database implementation :

@Database(entities = {Feed.class, DownloadModel.class}, version = 1) public abstract class AppDatabase extends RoomDatabase {
public abstract DaoAccess getFeedDao();}

So after incrementing the version from 1 to 2, the execSQL() is executed but new column is not added in my db. I have pulled my db from app directory and checked multiple times but column is not there. Apart from that if I kill my app and launch it again the migrate method is called again , don't know if this is the intended functionality but it breaks the functionality for me.I thought migrate will be only called once same as onUpgrade()

like image 314
Gautam Avatar asked Oct 11 '17 11:10

Gautam


1 Answers

Make sure your column is in model class. In your case, you are adding column age like this: ADD COLUMN 'age' INTEGER, so you must have int age in your model class.

Also, it is a good idea to write migration test to known exactly what is failing. You can find about migration test in android documentation here: https://developer.android.com/topic/libraries/architecture/room.html#db-migration-testing

like image 160
Manish Kumar Avatar answered Nov 15 '22 19:11

Manish Kumar