Room

La bibliothèque de persistance Room fournit une couche d'abstraction sur SQLite afin de permettre un accès plus fiable à la base de données, tout en exploitant toute la puissance de SQLite.
Dernière mise à jour Version stable Version finale Version bêta Version alpha
30 octobre 2024 2.6.1 - - 2.7.0-alpha11

Déclarer des dépendances

Pour ajouter une dépendance sur Room, vous devez ajouter le dépôt Maven de Google à votre projet. Pour en savoir plus, consultez la section Dépôt Maven de Google.

Les dépendances pour Room incluent les tests de migrations Room et Room RxJava.

Ajoutez les dépendances des artefacts dont vous avez besoin dans le fichier build.gradle de votre application ou module :

Kotlin

dependencies {
    val room_version = "2.6.1"

    implementation("androidx.room:room-runtime:$room_version")

    // If this project uses any Kotlin source, use Kotlin Symbol Processing (KSP)
    // See Add the KSP plugin to your project
    ksp("androidx.room:room-compiler:$room_version")

    // If this project only uses Java source, use the Java annotationProcessor
    // No additional plugins are necessary
    annotationProcessor("androidx.room:room-compiler:$room_version")

    // optional - Kotlin Extensions and Coroutines support for Room
    implementation("androidx.room:room-ktx:$room_version")

    // optional - RxJava2 support for Room
    implementation("androidx.room:room-rxjava2:$room_version")

    // optional - RxJava3 support for Room
    implementation("androidx.room:room-rxjava3:$room_version")

    // optional - Guava support for Room, including Optional and ListenableFuture
    implementation("androidx.room:room-guava:$room_version")

    // optional - Test helpers
    testImplementation("androidx.room:room-testing:$room_version")

    // optional - Paging 3 Integration
    implementation("androidx.room:room-paging:$room_version")
}

Groovy

dependencies {
    def room_version = "2.6.1"

    implementation "androidx.room:room-runtime:$room_version"

    // If this project uses any Kotlin source, use Kotlin Symbol Processing (KSP)
    // See KSP Quickstart to add KSP to your build
    ksp "androidx.room:room-compiler:$room_version"

    // If this project only uses Java source, use the Java annotationProcessor
    // No additional plugins are necessary
    annotationProcessor "androidx.room:room-compiler:$room_version"

    // optional - RxJava2 support for Room
    implementation "androidx.room:room-rxjava2:$room_version"

    // optional - RxJava3 support for Room
    implementation "androidx.room:room-rxjava3:$room_version"

    // optional - Guava support for Room, including Optional and ListenableFuture
    implementation "androidx.room:room-guava:$room_version"

    // optional - Test helpers
    testImplementation "androidx.room:room-testing:$room_version"

    // optional - Paging 3 Integration
    implementation "androidx.room:room-paging:$room_version"
}

Pour en savoir plus sur l'utilisation du plug-in KAPT, consultez la documentation KAPT.

Pour en savoir plus sur l'utilisation du plug-in KSP, consultez la documentation de démarrage rapide sur KSP.

Pour en savoir plus sur l'utilisation des extensions Kotlin, consultez la documentation sur les extensions KTX.

Pour en savoir plus sur les dépendances, consultez la page Ajouter des dépendances de compilation.

Si vous utilisez des bibliothèques autres qu'Android (par exemple, des modules Gradle Java ou Kotlin uniquement), vous pouvez utiliser les annotations Room grâce à androidx.room:room-common.

Configurer les options du compilateur

Room dispose des options de processeur d'annotations suivantes.

room.schemaLocation directory
Active l'exportation des schémas de base de données vers des fichiers JSON dans le répertoire donné. Pour en savoir plus, consultez Migrations Room.
room.incremental boolean
Active le processeur d'annotations incrémentielles Gradle. La valeur par défaut est true.
room.generateKotlin boolean
Générez des fichiers sources Kotlin au lieu de Java. Nécessite KSP. La valeur par défaut est false. Pour en savoir plus, consultez les notes de la version 2.6.0.

Utiliser le plug-in Room Gradle

À partir de la version 2.6.0 de Room, vous pouvez utiliser le plug-in Room Gradle pour configurer les options du compilateur Room. Le plug-in configure le projet de sorte que les schémas générés (qui sont une sortie des tâches de compilation et qui sont utilisés pour les migrations automatiques) soient correctement configurés pour disposer de compilations reproductibles et pouvant être mises en cache.

Pour ajouter le plug-in, définissez-le et sa version dans votre fichier de compilation Gradle de premier niveau.

Groovy

plugins {
    id 'androidx.room' version "$room_version" apply false
}

Kotlin

plugins {
    id("androidx.room") version "$room_version" apply false
}

Dans le fichier de compilation Gradle au niveau du module, appliquez le plug-in et utilisez l'extension room.

Groovy

plugins {
    id 'androidx.room'
}

android {
    ...
    room {
        schemaDirectory "$projectDir/schemas"
    }
}

Kotlin

plugins {
    id("androidx.room")
}

android {
    ...
    room {
        schemaDirectory("$projectDir/schemas")
    }
}

Vous devez définir un schemaDirectory lorsque vous utilisez le plug-in Room Gradle. Cela configurera le compilateur Room et les différentes tâches de compilation et ses backends (javac, KAPT, KSP) pour générer des fichiers de schéma dans des dossiers de type, par exemple schemas/flavorOneDebug/com.package.MyDatabase/1.json. Ces fichiers doivent être enregistrés dans le dépôt afin de pouvoir être utilisés pour la validation et les migrations automatiques.

Certaines options ne peuvent pas être configurées dans toutes les versions du plug-in Room Gradle, même si elles sont compatibles avec le compilateur Room. Le tableau ci-dessous liste chaque option et indique la version du plug-in Gradle Room qui a ajouté la prise en charge de la configuration de cette option à l'aide de l'extension room. Si votre version est antérieure ou si l'option n'est pas encore compatible, vous pouvez utiliser les options de processeur d'annotations.

Option Depuis la version
room.schemaLocation (obligatoire) 2.6.0
room.incremental -
room.generateKotlin -

Utiliser les options de processeur d'annotations

Si vous n'utilisez pas le plug-in Gradle Room ou si l'option souhaitée n'est pas compatible avec votre version du plug-in, vous pouvez configurer Room à l'aide d'options de processeur d'annotations, comme décrit dans la section Ajouter des dépendances de compilation. La façon dont vous spécifiez les options d'annotation dépend de l'utilisation de KSP ou de KAPT pour Room.

Groovy

// For KSP
ksp {
    arg("option_name", "option_value")
    // other otions...
}

// For javac and KAPT
android {
    ...
    defaultConfig {
        ...
        javaCompileOptions {
            annotationProcessorOptions {
                arguments += [
                    "option_name":"option_value",
                    // other options...
                    ]
            }
        }
    }
}

Kotlin

// For KSP
ksp {
    arg("option_name", "option_value")
    // other options...
}

// For javac and KAPT
android {
    ...
    defaultConfig {
        ...
        javaCompileOptions {
            annotationProcessorOptions {
                arguments += mapOf(
                    "option_name" to "option_value",
                    // other options...
                )
            }
        }
    }
}

Étant donné que room.schemaLocation est un répertoire et non un type primitif, vous devez utiliser un CommandLineArgumentsProvider lorsque vous ajoutez cette option afin que Gradle connaisse ce répertoire lors des vérifications à jour. Migrer votre base de données Room présente une implémentation complète de CommandLineArgumentsProvider qui fournit l'emplacement du schéma.

Commentaires

Vos commentaires nous aident à améliorer Jetpack. N'hésitez pas à nous contacter si vous découvrez de nouveaux problèmes ou si vous avez des idées pour améliorer cette bibliothèque. Veuillez consulter les problèmes existants de cette bibliothèque avant d'en signaler un nouveau. Vous pouvez ajouter votre vote à un problème existant en cliquant sur le bouton en forme d'étoile.

Signaler un nouveau problème

Pour en savoir plus, consultez la documentation sur l'outil Issue Tracker.

Version 2.7

Version 2.7.0-alpha11

30 octobre 2024

Publication d'androidx.room:room-*:2.7.0-alpha11. La version 2.7.0-alpha11 contient ces commits.

Modifications apportées à l'API

  • Modifiez la signature de la méthode convertRows() nouvellement ajoutée pour qu'elle soit une fonction de suspension qui reçoit un RawRoomQuery pour la pagination des pièces. (Ie57b5, b/369136627)

Correction de bugs

  • Correction du problème dans la pagination Room où du code non valide était généré lors de l'utilisation de @Relation avec PagingSource.

Version 2.7.0-alpha10

16 octobre 2024

Publication d'androidx.room:room-*:2.7.0-alpha10. La version 2.7.0-alpha10 contient ces commits.

Modifications apportées à l'API

  • Créez une classe ByteArrayWrapper interne pour prendre en charge les relations avec ByteBuffer sur les plates-formes autres qu'Android et JVM. (I75543, b/367205685)
  • Ajoutez SQLiteStatement.getColumnType() avec les différentes constantes de résultat SQLITE_DATA_* pour pouvoir récupérer le type de données d'une colonne. (I1985c, b/369636251).

Version 2.7.0-alpha09

2 octobre 2024

Publication d'androidx.room:room-*:2.7.0-alpha09. La version 2.7.0-alpha09 contient ces commits.

Correction de bugs

  • Correction d'un problème lié à l'implémentation KMP de room-paging, qui entraînait une Error code: 8, message: attempt to write a readonly database en raison du démarrage d'une transaction d'écriture sur une connexion de lecture. (b/368380988)

Version 2.7.0-alpha08

18 septembre 2024

Publication d'androidx.room:room-*:2.7.0-alpha08. La version 2.7.0-alpha08 contient ces commits.

Nouvelles fonctionnalités

  • Les artefacts room-paging ont été migrés pour être compatibles avec KMP. (Ib8756, b/339934824)
  • L'API invalidationTrackerFlow() a été unifiée en tant qu'API propriétaire sous le nom InvalidationTracker.createFlow() et est désormais disponible pour les ensembles de sources autres qu'Android dans les projets KMP. (I1fbfa, (I8fb29), b/329291639, b/329315924)

Modifications apportées à l'API

  • Tous les avertissements et messages d'erreur de Room qui contiennent le mot Cursor ont été supprimés ou remplacés, car Cursor n'est plus un terme général précis à utiliser dans la version KMP de Room. (Id8cd9, b/334087492)

Correction de bugs

  • Correction d'un problème pour lequel le KMP Room essayait d'émettre du code à l'aide de UUID pour les plates-formes autres que JVM. (b/362994709)
  • Correction d'un problème lié au plug-in Gradle Room qui entraînait une erreur telle que "Impossible de modifier les attributs de la configuration … après qu'elle a été verrouillée pour la mutation" lorsqu'il était utilisé dans un projet KMP avec Compose Multiplate-forme. (b/343408758).

Version 2.7.0-alpha07

21 août 2024

Publication d'androidx.room:room-*:2.7.0-alpha07. La version 2.7.0-alpha07 contient ces commits.

Nouvelles fonctionnalités

  • Le plug-in Gradle Room ajoute désormais automatiquement les schémas exportés dans les sources de ressources de test d'instrumentation Android afin qu'ils puissent être utilisés par MigrationTestHelper.

Correction de bugs

  • Correction d'un problème lié à l'absence du modificateur "actual" dans la fonction initialize si cette fonction est également remplacée dans la déclaration "expect".RoomDatabaseConstructor (359631627).
  • Correction d'un problème où la valeur "actual" générée de RoomDatabaseConstructor ne correspondait pas à la visibilité de la déclaration "expect". (358138953)

Version 2.7.0-alpha06

7 août 2024

Publication d'androidx.room:room-*:2.7.0-alpha06. La version 2.7.0-alpha06 contient ces commits.

Modifications apportées à l'API

  • Modifiez la configuration d'instanciation d'un RoomDatabase dans un projet KMP.

En raison du modèle de compilation Kotlin 2.0, la stratégie de référencement d'une fonction à générer, nommée instantiateImpl(), n'est plus viable. Deux nouvelles API, @ConstructedBy et RoomDatabaseConstructor, remplacent la stratégie instantiateImpl(). Voici la nouvelle stratégie:

  1. Définir un objet expect qui implémente RoomDatabaseConstructor

      expect object MyDatabaseCtor : RoomDatabaseConstructor<MyDatabase>
    
  2. Associer l'objet à la déclaration @Database à l'aide de @ConstructedBy

      @Database(...)
      @ConstructedBy(MyDatabaseCtor::class) // NEW
      abstract class MyDatabase : RoomDatabase
    
  3. Créer une instance de base de données sans transmettre d'argument de fabrique

      fun createNewDatabase(path: String) =
        Room.databaseBuilder<AppDatabase>(name = path)
          .setDriver(BundledSQLiteDriver())
          .setQueryCoroutineContext(Dispatchers.IO)
          .build()
    

Correction des problèmes b/316978491, b/338446862 et b/342905180

  • Compatibilité avec @RawQuery dans Room KMP en ajoutant une nouvelle API appelée RoomRawQuery, qui est semblable à SupportSQLiteQuery en termes de stockage dans la chaîne SQL brute et d'une fonction permettant de lier des arguments dans une instruction. Les fonctions annotées @RawQuery peuvent désormais accepter un RoomRawQuery comme paramètre unique. (Iea844, b/330586815)
  • Ajoutez une surcharge de setQueryCallback() qui accepte un CoroutineContext. (Id66ff, b/309996304)
  • Ajout de la prise en charge des cibles multiplates-formes Kotlin linuxArm64 (I139d3, b/338268719)

Correction de bugs

  • Correction d'un problème qui entraînait la génération incorrecte d'un appel à recursiveFetchArrayMap dans Room dans des cibles autres qu'Android. (710c36, b/352482325)
  • Correction d'un problème qui entraînait parfois la génération d'une exception pour "Expiration du délai d'une tentative de connexion" dans un projet KMP par Room. (fa72d0, b/347737870).
  • Correction d'un problème dans les migrations automatiques qui vérifiait les clés étrangères trop tôt avant que les autres tables ne modifient leurs schémas pour se conformer aux nouvelles clés étrangères. (7672c0, b/352085724)

Version 2.7.0-alpha05

10 juillet 2024

Publication d'androidx.room:room-*:2.7.0-alpha05. La version 2.7.0-alpha05 contient ces commits.

Modifications apportées à l'API

  • Remplacement du nom SQLiteKt par SQLite et du nom BundledSQLiteKt par BundledSQLite. (I8b501)

Correction de bugs

  • Correction d'un bug qui entraînait un blocage ou une erreur avec un délai d'expiration de la connexion lorsqu'un RoomDatabase était utilisé avec AndroidSQLiteDriver.

Version 2.7.0-alpha04

12 juin 2024

Publication d'androidx.room:room-*:2.7.0-alpha04. La version 2.7.0-alpha04 contient ces commits.

Correction de bugs

  • Correction d'un problème dans le processeur d'annotations de Room qui générait un code KMP incompatible lorsqu'un type renvoyé à plusieurs cartes était défini dans un DAO. (b/340983093)
  • Correction d'un problème qui empêchait Room de trouver l'implémentation de la base de données générée si la classe annotée @Database ne disposait d'aucun package. (b/342097292)
  • Correction d'un problème qui entraînait parfois une erreur ConcurrentModificationException lorsque la base de données était fermée automatiquement en raison d'inactivité.

Version 2.7.0-alpha03

29 mai 2024

Publication d'androidx.room:room-*:2.7.0-alpha03. La version 2.7.0-alpha03 contient ces commits.

Correction de bugs

  • Correction de divers problèmes liés à Kotlin 2.0 et KSP 2.0. Notez que Kotlin 2.0 avec la prise en charge de KSP 2 n'est pas encore finalisé. L'équipe travaille sur les différentes API et les modifications de comportement du nouveau compilateur. (b/314151707)

Version 2.7.0-alpha02

14 mai 2024

Publication d'androidx.room:room-*:2.7.0-alpha02. La version 2.7.0-alpha02 contient ces commits.

Correction de bugs

  • Correction de divers problèmes KSP.

Version 2.7.0-alpha01

1er mai 2024

Publication d'androidx.room:room-*:2.7.0-alpha01. La version 2.7.0-alpha01 contient ces commits.

Nouvelles fonctionnalités

  • Compatibilité avec Kotlin Multiplatform (KMP): dans cette version, Room a été refactorisé pour devenir une bibliothèque Kotlin Multiplatform (KMP). Bien qu'il reste encore du travail à faire, cette version introduit une nouvelle version de Room, dans laquelle la majorité des fonctionnalités ont été "communiquées" (conçues pour être multiplateformes). Les plates-formes actuellement compatibles sont Android, iOS, JVM (ordinateur), Mac natif et Linux natif. Toutes les fonctionnalités manquantes sur les nouvelles plates-formes compatibles seront rendues "complètes" dans les prochaines versions de Room.

Pour savoir comment commencer à utiliser Room KMP, consultez la documentation officielle de Room KMP.

  • La génération de code Kotlin sur KSP est activée par défaut si le traitement est effectué via KSP. Pour les projets KAPT ou Java uniquement, Room génère toujours des sources Java.

Modifications apportées à l'API

  • Une surcharge de Room.databaseBuilder() a été ajoutée, qui prend un paramètre lambda destiné à être utilisé avec une fonction générée par Room pour éviter d'utiliser la réflexion lors de l'instanciation de l'implémentation RoomDatabase générée. Exemple d'utilisation:
Room.databaseBuilder<MyDatabase>(
    context = appContext,
    name = dbFilePath,
    factory =  { MyDatabase::class.instantiateImpl() }
)
  • Une API permettant de configurer une salle avec un CoroutineContext a été ajoutée au compilateur: RoomDatabase.Builder.setQueryCoroutineContext. Notez qu'un RoomDatabase ne peut être configuré qu'avec des exécuteurs utilisant setQueryExecutor ou avec un contexte de coroutine, mais pas les deux.
  • Une API permettant de configurer Room avec un pilote SQLite a été ajoutée: RoomDatabase.Builder.setDriver(). Pour en savoir plus sur l'API du pilote SQLite, consultez la documentation KMP SQLite.
  • Des API permettant d'accéder au SQLiteConnection sous-jacent à partir des API de pilote ont été ajoutées: RoomDatabase.useReaderConnection et RoomDatabase.useWriterConnection.
  • Plusieurs rappels liés à Room disposent désormais d'une version surchargée qui reçoit SQLiteConnection au lieu de SupportSQLiteDatabase. Ils doivent être ignorés lors de la migration vers un projet KMP. Pour en savoir plus sur la migration des utilisations de Room dans une application Android vers un module KMP commun, consultez le guide de migration. Les rappels sont les suivants :
    • Migration.migrate(SQLiteConnection)
    • AutoMigrationSpec.onPostMigrate(SQLiteConnection)
    • RoomDatabase.Callback.onCreate(SQLiteConnection)
    • RoomDatabase.Callback.onDestructiveMigration(SQLiteConnection)
    • RoomDatabase.Callback.onOpen(SQLiteConnection)
  • L'artefact KTX androidx.room:room-ktx a été fusionné avec androidx.room:room-runtime et toutes ses API. L'artefact est désormais vide. Veuillez le supprimer de votre liste de dépendances.

Version 2.6

Version 2.6.1

29 novembre 2023

Publication d'androidx.room:room-*:2.6.1. Liste des commits de la version 2.6.1

Correction de bugs

  • Résolution d'un problème dans le code généré, où la valeur par défaut des colonnes Double dans EntityCursorConverter était définie sur 0 au lieu de 0,0. Un correctif potentiel pour un cas particulier similaire pour les colonnes de type "Float" a également été inclus. (Id75f5, b/304584179)
  • Les exceptions générées à partir des chargements PagingSource sont désormais propagées en tant que LoadStateUpdate de LoadResult.Error contenant le Throwable. Cet état d'erreur est observable via PagingDataAdapter.loadStateFlow(Views) ou LazyPagingItems.loadState(Compose). Notez que cela marque un changement de comportement où, par le passé, des erreurs de chargement s'afficheront en tant qu'exception générée par la méthode dao ayant déclenché le chargement. (I93887, b/302708983)

Version 2.6.0

18 octobre 2023

Publication d'androidx.room:room-*:2.6.0. Liste des commits de la version 2.6.0

Modifications importantes depuis la version 2.5.0

  • L'option permettant d'activer la génération de code Kotlin (ou "Kotlin CodeGen") est désormais disponible dans Room KSP. (4297ec0). Pour activer la génération de code Kotlin dans Room, ajoutez le nom de l'option room.generateKotlin à vos options de processeur pour KSP. Pour en savoir plus sur la transmission d'options de processeur pour KSP, consultez la documentation KSP.

Remarque:Lorsque vous utilisez la génération de code Kotlin, il est important de noter que des restrictions supplémentaires ont été ajoutées. Les propriétés abstraites telles que les getters DAO ou les requêtes DAO dans le codeGen Kotlin ne sont pas autorisées. Elles doivent plutôt être réécrites en tant que fonctions pour éviter l'idée fausse selon laquelle la valeur de la propriété est immuable et a un résultat stocké fixe. Une autre restriction a été ajoutée : les types de retour de collection Nullable ne sont plus autorisés dans Room pour la génération de code Kotlin.

Avertissement:Vous constaterez peut-être que vos projets sont plus stricts en termes de possibilité de valeur nulle lorsque vous utilisez Kotlin CodeGen. Dans la génération de code Kotlin, la possibilité de valeur nulle des arguments de type est importante, bien qu'elle soit généralement ignorée en Java. Par exemple, imaginons que vous ayez un type de retour "Flow<foo\>" et que la table soit vide. Dans Java CodeGen, cela ne posera aucun problème, mais dans Kotlin CodeGen, vous obtiendrez une erreur. Pour éviter cela, vous devez utiliser "Flow<foo?\>", en supposant qu'une valeur nulle est émise. </foo?\></foo\>

  • Le nouvel artefact du plug-in Room Gradle a été ajouté à Room avec l'ID androidx.room, ce qui résout divers problèmes existants dans Room concernant les entrées et les sorties de schémas via les options de processeur d'annotations Gradle. Pour en savoir plus, consultez les notes de version de Room 2.6.0-alpha02.
  • Les classes de valeurs dans les entités Room sont désormais compatibles avec KSP. (4194095).
  • Les types de retour Map imbriqués dans les fonctions DAO sont désormais compatibles avec Room. (I13f48, 203008711)

Version 2.6.0-rc01

20 septembre 2023

Publication d'androidx.room:room-*:2.6.0-rc01. Liste des commits de la version 2.6.0-rc01

Version 2.6.0-beta01

23 août 2023

Publication d'androidx.room:room-*:2.6.0-beta01. Liste des commits de la version 2.6.0-beta01

Correction de bugs

  • Gestion de l'exception SQLite spéciale lors de l'opération upsert rencontrée lorsque l'exception 2067 SQLITE_CONSTRAINT_UNIQUE est générée lors d'une opération upsert. Cette opération doit effectuer une mise à jour. (If2849, b/243039555).

Version 2.6.0-alpha03

9 août 2023

Publication d'androidx.room:room-*:2.6.0-alpha03. Liste des commits de la version 2.6.0-alpha03.

Nouvelles fonctionnalités

  • Les types de retour Map imbriqués dans les fonctions DAO sont désormais compatibles avec Room. (I13f48, 203008711)

Modifications apportées à l'API

  • Une nouvelle annotation de type appelée @MapColumn a été créée pour remplacer @MapInfo, qui est désormais obsolète. Pour chaque nom de colonne (keyColumnName, valueColumnName ou les deux) fourni dans une annotation @MapInfo, vous devez déclarer une annotation @MapColumn avec uniquement columnName et utiliser l'annotation sur l'argument de type spécifique référencé (la clé ou la valeur de la carte) dans le type de retour de la fonction DAO. En effet, l'annotation @MapColumn est utilisée directement sur l'argument de type dans le type de retour d'une fonction DAO, plutôt que sur la fonction elle-même, comme @MapInfo. Pour en savoir plus, consultez la documentation sur @MapColumn. (Ib0305, b/203008711)
  • Mise à jour des fichiers API pour annoter la suppression de la compatibilité. (I8e87a, b/287516207)
  • Les API du plug-in Room Gradle ont été mises à jour pour ne pas toujours exiger des configurations par variante. Cela signifie que le plug-in peut accepter un emplacement global pour toutes les variantes sans créer plusieurs répertoires, ce qui permet des migrations plus fluides, mais aussi suffisamment de flexibilité pour configurer manuellement des saveurs ou des schémas de type de compilation tout en conservant les avantages du plug-in (compilations reproductibles et en cache). (I09d6f, b/278266663)

Correction de bugs

  • Correction d'une faille potentielle de fuite de mémoire dans QueryInterceptorStatement. (I193d1)
  • Correction d'un comportement incorrect dans la fonction QueryInterceptorDatabase execSQL(). (Iefdc8)

Version 2.6.0-alpha02

21 juin 2023

Publication d'androidx.room:room-*:2.6.0-alpha02. Liste des commits de la version 2.6.0-alpha02.

Plug-in Gradle Room

Cette nouvelle version contient un nouvel artefact pour le plug-in Gradle Room avec l'ID androidx.room, qui résout divers problèmes existants dans Room concernant les entrées et les sorties de schémas via les options de processeur d'annotations Gradle. Le plug-in Gradle Room configure le projet de sorte que les schémas générés qui sont utilisés pour les migrations automatiques et qui sont générés par les tâches de compilation soient correctement configurés pour obtenir des builds reproductibles et enregistrables en cache. Le plug-in propose un DSL pour configurer l'emplacement du schéma de base:

room {
    schemaDirectory("$projectDir/schemas/")
}

Le plug-in configure ensuite le compilateur Room et les différentes tâches de compilation, ainsi que ses backends (javac, KAPT, KSP) pour générer des fichiers de schéma dans des dossiers de type, c'est-à-dire schemas/flavorOneDebug/com.package.MyDatabase/1.json. Comme d'habitude, ces fichiers sont enregistrés dans le dépôt pour être utilisés à des fins de validation et de migration automatique. Lorsque vous passez à l'utilisation du plug-in au lieu des options de processeur d'annotation, les fichiers de schéma existants doivent être copiés dans les répertoires de saveurs générés créés par le plug-in. Il s'agit d'une opération de migration unique qui doit être effectuée manuellement. La documentation du schéma sur developers.android.com sera mise à jour à l'avenir une fois que les commentaires auront été pris en compte et que le plug-in sera stable. N'hésitez pas à l'essayer.

Modifications apportées à l'API

  • RoomDatabase.QueryCallback a été défini comme une interface fonctionnelle pour permettre l'utilisation des conversions SAM. (Iab8ea, b/281008549).

Correction de bugs

  • Résolution du problème lié à l'instanciation de la base de données dans Robolectric après la migration des sources Room de Java vers Kotlin. (Ic053c, b/274924903).

Version 2.6.0-alpha01

22 mars 2023

Publication d'androidx.room:room-*:2.6.0-alpha01. Liste des commits de la version 2.6.0-alpha01.

Nouvelles fonctionnalités

  • Prise en charge des classes de valeur dans Room pour KSP. Room est désormais compatible avec les classes de valeurs dans les entités. (4194095)
  • La génération de code Kotlin(ou "Kotlin CodeGen") peut désormais être activée dans Room (4297ec0). Pour activer la génération de code Kotlin dans Room, ajoutez le nom de l'option room.generateKotlin à vos options de processeur pour KSP. Pour en savoir plus sur la transmission d'options de processeur pour KSP, consultez la documentation KSP.

Remarque:Lorsque vous utilisez Kotlin CodeGen, notez que des restrictions supplémentaires ont été ajoutées. Les propriétés abstraites en tant que getters DAO ou requêtes DAO dans Kotlin CodeGen ne sont pas autorisées. Elles doivent plutôt être réécrites en tant que fonctions pour éviter la fausse idée que la valeur de la propriété est immuable et qu'elle a un résultat stocké fixe. Une autre restriction a été ajoutée : les types de retour de collection Nullable ne sont plus autorisés dans Room pour la génération de code Kotlin.

Avertissement:Vous constaterez peut-être que vos projets sont plus stricts en termes de possibilité de valeur nulle lorsque vous utilisez Kotlin CodeGen. Dans la génération de code Kotlin, la possibilité de valeur nulle des arguments de type est importante, bien qu'elle soit généralement ignorée en Java. Par exemple, imaginons que vous ayez un type de retour "Flow<foo\>" et que la table soit vide. Dans Java CodeGen, cela ne posera aucun problème, mais dans Kotlin CodeGen, vous obtiendrez une erreur. Pour éviter cela, vous devez utiliser "Flow<foo?\>", en supposant qu'une valeur nulle est émise. </foo?\></foo\>

Modifications apportées à l'API

  • Prévention de l'utilisation insignifiante de collections nullables dans les types de retour de méthode DAO. (I777dc, b/253271782, b/259426907)
  • Ajout d'une API permettant de créer un flux qui émet des modifications du traceur d'invalidation. L'API est utile pour créer des flux qui doivent réagir aux modifications de la base de données. (I8c790, b/252899305)

Correction de bugs

  • Interdisez les propriétés abstraites en tant que getters DAO ou requêtes DAO dans le codegen Kotlin. À la place, elles doivent être réécrites en tant que fonctions pour éviter l'idée fausse selon laquelle la valeur de la propriété est immuable et a un résultat stocké fixe. (If6a13, b/127483380, b/257967987)

Version 2.5.2

Version 2.5.2

21 juin 2023

Publication d'androidx.room:room-*:2.5.2. Liste des commits de la version 2.5.2

Correction de bugs

  • Correction d'un problème d'incompatibilité avec kotlinx-metadata-jvm. (386d5c)
  • Correction d'un problème qui entraînait l'affichage d'une erreur lorsque Room était utilisé dans un test Robolectric. (f79bea, b/274924903).

Version 2.5.1

Version 2.5.1

22 mars 2023

Publication d'androidx.room:room-*:2.5.1. Liste des commits de la version 2.5.1.

Correction de bugs

  • Évitez de vérifier le répertoire parent de la base de données dans FrameworkSQLiteHelper si celle-ci est déjà ouverte. (5de86b8).
  • Utilisez une vérification isOpenInternal pour vérifier si la base de données est déjà ouverte. (e91fb35)
  • La gestion du cas réentrant dans acquireTransactionThread() de Room est désormais meilleure. (219f98b). Lors d'une transaction de suspension, Room utilise un thread de l'exécuteur de transactions, y lance une boucle d'événements et lui envoie les opérations de suspension de base de données afin qu'elles soient toutes encapsulées dans la coroutine de transaction. Le thread de transaction est généralement différent de celui qui lance la transaction, mais il peut parfois être le même. Pour gérer ces cas réentrants, withTransaction() a été refactorisé pour ne plus dépendre d'une tâche de contrôle. Il exécute plutôt le bloc de transaction de suspension à partir de runBlocking dans le thread de transaction.

Version 2.5.0

Version 2.5.0

22 février 2023

Publication de androidx.room:room-paging-guava:2.5.0, androidx.room:room-paging-rxjava2:2.5.0 et androidx.room:room-paging-rxjava3:2.5.0. Liste des commits de la version 2.5.0

Version 2.5.0

11 janvier 2023

Publication de androidx.room:room-*:2.5.0. Liste des commits de la version 2.5.0

Modifications importantes depuis la version 2.4.0

  • Toutes les sources room-runtime ont été converties en Kotlin depuis Java. Notez que vous pouvez rencontrer des problèmes d'incompatibilité des sources si votre code est en Kotlin, en raison de la conversion de la bibliothèque en Kotlin. Par exemple, une modification incompatible avec la source est que, dans InvalidationTracker, vous devrez désormais déclarer onInvalidate() dans Observer pour avoir un paramètre de type Set et non de type MutableSet. De plus, certaines méthodes getter ont été converties en propriétés nécessitant la syntaxe d'accès aux propriétés sur les fichiers Kotlin. Veuillez signaler un bug en cas d'incompatibilités majeures.
  • Ajout d'une annotation de raccourci, @Upsert, qui tente d'insérer une entité s'il n'y a pas de conflit d'unicité ou de mettre à jour l'entité en cas de conflit. (I7aaab, b/241964353)
  • Ajout des artefacts de room-paging room-paging-rxjava2, room-paging-rxjava3 et room-paging-guava pour Room Paging.
  • Ajout d'API pour fournir des noms de tableaux de clés et de valeurs afin d'éviter toute ambiguïté dans @MapInfo (Icc4b5)

Version 2.5.0-rc01

7 décembre 2022

Publication d'androidx.room:room-*:2.5.0-rc01. Liste des commits de la version 2.5.0-rc01

  • Cette version est identique à la version 2.5.0-beta02.

Version 2.5.0-beta02

9 novembre 2022

Publication d'androidx.room:room-*:2.5.0-beta02. Liste des commits de la version 2.5.0-beta02

Modifications apportées à l'API

  • Correction de diverses API qui convertissent des arguments de requête invariants (Array<Any?>) en contravariants (Array<out Any?>) pour qu'ils correspondent au comportement du tableau Java. (b/253531073)

Version 2.5.0-beta01

5 octobre 2022

Publication d'androidx.room:room-*:2.5.0-beta01. Liste des commits de la version 2.5.0-beta01.

Modifications apportées à l'API

  • L'API 16 doit désormais correspondre à la version minimale qui prend en charge @Upsert, car il est impossible d'identifier une contrainte de clé primaire dans les API plus anciennes. (I5f67f, b/243039555)

Correction de bugs

  • Correction d'un problème qui provoquait l'exportation incorrecte des tables fantômes vers les fichiers de schéma .json, ce qui les corrompait. (I4f83b, b/246751839)

Version 2.5.0-alpha03

24 août 2022

Publication d'androidx.room:room-*:2.5.0-alpha03. Liste des commits de la version 2.5.0-alpha03.

Nouvelles fonctionnalités

  • Ajout d'une annotation de raccourci, @Upsert, qui tente d'insérer une entité s'il n'y a pas de conflit d'unicité ou de mettre à jour l'entité en cas de conflit. (I7aaab, b/241964353)

Correction de bugs

  • Lors de la vérification des contraintes de clé étrangère par migration automatique, Room générera désormais une SQLiteConstraintException au lieu d'une IllegalStateException. (I328dd)
  • Corrige une modification incompatible avec la source Kotlin pour les getter/propriétés de getOpenHelper, getQueryExecutor et getTransactionExecutor. (Iad0ac)

Version 2.5.0-alpha02

1er juin 2022

Publication d'androidx.room:room-*:2.5.0-alpha02. Liste des commits de la version 2.5.0-alpha02

Nouvelles fonctionnalités

Modifications apportées à l'API

  • room-runtime a été entièrement converti en Kotlin depuis Java. (If2069, b/206859668),(Ie4b55, b/206859668), (I697ee, b/206859668), (I96c25, b/206859668)

    Remarque : Vous pouvez rencontrer des problèmes d'incompatibilité des sources en raison de la conversion de la bibliothèque en Kotlin. Si votre code était en Kotlin et appelait l'ancienne version de Room, la nouvelle version devra gérer ces cas. Par exemple, une modification incompatible avec la source est que, dans InvalidationTracker, vous devrez désormais déclarer onInvalidate() dans Observer pour avoir un paramètre de type Set et non de type MutableSet.

  • Ajout d'API pour fournir des noms de tableaux de clés et de valeurs afin d'éviter toute ambiguïté dans @MapInfo (Icc4b5)
  • Correction d'un problème de compatibilité des sources pour autoriser à nouveau @Ignore dans les getters de propriété. (Ifc2fb)

Correction de bugs

  • Duplique l'algorithme heuristique de résolution des colonnes. Room va désormais tenter de résoudre les colonnes ambiguës dans une requête en multimap. Cela permet aux JOIN ayant des tableaux aux noms identiques d'être correctement mappés à un objet de données de résultat. (I4b444, b/201306012, b/212279118)

Version 2.5.0-alpha01

23 février 2022

Publication d'androidx.room:room-*:2.5.0-alpha01. Liste des commits de la version 2.5.0-alpha01.

Modifications apportées à l'API

  • Correction d'un problème où @IntDef de Room n'était pas utilisé dans les sources Kotlin. (I75f41, b/217951311)
  • Correction d'un problème de compatibilité des sources pour autoriser à nouveau @Query dans les getters de propriété. (I0a09b)
  • Conversion de room-common de Java vers Kotlin. (I69c48, b/206858235)

    Remarque : Vous pouvez rencontrer des problèmes d'incompatibilité des sources, car certaines propriétés ont été déplacées vers des objets compagnons lors de la conversion de la bibliothèque en Kotlin. Si votre code était en Kotlin et appelait l'ancienne version de Room, il faudra apposer le suffixe ".Companion" à la nouvelle version pour accéder à ces propriétés.

  • Conversion de room-migration de Java vers Kotlin. (I2724b, b/206858622)
  • Conversion de fichiers associés à paging dans room-runtime de Java en Kotlin. (I82fc8, b/206859668)
  • Ajout d'API pour le verrouillage et l'utilisation de plusieurs processus au niveau de FrameworkSQLite*, afin de protéger les premières migrations et créations multiprocessus de bases de données. (Ied267, b/193182592)

Correction de bugs

  • Ajout de la prise en charge des propriétés internes dans les sources Kotlin. Il s'agit d'un léger changement de comportement dans Room, où le nom source des fonctions sera utilisé pour les associer à des propriétés en tant que getters/setters (auparavant, Room utilisait le nom JVM de la fonction, qui est différent pour les fonctions/propriétés internes). Si vous utilisez des annotations @JvmName personnalisées pour associer des getters/setters à des propriétés privées, veuillez vérifier le code généré après la mise à jour. (If6531, b/205289020).

Version 2.4.3

Version 2.4.3

27 juillet 2022

Publication d'androidx.room:room-*:2.4.3. Liste des commits de la version 2.4.3

Correction de bugs

  • Correction d'un problème qui empêchait Room de reconnaître les fonctions de suspension dans Kotlin 1.7. (b/236612358)

Version 2.4.2

Version 2.4.2

23 février 2022

Publication d'androidx.room:room-*:2.4.2. Liste des commits de la version 2.4.2

Correction de bugs

  • Résolution d'un problème de génération de code pour une fonction de suspension @Transaction de DAO avec un corps qui génère une méthode d'interface par défaut en raison d'une compilation avec -Xjvm-default=all ou équivalent. (Ia4ce5)
  • Correction d'un bug dans lequel Room génère du code pour une méthode de requête de type renvoyé Array<ByteArray>. (If086e, b/213789489)

Version 2.4.1

Version 2.4.1

12 janvier 2022

Publication d'androidx.room:room-*:2.4.1. Liste des commits de la version 2.4.1

Correction de bugs

  • Ajout de la prise en charge des propriétés internes dans les sources Kotlin. Il s'agit d'un léger changement de comportement dans Room, où le nom source des fonctions sera utilisé pour les associer à des propriétés en tant que getters/setters (auparavant, Room utilisait le nom JVM de la fonction, qui est différent pour les fonctions/propriétés internes). Si vous utilisez des annotations @JvmName personnalisées pour associer des getters/setters à des propriétés privées, veuillez vérifier le code généré après la mise à jour. (If6531, b/205289020).

Version 2.4.0

Version 2.4.0

15 décembre 2021

Publication d'androidx.room:room-*:2.4.0. Liste des commits de la version 2.4.0.

Changements importants depuis la version 2.3.0

  • Migrations automatiques : Room propose désormais une API permettant de générer automatiquement des migrations tant que les schémas sont exportés. Pour indiquer à Room qu'une migration automatique doit être générée, vous pouvez utiliser une nouvelle propriété @Database#autoMigrations pour déclarer les versions vers et depuis la migration automatique. Lorsque Room a besoin d'informations supplémentaires concernant le changement de nom ou de suppression de tableaux et de colonnes, l'annotation @AutoMigration peut déclarer une classe de spécification contenant ces entrées. Consultez la documentation @AutoMigration pour en savoir plus.
  • Injection de dépendances dans les migrations automatiques : @ProvidedAutoMigrationSpec est une nouvelle API permettant de déclarer qu'une AutoMigrationSpec sera fournie au moment de l'exécution via RoomDatabase.Builder#addAutoMigrationSpec(). Cela permet à un framework d'injection de dépendances de fournir ces spécifications lorsqu'elles nécessitent des dépendances complexes.
  • Prise en charge de l'assistant de test de migration pour les migrations automatiques : le MigrationTestHelper de Room a été mis à jour pour prendre en charge les migrations automatiques en fournissant une nouvelle API constructeur qui reçoit la classe de la base de données testée. Cela permet à l'assistant d'ajouter automatiquement et uniformément les migrations automatiques pendant runMigrationsAndValidate.
  • Assistance pour Room-Paging : androidx.room:room-paging est disponible et compatible avec Paging 3.0 en natif pour les requêtes de Room renvoyant androidx.paging.PagingSource.
  • Méthodes de requête associées : Room est désormais compatible avec les méthodes @Dao de types renvoyés en multimap, ce qui est utile pour les instructions JOIN. Les types en multimaps compatibles sont Map, SparseArray, LongSparseArray, ainsi qu'ImmutableMap, ImmutableSetMultimap et ImmutableListMultimap de Guava.

Version 2.4.0-rc01

1er décembre 2021

Publication d'androidx.room:room-*:2.4.0-rc01. Liste des commits de la version 2.4.0-rc01

Nouvelles fonctionnalités

  • Mettez à jour la dépendance de Room vers la version 1.6.0-1.0.1 sur KSP pour prendre en charge Kotlin 1.6

Version 2.4.0-beta02

17 novembre 2021

Publication d'androidx.room:room-*:2.4.0-beta02. Liste des commits de la version 2.4.0-beta02

Nouvelles fonctionnalités

  • Ajout de la prise en charge de SparseArray et de LongSparseArray dans @MapInfo. (Ic91a2b/138910317)

Correction de bugs

  • Ajout d'un nouvel analyseur de TypeConverter qui prend en compte les informations relatives à la possibilité de valeur nulle dans les types. Étant donné que ces informations ne sont disponibles que dans KSP, elles sont activées par défaut uniquement dans KSP. En cas de problème, vous pouvez les désactiver en transmettant room.useNullAwareTypeAnalysis=false au processeur d'annotations. Si cela se produit, veuillez signaler un bug, car cet indicateur sera supprimé. Avec ce nouvel analyseur de TypeConverter, il est recommandé de ne fournir que des types de TypeConverters non nuls, car le nouvel analyseur peut les encapsuler grâce à une vérification des valeurs nulles. Notez que cela n'a aucun impact pour les utilisateurs de KAPT ou de Java, car les processeurs d'annotation (contrairement à KSP) n'ont pas d'informations de valeur nulle dans les types. (Ia88f9, b/193437407)
  • Correction d'un bug qui provoquait l'échec de la compilation de Room avec une erreur SQL lorsqu'une entité FTS déclarait utiliser le jeton ICU. (I00db9, b/201753224)
  • Résolution d'un problème lors des migrations automatiques concernant une nouvelle colonne ajoutée à une entité intégrée entre les versions. (I5fcb1b/193798291)
  • Correction d'un problème concernant les types renvoyés des méthodes de requêtes associées dans les requêtes LEFT JOIN. Avec ces modifications, dans le cas d'un mappage de type un à plusieurs, la collection renvoyée pour une clé n'inclura pas l'objet de valeur non valide s'il ne se trouve pas dans le curseur. Si aucune valeur valide n'est trouvée, alors une clé est mappée à une collection vide. (Id5552b/201946438)
  • Correction d'un problème lié à la migration automatique et dans lequel les mots-clés SQLite qui ne parvenaient pas à être échappés dans les noms de colonnes. (Idbed4b/197133152)

Version 2.4.0-beta01

13 octobre 2021

Publication d'androidx.room:room-*:2.4.0-beta01. Liste des commits de la version 2.4.0-beta01

Correction de bugs

  • Correction d'un problème concernant les migrations automatiques qui n'ajoutaient pas de nouvelles colonnes lorsqu'une autre table de la même migration comportait également une nouvelle colonne du même nom. (Ia5db5, b/200818663)
  • L'implémentation de PagingSource générée par la room-paging utilise désormais le queryExecutor transmis via RoomDatabase.Builder. Il peut donc être remplacé, au lieu de remplacer Dispatchers.IO, comme c'était le cas auparavant. (Iae259)

Version 2.4.0-alpha05

29 septembre 2021

Publication d'androidx.room:room-*:2.4.0-alpha05. Liste des commits de la version 2.4.0-alpha05

Nouvelles fonctionnalités

Modifications apportées à l'API

  • Ajout d'une nouvelle propriété à l'annotation TypeConverters pour permettre aux développeurs de désactiver les convertisseurs Enum et UUID intégrés. Par défaut, ces convertisseurs sont activés, mais vous pouvez les désactiver pour un certain champ d'application ou pour l'ensemble de la base de données. Pour en savoir plus, consultez la documentation sur TypeConverters. (36ae9e, b/195413406)

  • Prise en charge des clés/valeurs non-POJO pour les types renvoyés en multimap dans les DAO via l'annotation @MapInfo. (I4d704)

@MapInfo est requis lorsque la colonne clé ou valeur de la map provient d'une seule colonne. Voici un exemple :

@MapInfo(valueColumn = "songCount")
@Query("""
       SELECT *, COUNT(mSongId) as songCount
       FROM Artist JOIN Song ON Artist.artistName = Song.artist
       GROUP BY artistName
       """)
fun getArtistAndSongCounts(): Map<Artist, Integer>
  • Déclarer room-paging comme artefact obligatoire lorsque Paging3 est utilisé avec Room. (Ieaffe)

Correction de bugs

  • Correction d'un problème qui empêchait de classer correctement les résultats de requêtes en multimap lorsque la requête contenait une clause ORDER BY d'une colonne de la clé de la map. (I6b887)

Contribution externe

  • Ajout d'une API pour spécifier l'ordre de l'index dans @Index. Merci à Nikita Zhelonkin. (I033fc)

Version 2.4.0-alpha04

21 juillet 2021

Publication d'androidx.room:room-*:2.4.0-alpha04. Liste des commits de la version 2.4.0-alpha04

Nouvelles fonctionnalités

  • Room est désormais compatible avec les méthodes @Dao de types renvoyés en multimap, ce qui est utile pour les instructions JOIN. Les types de multimap pris en charge sont Map, ainsi que ImmutableMap, ImmutableSetMultimap et ImmutableListMultimap de Guava.

    Voici des exemples de requêtes en multimap :

    Map des relations un à un

    @Query("SELECT * FROM Song JOIN Artist ON Song.artistId = Artist.artistId")
    fun getSongAndArtist(): Map<Song, Artist>
    

    Map des relations un à plusieurs (multimap standard)

    @Query("SELECT * FROM Artist JOIN Album ON Artist.id = Album.artistId")
    fun getArtistAndAlbums(): Map<Artist, List<Album>>
    

    Le résultat en multimap peut également être encapsulé dans les types renvoyés asynchrones compatibles, tels que LiveData, Observable de Rx ou les coroutines Flow.

Room-Paging

  • androidx.room:room-paging est disponible et compatible avec Paging 3.0 en natif pour les requêtes de Room renvoyant androidx.paging.PagingSource.

    @Dao
    interface UserDao {
      @Query("SELECT * FROM users ORDER BY id ASC")
      fun loadUsers(): PagingSource<Int, User>
    }
    
  • Cet artefact remplace l'implémentation androidx.paging.PagingSource générée par Room par une implémentation basée sur les API Paging 3.0. La nouvelle implémentation de PagingSource analyse les clés différemment. Toute clé fournie manuellement à PagingSource de Room doit donc tenir compte de ce changement de comportement, y compris l'initialKey transmise via le constructeur de Pager. Les pages commenceront à se charger à partir de Key, Key étant le premier élément chargé. Cela diffère du comportement existant, où LoadParams.Refresh.Key est traité comme la position de défilement de l'utilisateur et où les éléments sont chargés avant et après la clé.

  • L'artefact est facultatif et si vous choisissez de ne pas l'activer, alors vous reviendrez à la prise en charge existante de Paging 3.0, introduite par Room 2.3. Toutefois, cet artefact sera obligatoire dans la prochaine version pour les utilisateurs de Room avec Paging 3.0. Pour l'activer, ajoutez le nouvel artefact room-paging à votre chemin de classe. Si vous utilisez Gradle, vous pouvez ajouter l'extrait de code suivant à votre build.gradle :

    dependency {
      implementation("androidx.room:room-paging:2.4.0-alpha04")
    }
    

Correction de bugs

  • Correction d'un problème dans les migrations automatiques lors du traitement des violations des clés étrangères. (b/190113935)

Version 2.4.0-alpha03

16 juin 2021

Publication d'androidx.room:room-*:2.4.0-alpha03. Liste des commits de la version 2.4.0-alpha03

Modifications apportées à l'API

  • Mise à jour du MigrationTestHelper de Room pour prendre en charge les migrations automatiques en fournissant une nouvelle API constructeur qui reçoit la classe de la base de données testée. Cela permet à l'assistant d'ajouter automatiquement et uniformément les migrations automatiques pendant runMigrationsAndValidate.

Correction de bugs

  • Correction d'un problème lié à la bibliothèque native SQLite de Room pour prendre en charge les puces Apple M1. (b/174695268

  • Correction d'un problème qui empêchait Room de générer des erreurs lorsque le type renvoyé d'une fonction @Transaction était un flux. (I56ddd, b/190075899)

  • Correction d'un problème lié aux index des migrations automatiques. b/177673291

Mises à jour des dépendances

  • La compatibilité de KSP avec Room dépend désormais de KSP 1.5.10-1.0.0-beta01. (1ecb11, b/160322705)

Version 2.4.0-alpha02

5 mai 2021

Publication d'androidx.room:room-*:2.4.0-alpha02. Liste des commits de la version 2.4.0-alpha02

Modifications apportées à l'API

  • @ProvidedAutoMigrationSpec est une nouvelle API permettant de déclarer qu'une AutoMigrationSpec sera fournie au moment de l'exécution via RoomDatabase.Builder#addAutoMigrationSpec(). Cela permet à un framework d'injection de dépendances de fournir ces spécifications lorsqu'elles nécessitent des dépendances complexes.

Correction de bugs

  • Correction d'un problème lié aux migrations automatiques dans lequel les @DatabaseViews ne sont pas recréées correctement.

Contribution externe

  • Correction d'un problème dans le JournalMode.TRUNCATE de Room où le rappel à InvalidationTracker se faisait parfois de manière incorrecte, trop tard, ou pas du tout. Merci à Uli Bubenheimer | bubenheimer@users.noreply.github.com. (b/154040286)

Version 2.4.0-alpha01

21 avril 2021

Publication d'androidx.room:room-*:2.4.0-alpha01. Liste des commits de la version 2.4.0-alpha01

Nouvelles fonctionnalités

  • Migrations automatiques : Room propose désormais une API permettant de générer automatiquement des migrations tant que les schémas sont exportés. Pour indiquer à Room qu'une migration automatique doit être générée, vous pouvez utiliser une nouvelle propriété @Database#autoMigrations pour déclarer les versions vers et depuis la migration automatique. Lorsque Room a besoin d'informations supplémentaires concernant le changement de nom ou de suppression de tableaux et de colonnes, l'annotation @AutoMigration peut déclarer une classe de spécification contenant ces entrées. Consultez la documentation @AutoMigration pour en savoir plus.

Correction de bugs

  • Correction d'un problème de validation incorrecte de defaultValue avec des parenthèses supplémentaires par le schéma de validation de Room. b/182284899

Version 2.3.0

Version 2.3.0

21 avril 2021

Publication d'androidx.room:room-*:2.3.0. Liste des commits de la version 2.3.0

Changements importants depuis la version 2.2.0

  • Prise en charge intégrée de l'énumération : si aucun convertisseur n'est fourni, Room utilise désormais par défaut un convertisseur énumération vers chaîne et inversement. Si un convertisseur de type existe déjà pour une énumération, Room l'utilisera en priorité.
  • Rappel de requête : Room propose désormais une API générale de callback, RoomDatabase.QueryCallback, pour les requêtes sur le point de s'exécuter, ce qui peut être utile pour la journalisation des versions de débogage. Le rappel peut être défini via RoomDatabase.Builder#setQueryCallback().
  • Améliorations pré-empaquetées : Room dispose désormais d'API permettant de créer une base de données à l'aide d'une base de données pré-empaquetée dans un flux d'entrée. Cela permet, par exemple, d'utiliser une base de données pré-empaquetée compressée.
  • Convertisseurs de types intégrés : Room dispose désormais d'API permettant de fournir des instances de convertisseurs de types afin que l'application puisse contrôler leur initialisation. Pour marquer un convertisseur de types qui sera fourni à Room, utilisez la nouvelle annotation @ProvidedTypeConverter.
  • Compatibilité RxJava3 : Room est désormais compatible avec les types RxJava3. Comme pour RxJava2, vous pouvez déclarer des méthodes DAO dont le type renvoyé est "Flowable", "Single", "Maybe" et "Completable". De plus, un nouvel artefact androidx.room:room-rxjava3 est disponible pour prendre en charge RxJava3.
  • Compatibilité avec Paging 3.0 : Room peut désormais générer des implémentations pour les méthodes @Query annotées dont le type renvoyé est androidx.paging.PagingSource.

Version 2.3.0-rc01

24 mars 2021

Publication d'androidx.room:room-*:2.3.0-rc01. Liste des commits de la version 2.3.0-rc01

Correction de bugs

  • Correction d'un problème empêchant les requêtes de flux de coroutines créées par Room d'être utilisées dans un bloc de suspension withTransaction. (I797bf)

Version 2.3.0-beta03

10 mars 2021

Publication d'androidx.room:room-*:2.3.0-beta03. Liste des commits de la version 2.3.0-beta03

Nouvelles fonctionnalités

  • Ajout de la prise en charge de la compilation incrémentielle pour KSP. (I031c1, b/176453350)

Correction de bugs

  • Correction d'un bug qui provoquait un ANR lors de la création de PagingSource sur le thread principal. (I42b74, b/181221318)
  • Correction de la visibilité de @ExperimentalRoomApi, qui est désormais publique, et non privée. (b/181356119)

Contribution externe

  • Autoriser Room à accepter un type renvoyé POJO dans une méthode DAO annotée avec @Query lorsqu'elle est également annotée avec @SkipQueryVerification. Room fera de son mieux pour convertir le résultat de la requête en type renvoyé POJO de la même manière que pour une méthode DAO annotée avec @RawQuery. Merci à "Markus Riegel | hey@marcorei.com". (I45acb)

Version 2.3.0-beta02

18 février 2021

Publication d'androidx.room:room-*:2.3.0-beta02. Liste des commits de la version 2.3.0-beta02

Nouvelles fonctionnalités

  • Room est désormais compatible, à titre expérimental, avec le traitement des symboles Kotlin (KSP).

    KSP remplace KAPT pour exécuter les processeurs d'annotations de manière native sur le compilateur Kotlin, ce qui réduit considérablement les durées de compilation.

    Pour utiliser Room avec KSP, vous pouvez appliquer le plug-in KSP de Gradle et remplacer la configuration kapt dans votre fichier de compilation par ksp. Par exemple, au lieu de kapt 'androidx.room:room-compiler:2.3.0-beta02', utilisez ksp 'androidx.room:room-compiler:2.3.0-beta02'. Consultez la documentation KSP pour en savoir plus.

    Notez que KSP est expérimental. Il est donc recommandé de continuer à utiliser KAPT pour le code de production. La réduction des durées de compilation ne s'applique que si aucun autre processeur n'utilise KAPT. Consultez b/160322705 pour en savoir plus sur les problèmes connus.

Version 2.3.0-beta01

27 janvier 2021

Publication d'androidx.room:room-*:2.3.0-beta01. Liste des commits de la version 2.3.0-beta01

Nouvelles fonctionnalités

  • Bases de données fermables automatiquement : Room peut désormais fermer les bases de données qui ne sont pas consultées après un certain temps. Il s'agit d'une fonctionnalité expérimentale qui peut être activée en appelant RoomDatabase.Builder#setAutoCloseTimeout(). Cette fonctionnalité est utile pour les applications comportant plusieurs bases de données.

Correction de bugs

  • Correction d'un problème, dans lequel les méthodes DAO comportant plusieurs méthodes @Update ou @Delete avec différentes stratégies de conflit généraient du code avec une seule de ces stratégies, en ignorant celle qui était définie. (/I0b90d, b/176138543)

Version 2.3.0-alpha04

16 décembre 2020

Publication d'androidx.room:room-*:2.3.0-alpha04. Liste des commits de la version 2.3.0-alpha04

Nouvelles fonctionnalités

  • Room propose désormais une API générale de callback RoomDatabase.QueryCallback, pour les requêtes sur le point de s'exécuter, ce qui peut être utile pour la journalisation des versions de débogage. Le rappel peut être défini via RoomDatabase.Builder#setQueryCallback(). (Iaa513, b/174478034, b/74877608)
  • Si aucun convertisseur n'est fourni, Room utilise désormais par défaut un convertisseur énumération vers chaîne et inversement. Si un convertisseur de type existe déjà pour une énumération, Room l'utilisera en priorité. (b/73132006)

Problème connu

  • Si un convertisseur de type unilatéral pour la lecture existe déjà pour l'énumération, il est possible que Room utilise accidentellement le convertisseur intégré de type chaîne vers énumération, ce qui n'est pas forcément souhaitable. Il s'agit d'un problème connu qui peut être résolu en créant un convertisseur bidirectionnel. Voir : b/175707691

Correction de bugs

  • Correction d'un problème dans lequel Room désactivait par erreur le traitement des annotations incrémentielles dans les dernières versions de JDK. (b/171387388)
  • Correction d'un problème qui empêchait Room de trouver la classe générée lorsque plusieurs chargeurs de classes étaient utilisés. Merci d'avoir corrigé le problème "Serendipity | 892449346@qq.com" ! (b/170141113)
  • Correction d'un problème dans lequel Room générait un code incorrect lorsqu'un @Dao de Kotlin avait une classe de base dont les génériques étaient primitifs dans la JVM. (b/160258066)

Contribution externe

  • Room utilisera désormais beginTransactionNonExclusive par défaut si le mode WAL est activé et si le niveau d'API est de 16 ou plus. Merci à "Ahmed I. Khalil | ahmedibrahimkhali@gmail.com" ! (b/126258791)

Version 2.3.0-alpha03

14 octobre 2020

Publication d'androidx.room:room-*:2.3.0-alpha03. Liste des commits de la version 2.3.0-alpha03

Nouvelles fonctionnalités

  • Room dispose désormais d'API permettant de fournir des instances de convertisseurs de types afin que l'application puisse contrôler leur initialisation. Pour marquer un convertisseur de types qui sera fourni à Room, utilisez la nouvelle annotation @ProvidedTypeConverter. Merci à "mzgreen yairobbe@gmail.com". (Ie4fa5, b/121067210)

  • Room dispose désormais d'API permettant de créer une base de données à l'aide d'une base de données pré-empaquetée dans un flux d'entrée. Cela permet, par exemple, d'utiliser une base de données pré-empaquetée compressée. Merci à "Ahmed El-Helw ahmedre@gmail.com". (3e6792, b/146911060)

Modifications apportées à l'API

  • Ajout d'une cible manquante à l'annotation @ForeignKey empêchant son utilisation en dehors de l'annotation @Entity. (Iced1e)

  • Le champ mCallbacks dans RoomDatabase.java est maintenant masqué. (d576cb, b/76109329)

Correction de bugs

  • Mise à jour de la documentation relative aux TypeConverters afin de préciser que ces derniers ne peuvent être utilisés que pour convertir des colonnes/champs, et non des lignes. (I07c56, b/77307836)

  • Mise à jour vers le DaoProcessor pour corriger l'erreur du compilateur sur le DAO avec un super-type générique incluant des "primitives" Kotlin. (Ice6bb, b/160258066)

  • Mise à jour de la documentation relative aux méthodes des observateurs pour clarifier le threading. (Ifd1d9, b/153948821)

  • Correction d'un problème lié à la mauvaise validation des tableaux FTS par Room, pour ceux ayant déclaré leur colonne "id de ligne" (d62ebc, b/145858914)

Contributions externes

  • Résoudre les problèmes liés aux paramètres régionaux en majuscules/minuscules pour le Turc. (5746e3), b/68159494

  • Remplace la ConcurrentHashMap dans RoomDatabase par Collections.synchronizedMap() pour éviter les problèmes sur Android Lollipop. (d1cfc7, b/162431855)

  • Ajout d'un rappel onOpenPrepackagedDatabase pour quand une base de données pré-empaquetée est copiée. (I1ba74, b/148934423)

Version 2.3.0-alpha02

22 juillet 2020

Publication d'androidx.room:room-*:2.3.0-alpha02. Liste des commits de la version 2.3.0-alpha02

Nouvelles fonctionnalités

  • Compatibilité RxJava3 : Room est désormais compatible avec les types RxJava3. Comme pour RxJava2, vous pouvez déclarer des méthodes DAO dont le type renvoyé est "Flowable", "Single", "Maybe" et "Completable". De plus, un nouvel artefact androidx.room:room-rxjava3 est disponible pour prendre en charge RxJava3. (b/152427884)

Modifications apportées à l'API

  • Vous pouvez maintenant déclarer une classe @TypeConverter dans la classe d'objets Kotlin. (b/151110764)
  • L'option de traitement des annotations incrémentielles de Room est désormais activée par défaut. (b/112110217)

Version 2.3.0-alpha01

10 juin 2020

Publication d'androidx.room:room-*:2.3.0-alpha01. Liste des commits de la version 2.3.0-alpha01

Nouvelles fonctionnalités

  • Compatibilité avec Paging 3.0 : Room peut désormais générer des implémentations pour les méthodes @Query annotées dont le type renvoyé est androidx.paging.PagingSource.

    @Dao
    interface UserDao {
      @Query("SELECT * FROM users ORDER BY id ASC")
      fun pagingSource(): PagingSource<Int, User>
    }
    

Modifications apportées à l'API

  • @RewriteQueriesToDropUnusedColumns est une nouvelle annotation pratique qui permet à Room de réécrire la projection "*" dans une requête de sorte à supprimer les colonnes inutilisées dans le résultat.
  • L'option de traitement room.expandProjection est désormais obsolète. Utilisez @RewriteQueriesToDropUnusedColumns pour remplacer les requêtes d'optimisation de Room avec des projections en étoiles. Notez que @RewriteQueriesToDropUnusedColumns ne remplace pas la solution de conflit des colonnes room.expandProjection concernant les types renvoyés contenant des champs @Embedded.

Correction de bugs

  • Correction d'un bug qui empêchait Room de détecter correctement la version JDK utilisée pour activer le processeur d'annotations incrémentielles. Merci à Blaz Solar (me@blaz.solar). (b/155215201)
  • Room intègre désormais sa dépendance ANTLR au processeur d'annotations pour éviter les conflits de versions avec d'autres processeurs qui utilisent également ANTLR. (b/150106190)

Version 2.2.6

Version 2.2.6

16 décembre 2020

Publication d'androidx.room:room-*:2.2.6. Liste des commits de la version 2.2.6

Correction de bugs

  • Correction d'un problème dans lequel Room désactivait par erreur le traitement des annotations incrémentielles dans les dernières versions de JDK. (b/171387388)

Version 2.2.5

Version 2.2.5

18 mars 2020

Publication d'androidx.room:room-*:2.2.5. Liste des commits de la version 2.2.5

Correction de bugs

  • Déclarer MultiInstanceInvalidationService directBootAware. Merci à "Mygod contact-git@mygod.be". (b/148240967)
  • Correction d'un bug qui provoquait un plantage lorsque l'invalidation de plusieurs instances était activée et que la base de données contenait une entité FTS. (b/148969394)
  • Correction d'un problème lors du chargement des bibliothèques natives SQLite dans le processeur d'annotations de Room, qui entraînait le plantage du compilateur en raison de compilations parallèles. (b/146217083)

Version 2.2.4

Version 2.2.4

19 février 2020

Publication d'androidx.room:room-common:2.2.4 androidx.room:room-compiler:2.2.4, androidx.room:room-guava:2.2.4, androidx.room:room-ktx:2.2.4, androidx.room:room-migration:2.2.4, androidx.room:room-runtime:2.2.4, androidx.room:room-rxjava2:2.2.4 et androidx.room:room-testing:2.2.4. Liste des commits de la version 2.2.4

Correction de bugs

  • Correction d'un problème de suspension des transactions qui s'interbloquaient si la coroutine était annulée rapidement avant le début de la transaction. (b/148181325)
  • Correction d'un problème lié à la mauvaise utilisation de @Generated lors de la compilation avec JDK 9. (b/146538330)
  • Correction d'un problème dans lequel Room générait un code incorrect lorsqu'une interface DAO en Kotlin avait une fonction concrète. (b/146825845)

Version 2.2.3

Version 2.2.3

18 décembre 2019

Publication d'androidx.room:room-*:2.2.3. Liste des commits de la version 2.2.3

Correction de bugs

  • Correction d'un bug qui empêchait Room de valider une base de données n'ayant pas fait l'objet d'une migration et contenant un ancien hachage avec des index dans son schéma. (b/139306173)

Version 2.2.2

Version 2.2.2

20 novembre 2019

Publication d'androidx.room:room-*:2.2.2. Liste des commits de la version 2.2.2

Correction de bugs

  • Correction d'un bug qui provoquait le renvoi d'éléments associés nuls dans Room lors de la collecte d'une relation de type un à un avec plus de 999 lignes. (b/143105450)

Version 2.2.1

Version 2.2.1

23 octobre 2019

Publication d'androidx.room:room-*:2.2.1. Liste des commits de la version 2.2.1

Correction de bugs

  • Correction d'un bug qui empêchait Room de signaler correctement une CURSOR_MISMATCH lorsque l'option de compilation expandProjection était activée. (b/140759491)
  • Ajout d'un mécanisme de nouvelle tentative pour gérer la bibliothèque native manquante utilisée pour vérifier les requêtes au moment de la compilation.

Version 2.2.0

Version 2.2.0

9 octobre 2019

Publication d'androidx.room:room-*:2.2.0. Liste des commits de la version 2.2.0

Changements importants depuis la version 2.1.0

  • Base de données pré-empaquetées : deux nouvelles API sont désormais disponibles dans RoomDatabase.Builder pour créer un objet RoomDatabase à partir d'un fichier de base de données déjà renseigné. createFromAsset() s'utilise lorsque le fichier de base de données déjà renseigné se trouve dans le dossier des éléments de l'APK, tandis que createFromFile() s'utilise lorsque le fichier se trouve à un emplacement arbitraire. Utiliser ces API modifie le comportement des migrations destructives de sorte que, lors d'une migration de remplacement, Room essaye de copier à nouveau la base de données renseignée, si disponible. Sinon, Room abandonnera et créera à nouveau tous les tableaux. b/62185732
  • Valeurs par défaut du schéma : @ColumnInfo dispose désormais d'une nouvelle propriété defaultValue qui peut être utilisée pour spécifier la valeur par défaut d'une colonne. Les valeurs par défaut font partie d'un schéma de base de données et sont validées lors des migrations, si elles sont spécifiées. b/64088772
  • Relations plusieurs à plusieurs : @Relation a maintenant une nouvelle propriété associateBy, qui accepte une nouvelle annotation @Junction, utilisée pour déclarer une relation devant être satisfaite via un tableau de jonction (également appelé tableau de jointure). b/69201917
  • Relations un à un : la restriction dans les champs POJO annotés avec @Relation pour être de type List ou Set a été levée, ce qui permet de représenter les relations à valeur unique. b/62905145
  • Entité cible : les annotations DAO @Insert, @Update et @Delete ont désormais une nouvelle propriété targetEntity, qui permet de spécifier le tableau cible concerné par la méthode DAO. Ainsi, les paramètres de ces méthodes DAO sont des POJO arbitraires qui seront interprétés comme des entités partielles. En pratique, cela permet les insertions, les suppressions et les mises à jour partielles. b/127549506
  • Flux de coroutines : @Query les méthodes DAO peuvent désormais être de type renvoyé Flow<T>. Le flux renvoyé renvoie un nouvel ensemble de valeurs si les tableaux d'observation dans la requête sont invalidés. Déclarer une fonction DAO avec un type renvoyé Channel<T> est une erreur, Room vous encourage plutôt à utiliser Flow et les fonctions similaires pour convertir le flux (Flow) en un canal (Channel). b/130428884
  • Processeur d'annotations incrémentielles Gradle : Room est désormais un processeur d'annotations permettant d'isoler Gradle et l'incrémentation peut être activée via l'option de processeur room.incremental. Pour en savoir plus, consultez la section Options du compilateur de Room. Si vous rencontrez des problèmes, veuillez signaler un bug ici. Nous prévoyons d'activer l'incrémentation par défaut dans une future version stable. b/112110217
  • Projections étendues : une nouvelle option de compilateur expérimentale room.expandProjection a été ajoutée, ce qui permet à Room de réécrire une requête avec une projection en étoile pour n'avoir que les colonnes dans le type renvoyé POJO. Par exemple, pour une méthode DAO avec @Query("SELECT * FROM Song") qui renvoie un POJO nommé SongIdAndTitle avec seulement deux champs. Room réécrit la requête dans SELECT id, title FROM Song pour extraire l'ensemble minimal de colonnes correspondant au type renvoyé. Cela élimine essentiellement l'avertissement CURSOR_MISMATCH qui s'affiche lorsque la requête renvoie des colonnes supplémentaires qui ne correspondent à aucun champ du type POJO renvoyé.

Version 2.2.0-rc01

5 septembre 2019

Publication d'androidx.room:room:2.2.0-rc01. Les commits inclus dans cette version sont disponibles sur cette page.

Aucune modification publique depuis Room 2.2.0-beta01.

Version 2.2.0-beta01

22 août 2019

Publication d'androidx.room:room-*:2.2.0-beta01. Les commits inclus dans cette version sont disponibles sur cette page.

Correction de bugs

  • Correction d'un bug qui provoquait l'arrêt de la génération de nouvelles valeurs par une requête de flux de coroutine après un certain temps. (b/139175786)
  • Correction d'un bug qui empêchait Room d'accepter un ancien code de hachage de schéma lors de l'ouverture d'une base de données n'ayant pas fait l'objet d'une migration depuis Room 1.0, provoquant un plantage de l'exécution en raison d'un schéma non valide. (b/139306173)

Version 2.2.0-alpha02

7 août 2019

Publication d'androidx.room:room-*:2.2.0-alpha02. Les commits inclus dans cette version sont disponibles sur cette page.

Nouvelles fonctionnalités

  • Flux de coroutines : @Query les méthodes DAO peuvent désormais être de type renvoyé Flow<T>. Le flux renvoyé renvoie un nouvel ensemble de valeurs si les tableaux d'observation dans la requête sont invalidés. Déclarer une fonction DAO avec un type renvoyé Channel<T> est une erreur, Room vous encourage plutôt à utiliser Flow et les fonctions similaires pour convertir le flux (Flow) en un canal (Channel). b/130428884
  • Projections étendues : une nouvelle option de compilateur expérimentale room.expandProjection a été ajoutée, ce qui permet à Room de réécrire une requête avec une projection en étoile pour n'avoir que les colonnes dans le type renvoyé POJO. Par exemple, pour une méthode DAO avec @Query("SELECT * FROM Song") qui renvoie un POJO nommé SongIdAndTitle avec seulement deux champs. Room réécrit la requête dans SELECT id, title FROM Song pour extraire l'ensemble minimal de colonnes correspondant au type renvoyé. Cela élimine essentiellement l'avertissement CURSOR_MISMATCH qui s'affiche lorsque la requête renvoie des colonnes supplémentaires qui ne correspondent à aucun champ du type POJO renvoyé.
  • onDestructiveMigrate est une nouvelle API de callback ajoutée à RoomDatabase.Callback, utilisée lorsque Room migre destructivement une base de données. b/79962330

Correction de bugs

  • Correction d'un bug pour lequel Room générait un code incorrect lors de l'utilisation d'un setter de champ lorsque le champ était protégé. b/136194628
  • Correction d'un bug pour lequel l'InvalidationTracker envoyait un NPE dans un second processus lorsque l'invalidation de plusieurs instances était activée et que le service d'invalidation était fermé. b/137454915
  • Correction d'un bug qui empêchait Room d'identifier correctement le type renvoyé d'une fonction de suspension héritée annotée avec @RawQuery. b/137878827
  • Mise à jour du code généré pour @Relation lorsque la clé associée est de type BLOB afin d'utiliser un ByteBuffer comparable. b/137881998
  • Correction d'un bug pour lequel Room signalait des setters manquants dans les POJO utilisés en tant que paramètres d'entité partiels de @Insert, @Update et @Delete. b/138664463
  • Correction d'un bug dans lequel Room signalait des getters et setters manquants dans une colonne ignorée via @Entity lorsque la classe d'entité était utilisée dans certaines méthodes DAO. b/138238182{/2.
  • Correction d'un bug qui empêchait Room de convertir correctement les arguments de liaison nommés en arguments de position, ce qui entraînait une exception d'exécution lors de l'exécution d'une requête avec des paramètres réutilisés. b/137254857

Version 2.2.0-alpha01

10 juillet 2019

Nouvelles fonctionnalités

  • Base de données pré-empaquetées : deux nouvelles API sont désormais disponibles dans RoomDatabase.Builder pour créer un objet RoomDatabase à partir d'un fichier de base de données déjà renseigné. createFromAsset() s'utilise lorsque le fichier de base de données déjà renseigné se trouve dans le dossier des éléments de l'APK, tandis que createFromFile() s'utilise lorsque le fichier se trouve à un emplacement arbitraire. Utiliser ces API modifie le comportement des migrations destructives de sorte que, lors d'une migration de remplacement, Room essaye de copier à nouveau la base de données renseignée, si disponible. Sinon, Room abandonnera et créera à nouveau tous les tableaux. b/62185732
  • Valeurs par défaut du schéma : @ColumnInfo dispose désormais d'une nouvelle propriété defaultValue qui peut être utilisée pour spécifier la valeur par défaut d'une colonne. Les valeurs par défaut font partie d'un schéma de base de données et sont validées lors des migrations, si elles sont spécifiées. b/64088772

    Remarque : Si votre schéma de base de données contient déjà des valeurs par défaut, telles que celles ajoutées via ALTER TABLE x ADD COLUMN y INTEGER NOTNULL DEFAULT z, et que vous décidez de définir des valeurs par défaut via @ColumnInfo pour ces mêmes colonnes, vous devrez peut-être fournir une migration pour valider les valeurs par défaut non comptabilisées. Pour en savoir plus, consultez Migrations Room.

  • Relations plusieurs à plusieurs : @Relation a maintenant une nouvelle propriété associateBy, qui accepte une nouvelle annotation @Junction, utilisée pour déclarer une relation devant être satisfaite via un tableau de jonction (également appelé tableau de jointure). b/69201917
  • Relations un à un : la restriction dans les champs POJO annotés avec @Relation pour être de type List ou Set a été levée, ce qui permet de représenter les relations à valeur unique. b/62905145
  • Entité cible : les annotations DAO @Insert, @Update et @Delete ont désormais une nouvelle propriété targetEntity, qui permet de spécifier le tableau cible concerné par la méthode DAO. Ainsi, les paramètres de ces méthodes DAO sont des POJO arbitraires qui seront interprétés comme des entités partielles. En pratique, cela permet les insertions, les suppressions et les mises à jour partielles. b/127549506
  • Processeur d'annotations incrémentielles Gradle : Room est désormais un processeur d'annotations permettant d'isoler Gradle et l'incrémentation peut être activée via l'option de processeur room.incremental. Pour en savoir plus, consultez la section Options du compilateur de Room. Si vous rencontrez des problèmes, veuillez signaler un bug ici. Nous prévoyons d'activer l'incrémentation par défaut dans une future version stable. b/112110217

Correction de bugs

  • Room ne propagera plus EmptySetResultException au gestionnaire d'erreurs globales lorsque le flux Rx d'une requête aura été supprimé avant la fin de la requête. b/130257475
  • Correction d'un bug pour lequel Room affichait un message d'erreur incorrect dans lorsqu'une fonction DAO de suspension annotée avec @RawQuery n'avait pas de type renvoyé. b/134303897
  • Room ne générera plus d'adaptateurs DAO avec des types bruts. b/135747255

Version 2.1.0

Version 2.1.0

13 juin 2019

Publication de Room 2.1.0 sans aucune modification par rapport à la version 2.1.0-rc01. Les commits inclus dans cette version sont disponibles sur cette page.

Changements importants depuis la version 2.0.0

  • FTS : Room prend désormais en charge les entités contenant une table de mappage FTS3 ou FTS4. Les classes annotées avec @Entity peuvent désormais également être annotées avec @Fts3 ou @Fts4 pour déclarer une classe avec une table de recherche en texte intégral de mappage. Les options FTS pour une personnalisation plus avancée sont disponibles via les méthodes d'annotation.
  • Views : Room prend désormais en charge la déclaration d'une classe en tant que requête stockée, également appelée View à l'aide de l'annotation @DatabaseView.
  • Coroutines : les méthodes DAO peuvent désormais être des fonctions de suspension. Inclue room-ktx dans vos dépendances pour bénéficier de cette fonctionnalité. L'artefact ktx fournit également la fonction d'extension RoomDatabase.withTransaction pour effectuer des transactions de base de données dans une coroutine.
  • Valeur automatique : Room prend désormais en charge la déclaration des classes annotées AutoValue en tant qu'entités et que POJO. Les annotations Room @PrimaryKey, @ColumnInfo, @Embedded et @Relation peuvent désormais être déclarées dans les méthodes abstraites de la classe avec des annotations de valeur automatique. Notez que ces annotations doivent également être accompagnées de @CopyAnnotations pour que Room puisse les comprendre.
  • Compatibilité asynchrone supplémentaire : les méthodes DAO annotées avec @Insert, @Delete ou @Update, ainsi que @Query contenant les instructions INSERT, DELETE ou UPDATE sont désormais compatibles avec les types renvoyés Rx Completable, Single et Maybe, ainsi que les types renvoyés ListenableFuture de Guava. Elles peuvent également être suspendues.
  • enableMultiInstanceInvalidation est une nouvelle API de RoomDatabase.Builder permettant l'invalidation de plusieurs instances de "RoomDatabase" à l'aide du même fichier de base de données.
  • fallbackToDestructiveMigrationOnDowngrade est une nouvelle API de RoomDatabase.Builder permettant de recréer automatiquement la base de données en cas de retour à une version antérieure.
  • ignoredColumns est une nouvelle API de l'annotation @Entity qui permet de répertorier les champs ignorés par leur nom.
  • Désormais, Room utilisera correctement le constructeur principal de Kotlin dans les classes de données afin d'éviter de devoir déclarer les propriétés en tant que vars.

Version 2.1.0-rc01

29 mai 2019

Correction de bugs

  • Correction d'une erreur d'initialisation de Room, qui pouvait se produire en raison d'une configuration de "temp_store" déjà configurée. b/132602198
  • Correction d'un avertissement concernant l'utilisation de guillemets doubles pour les utilisateurs de SQLite version 3.27.0 et ultérieure. b/131712640
  • Correction d'un bug qui provoquait le plantage de l'InvalidationTracker lorsque plusieurs vérifications d'invalidation se produisaient en parallèle. b/133457594

Version 2.1.0-beta01

7 mai 2019

androidx.room 2.1.0-beta01 est disponible sans aucune modification par rapport à la version 2.1.0-alpha07. Les commits inclus dans cette version sont disponibles sur cette page.

Version 2.1.0-alpha07

25 avril 2019

Modifications apportées à l'API/Nouveaux comportements

  • La fonction d'extension RoomDatabase.withTransaction a été modifiée pour ne plus utiliser un bloc fonction avec un CoroutineScope comme destinataire. Cela évite d'ignorer le wrapper coroutineScope { } supplémentaire nécessaire pour exécuter simultanément des éléments dans le bloc de transactions.

Correction de bugs

  • Correction d'un bug qui empêchait Room de faire correspondre un TypeConverter pour une fonction DAO en Kotlin contenant un paramètre de type "Collection". b/122066791

Version 2.1.0-alpha06

22 mars 2019

Modifications apportées à l'API/Nouveaux comportements

  • Les requêtes de transaction asynchrones sont maintenant sérialisées de sorte que Room n'utilise pas plus d'un thread pour exécuter des transactions de base de données. RoomDatabase.Builder.setTransactionExecutor(Executor) a été ajouté pour permettre la configuration de l'exécuteur pour les transactions.
  • RoomDatabase.runInTransaction(Callable) n'encapsulera plus d'exceptions vérifiées dans RuntimeExceptions. b/128623748

Correction de bugs

  • Correction d'un bug qui empêchait l'outil de suivi d'invalidation d'observer le contenu d'un tableau si des observateurs étaient ajoutés à la fois pour le contenu du tableau et pour le contenu externe d'un tableau FTS. b/128508917
  • Mise à jour de la grammaire SQLite de Room pour qu'elle corresponde à celle de SQLite 3.24.0. b/110883668

Version 2.1.0-alpha05

13 mars 2019

Nouvelles fonctionnalités

  • La fonction d'extension RoomDatabase.withTransaction vous permet d'effectuer des transactions de base de données dans une coroutine de façon sécurisée. L'artefact room-ktx prend en charge les fonctions d'extension de Room ainsi que les coroutines.
  • Les méthodes DAO non abstraites annotées avec @Transaction peuvent désormais être des fonctions de suspension. b/120241587

Modifications apportées à l'API/Nouveaux comportements

  • L'artefact room-coroutines a été renommé room-ktx et porte le même nom que les autres artefacts Androidx.
  • beginTransaction, setTransactionSuccessful et endTransaction dans RoomDatabase ont été abandonnés au profit de runInTransaction et de la fonction d'extension room-ktx withTransaction.

Correction de bugs

  • Correction d'un bug qui provoquait la suppression des arguments de tokenisation si le jeton utilisé était SIMPLE. b/125427014
  • Correction d'un bug qui empêchait Room d'identifier correctement les fonctions de suspension dont les paramètres correspondaient à une classe interne. b/123767877
  • Correction d'un bug pour les méthodes DAO différées @Query dont les instructions INSERT, UPDATE ou DELETE préparaient la requête dans le thread principal. b/123695593
  • Correction de plusieurs bugs entraînant la génération par Room d'un code incorrect pour certaines fonctions de suspension. b/123466702 et b/123457323
  • Correction d'un bug où les anciennes utilisations de certaines méthodes n'étaient pas correctement supprimées dans le code généré. b/117602586
  • Mise à jour de la dépendance de Room à androidx.sqlite vers la version 1.0.2, qui contient des correctifs pour gérer correctement les bases de données corrompues. b/124476912

Problèmes connus

  • Room 2.1.0-alpha05 dépend de l'artefact kotlinx-metadata-jvm, qui n'est actuellement pas disponible dans Maven Central. (KT-27991). Vous pouvez résoudre cette dépendance en ajoutant maven { url "https://kotlin.bintray.com/kotlinx/" } aux dépôts de votre projet.

Version 2.1.0-alpha04

25 janvier 2019

Nouvelles fonctionnalités

  • Les méthodes DAO annotées avec @Query contenant des instructions INSERT, UPDATE ou DELETE peuvent désormais renvoyer des types asynchrones Single, Mayble, Completable et ListenableFuture. Elles peuvent également être des fonctions de suspension. b/120227284

Modifications apportées à l'API/Nouveaux comportements

  • Room génère désormais une erreur si une méthode DAO non abstraite annotée avec @Transaction renvoie un type asynchrone tel que Single, Mayble, Completable, LiveData ou ListenableFuture. Étant donné que les transactions sont cloisonnées dans les threads, il est actuellement impossible pour Room de démarrer et d'arrêter une transaction autour d'une fonction qui pourrait effectuer des requêtes dans différents threads. b/120109336
  • OnConflictStrategy.FAIL et OnConflictStrategy.ROLLBACK ont été abandonnés (@Deprecated), car ils ne se comportent pas comme prévu avec les liaisons SQLite actuelles d'Android. b/117266738

Correction de bugs

  • Correction d'un bug qui empêchait Room d'utiliser correctement le TypeConverter d'un type renvoyé si la méthode DAO était une fonction de suspension. b/122988159
  • Correction d'un bug qui empêchait Room d'identifier correctement les fonctions de suspension héritées comme étant des fonctions sans suspension. b/122902595
  • Correction d'un bug pour lequel Room générait un code incorrect dans Room lorsqu'un champ @Embedded se trouvait dans une classe parente et était utilisé dans plusieurs classes enfants. b/121099048
  • Correction d'un problème pour lequel la base de données s'interbloquait lors de l'appel de fonction de suspension DAO entre une beginTransaction() et une endTransaction(). b/120854786

Version 2.1.0-alpha03

4 décembre 2018

Modifications apportées à l'API

  • Le FTS tokenizer dans @Fts3/@Fts4 utilise désormais une chaîne au lieu d'une énumération. Cela permet à Room d'utiliser des générateurs de jetons personnalisés. Les générateurs de jetons intégrés sont toujours définis dans FtsOptions en tant que constantes de chaîne. b/119234881

Nouvelles fonctionnalités

  • Coroutines : les méthodes DAO peuvent désormais être des fonctions de suspension. Publication d'un nouvel artefact, room-coroutines, pour permettre la suspension de fonctions dans Room. b/69474692
  • Les méthodes DAO annotées avec @Insert, @Delete ou @Update prennent désormais en charge ListenableFuture comme type renvoyé. b/119418331

Correction de bugs

  • Correction d'un bug à cause duquel Room tentait par erreur de trouver un constructeur avec des colonnes dans la propriété ignoredColumns de @Entity. b/119830714
  • Correction d'un bug qui empêchait Room de marquer les paramètres de méthode DAO comme finaux dans l'implémentation générée. b/118015483
  • Correction d'un bug provoquant le plantage du processeur de Room lors du signalement d'une erreur sur une requête contenant des symboles spéciaux. b/119520136
  • Correction d'un bug provoquant le refus par Room de plusieurs implémentations de Collection en tant qu'arguments d'une expression IN. b/119884035
  • Correction d'un bug provoquant la récupération de mémoire des "LiveData" renvoyées par Room lorsqu'elles étaient indéfiniment observées, empêchant ainsi l'émission de nouvelles données. b/74477406
  • Mise à jour du verrouillage de fin de RoomDatabase pour réduire les conflits de verrouillage. b/117900450

Version 2.1.0-alpha02

30 octobre 2018

Nouvelles fonctionnalités

  • Ajout de la prise en charge du référencement de @DatabaseView dans une @Relation. b/117680932

Correction de bugs

  • Correction d'un bug provoquant l'exécution d'opérations d'E/S de disque par Room dans le thread principal lors de l'abonnement ou de la suppression à partir d'un type renvoyé Rx. b/117201279
  • Correction d'un bug qui empêchait Room de trouver un convertisseur de type approprié pour un champ dans une classe d'entité Kotlin. b/111404868
  • Correction d'un bug entraînant la génération par Room d'un code incorrect pour une implémentation d'interface DAO contenant une méthode par défaut Kotlin sans argument. b/117527454
  • Mise à jour de l'analyseur grammatical SQLite de Room pour corriger un problème de performances pouvant entraîner de longs délais de compilation. b/117401230

Version 2.1.0-alpha01

8 octobre 2018

Nouvelles fonctionnalités

  • FTS : Room prend désormais en charge les entités contenant une table de mappage FTS3 ou FTS4. Les classes annotées avec @Entity peuvent désormais également être annotées avec @Fts3 ou @Fts4 pour déclarer une classe avec une table de recherche en texte intégral de mappage. Les options FTS pour une personnalisation plus avancée sont disponibles via les méthodes d'annotation. b/62356416
  • Views : Room prend désormais en charge la déclaration d'une classe en tant que requête stockée, également appelée View à l'aide de l'annotation "@DatabaseView". b/67033276
  • Valeur automatique : Room prend désormais en charge la déclaration des classes annotées AutoValue en tant qu'entités et que POJO. Les annotations @PrimaryKey, @ColumnInfo, @Embedded et @Relation de Room peuvent désormais être déclarées dans les méthodes abstraites de la classe avec des annotations de valeur automatique. Notez que ces annotations doivent également être accompagnées de @CopyAnnotations pour que Room puisse les comprendre. b/62408420
  • Compatibilité supplémentaire avec les types renvoyés Rx : les méthodes DAO annotées avec @Insert, @Delete ou @Update sont désormais compatibles avec les types renvoyés Rx Completable, Single<T> et Maybe<T>. b/63317956
  • Types immuables avec @Relation : auparavant, Room exigeait que les champs portant l'annotation @Relation puissent être définis, mais ils peuvent désormais servir de paramètres de constructeur.
  • enableMultiInstanceInvalidation est une nouvelle API de RoomDatabase.Builder permettant l'invalidation de plusieurs instances de "RoomDatabase" à l'aide du même fichier de base de données. Ce mécanisme d'invalidation multi-instance fonctionne également pour plusieurs processus. b/62334005
  • fallbackToDestructiveMigrationOnDowngrade : une nouvelle API de RoomDatabase.Builder permettant de recréer automatiquement la base de données en cas de retour à une version antérieure. b/110416954
  • ignoredColumns : nouvelle API de l'annotation @Entity qui permet de répertorier les champs ignorés par leur nom. Utile pour ignorer les champs hérités d'une entité. b/63522075

Modifications apportées à l'API/Nouveaux comportements

  • mCallback et mDatabase dans RoomDatabase sont désormais @Deprecated et seront supprimés dans la prochaine version majeure de Room. b/76109329

Correction de bugs

  • Correction de deux problèmes entraînant une mauvaise récupération de Room à partir d'une base de données corrompue ou d'une migration incorrecte lors de l'initialisation. b/111504749 et b/111519144
  • Désormais, Room utilisera correctement le constructeur principal de Kotlin dans les classes de données afin d'éviter de devoir déclarer les champs en tant que vars. b/105769985

Version 2.0.0

Version 2.0.0

1er octobre 2018

Publication de androidx.room 2.0.0 sans aucune modification par rapport à la version 2.0.0-rc01.

Version 2.0.0-rc01

20 septembre 2018

Publication de androidx.room 2.0.0-rc01 sans aucune modification par rapport à la version 2.0.0-beta01.

Version 2.0.0-beta01

2 juillet 2018

Modifications apportées à l'API/Nouveaux comportements

  • Ajout de RoomDatabase.Builder.setQueryExecutor() pour permettre la personnalisation de l'emplacement d'exécution des requêtes.
  • Ajout de la compatibilité avec RxJava2 Observable.
  • Les implémentations de DAO et de base de données générées sont maintenant finales.

Correction de bugs

  • Spécification du nom de la classe ou du champ dans l'erreur "Impossible de trouver la fonction "getter" pour le champ". b/73334503
  • Correction de la rétrocompatibilité de RoomOpenHelper avec les anciennes versions de Room b/110197391

Dépendances antérieures à AndroidX

Pour les versions de Room antérieures à AndroidX ci-dessous, incluez les dépendances suivantes :

dependencies {
    def room_version = "1.1.1"

    implementation "android.arch.persistence.room:runtime:$room_version"
    annotationProcessor "android.arch.persistence.room:compiler:$room_version" // For Kotlin use kapt instead of annotationProcessor

    // optional - RxJava support for Room
    implementation "android.arch.persistence.room:rxjava2:$room_version"

    // optional - Guava support for Room, including Optional and ListenableFuture
    implementation "android.arch.persistence.room:guava:$room_version"

    // Test helpers
    testImplementation "android.arch.persistence.room:testing:$room_version"
}

Version 1.1.1

Version 1.1.1

19 juin 2018

Room 1.1.1 est identique à Room 1.1.1-rc1.

Version 1.1.1-rc1

16 mai 2018 Nous vous recommandons vivement d'utiliser Room 1.1.1-rc1 au lieu de la version 1.1.0 si vous utilisez des migrations.

Correction d'un bug empêchant Room de gérer correctement l'initialisation après la migration. b/79362399

Version 1.1.0

Version 1.1.0-beta3

19 avril 2018

Correction de bugs

  • Correction d'une erreur de compilation lorsqu'un POJO Kotlin fait référence à une entité relationnelle définie en Java. b/78199923

Version 1.1.0-beta2

5 avril 2018

Correction de bugs

  • Correction d'un bug critique dans les implémentations Single et Maybe de Room Rx, dans lesquelles la requête était recyclée à l'avance, causant des problèmes si vous ajoutiez plus d'un observateur aux instances Single ou Maybe renvoyées. b/76031240

  • [RoomDatabase.clearAllTables][ref-clearAllTables] ne VACUUM la base de données si elle est appelée dans une transaction. b/77235565

Version 1.1.0-beta1

21 mars 2018

Modifications apportées à l'API

  • Sur la base des commentaires relatifs à l'API, @RawQuery n'accepte plus la transmission d'une String comme paramètre de requête. Vous devez utiliser [SupportSQLiteQuery][ref-SupportSQLiteQuery]. (voir [SimpleSQLiteQuery][ref-SimpleSQLiteQuery] pour créer facilement une instance de [SupportSQLiteQuery][ref-SupportSQLiteQuery] avec prise en charge des arguments).
  • La méthode [fallbackToDestructiveMigrationFrom][ref-fallbackToDestructiveMigrationFrom] de RoomDatabase.Builder accepte désormais vararg int au lieu de vararg Integer.

Correction de bugs

  • [RoomDatabase.clearAllTables][ref-clearAllTables] tente maintenant de renvoyer de l'espace au système d'exploitation en définissant un point de contrôle WAL et en exécutant VACUUM sur la base de données.
  • [@RawQuery][ref-RawQuery] accepte désormais n'importe quel POJO pour la propriété observedEntities, à condition que le POJO fasse référence à une ou plusieurs entités via ses champs Embedded ou ses Relations. b/74041772
  • Paging : l'implémentation d'une DataSource de Room gère désormais correctement les dépendances multitables (telles que les relations et les jointures). Auparavant, l'activation de nouveaux résultats ou l'exécution d'une compilation échouaient. b/74128314

Version 1.1.0-alpha1

22 janvier 2018

Nouvelles fonctionnalités

  • RawQuery : cette nouvelle API permet aux méthodes @Dao de recevoir le SQL en tant que paramètre de requête. b/62103290, b/71458963
  • fallBackToDestructiveMigrationsFrom : cette nouvelle API de RoomDatabase.Builder permet un contrôle plus précis des versions de schéma de départ à partir desquelles les migrations destructives sont autorisées (en comparaison avec la méthode "fallbackToDestructiveMigration"). b/64989640
  • Room ne prend désormais en charge que les API Paging les plus récentes (alpha-4 et ultérieures) et abandonne la prise en charge du LivePagedListProvider obsolète. Pour utiliser la nouvelle version alpha de Room, vous devez utiliser Paging alpha-4 ou version ultérieure et passer de LivePagedListProvider à LivePagedListBuilder si vous ne l'avez pas déjà fait.

Correction de bugs

  • Meilleure compatibilité avec les types Kapt de Kotlin. b/69164099
  • L'ordre des champs n'invalide plus le schéma. b/64290754