Android Комната: TypeConverter для Option <MyVal>: Миграция имеет проблему со свойством notNull - PullRequest
0 голосов
/ 14 февраля 2020

С комнатой, я не могу понять, как сделать 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?.

...