0

I have this entity and today I added one more field at the bottom: isClient: Boolean

@Entity(tableName = "user")
data class UserDataEntity(
    @PrimaryKey
    val id: String,
    val username: String,
    val firstName: String?,
    val lastName: String?,
    val language: Language,
    @Embedded(prefix = "globalRole_") val globalRole: UserRoleDataEntity?,
    @Embedded(prefix = "projectRole_") val projectRole: UserRoleDataEntity?,
    val selectedProjectId: String?,
    @ColumnInfo(defaultValue = "0")
    val isClient: Boolean
)

data class UserRoleDataEntity(
    val id: String,
    val name: String
)

Here is my Database:

@Database(
    entities = [
        ScanConfigurationDataEntity::class,
        ScanFlowStepDataEntity::class,
        AuditingSettingsDataEntity::class,
        ZoneCodeConfigurationDataEntity::class,
        ZoneCheckInDataEntity::class,
        SessionDataEntity::class,
        ScanDataEntity::class,
        VerifySelectionsDataEntity::class,
        ProjectDataEntity::class,
        UserDataEntity::class,
        SettingsDataEntity::class,
        ZoneLinkingStepDataEntity::class,
        ZoneLinkDataEntity::class,
        VerifyConfigurationDataEntity::class
    ],
    autoMigrations = [
        AutoMigration(from = 1, to = 2),
        AutoMigration(from = 2, to = 3),
        AutoMigration(from = 3, to = 4),
        AutoMigration(from = 4, to = 5),
        AutoMigration(from = 5, to = 6),
        AutoMigration(from = 6, to = 7, spec = Migrations.RenameUserLanguage::class),
        AutoMigration(from = 7, to = 8),
        AutoMigration(from = 8, to = 9),
        AutoMigration(from = 9, to = 10),
        AutoMigration(from = 10, to = 11),
        AutoMigration(from = 11, to = 12),
        AutoMigration(from = 12, to = 13),
        AutoMigration(from = 13, to = 14, spec = Migrations.Migrate13to14::class),
        AutoMigration(from = 14, to = 15, spec = Migrations.Migrate14to15::class),
        AutoMigration(from = 15, to = 16),
        AutoMigration(from = 16, to = 17, spec = Migrations.Migrate16to17::class),
        AutoMigration(from = 17, to = 18, spec = Migrations.Migrate17to18::class)
    ],
    version = 18,
)

And this is my Migrations file (the previous migrations where removed)

class Migrations {

    @RenameColumn(tableName = "user", fromColumnName = "preferredLanguage", toColumnName = "language")
    class RenameUserLanguage : AutoMigrationSpec

    class Migrate13to14: AutoMigrationSpec
    class Migrate14to15: AutoMigrationSpec
    class Migrate16to17: AutoMigrationSpec
    class Migrate17to18: AutoMigrationSpec

    companion object {
        val allMigrations = arrayOf<Migration>(

            object : Migration(17, 18) {
                override fun migrate(database: SupportSQLiteDatabase) = with(database) {
                    database.execSQL("""
                            CREATE TABLE `user_new` (
                                `id` TEXT NOT NULL, 
                                `username` TEXT NOT NULL, 
                                `firstName` TEXT, 
                                `lastName` TEXT, 
                                `language` TEXT NOT NULL, 
                                `selectedProjectId` TEXT, 
                                `globalRole_id` TEXT, 
                                `globalRole_name` TEXT, 
                                `projectRole_id` TEXT, 
                                `projectRole_name` TEXT, 
                                `isClient` INTEGER NOT NULL DEFAULT 0, 
                                PRIMARY KEY(`id`)
                            )
                        """)

                    database.execSQL("""
                            INSERT INTO user_new (
                                id, username, firstName, lastName, language, 
                                selectedProjectId, globalRole_id, globalRole_name, 
                                projectRole_id, projectRole_name, isClient
                            )
                            SELECT 
                                id, username, firstName, lastName, language, 
                                selectedProjectId, globalRole_id, globalRole_name, 
                                projectRole_id, projectRole_name, 0 AS isClient
                            FROM user
                        """)
                    execSQL("DROP TABLE user")
                    execSQL("ALTER TABLE user_new RENAME TO user")

                }

            }
        )
    }
}

I have tried many queries, I`m not really good at SQL but whatever I do I`m getting this error:

error: New NOT NULL column'isClient' added with no default value specified. Please specify the default value using @ColumnInfo.
public abstract class AppDatabase extends androidx.room.RoomDatabase {

I have seen many posts. Most of them suggest to add the annotation @ColumnInfo.

0

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.