-
Anonymous
Java.lang.IllegalStateException: миграция не обрабатывалась должным образом
Сообщение
Anonymous »
После обновления приложения до новой версии вылетает с ошибкой
Код: Выделить всё
Expected:
TableInfo{name='promotion_entity', columns={actionTitle=Column{name='actionTitle', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0, defaultValue='undefined'}, actionUri=Column{name='actionUri', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0, defaultValue='undefined'}, description=Column{name='description', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0, defaultValue='undefined'}, title=Column{name='title', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0, defaultValue='undefined'}, type=Column{name='type', type='INTEGER', affinity='3', notNull=true, primaryKeyPosition=0, defaultValue='undefined'}, countryId=Column{name='countryId', type='INTEGER', affinity='3', notNull=true, primaryKeyPosition=2, defaultValue='undefined'}, enabled=Column{name='enabled', type='INTEGER', affinity='3', notNull=false, primaryKeyPosition=0, defaultValue='undefined'}, promoCodeResource=Column{name='promoCodeResource', type='INTEGER', affinity='3', notNull=false, primaryKeyPosition=0, defaultValue='undefined'}, imageMain=Column{name='imageMain', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0, defaultValue='undefined'}, promoCodeType=Column{name='promoCodeType', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0, defaultValue='undefined'}, sellerId=Column{name='sellerId', type='INTEGER', affinity='3', notNull=true, primaryKeyPosition=0, defaultValue='undefined'}, price_currencySign=Column{name='price_currencySign', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0, defaultValue='undefined'}, terms=Column{name='terms', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0, defaultValue='undefined'}, promoCode=Column{name='promoCode', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0, defaultValue='undefined'}, id=Column{name='id', type='INTEGER', affinity='3', notNull=true, primaryKeyPosition=1, defaultValue='undefined'}, userLimit=Column{name='userLimit', type='INTEGER', affinity='3', notNull=false, primaryKeyPosition=0, defaultValue='undefined'}, price_currency=Column{name='price_currency', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0, defaultValue='undefined'}, updatedAt=Column{name='updatedAt', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='undefined'}, image=Column{name='image', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0, defaultValue='undefined'}, publishedAt=Column{name='publishedAt', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='undefined'}, stores=Column{name='stores', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0, defaultValue='undefined'}, price_amount=Column{name='price_amount', type='REAL', affinity='4', notNull=false, primaryKeyPosition=0, defaultValue='undefined'}, expiresAt=Column{name='expiresAt', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='undefined'}, timeLimit=Column{name='timeLimit', type='INTEGER', affinity='3', notNull=false, primaryKeyPosition=0, defaultValue='undefined'}, topOrder=Column{name='topOrder', type='INTEGER', affinity='3', notNull=true, primaryKeyPosition=0, defaultValue='undefined'}, activationCode=Column{name='activationCode', type='INTEGER', affinity='3', notNull=false, primaryKeyPosition=0, defaultValue='undefined'}, segmentIds=Column{name='segmentIds', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0, defaultValue='undefined'}}, foreignKeys=[], indices=[]}
Found:
???
Я использую как ручную, так и автоматическую миграцию, и тест проходит успешно.
Код: Выделить всё
@Test
@Throws(IOException::class)
fun testLatestMigration() {
helper.createDatabase(MyDatabase.DATABASE_NAME, DB_OLD_VERSION).close()
helper.runMigrationsAndValidate(
MyDatabase.DATABASE_NAME,
DB_VERSION,
true,
)
}
Почему нет «Найдено» TableInfo?
P.s Я добавляю миграции, связанные с этой таблицей
Код: Выделить всё
private val MIGRATION_3_4 = object : Migration(3, 4) {
override fun migrate(database: SupportSQLiteDatabase) {
database.execSQL("BEGIN TRANSACTION;")
database.execSQL("DROP TABLE ${MyEntity.TABLE_NAME}")
database.execSQL(
"CREATE TABLE IF NOT EXISTS ${MyEntity.TABLE_NAME} (" +
"`id` INTEGER NOT NULL," +
"`countryId` INTEGER NOT NULL, " +
"`title` TEXT," +
"`description` TEXT, " +
"`type` INTEGER NOT NULL, " +
"`promoCodeResource` INTEGER," +
"`image` TEXT, " +
"`userLimit` INTEGER," +
"`timeLimit` INTEGER," +
"`promoCode` TEXT, " +
"`actionUri` TEXT," +
"`actionTitle` TEXT, " +
"`segmentIds` TEXT," +
"`stores` TEXT," +
"`sellerId` INTEGER NOT NULL, " +
"`topOrder` INTEGER NOT NULL, " +
"`enabled` INTEGER," +
"`publishedAt` TEXT NOT NULL," +
"`expiresAt` TEXT NOT NULL," +
"`updatedAt` TEXT NOT NULL," +
"`activationCode` INTEGER, " +
"`seller_sellerSellerId` INTEGER," +
"`seller_sellerName` TEXT, " +
"`seller_sellerLogo` TEXT," +
"`price_amount` REAL, " +
"`price_currency` TEXT," +
"`price_currencySign` TEXT, " +
"PRIMARY KEY(`id`, `countryId`))"
)
database.execSQL(
"UPDATE ${UserEntity.TABLE_NAME} " +
"SET promoHash = null " +
"WHERE `id` = (SELECT userId FROM session_entity LIMIT 1)",
)
database.execSQL("COMMIT;")
}
И последняя миграция, связанная с MyEntity:
Код: Выделить всё
internal val MIGRATION_11_12 = object : Migration(11, 12) {
override fun migrate(db: SupportSQLiteDatabase) {
with(db) {
execSQL(
"ALTER TABLE ${MyEntity.TABLE_NAME} " +
"ADD COLUMN terms TEXT DEFAULT NULL",
)
execSQL(
"ALTER TABLE ${MyEntity.TABLE_NAME} " +
"ADD COLUMN imageMain TEXT DEFAULT NULL",
)
execSQL(
"CREATE TABLE IF NOT EXISTS `seller_data_entity` (" +
"`id` INTEGER NOT NULL, `name` TEXT NOT NULL, `logo` " +
"TEXT NOT NULL, `color` TEXT NOT NULL, `enabled` INTEGER " +
"NOT NULL, `updatedAt` TEXT NOT NULL, `createdAt` TEXT NOT" +
" NULL, `enabledAt` TEXT NOT NULL, PRIMARY KEY(`id`))",
)
execSQL(
"ALTER TABLE ${CardEntity.TABLE_NAME} " +
"ADD COLUMN `iconColor` TEXT DEFAULT NULL;",
)
execSQL(
"ALTER TABLE ${CardEntity.TABLE_NAME} " +
"ADD COLUMN `iconCode` TEXT DEFAULT NULL;",
)
}
}
Что не так с этими миграциями?
Подробнее здесь:
https://stackoverflow.com/questions/792 ... rly-handle
1733492792
Anonymous
После обновления приложения до новой версии вылетает с ошибкой
[code]Expected:
TableInfo{name='promotion_entity', columns={actionTitle=Column{name='actionTitle', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0, defaultValue='undefined'}, actionUri=Column{name='actionUri', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0, defaultValue='undefined'}, description=Column{name='description', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0, defaultValue='undefined'}, title=Column{name='title', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0, defaultValue='undefined'}, type=Column{name='type', type='INTEGER', affinity='3', notNull=true, primaryKeyPosition=0, defaultValue='undefined'}, countryId=Column{name='countryId', type='INTEGER', affinity='3', notNull=true, primaryKeyPosition=2, defaultValue='undefined'}, enabled=Column{name='enabled', type='INTEGER', affinity='3', notNull=false, primaryKeyPosition=0, defaultValue='undefined'}, promoCodeResource=Column{name='promoCodeResource', type='INTEGER', affinity='3', notNull=false, primaryKeyPosition=0, defaultValue='undefined'}, imageMain=Column{name='imageMain', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0, defaultValue='undefined'}, promoCodeType=Column{name='promoCodeType', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0, defaultValue='undefined'}, sellerId=Column{name='sellerId', type='INTEGER', affinity='3', notNull=true, primaryKeyPosition=0, defaultValue='undefined'}, price_currencySign=Column{name='price_currencySign', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0, defaultValue='undefined'}, terms=Column{name='terms', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0, defaultValue='undefined'}, promoCode=Column{name='promoCode', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0, defaultValue='undefined'}, id=Column{name='id', type='INTEGER', affinity='3', notNull=true, primaryKeyPosition=1, defaultValue='undefined'}, userLimit=Column{name='userLimit', type='INTEGER', affinity='3', notNull=false, primaryKeyPosition=0, defaultValue='undefined'}, price_currency=Column{name='price_currency', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0, defaultValue='undefined'}, updatedAt=Column{name='updatedAt', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='undefined'}, image=Column{name='image', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0, defaultValue='undefined'}, publishedAt=Column{name='publishedAt', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='undefined'}, stores=Column{name='stores', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0, defaultValue='undefined'}, price_amount=Column{name='price_amount', type='REAL', affinity='4', notNull=false, primaryKeyPosition=0, defaultValue='undefined'}, expiresAt=Column{name='expiresAt', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='undefined'}, timeLimit=Column{name='timeLimit', type='INTEGER', affinity='3', notNull=false, primaryKeyPosition=0, defaultValue='undefined'}, topOrder=Column{name='topOrder', type='INTEGER', affinity='3', notNull=true, primaryKeyPosition=0, defaultValue='undefined'}, activationCode=Column{name='activationCode', type='INTEGER', affinity='3', notNull=false, primaryKeyPosition=0, defaultValue='undefined'}, segmentIds=Column{name='segmentIds', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0, defaultValue='undefined'}}, foreignKeys=[], indices=[]}
Found:
???
[/code]
Я использую как ручную, так и автоматическую миграцию, и тест проходит успешно.
[code]@Test
@Throws(IOException::class)
fun testLatestMigration() {
helper.createDatabase(MyDatabase.DATABASE_NAME, DB_OLD_VERSION).close()
helper.runMigrationsAndValidate(
MyDatabase.DATABASE_NAME,
DB_VERSION,
true,
)
}
[/code]
Почему нет «Найдено» TableInfo?
P.s Я добавляю миграции, связанные с этой таблицей
[code]private val MIGRATION_3_4 = object : Migration(3, 4) {
override fun migrate(database: SupportSQLiteDatabase) {
database.execSQL("BEGIN TRANSACTION;")
database.execSQL("DROP TABLE ${MyEntity.TABLE_NAME}")
database.execSQL(
"CREATE TABLE IF NOT EXISTS ${MyEntity.TABLE_NAME} (" +
"`id` INTEGER NOT NULL," +
"`countryId` INTEGER NOT NULL, " +
"`title` TEXT," +
"`description` TEXT, " +
"`type` INTEGER NOT NULL, " +
"`promoCodeResource` INTEGER," +
"`image` TEXT, " +
"`userLimit` INTEGER," +
"`timeLimit` INTEGER," +
"`promoCode` TEXT, " +
"`actionUri` TEXT," +
"`actionTitle` TEXT, " +
"`segmentIds` TEXT," +
"`stores` TEXT," +
"`sellerId` INTEGER NOT NULL, " +
"`topOrder` INTEGER NOT NULL, " +
"`enabled` INTEGER," +
"`publishedAt` TEXT NOT NULL," +
"`expiresAt` TEXT NOT NULL," +
"`updatedAt` TEXT NOT NULL," +
"`activationCode` INTEGER, " +
"`seller_sellerSellerId` INTEGER," +
"`seller_sellerName` TEXT, " +
"`seller_sellerLogo` TEXT," +
"`price_amount` REAL, " +
"`price_currency` TEXT," +
"`price_currencySign` TEXT, " +
"PRIMARY KEY(`id`, `countryId`))"
)
database.execSQL(
"UPDATE ${UserEntity.TABLE_NAME} " +
"SET promoHash = null " +
"WHERE `id` = (SELECT userId FROM session_entity LIMIT 1)",
)
database.execSQL("COMMIT;")
}
[/code]
И последняя миграция, связанная с MyEntity:
[code]internal val MIGRATION_11_12 = object : Migration(11, 12) {
override fun migrate(db: SupportSQLiteDatabase) {
with(db) {
execSQL(
"ALTER TABLE ${MyEntity.TABLE_NAME} " +
"ADD COLUMN terms TEXT DEFAULT NULL",
)
execSQL(
"ALTER TABLE ${MyEntity.TABLE_NAME} " +
"ADD COLUMN imageMain TEXT DEFAULT NULL",
)
execSQL(
"CREATE TABLE IF NOT EXISTS `seller_data_entity` (" +
"`id` INTEGER NOT NULL, `name` TEXT NOT NULL, `logo` " +
"TEXT NOT NULL, `color` TEXT NOT NULL, `enabled` INTEGER " +
"NOT NULL, `updatedAt` TEXT NOT NULL, `createdAt` TEXT NOT" +
" NULL, `enabledAt` TEXT NOT NULL, PRIMARY KEY(`id`))",
)
execSQL(
"ALTER TABLE ${CardEntity.TABLE_NAME} " +
"ADD COLUMN `iconColor` TEXT DEFAULT NULL;",
)
execSQL(
"ALTER TABLE ${CardEntity.TABLE_NAME} " +
"ADD COLUMN `iconCode` TEXT DEFAULT NULL;",
)
}
}
[/code]
Что не так с этими миграциями?
Подробнее здесь: [url]https://stackoverflow.com/questions/79255448/java-lang-illegalstateexception-migration-didnt-properly-handle[/url]