Migrações automáticas para sala

Até hoje, qualquer mudança na estrutura do banco de dados tinha que ser escrita manualmente na classe Migration, dizendo à Room o que exatamente mudou. Na maioria dos casos, isso envolvia escrever consultas SQL complexas.





A partir da versão-alpha01 2.4.0 , a migração da estrutura do banco de dados na Sala é muito mais simples - há migração automática ( migração automática).





Em casos simples (por exemplo, adicionar ou remover uma coluna, criar uma nova tabela), você apenas especifica de qual versão deseja migrar, e a Room fará todo o trabalho sujo para você e gerará migrações automaticamente.





Em casos mais complexos (e ambíguos), a Room precisará de ajuda: você precisará indicar qual coluna ou tabela foi renomeada ou excluída. Com base nesses dados, a Room irá gerar e executar a migração automaticamente.





Vamos dar uma olhada em alguns exemplos para entender melhor como isso funciona.





Ativar migrações automáticas

Suponha que adicionemos uma nova coluna à tabela (passando da versão 1 para a versão 2). Como resultado, teremos que atualizar a anotação @Database



aumentando o número da versão e escrevendo versões específicas em AutoMigration



:





, , , AutoMigration



:





Room ? , . :





  • ,





  • , ,





  • ..





: . , , exportSchema



true



. : Cannot create auto-migrations when export schema is OFF.





?

, Room' . , .





: Room , ( ) . , Room AutoMigrationSpec, .





AutoMigrationSpec :





  • @DeleteTable(tableName)



    — , ,





  • @RenameTable(fromTableName, toTableName)



    — , ,





  • @DeleteColumn(tableName, columnName)



    — , ,





  • @RenameColumn(tableName, fromColumnName, toColumnName)



    — , , .





, Doggos



GoodDoggos



. Room :





  • GoodGoggos



    , , , (Doggos



    ) ,





  • Doggos



    , .





:





vs.

1.0, Room Migration . , .





, . Room , . , , .





Migration



, databaseBuilder()



addMigrations()



:





Room . , 1 2 Migration



, 2 3 — ..





, , .





?

: Migration



, .





, Room , , @Database



. , Room .





MigrationTestHelper



helper.runMigrationsAndValidate()



, Migration.





.





. — autoMigrations



@Database



( exportSchema = true



).





A Room pode lidar com casos simples automaticamente, mas em situações mais complexas e ambíguas, precisamos descrever a essência das alterações feitas. Em todos os outros casos, use migrações regulares.





A funcionalidade de migrações automáticas está em status alfa . Ajude-nos a torná-lo melhor, deixando comentários no bug tracker .





Links Úteis

  1. Documentação sobre @AutoMigration.





  2. Lista de commits incluídos na versão 2.4.0-alpha01.








All Articles