С комнатой, я не могу понять, как сделать TypeConverter
для преобразования ТЕКСТА, возвращающегося из БД Sqlite в Option
-обернутый UUID
. (Или даже Option
-wrapped String
)
object GuidConverter {
@JvmStatic @TypeConverter fun toDb(o: Option<UUID>): String? =
o.fold(
{null},
{it.toString()})
@JvmStatic @TypeConverter fun fromDb(s: String?): Option<UUID> =
when(s) {
null -> None
else -> Some(UUID.fromString(s))
}
@Entity(...)
@TypeConverters(GuidConverter::class)
data class MyTable(
val id: Long = 0,
val guid: Option<UUID> = None)
Моя миграция определяет столбец guid
: ALTER TABLE mytable ADD COLUMN guid TEXT
. У меня нет NOT NULL
в команде.
Но когда я запускаю приложение, IllegalStateException: Migration didn't properly handle mytable
:
Expected:
TableInfo{name='mytable', columns={guid=Column{name='guid', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0}, ...}, ...}
Found:
TableInfo{name='mytable', columns={guid=Column{name='guid', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0}, ...}, ...}
Почему notNull=true
в Ожидаемом? Мой TypeConverter четко определяет преобразование в формат БД как String?
.