Migraciones automáticas a Room

Hasta el día de hoy, cualquier cambio en la estructura de la base de datos tenía que escribirse manualmente en la clase Migration, indicando a Room qué ha cambiado exactamente. En la mayoría de los casos, esto implicó escribir consultas SQL complejas.





A partir de la versión-alpha01 2.4.0 , la migración de la estructura de la base de datos en la Sala es mucho más simple: hay migración automática ( migración automática).





En casos simples (por ejemplo, agregar o eliminar una columna, crear una nueva tabla), simplemente especifique desde qué versión desea migrar, y Room hará todo el trabajo sucio por usted y generará migraciones automáticamente.





En casos más complejos (y ambiguos), Room necesitará ayuda: deberá indicar qué columna o tabla ha sido renombrada o eliminada. Según estos datos, Room generará y ejecutará automáticamente la migración.





Echemos un vistazo a algunos ejemplos para comprender mejor cómo funciona esto.





Activar migraciones automáticas

Supongamos que agregamos una nueva columna a la tabla (pasando de la versión 1 a la versión 2). Como resultado, tendremos que actualizar la anotación @Database



aumentando el número de versión y escribiendo versiones específicas en 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



).





Room puede manejar casos simples automáticamente, pero en situaciones más complejas y ambiguas, necesitamos describir la esencia de los cambios realizados. En todos los demás casos, utilice migraciones regulares.





La funcionalidad de las migraciones automáticas está en estado alfa . Ayúdanos a mejorarlo dejando comentarios en el rastreador de errores .





Enlaces útiles

  1. Documentación sobre @AutoMigration.





  2. Lista de confirmaciones que se incluyeron en la versión 2.4.0-alpha01.








All Articles