חדר

ספריית Room לשמירת נתונים מספקת שכבת הפשטה מעל SQLite כדי לאפשר גישה חזקה יותר למסדי נתונים, תוך ניצול מלוא העוצמה של SQLite.
העדכון האחרון גרסה יציבה גרסה מועמדת להפצה גרסת בטא גרסה אלפא
11 בדצמבר 2024 2.6.1 - - 2.7.0-alpha12

הצהרת יחסי תלות

כדי להוסיף תלות ב-Room, צריך להוסיף את מאגר Google Maven לפרויקט. מידע נוסף זמין במאגר Maven של Google.

יחסי התלות של Room כוללים בדיקת העברות של Room ו-Room RxJava.

מוסיפים את יחסי התלות של הארטיפקטים הנדרשים בקובץ build.gradle של האפליקציה או המודול:

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"
}

מידע נוסף על השימוש בפלאגין KAPT זמין במסמכי העזרה של KAPT.

מידע נוסף על השימוש בפלאגין KSP זמין במסמכי העזרה למתחילים בנושא KSP.

מידע על שימוש בתוספים של Kotlin זמין במסמכי התיעוד של ktx.

מידע נוסף על יחסי תלות זמין במאמר הוספת יחסי תלות ל-build.

לחלופין, בספריות שאינן ל-Android (כלומר מודולים של Gradle ל-Java או ל-Kotlin בלבד), אפשר להסתמך על androidx.room:room-common כדי להשתמש בהערות של Room.

הגדרת אפשרויות של מהדר

אלה האפשרויות של מעבד ההערות במרחב המשותף.

room.schemaLocation directory
האפשרות הזו מאפשרת לייצא סכימות של מסדי נתונים לקובצי JSON בספרייה שצוינה. מידע נוסף זמין במאמר העברת חדרים.
room.incremental boolean
הפעלת מעבד ההערות המצטבר של Gradle. ערך ברירת המחדל הוא true.
room.generateKotlin boolean
יצירת קובצי מקור של Kotlin במקום Java. נדרש KSP. ערך ברירת המחדל הוא false. פרטים נוספים זמינים בהערות לגרסה 2.6.0.

שימוש בפלאגין של Room ל-Gradle

בגרסה 2.6.0 ואילך של Room, אפשר להשתמש בפלאגין של Gradle ל-Room כדי להגדיר אפשרויות למהדר של Room. הפלאגין מגדיר את הפרויקט כך שהסכמות שנוצרות (שהן פלט של משימות הידור ומשמשות להעברות אוטומטיות) מוגדרות בצורה נכונה כך שאפשר יהיה ליצור מהן גרסאות build שניתנות לשכפול ולשמירה במטמון.

כדי להוסיף את הפלאגין, מגדירים את הפלאגין ואת הגרסה שלו בקובץ ה-build ברמה העליונה של Gradle.

Groovy

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

Kotlin

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

בקובץ ה-build של Gradle ברמת המודול, מחילים את הפלאגין ומשתמשים בסיומת room.

Groovy

plugins {
    id 'androidx.room'
}

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

Kotlin

plugins {
    id("androidx.room")
}

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

צריך להגדיר schemaDirectory כשמשתמשים בפלאגין Room Gradle. כך תוכלו להגדיר את המהדר של Room ואת משימות הידור השונות ואת הקצוות העורפיים שלו (javac, ‏ KAPT, ‏ KSP) כך שיפיקו קובצי סכימה לתיקיות עם טעמים, למשל schemas/flavorOneDebug/com.package.MyDatabase/1.json. צריך להטמיע את הקבצים האלה במאגר כדי להשתמש בהם לאימות ולמיגרציות אוטומטיות.

אי אפשר להגדיר חלק מהאפשרויות בכל הגרסאות של הפלאגין Room Gradle, למרות שהן נתמכות על ידי המהדר של Room. בטבלה הבאה מפורטות כל האפשרויות, ומוצגת הגרסה של פלאגין Room Gradle שנוספה לה תמיכה בהגדרת האפשרות הזו באמצעות התוסף room. אם הגרסה שלכם נמוכה יותר, או אם האפשרות עדיין לא נתמכת, תוכלו להשתמש במקום זאת באפשרויות של מעבד התווית.

אפשרות מגרסה
room.schemaLocation (שדה חובה) 2.6.0
room.incremental -
room.generateKotlin -

שימוש באפשרויות של מעבד האנוטציות

אם אתם לא משתמשים בפלאגין של Room ל-Gradle, או אם הגרסה של הפלאגין לא תומכת באפשרות הרצויה, תוכלו להגדיר את Room באמצעות אפשרויות של מעבדי הערות, כפי שמתואר בקטע הוספת יחסי תלות ל-build. האופן שבו מציינים את אפשרויות ההערה תלוי בשימוש ב-KSP או ב-KAPT ל-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...
                )
            }
        }
    }
}

מכיוון ש-room.schemaLocation הוא ספרייה ולא טיפוס פרימיטיבי, צריך להשתמש ב-CommandLineArgumentsProvider כשמוסיפים את האפשרות הזו כדי ש-Gradle ידע על הספרייה הזו כשיבצע בדיקות עדכניות. במאמר העברת מסד הנתונים של Room מופיעה הטמעה מלאה של CommandLineArgumentsProvider שמספקת את מיקום הסכימה.

משוב

המשוב שלכם עוזר לנו לשפר את Jetpack. אם נתקלתם בבעיות חדשות או שיש לכם רעיונות לשיפור הספרייה הזו, נשמח לשמוע מכם. לפני שיוצרים בעיה חדשה, כדאי לעיין בבעיות הקיימות בספרייה הזו. כדי להצביע על בעיה קיימת, לוחצים על לחצן הכוכב.

דיווח על בעיה חדשה

מידע נוסף זמין במסמכי התיעוד של Issue Tracker.

גרסה 2.7

גרסה 2.7.0-alpha12

11 בדצמבר 2024

androidx.room:room-*:2.7.0-alpha12 משוחרר. גרסת 2.7.0-alpha12 מכילה את ההוספות האלה.

שינויים ב-API

  • מוסיפים את ה-API הניסיוני RoomDatabase.Builder.setInMemoryTrackingMode() כדי להגדיר אם Room ישתמש בטבלה בזיכרון או לא למעקב אחר ביטול התוקף. (I2a9b2, ‏ b/185414040)

תיקוני באגים - מעכשיו, בהעברות הרסניות יושמטו תצוגות כדי להבטיח שהן ייוצרו מחדש, כך שההתנהגות כשהאפשרות allowDestructiveMigrationForAllTables מופעלת (ברירת המחדל של KMP) תהיה זהה להתנהגות הקיימת כשהיא מושבתת. (0a3e83, b/381518941)

גרסה 2.7.0-alpha11

30 באוקטובר 2024

androidx.room:room-*:2.7.0-alpha11 משוחרר. גרסת 2.7.0-alpha11 כוללת את ההוספות האלה.

שינויים ב-API

  • בודקים מחדש את חתימה השיטה convertRows() שנוספה לאחרונה, כדי שתהיה פונקציית השהיה שמקבלת RawRoomQuery לדפדוף בין חדרים. (Ie57b5, ‏ b/369136627)

תיקוני באגים

  • תוקנה בעיה בחלוקה לדפים של חדרים, שבה נוצר קוד לא תקין כשמשתמשים ב-@Relation בשילוב עם PagingSource.

גרסה 2.7.0-alpha10

16 באוקטובר 2024

androidx.room:room-*:2.7.0-alpha10 משוחרר. גרסת 2.7.0-alpha10 כוללת את ההוספות האלה.

שינויים ב-API

  • יצירת כיתה פנימית של ByteArrayWrapper כדי לתמוך ביחסים עם ByteBuffer בפלטפורמות שאינן Android או JVM. (I75543, ‏ b/367205685)
  • מוסיפים את SQLiteStatement.getColumnType() יחד עם קבועי התוצאה השונים של SQLITE_DATA_* כדי לאפשר אחזור של סוג הנתונים של עמודה. (I1985c, ‏ b/369636251)

גרסה 2.7.0-alpha09

2 באוקטובר 2024

androidx.room:room-*:2.7.0-alpha09 משוחרר. גרסת 2.7.0-alpha09 מכילה את ההוספות האלה.

תיקוני באגים

  • תוקנה בעיה בהטמעת KMP של room-paging שגרמה ל-Error code: 8, message: attempt to write a readonly database בגלל התחלת עסקת כתיבה בחיבור לקריאה. (b/368380988)

גרסה 2.7.0-alpha08

18 בספטמבר 2024

androidx.room:room-*:2.7.0-alpha08 משוחרר. גרסת 2.7.0-alpha08 כוללת את ההוספות האלה.

תכונות חדשות

  • ארטיפקטים של room-paging הועברו כך שתהיה להם תאימות ל-KMP. (Ib8756, ‏ b/339934824)
  • ממשק ה-API invalidationTrackerFlow() הפך לממשק API של צד ראשון בשם InvalidationTracker.createFlow(), והוא זמין עכשיו לקבוצות מקור שאינן של Android בפרויקטים של KMP. (I1fbfa,‏ (I8fb29), ‏ b/329291639, ‏ b/329315924)

שינויים ב-API

  • כל האזהרות והודעות השגיאה ב-Room שמכילות את המילה Cursor הוסרו או הוחלפו, כי Cursor כבר לא מוגדרת כמונח כללי מדויק לשימוש בגרסה של KMP ל-Room. (Id8cd9, ‏ b/334087492)

תיקוני באגים

  • תוקנה בעיה שבה Room KMP ניסה להפיק קוד באמצעות UUID בפלטפורמות שאינן JVM. (b/362994709)
  • תוקנה בעיה ב-Room Gradle Plugin שגרמה לשגיאה כמו 'לא ניתן לשנות מאפיינים של הגדרה… אחרי שהיא ננעלה לשינוי' כשמשתמשים בה בפרויקט KMP עם Compose Multiplatform. (b/343408758)

גרסה 2.7.0-alpha07

21 באוגוסט 2024

androidx.room:room-*:2.7.0-alpha07 משוחרר. הגרסה 2.7.0-alpha07 מכילה את ההוספות האלה.

תכונות חדשות

  • הפלאגין של Room ל-Gradle יוסיף עכשיו באופן אוטומטי את הסכימות המיוצאות למקורות המשאבים של Android Instrumentation Test, כדי שאפשר יהיה להשתמש בהן ב-MigrationTestHelper.

תיקוני באגים

  • תוקנה בעיה ב-'actual' שנוצר ב-RoomDatabaseConstructor בלי המשתנה 'actual' בפונקציה initialize, אם הפונקציה הזו הוגדרה מחדש גם בהצהרה 'expect'. (359631627)
  • תוקנה בעיה שבה הערך 'הערך בפועל' שנוצר של RoomDatabaseConstructor לא תואם לחשיפה של ההצהרה 'צפוי'. (358138953)

גרסה 2.7.0-alpha06

7 באוגוסט 2024

androidx.room:room-*:2.7.0-alpha06 משוחרר. גרסת 2.7.0-alpha06 כוללת את ההוספות האלה.

שינויים ב-API

  • שינוי ההגדרה של היצירה של RoomDatabase בפרויקט KMP.

בגלל מודל הידור של Kotlin 2.0, האסטרטגיה של הפניה לפונקציה שצריך ליצור, בשם instantiateImpl(), כבר לא תקפה. אנחנו משיקים שני ממשקי API חדשים, @ConstructedBy ו-RoomDatabaseConstructor, שמחליפים את האסטרטגיה instantiateImpl(). השיטה החדשה היא:

  1. הגדרת אובייקט expect שמטמיע את RoomDatabaseConstructor

      expect object MyDatabaseCtor : RoomDatabaseConstructor<MyDatabase>
    
  2. קישור האובייקט להצהרה @Database באמצעות @ConstructedBy

      @Database(...)
      @ConstructedBy(MyDatabaseCtor::class) // NEW
      abstract class MyDatabase : RoomDatabase
    
  3. יצירת מכונה חדשה של מסד נתונים בלי להעביר ארגומט של מפעל

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

תיקונים של b/316978491,‏ b/338446862 ו-b/342905180

  • תמיכה ב-@RawQuery ב-Room KMP באמצעות הוספת ממשק API חדש בשם RoomRawQuery, הדומה ל-SupportSQLiteQuery מבחינת שמירה על מחרוזת ה-SQL הגולמית ופונקציה לקישור ארגומנטים לתוך משפט. פונקציות עם הערות @RawQuery יכולות עכשיו לקבל RoomRawQuery כפרמטר היחיד שלהן. (Iea844, ‏ b/330586815)
  • מוסיפים עומס יתר של setQueryCallback() שמקבל CoroutineContext. (Id66ff, ‏ b/309996304)
  • הוספנו תמיכה ביעדים של linuxArm64 Kotlin Multiplatform (I139d3, ‏ b/338268719)

תיקוני באגים

  • תוקנה בעיה שבה Room יוצר קריאה שגויה ל-recursiveFetchArrayMap ביעדים שאינם Android. (710c36, ‏ b/352482325)
  • תוקנה בעיה שבה לפעמים Room גורם להחרגה לגבי 'פג הזמן המוקצב להתחברות' בפרויקט KMP. (fa72d0, b/347737870)
  • תיקון בעיה בהעברות אוטומטיות שבהן מתבצעת בדיקה של מפתחות זרים מוקדם מדי, לפני שסכמות של טבלאות אחרות משתנות בהתאם למפתחות הזרים החדשים. (7672c0, ‏ b/352085724)

גרסה 2.7.0-alpha05

10 ביולי 2024

androidx.room:room-*:2.7.0-alpha05 משוחרר. גרסת 2.7.0-alpha05 כוללת את ההוספות האלה.

שינויים ב-API

  • השם של SQLiteKt השתנה ל-SQLite והשם של BundledSQLiteKt השתנה ל-BundledSQLite. (I8b501)

תיקוני באגים

  • תוקן באג שבו RoomDatabase נכנס למצב נעילה מרומזת או גורם לשגיאה עם זמן קצוב לתפוגה של חיבור כשמשתמשים ב-AndroidSQLiteDriver.

גרסה 2.7.0-alpha04

‫12 ביוני 2024

androidx.room:room-*:2.7.0-alpha04 משוחרר. גרסת 2.7.0-alpha04 מכילה את ההוספות האלה.

תיקוני באגים

  • תוקנה בעיה במעבד ההערות של Room, שגרמה ליצירת קוד KMP לא תואם כשהוגדר ב-DAO סוג החזרה של מפות מרובות. (b/340983093)
  • תוקנה בעיה שבה Room לא מצליח למצוא את הטמעת מסד הנתונים שנוצרה אם לכיתה עם ההערה @Database אין חבילת קוד. (b/342097292)
  • תוקנה בעיה שבה הפעלת סגירה אוטומטית וביטול תוקף של מכונות מרובות גרמה לפעמים ל-ConcurrentModificationException כשמסד הנתונים נסגר באופן אוטומטי בגלל חוסר פעילות.

גרסה 2.7.0-alpha03

29 במאי 2024

androidx.room:room-*:2.7.0-alpha03 משוחרר. גרסת 2.7.0-alpha03 מכילה את ההוספות האלה.

תיקוני באגים

  • תיקון בעיות שונות שקשורות ל-Kotlin 2.0 ול-KSP 2.0. חשוב לזכור ש-Kotlin 2.0 עם תמיכה ב-KSP 2 עדיין לא הושלמה, והצוות עובד על ממשקי ה-API השונים ועל השינויים בהתנהגות של המהדר החדש. (b/314151707)

גרסה 2.7.0-alpha02

14 במאי 2024

androidx.room:room-*:2.7.0-alpha02 משוחרר. גרסת 2.7.0-alpha02 מכילה את ההוספות האלה.

תיקוני באגים

  • תוקנו בעיות שונות ב-KSP.

גרסה 2.7.0-alpha01

1 במאי 2024

androidx.room:room-*:2.7.0-alpha01 משוחרר. גרסת 2.7.0-alpha01 מכילה את ההוספות האלה.

תכונות חדשות

  • תמיכה ב-Kotlin Multiplatform‏ (KMP): בגרסה הזו, Room עובר עיבוד מחדש כדי להפוך לספרייה של Kotlin Multiplatform‏ (KMP). עדיין יש עבודה שצריך לעשות, אבל במהדורה הזו אנחנו משיקים גרסה חדשה של Room שבה רוב הפונקציונליות עברה 'התאמה' (כדי שתהיה זמינה בכמה פלטפורמות). הפלטפורמות הנתמכות כרגע הן Android, ‏ iOS, ‏ JVM (מחשב), ‏ Mac מקורי ו-Linux מקורי. כל הפונקציונליות שחסרה בפלטפורמות החדשות שנתמכות תהיה זמינה במלואה במהדורות הבאות של Room.

מידע נוסף על תחילת השימוש ב-Room KMP זמין במסמכי התיעוד הרשמיים של Room KMP.

  • התכונה יצירת קוד Kotlin ב-KSP מופעלת כברירת מחדל אם העיבוד מתבצע דרך KSP. בפרויקטים של KAPT או Java בלבד, Room עדיין ייצור מקורות Java.

שינויים ב-API

  • נוספה עומס יתר של Room.databaseBuilder() שמקבל פרמטר lambda שנועד לשימוש עם פונקציה שנוצרה על ידי Room, כדי להימנע משימוש בהשתקפות (reflection) בזמן יצירת מופע של ההטמעה של RoomDatabase שנוצרה. דוגמה לשימוש:
Room.databaseBuilder<MyDatabase>(
    context = appContext,
    name = dbFilePath,
    factory =  { MyDatabase::class.instantiateImpl() }
)
  • הוספנו ל-builder: RoomDatabase.Builder.setQueryCoroutineContext ממשק API להגדרת Room עם CoroutineContext. הערה: אפשר להגדיר את RoomDatabase רק עם מנהלי משימות באמצעות setQueryExecutor או עם הקשר של קורוטין, אבל לא עם שניהם.
  • הוספנו ממשק API להגדרת Room באמצעות מנהל SQLite: RoomDatabase.Builder.setDriver(). מידע נוסף על SQLite Driver API זמין במסמכי התיעוד של SQLite KMP.
  • נוספו ממשקי API לגישה ל-SQLiteConnection הבסיסי מממשקי ה-API של הנהגים: RoomDatabase.useReaderConnection ו-RoomDatabase.useWriterConnection.
  • לחלק מהקריאות החוזרות הקשורות ל-Room יש עכשיו גרסה עם עומס יתר שמקבלת את הערך SQLiteConnection במקום SupportSQLiteDatabase. ההגדרות האלה מיועדות לשינוי במהלך המעבר לפרויקט KMP. מידע נוסף על העברת שימושים של Room באפליקציית Android למודול KMP נפוץ זמין במדריך ההעברה. מספרי החזרה הם:
    • Migration.migrate(SQLiteConnection)
    • AutoMigrationSpec.onPostMigrate(SQLiteConnection)
    • RoomDatabase.Callback.onCreate(SQLiteConnection)
    • RoomDatabase.Callback.onDestructiveMigration(SQLiteConnection)
    • RoomDatabase.Callback.onOpen(SQLiteConnection)
  • הארטיפקט של KTX‏ androidx.room:room-ktx מוזג ל-androidx.room:room-runtime יחד עם כל ממשקי ה-API שלו, והארטיפקט ריק עכשיו. צריך להסיר אותו מרשימת יחסי התלות.

גרסה 2.6

גרסה 2.6.1

29 בנובמבר 2023

androidx.room:room-*:2.6.1 משוחרר. גרסה 2.6.1 כוללת את ההצהרות האלה.

תיקוני באגים

  • נפתרה בעיה בקוד שנוצר, שבה ערך ברירת המחדל של עמודות Double ב-EntityCursorConverter הוגדר כ-0 במקום כ-0.0. נוספה גם תיקון פוטנציאלי לתרחיש קיצוני דומה של עמודות מסוג Float. (Id75f5, ‏ b/304584179)
  • חריגות שהושלחו מהטעינות של PagingSource יועברו עכשיו כ-LoadStateUpdate של LoadResult.Error שמכיל את Throwable. אפשר לראות את מצב השגיאה הזה דרך PagingDataAdapter.loadStateFlow(Views) או LazyPagingItems.loadState(Compose). חשוב לזכור שזוהי שינוי בהתנהגות. בעבר, שגיאות טעינה היו מופיעות כחריגה (Exception) שנזרקה על ידי שיטת ה-DAO שהפעילה את הטעינה. (I93887, ‏ b/302708983)

גרסה 2.6.0

18 באוקטובר 2023

androidx.room:room-*:2.6.0 משוחרר. גרסה 2.6.0 כוללת את ההצהרות האלה.

שינויים חשובים מאז גרסה 2.5.0

  • האפשרות להפעיל יצירת קוד ב-Kotlin (או 'Kotlin CodeGen') זמינה עכשיו ב-Room KSP. (4297ec0). כדי להפעיל את Kotlin CodeGen ב-Room, מוסיפים את שם האפשרות room.generateKotlin לאפשרויות המעבד של KSP. פרטים נוספים על העברת אפשרויות מעבד ל-KSP זמינים במסמכי התיעוד של KSP.

הערה: כשמשתמשים ב-Kotlin CodeGen, חשוב לזכור שיש הגבלות נוספות שנוספו. אסור להשתמש במאפיינים מופשטים כ-DAO getters או כשאילתות DAO ב-Kotlin CodeGen. במקום זאת, צריך לכתוב אותם מחדש כפונקציות כדי למנוע את ההנחה השגויה שערכו של המאפיין לא ניתן לשינוי ויש לו תוצאה קבועה ששמורה. הגבלה נוספת שנוספה היא שאסור יותר להשתמש בחזרי Nullable collection ב-Room ל-Kotlin CodeGen.

אזהרה: יכול להיות שתבחינו שהפרויקטים שלכם מחמירים יותר מבחינת בדיקת נכוֹנוּת של ערך (nullability) כשמשתמשים ב-Kotlin CodeGen. ב-Kotlin CodeGen, חשוב לדעת אם ארגומנטי הטיפוס יכולים להיות null, בעוד שב-Java המערכת מתעלמת ברוב המקרים מהאפשרות הזו. לדוגמה, נניח שיש לכם טיפוס החזרה Flow<foo\> והטבלה ריקה. ב-CodeGen של Java, המצב הזה לא יגרום לבעיות, אבל ב-CodeGen של Kotlin תופיע שגיאה. כדי למנוע זאת, צריך להשתמש ב-`Flow<foo?\>`, בהנחה שהמערכת פולטת ערך null. </foo?\></foo\>

  • הארטיפקט החדש של הפלאגין של Room ל-Gradle נוסף ל-Room עם המזהה androidx.room, והוא פותר בעיות קיימות שונות ב-Room לגבי קלט ופלט של סכימות באמצעות אפשרויות של מעבדי הערות ב-Gradle. פרטים נוספים זמינים בהערות המוצר של Room בגרסה 2.6.0-alpha02.
  • מעכשיו יש תמיכה ב-KSP בסוגי ערכים בישויות של חדרים. (4194095)
  • יש עכשיו תמיכה ב-Room בסוגים של מפות בתצוגת עץ שמוחזרים בפונקציות DAO. (I13f48, ‏ 203008711)

גרסה 2.6.0-rc01

20 בספטמבר 2023

androidx.room:room-*:2.6.0-rc01 משוחרר. גרסה 2.6.0-rc01 כוללת את ההצהרות האלה.

גרסה 2.6.0-beta01

23 באוגוסט 2023

androidx.room:room-*:2.6.0-beta01 משוחרר. גרסה 2.6.0-beta01 מכילה את ההצהרות האלה.

תיקוני באגים

  • טיפול במקרה המיוחד של חריגה מסוג SQLite במהלך הוספה/עדכון (upsert). אם חריגה מסוג 2067 SQLITE_CONSTRAINT_UNIQUE מתרחשת במהלך הוספה/עדכון (upsert), המערכת צריכה לבצע עדכון. (If2849, ‏ b/243039555)

גרסה 2.6.0-alpha03

9 באוגוסט 2023

androidx.room:room-*:2.6.0-alpha03 משוחרר. גרסה 2.6.0-alpha03 מכילה את ההוספות האלה.

תכונות חדשות

  • יש עכשיו תמיכה ב-Room בסוגים של מפות בתצוגת עץ שמוחזרים בפונקציות DAO. (I13f48, ‏ 203008711)

שינויים ב-API

  • נוצרה הערה חדשה לגבי סוג שנקראת @MapColumn כדי להחליף את הערה @MapInfo, שיוצאת משימוש. לכל שם עמודה (keyColumnName,‏ valueColumnName או שניהם) שצוין בהערה @MapInfo, צריך להצהיר על הערה @MapColumn עם columnName בלבד ולהשתמש בהערה על ארגומנט הסוג הספציפי שאליו מתייחסים (המפתח או הערך של המפה) בסוג ההחזרה של פונקציית ה-DAO. הסיבה לכך היא שההערה @MapColumn משמשת ישירות בארגומנט הטיפוס בתוך סוג ההחזרה של פונקציית DAO, במקום בפונקציה עצמה כמו @MapInfo. מידע נוסף זמין במסמכי העזרה של @MapColumn. (Ib0305, ‏ b/203008711)
  • עדכנו את קובצי ה-API כדי להוסיף הערות לגבי השמטת תאימות (I8e87a, ‏ b/287516207)
  • ממשקי ה-API של הפלאגין של Room ל-Gradle עודכנו כך שלא תמיד נדרשות הגדרות לכל וריאנט. פירוש הדבר הוא שהפלאגין יכול לקבל מיקום גלובלי לכל הווריאציות בלי ליצור כמה ספריות, וכך מאפשר העברות חלקות יותר, אבל הוא גם מספיק גמיש כדי להגדיר באופן ידני תבניות של סוגים של גרסאות build או טעמים, ועדיין לשמור על היתרונות של הפלאגין (גרסאות build שניתנות לשכפול ושאפשר לשמור במטמון). (I09d6f, ‏ b/278266663)

תיקוני באגים

  • תוקנה נקודת חולשה פוטנציאלית של דליפת זיכרון ב-QueryInterceptorStatement. (I193d1)
  • תוקנה התנהגות שגויה בפונקציה QueryInterceptorDatabase execSQL(). (Iefdc8)

גרסה 2.6.0-alpha02

21 ביוני 2023

androidx.room:room-*:2.6.0-alpha02 משוחרר. גרסה 2.6.0-alpha02 מכילה את ההצהרות האלה.

פלאגין של Room ל-Gradle

הגרסה החדשה הזו מכילה ארטיפקט חדש של הפלאגין של Room ל-Gradle עם המזהה androidx.room, שמספק פתרון לבעיות קיימות שונות ב-Room שקשורות להזנת נתונים ולפלט של סכימות באמצעות אפשרויות של מעבד הערות ב-Gradle. הפלאגין של Room ל-Gradle מגדיר את הפרויקט כך שסכמות שנוצרות ומשמשות להעברות אוטומטיות, וגם הפלט של משימות ה-compile, מוגדרים בצורה נכונה כך שאפשר יהיה ליצור מהן גרסאות build שניתנות לשכפול ולשמירה במטמון. הפלאגין מציע שפת DSL להגדרת מיקום הסכימה הבסיסית:

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

לאחר מכן, הפלאגין יגדיר את המהדר של Room ואת משימות ה-compile השונות ואת הקצוות העורפיים שלו (javac,‏ KAPT,‏ KSP) כך שיפיקו קובצי סכימה לתיקיות עם טעמים, כלומר schemas/flavorOneDebug/com.package.MyDatabase/1.json. כמו תמיד, הקבצים האלה נשלחים למאגר כדי שאפשר יהיה להשתמש בהם לאימות ולמיגרציות אוטומטיות. כשעוברים להשתמש בפלאגין במקום באפשרויות של מעבד התווים, צריך להעתיק את קובצי הסכימה הקיימים לספריות הטעם שנוצרו על ידי הפלאגין. זוהי פעולת העברה חד-פעמית שצריך לבצע אותה באופן ידני. מסמכי התיעוד של הסכימה בכתובת developers.android.com יעודכנו בעתיד, אחרי שנטפל במשוב ונגיע למצב יציב של הפלאגין. מומלץ לנסות אותו.

שינויים ב-API

  • RoomDatabase.QueryCallback מוגדר כממשק פונקציונלי שמאפשר שימוש בהמרות של SAM. (Iab8ea, ‏ b/281008549)

תיקוני באגים

  • פתרון בעיה שנובעת מהיצירה של מסד הנתונים ב-Robolectric אחרי העברת מקורות Room מ-Java ל-Kotlin. (Ic053c, ‏ b/274924903)

גרסה 2.6.0-alpha01

22 במרץ 2023

androidx.room:room-*:2.6.0-alpha01 משוחרר. גרסה 2.6.0-alpha01 מכילה את ההוספות האלה.

תכונות חדשות

  • תמיכה ב-Room עבור KSP בקטגוריות ערכים. עכשיו יש תמיכה ב-Room בסוגי ערכים ביישויות. (4194095)
  • עכשיו אפשר להפעיל יצירת קוד Kotlin(או 'Kotlin CodeGen') ב-Room (4297ec0). כדי להפעיל את Kotlin CodeGen ב-Room, מוסיפים את שם האפשרות room.generateKotlin לאפשרויות המעבד של KSP. פרטים נוספים על העברת אפשרויות מעבד ל-KSP זמינים במסמכי התיעוד של KSP.

הערה: כשמשתמשים ב-Kotlin CodeGen, חשוב לזכור שיש הגבלות נוספות שנוספו. אסור להשתמש במאפיינים מופשטים כ-DAO getters או כשאילתות DAO ב-Kotlin CodeGen. במקום זאת, צריך לכתוב אותם מחדש כפונקציות כדי למנוע את ההנחה השגויה שערכו של המאפיין לא ניתן לשינוי ויש לו תוצאה קבועה ששמורה. הגבלה נוספת שנוספה היא שאסור יותר להשתמש בחזרי Nullable collection ב-Room ל-Kotlin CodeGen.

אזהרה: יכול להיות שתבחינו שהפרויקטים שלכם מחמירים יותר מבחינת בדיקת נכוֹנוּת של ערך (nullability) כשמשתמשים ב-Kotlin CodeGen. ב-Kotlin CodeGen, חשוב לדעת אם ארגומנטי הטיפוס יכולים להיות null, בעוד שב-Java המערכת מתעלמת ברוב המקרים מהאפשרות הזו. לדוגמה, נניח שיש לכם טיפוס החזרה Flow<foo\> והטבלה ריקה. ב-CodeGen של Java, המצב הזה לא יגרום לבעיות, אבל ב-CodeGen של Kotlin תופיע שגיאה. כדי למנוע זאת, צריך להשתמש ב-`Flow<foo?\>`, בהנחה שהמערכת פולטת ערך null. </foo?\></foo\>

שינויים ב-API

  • הגנה מפני שימוש לא מובן באוספים עם אפשרות לאפס (nullable) בסוגי ההחזרה של שיטות DAO. (I777dc, ‏ b/253271782, ‏ b/259426907)
  • מוסיפים ממשק API ליצירת תהליך שמפיק שינויים במעקב אחר ביטול התוקף. ה-API שימושי ליצירת סטרימינג שצריך להגיב לשינויים במסדי נתונים. (I8c790, ‏ b/252899305)

תיקוני באגים

  • אסור להשתמש במאפיינים מופשטים כ-getters של DAO או כשאילתות של DAO ב-Kotlin codegen. במקום זאת, צריך לכתוב אותם מחדש כפונקציות כדי למנוע את ההנחה השגויה שערכו של המאפיין לא ניתן לשינוי ויש לו תוצאה קבועה ששמורה. (If6a13, ‏ b/127483380, ‏ b/257967987)

גרסה 2.5.2

גרסה 2.5.2

21 ביוני 2023

androidx.room:room-*:2.5.2 משוחרר. גרסה 2.5.2 כוללת את השמירות האלה.

תיקוני באגים

  • תיקון בעיית אי-תאימות עם kotlinx-metadata-jvm. (386d5c)
  • תוקנה בעיה שגרמה ל-Room להציג שגיאה כשמשתמשים בו בבדיקה של Robolectric. (f79bea, ‏ b/274924903)

גרסה 2.5.1

גרסה 2.5.1

22 במרץ 2023

androidx.room:room-*:2.5.1 משוחרר. גרסה 2.5.1 כוללת את ההוספות האלה.

תיקוני באגים

  • אם מסד הנתונים כבר פתוח, כדאי להימנע מבדיקה של ספריית ההורה של מסד הנתונים ב-FrameworkSQLiteHelper. (5de86b8)
  • משתמשים בבדיקת isOpenInternal כדי לבדוק אם מסד הנתונים כבר פתוח. (e91fb35)
  • עכשיו יש טיפול טוב יותר במקרה של קריאה חוזרת (reentrant) ב-acquireTransactionThread() של Room. (219f98b). במהלך עסקה בהשהיה, Room משתמשת בשרשור מהמבצע של העסקה, מפעילה בו לולאת אירועים ומפנה אליו פעולות של בסיס נתונים בהשהיה, כך שכולן מוקפות בתוך פונקציית ה-coroutine של העסקה. בדרך כלל, חוט העסקה שונה מחוט העסקה שהתחיל את העסקה, אבל במקרים מסוימים הם זהים. כדי לטפל במקרים כאלה של קריאה חוזרת (reentrant), withTransaction() עובר עיבוד מחדש כדי שלא יהיה תלוי יותר במשימה לבקרה. במקום זאת, הוא יבצע את הבלוק של העסקה המושהית מתוך runBlocking בשרשור העסקה.

גרסה 2.5.0

גרסה 2.5.0

22 בפברואר 2023

התכונות androidx.room:room-paging-guava:2.5.0, androidx.room:room-paging-rxjava2:2.5.0 וגם androidx.room:room-paging-rxjava3:2.5.0 משוחררות. גרסה 2.5.0 כוללת את השינויים האלה.

גרסה 2.5.0

11 בינואר 2023

androidx.room:room-*:2.5.0 משוחרר. גרסה 2.5.0 כוללת את השינויים האלה.

שינויים חשובים מאז גרסה 2.4.0

  • כל המקורות של room-runtime הועברו מ-Java ל-Kotlin. שימו לב: אם הקוד שלכם ב-Kotlin, יכול להיות שתתקלו בבעיות של חוסר תאימות של המקור בגלל ההמרה של הספרייה ל-Kotlin. לדוגמה, שינוי ידוע שלא תואם למקור הוא שב-InvalidationTracker צריך עכשיו להצהיר על onInvalidate() ב-Observer שיש לו פרמטר מסוג Set ולא MutableSet. בנוסף, שיטות getter מסוימות הומרו למאפיינים שדורשים את תחביר הגישה לנכס בקבצי Kotlin. אם יש אי-תאימות משמעותית, יש לדווח על באג.
  • נוספה הערה חדשה של קיצור דרך, @Upsert, שמנסה להוסיף ישות כשאין התנגשויות עם מאפיינים ייחודיים, או לעדכן את הישות אם יש התנגשויות כאלה. (I7aaab, ‏ b/241964353)
  • נוספו פריטים חדשים של דפים בחדרים, room-paging-rxjava2,‏ room-paging-rxjava3 ו-room-paging-guava, לתמיכה בדפים בחדרים.
  • נוספו ממשקי API שמספקים שמות של טבלאות מפתחות וערכים לצורך הסרת עמימות ב-@MapInfo (Icc4b5)

גרסה 2.5.0-rc01

7 בדצמבר 2022

androidx.room:room-*:2.5.0-rc01 משוחרר. גרסה 2.5.0-rc01 כוללת את ההצהרות האלה.

  • הגרסה הזו זהה לגרסה 2.5.0-beta02.

גרסה 2.5.0-beta02

9 בנובמבר 2022

androidx.room:room-*:2.5.0-beta02 משוחרר. גרסה 2.5.0-beta02 כוללת את ההצהרות האלה.

שינויים ב-API

  • תיקון של ממשקי API שונים שמעבירים את הארגומנטים של השאילתות מ-invariant (Array<Any?>) ל-contravariant (Array<out Any?>) כדי להתאים להתנהגות של מערכי Java. (b/253531073)

גרסה 2.5.0-beta01

5 באוקטובר 2022

androidx.room:room-*:2.5.0-beta01 משוחרר. גרסה 2.5.0-beta01 כוללת את ההתחייבויות האלה.

שינויים ב-API

  • הגבלת הגרסה המינימלית שתומכת ב-@Upsert ל-API 16. הסיבה לכך היא חוסר היכולת לזהות התנגשויות של אילוצים של מפתחות ראשיים בממשקי API ישנים יותר. (I5f67f, ‏ b/243039555)

תיקוני באגים

  • תוקנה בעיה שבה טבלאות צללים יוצאו בצורה שגויה לקובצי .json של הסכימה, וכתוצאה מכך הם ניזוקו. (I4f83b, ‏ b/246751839)

גרסה 2.5.0-alpha03

24 באוגוסט 2022

androidx.room:room-*:2.5.0-alpha03 משוחרר. גרסה 2.5.0-alpha03 מכילה את ההוספות האלה.

תכונות חדשות

  • נוספה הערה חדשה של קיצור דרך, @Upsert, שמנסה להוסיף ישות כשאין התנגשויות עם מאפיינים ייחודיים, או לעדכן את הישות אם יש התנגשויות כאלה. (I7aaab, ‏ b/241964353)

תיקוני באגים

  • מעכשיו, בזמן בדיקת אילוצים של מפתחות זרים בהעברה אוטומטית, תופיע הודעת השגיאה SQLiteConstraintException במקום IllegalStateException. (I328dd)
  • תיקון שינוי לא תואם של מקור Kotlin לגבי Getter או מאפיינים של getOpenHelper, ‏ getQueryExecutor ו-getTransactionExecutor. (Iad0ac)

גרסה 2.5.0-alpha02

1 ביוני 2022

androidx.room:room-*:2.5.0-alpha02 משוחרר. גרסה 2.5.0-alpha02 כוללת את ההוספות האלה.

תכונות חדשות

שינויים ב-API

  • כל room-runtime הומר מ-Java ל-Kotlin. (If2069, b/206859668),(Ie4b55, b/206859668), (I697ee, b/206859668), (I96c25, b/206859668)

    הערה: יכול להיות שתתקלו בבעיות של חוסר תאימות למקור בגלל המרת הספרייה ל-Kotlin. אם הקוד שלכם היה ב-Kotlin והפעלתם את הגרסה הישנה של Room, הגרסה החדשה תצטרך לטפל במקרים האלה. לדוגמה, שינוי ידוע שלא תואם למקור הוא שב-InvalidationTracker צריך עכשיו להצהיר על onInvalidate() ב-Observer שיש לו פרמטר מסוג Set ולא MutableSet.

  • נוספו ממשקי API שמספקים שמות של טבלאות מפתחות וערכים לצורך הסרת עמימות ב-@MapInfo (Icc4b5)
  • תיקון בעיה בתאימות של מקור כדי לאפשר שוב את השימוש ב-@Ignore ב-getters של נכסים. (Ifc2fb)

תיקוני באגים

  • אלגוריתם היוריסטי לפתרון עמודות כפולות. מעכשיו, Room ינסה לפתור עמודות לא ברורות בשאילתה של מפה מרובה. כך אפשר למפות בצורה נכונה אובייקטים של נתוני תוצאה לאוספי טבלאות עם טבלאות בעלות אותו שם. (I4b444, ‏ b/201306012, ‏ b/212279118)

גרסה 2.5.0-alpha01

23 בפברואר 2022

androidx.room:room-*:2.5.0-alpha01 משוחרר. גרסה 2.5.0-alpha01 כוללת את ההצהרות האלה.

שינויים ב-API

  • תוקנה בעיה שבה השימוש ב-@IntDef של Room לא נאכף במקורות Kotlin. (I75f41, ‏ b/217951311)
  • תוקנה בעיית תאימות של מקור כדי לאפשר שוב את השימוש ב-@Query ב-getters של נכסים. (I0a09b)
  • המרת room-common מ-Java ל-Kotlin. (I69c48, ‏ b/206858235)

    הערה: יכול להיות שתתקלו בבעיות של חוסר תאימות למקור, כי חלק מהנכסים הועברו לאובייקטים נלווים במהלך ההמרה של הספרייה ל-Kotlin. אם הקוד היה ב-Kotlin והפעלתם את הגרסה הישנה של Room, בגרסה החדשה תצטרכו להוסיף את הסיומת ‎.Companion כדי לגשת לנכסים האלה.

  • המרת room-migration מ-Java ל-Kotlin. (I2724b, ‏ b/206858622)
  • הומרו קבצים קשורים של paging ב-room-runtime מ-Java ל-Kotlin. (I82fc8, ‏ b/206859668)
  • נוספו ממשקי API לנעילת תהליכים מרובים ולשימוש בהם ברמת FrameworkSQLite*, כדי להגן על יצירה והעברות של מסדי נתונים בפעם הראשונה בתהליכים מרובים. (Ied267, ‏ b/193182592)

תיקוני באגים

  • נוספה תמיכה בנכסים פנימיים במקורות Kotlin. זהו שינוי התנהגות קל ב-Room, שבו המערכת תשתמש בשם המקור של הפונקציות בזמן ההתאמה שלהן למאפיינים כ-getters/setters (בעבר, המערכת השתמשה בשם הפונקציה ב-JVM, שהוא שונה לפונקציות או למאפיינים פנימיים). אם אתם משתמשים בהערות מותאמות אישית מסוג @JvmName כדי להתאים בין פונקציות getter/setter לבין מאפיינים פרטיים, עליכם לבדוק שוב את הקוד שנוצר אחרי העדכון (If6531, ‏ b/205289020)

גרסה 2.4.3

גרסה 2.4.3

27 ביולי 2022

androidx.room:room-*:2.4.3 משוחרר. גרסה 2.4.3 כוללת את ההוספות האלה.

תיקוני באגים

  • תוקנה בעיה שגרמה ל-Room לא לזהות פונקציות השהיה ב-Kotlin 1.7 (b/236612358)

גרסה 2.4.2

גרסה 2.4.2

23 בפברואר 2022

androidx.room:room-*:2.4.2 משוחרר. גרסה 2.4.2 כוללת את השמירות האלה.

תיקוני באגים

  • תוקנה בעיה ביצירת קוד של פונקציית השהיה @Transaction של Dao עם גוף שיוצר שיטת ממשק ברירת מחדל בגלל הידור עם -Xjvm-default=all או רכיב מקביל. (Ia4ce5)
  • תיקון באג שבו Room יוצר קוד לשיטת שאילתה עם סוג ההחזרה Array<ByteArray>. (If086e, ‏ b/213789489)

גרסה 2.4.1

גרסה 2.4.1

12 בינואר 2022

androidx.room:room-*:2.4.1 משוחרר. גרסה 2.4.1 מכילה את ההוספות האלה.

תיקוני באגים

  • נוספה תמיכה בנכסים פנימיים במקורות Kotlin. זהו שינוי התנהגות קל ב-Room, שבו המערכת תשתמש בשם המקור של הפונקציות בזמן ההתאמה שלהן למאפיינים כ-getters/setters (בעבר, המערכת השתמשה בשם הפונקציה ב-JVM, שהוא שונה לפונקציות או למאפיינים פנימיים). אם אתם משתמשים בהערות מותאמות אישית מסוג @JvmName כדי להתאים בין פונקציות getter/setter לבין מאפיינים פרטיים, עליכם לבדוק שוב את הקוד שנוצר אחרי העדכון (If6531, ‏ b/205289020)

גרסה 2.4.0

גרסה 2.4.0

15 בדצמבר 2021

androidx.room:room-*:2.4.0 משוחרר. גרסה 2.4.0 כוללת את ההצהרות האלה.

שינויים חשובים מאז גרסה 2.3.0

  • העברות אוטומטיות: Room מציע עכשיו ממשק API ליצירת העברות באופן אוטומטי, כל עוד מתבצע ייצוא של סכימות. כדי להודיע ל-Room שהוא צריך ליצור העברה אוטומטית, אפשר להשתמש בנכס חדש @Database#autoMigrations כדי להצהיר על הגרסאות שצריך להעביר אוטומטית ממנה ואליה. כשמערכת Room זקוקה למידע נוסף לגבי שינוי שמות של טבלאות ועמודות או מחיקה שלהן, ההערה @AutoMigration יכולה להצהיר על סוג מפרט שמכיל את הקלטות האלה. פרטים נוספים זמינים במסמכי התיעוד של @AutoMigration.
  • הזרקת יחסי תלות בהעברות אוטומטיות: @ProvidedAutoMigrationSpec הוא ממשק API חדש להצהרה על כך ש-AutoMigrationSpec יסופק בסביבת זמן הריצה באמצעות RoomDatabase.Builder#addAutoMigrationSpec(). כך אפשר לספק מפרט כזה באמצעות מסגרת להזרקת יחסי תלות כשיש צורך ביחסי תלות מורכבים.
  • תמיכה של Migration Test Helper בהעברות אוטומטיות: MigrationTestHelper של Room עודכן כדי לתמוך בהעברות אוטומטיות באמצעות ממשק API חדש של קונסטרוקטור שמקבל את הכיתה של מסד הנתונים שנמצאת בבדיקה. כך, הכלי יוכל להוסיף באופן אוטומטי העברות אוטומטיות באותו אופן במהלך runMigrationsAndValidate.
  • תמיכה בחלוקה לדפים של חדרים: השקנו את androidx.room:room-paging, שמספק תמיכה מקורית בחלוקה לדפים 3.0 לשאילתות של חדרים שמחזירות את הערך androidx.paging.PagingSource.
  • שיטות של שאילתות יחסיות: Room תומך עכשיו בשיטות @Dao עם סוגי החזרה של מפות מרובות, שמועילות לביטויי JOIN. סוגי המיפויים המרובים הנתמכים הם Map, ‏ SparseArray, ‏ LongSparseArray, וגם ImmutableMap, ‏ ImmutableSetMultimap ו-ImmutableListMultimap של Guava.

גרסה 2.4.0-rc01

1 בדצמבר 2021

androidx.room:room-*:2.4.0-rc01 משוחרר. גרסה 2.4.0-rc01 כוללת את ההצהרות האלה.

תכונות חדשות

  • מעדכנים את התלות של Room ב-KSP ל-1.6.0-1.0.1 כדי לתמוך ב-Kotlin 1.6

גרסה 2.4.0-beta02

17 בנובמבר 2021

androidx.room:room-*:2.4.0-beta02 משוחרר. גרסה 2.4.0-beta02 מכילה את ההצהרות האלה.

תכונות חדשות

  • הוספנו תמיכה ב-SparseArray וב-LongSparseArray ב-@MapInfo. (Ic91a2b/138910317)

תיקוני באגים

  • הוספנו ניתוח TypeConverter חדש שמביא בחשבון מידע על יכולת החזקה של ערכים null בסוגי נתונים. המידע הזה זמין רק ב-KSP, ולכן הוא מופעל כברירת מחדל רק ב-KSP. אם הוא יגרום לבעיות, תוכלו להשבית אותו על ידי העברת הערך room.useNullAwareTypeAnalysis=false למעבד ההערות. אם זה יקרה, יש לדווח על באג כי הדגל הזה יוסר בעתיד. עם הניתוח החדש של TypeConverter, מומלץ לספק רק TypeConverters מקבלים שאינם null, כי לניתוח החדש יש אפשרות לעטוף אותם בבדיקת null. חשוב לזכור שלמשתמשים שמשתמשים ב-KAPT או ב-Java כמעבדי ההערות (בניגוד ל-KSP) אין מידע על יכולת החזקה של משתנים מסוגים שונים. (Ia88f9, ‏ b/193437407)
  • תיקון באג שבו ה-Room לא הצליח להיערך עם שגיאת SQL כשישות FTS הצהירה על שימוש במפַתח ICU. (I00db9, ‏ b/201753224)
  • פתרון בעיה בהעברות אוטומטיות לגבי עמודה חדשה שנוספה לישות מוטמעת בין גרסאות. (I5fcb1b/193798291)
  • פתרנו בעיה בקשר לסוגים של חזרות של שיטות של שאילתות יחסיות בשאילתות LEFT JOIN. בעקבות השינויים האלה, במקרה שבו יש מיפוי אחד-לרבים, האוסף שמוחזר למפתח לא יכלול את אובייקט הערך הלא חוקי אם הוא לא נמצא בסמן. אם לא יימצאו ערכים תקינים, המפתח ימופה לאוסף ריק. (Id5552b/201946438)
  • תוקנה בעיה בהעברה האוטומטית שבה לא ניתן היה להימנע מהצגת מילות מפתח של SQLite בשמות עמודות. (Idbed4b/197133152)

גרסה 2.4.0-beta01

13 באוקטובר 2021

androidx.room:room-*:2.4.0-beta01 משוחרר. גרסה 2.4.0-beta01 מכילה את ההתחייבויות האלה.

תיקוני באגים

  • תוקנה בעיה שבה לא נוספו עמודות חדשות במעברים אוטומטיים, אם לטבלה אחרת באותו מעבר אוטומטי הייתה גם עמודה חדשה עם אותו שם. (Ia5db5, ‏ b/200818663)
  • ההטמעה של PagingSource שנוצרת על ידי דפדוף בין חדרים משתמשת עכשיו ב-queryExecutor שמוענק דרך RoomDatabase.Builder, כך שאפשר לשנות אותה, במקום Dispatchers.IO בעבר. (Iae259)

גרסה 2.4.0-alpha05

29 בספטמבר 2021

androidx.room:room-*:2.4.0-alpha05 משוחרר. גרסה 2.4.0-alpha05 מכילה את ההצהרות האלה על ביצוע שינויים (commits).

תכונות חדשות

שינויים ב-API

  • הוספנו מאפיין חדש להערה TypeConverters כדי לאפשר למפתחים להשבית ממירים מובנים של Enum ו-UUID. הממירים האלה מופעלים כברירת מחדל, אבל אפשר להשבית אותם ברמת היקף מסוים או ברמת מסד הנתונים כולו. לפרטים נוספים, אפשר לעיין במסמכי התיעוד של TypeConverters. (36ae9e, ‏ b/195413406)

  • תמיכה במפתחות/ערכים שאינם POJO לסוגי החזרה של Multimap ב-DAOs באמצעות ההערה @MapInfo. (I4d704)

השדה @MapInfo יהיה נדרש כאשר עמודת המפתח או עמודת הערך במפה יהיו מעמודה אחת. לדוגמה:

@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>
  • צריך להגדיר את room-paging כארטיפקט נדרש כשמשתמשים ב-Paging3 עם Room. (Ieaffe)

תיקוני באגים

  • תוקנה בעיה שבה תוצאות של שאילתות של מפות מרובות לא היו מסודרות בצורה נכונה כשהשאילתה הכילה תנאי ORDER BY של עמודה ממפתח המפה. (I6b887)

תרומה חיצונית

  • נוספה ממשק API חדש כדי לציין את סדר האינדקס ב-@Index. תודה ל-Nikita Zhelonkin. (I033fc)

גרסה 2.4.0-alpha04

21 ביולי 2021

androidx.room:room-*:2.4.0-alpha04 משוחרר. גרסה 2.4.0-alpha04 מכילה את ההצהרות האלה.

תכונות חדשות

  • עכשיו יש ב-Room תמיכה בשיטות @Dao עם סוגי החזרים של מפות מרובות, ששימושיות לביטויי JOIN. סוגי המיפויים המרובים הנתמכים הם Map, וגם ImmutableMap,‏ ImmutableSetMultimap ו-ImmutableListMultimap של Guava.

    דוגמאות לשאילתות של מפות מרובות:

    מפת יחסים אחד-לאחד

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

    מפת יחסים מסוג אחד-ל-רבים (מפת-על רגילה)

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

    אפשר גם לעטוף את התוצאה של המיפוי המרובה בסוגים הנתמכים של חזרה אסינכרוני, כמו LiveData,‏ Observable של Rx או פונקציות קורוטין Flow.

קריאה לאנשים בחדר

  • androidx.room:room-paging שוחרר, ומספק תמיכה מקומית ב-Paging 3.0 לשאילתות Room שמחזירות את הערך androidx.paging.PagingSource.

    @Dao
    interface UserDao {
      @Query("SELECT * FROM users ORDER BY id ASC")
      fun loadUsers(): PagingSource<Int, User>
    }
    
  • הארטיפקט הזה מחליף את ההטמעה של androidx.paging.PagingSource שנוצרה על ידי Room בהטמעה שנוצרה על גבי ממשקי ה-API של Paging 3.0. ההטמעה החדשה של PagingSource מפענחת מפתחות באופן שונה, כך שכל מפתח שסופק באופן ידני ל-PagingSource של Room יצטרך להביא בחשבון את שינוי ההתנהגות הזה, כולל initialKey שהוענק באמצעות המבנה הגנרטיבי של Pager. הדפים יתחילו להיטען מה-Key, כאשר Key הוא הפריט הראשון שנטען. ההתנהגות הזו שונה מההתנהגות הקיימת, שבה LoadParams.Refresh.Key נחשב למיקום הגלילה של המשתמש והפריטים נטענים גם לפני וגם אחרי המקש.

  • הארטיפקט הוא אופציונלי, וביטול ההסכמה יוביל לשימוש בתמיכה הקיימת ב-Paging 3.0 שהוצגה ב-Room 2.3. עם זאת, במהדורה עתידית, האפשרות הזו תהיה חובה למי שמשתמש ב-Room עם דפדוף 3.0. כדי להביע הסכמה, מוסיפים את הארטיפקט החדש של דפדוף בין חדרים לנתיב הספריות. אם משתמשים ב-Gradle, אפשר להוסיף את קטע הקוד הבא לקובץ build.gradle:

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

תיקוני באגים

  • תיקון בעיה בהעברות אוטומטיות לגבי טיפול בהפרות של מפתחות זרים. (b/190113935)

גרסה 2.4.0-alpha03

16 ביוני 2021

androidx.room:room-*:2.4.0-alpha03 משוחרר. גרסה 2.4.0-alpha03 מכילה את ההצהרות האלה.

שינויים ב-API

  • מעדכנים את MigrationTestHelper של Room כדי לתמוך בהעברות אוטומטיות על ידי מתן ממשק API חדש ליצירת אובייקטים שמקבל את הכיתה של מסד הנתונים שנמצאת בבדיקה. כך, הכלי יוכל להוסיף באופן אוטומטי העברות אוטומטיות באותו אופן במהלך runMigrationsAndValidate.

תיקוני באגים

  • תוקנה בעיה בספרייה המקורית של Room ל-SQLite כדי לתמוך בצ'יפים מסוג M1 של Apple. (b/174695268

  • תוקנה בעיה שבה מערכת Room לא היתה מחזירה שגיאה כשסוג ההחזרה של פונקציית @Transaction היה Flow‏ (I56ddd, ‏ b/190075899)

  • תוקנה בעיה בהעברות אוטומטיות לגבי אינדקסים. b/177673291

עדכוני יחסי תלות

  • תמיכת KSP של Room תלויה עכשיו ב-KSP 1.5.10-1.0.0-beta01. (1ecb11, ‏ b/160322705)

גרסה 2.4.0-alpha02

5 במאי 2021

androidx.room:room-*:2.4.0-alpha02 משוחרר. גרסה 2.4.0-alpha02 מכילה את ההצהרות האלה.

שינויים ב-API

  • @ProvidedAutoMigrationSpec הוא ממשק API חדש להצהרה על כך ש-AutoMigrationSpec יסופק במהלך זמן הריצה דרך RoomDatabase.Builder#addAutoMigrationSpec(). כך אפשר לספק מפרט כזה באמצעות מסגרת להזרקת יחסי תלות כשיש צורך ביחסי תלות מורכבים.

תיקוני באגים

  • תוקנה בעיה בהעברות אוטומטיות שבהן לא נוצרו מחדש כראוי @DatabaseViews.

תרומה חיצונית

  • תוקנה בעיה ב-JournalMode.TRUNCATE של Room, שבה לפעמים ההפעלה החוזרת (callback) של InvalidationTracker הייתה לא חוקית, מאוחרת מדי או לא התרחשה בכלל. תודה ל-Uli Bubenheimer | bubenheimer@users.noreply.github.com‏ (b/154040286)

גרסה 2.4.0-alpha01

21 באפריל 2021

androidx.room:room-*:2.4.0-alpha01 משוחרר. גרסה 2.4.0-alpha01 מכילה את ההצהרות האלה.

תכונות חדשות

  • העברות אוטומטיות: Room מציע עכשיו ממשק API ליצירת העברות באופן אוטומטי, כל עוד מתבצע ייצוא של סכימות. כדי להודיע ל-Room שהוא צריך ליצור העברה אוטומטית, אפשר להשתמש בנכס חדש @Database#autoMigrations כדי להצהיר על הגרסאות שצריך להעביר אוטומטית ממנה ואליה. כשמערכת Room זקוקה למידע נוסף לגבי שינוי שמות של טבלאות ועמודות או מחיקה שלהן, ההערה @AutoMigration יכולה להצהיר על סוג מפרט שמכיל את הקלטות האלה. פרטים נוספים זמינים במסמכי התיעוד של @AutoMigration.

תיקוני באגים

  • תוקנה בעיה שבה defaultValue עם סוגריים מרובעים נוספים אומתו באופן שגוי על ידי אימות הסכימה של Room. b/182284899

גרסה 2.3.0

גרסה 2.3.0

21 באפריל 2021

androidx.room:room-*:2.3.0 משוחרר. גרסה 2.3.0 מכילה את ההצהרות האלה.

שינויים חשובים מאז גרסה 2.2.0

  • תמיכה מובנית ב-Enum: אם לא צוין ממיר אחר, Room ישתמש עכשיו כברירת מחדל בממיר מסוג Enum למחרוזת ולהפך. אם כבר קיים ממיר טיפוסים של enum, המערכת של Room תעדיף להשתמש בו על פני ממיר ברירת המחדל.
  • החזרה (callback) לשאילתות: מעכשיו, ב-Room יש ממשק API כללי להחזרה (callback) בשם RoomDatabase.QueryCallback, שמופעל כששאילתות עומדות להריץ. החזרה כזו יכולה להיות שימושית לרישום ביומן ב-builds לניפוי באגים. אפשר להגדיר את הקריאה החוזרת באמצעות RoomDatabase.Builder#setQueryCallback().
  • שיפור מובנה: ל-Room יש עכשיו ממשקי API ליצירת מסד נתונים באמצעות מסד נתונים מובנה מראש שנקרא ממקור קלט. כך אפשר לטפל במקרים שבהם מסד הנתונים שנארז מראש עבר דחיסת GZIP.
  • ממירי טיפוסים שסופקו: ל-Room יש עכשיו ממשקי API לצורך מתן מופעים של ממירי טיפוסים, כך שהאפליקציה יכולה לשלוט בהפעלה שלהם. כדי לסמן ממיר טיפוסים שיסופק ל-Room, משתמשים בהערה החדשה @ProvidedTypeConverter.
  • תמיכה ב-RxJava3: מעכשיו אפשר להשתמש בסוגי RxJava3 ב-Room. בדומה ל-RxJava2, אפשר להצהיר על שיטות DAO שהסוג המוחזר שלהן הוא Flowable,‏ Single,‏ Maybe ו-Completable. בנוסף, יש ארטיפקט חדש androidx.room:room-rxjava3 שזמין לתמיכה ב-RxJava3.
  • תמיכה ב-Paging 3.0: מעכשיו, ב-Room תהיה תמיכה ביצירת הטמעות לשיטות עם הערות מסוג @Query, שהסוג המוחזר שלהן הוא androidx.paging.PagingSource.

גרסה 2.3.0-rc01

24 במרץ 2021

androidx.room:room-*:2.3.0-rc01 משוחרר. גרסה 2.3.0-rc01 כוללת את ההצהרות האלה.

תיקוני באגים

  • תוקנה בעיה שמונעת שימוש בשאילתות Coroutine Flow שנוצרו על ידי Room בבלוק withTransaction מושהה. (I797bf)

גרסה 2.3.0-beta03

10 במרץ 2021

androidx.room:room-*:2.3.0-beta03 משוחרר. גרסה 2.3.0-beta03 מכילה את ההצהרות האלה.

תכונות חדשות

  • נוספה תמיכה בתכנות KSP עם הידור מצטבר. (I031c1, ‏ b/176453350)

תיקוני באגים

  • תוקן באג שגרם לכך שיצירת PagingSource ב-thread הראשי עלולה לגרום ל-ANR. (I42b74, ‏ b/181221318)
  • תוקנה החשיפה של @ExperimentalRoomApi כך שתהיה 'גלויה לכולם' במקום 'פרטית לחבילה'. (b/181356119)

תרומה חיצונית

  • מאפשרים ל-Room לקבל סוג החזרה של POJO בשיטת DAO עם הערה @Query, כשהיא כוללת גם הערה @SkipQueryVerification. Room יעשה כמיטב יכולתו כדי להמיר את התוצאה של השאילתה לסוג ההחזרה של POJO, באותו אופן שבו הוא עושה זאת בשיטת DAO עם הערה @RawQuery. תודה ל-'Markus Riegel | hey@marcorei.com'. (I45acb)

גרסה 2.3.0-beta02

18 בפברואר 2021

androidx.room:room-*:2.3.0-beta02 משוחרר. גרסה 2.3.0-beta02 מכילה את ההצהרות האלה.

תכונות חדשות

  • עכשיו יש ב-Room תמיכה ניסיונית ב-Kotlin Symbol Processing‏ (KSP).

    KSP הוא תחליף ל-KAPT שמאפשר להריץ מעבדי הערות באופן מקורי במהדר של Kotlin, וכך לקצר משמעותית את זמני ה-build.

    כדי להשתמש ב-Room עם KSP, אפשר להחיל את הפלאגין של KSP ל-Gradle ולהחליף את ההגדרה kapt בקובץ ה-build ב-ksp. לדוגמה, במקום kapt 'androidx.room:room-compiler:2.3.0-beta02' צריך להשתמש ב-ksp 'androidx.room:room-compiler:2.3.0-beta02'. פרטים נוספים זמינים במסמכי התיעוד של KSP.

    חשוב לזכור ש-KSP הוא ניסיוני, ולכן מומלץ להמשיך להשתמש ב-KAPT לקוד בסביבת הייצור. קיצור זמני ה-build רלוונטי רק אם אין מעבדים אחרים שמשתמשים ב-KAPT. בעיות ידועות מפורטות ב-b/160322705.

גרסה 2.3.0-beta01

27 בינואר 2021

androidx.room:room-*:2.3.0-beta01 משוחרר. גרסה 2.3.0-beta01 מכילה את ההצהרות האלה.

תכונות חדשות

  • מסדי נתונים שאפשר לסגור אוטומטית: עכשיו יש ל-Room אפשרות לסגור מסדי נתונים שלא ניגשים אליהם אחרי פרק זמן מסוים. זוהי תכונה ניסיונית שאפשר להפעיל באמצעות קריאה ל-RoomDatabase.Builder#setAutoCloseTimeout(). התכונה הזו שימושית לאפליקציות עם כמה מסדי נתונים.

תיקוני באגים

  • תוקנה בעיה שבה שיטות Dao עם כמה שיטות @Update או @Delete עם אסטרטגיות התנגשות שונות יוצרות קוד עם אחת מהאסטרטגיות בלבד, ובפועל מתעלמות מהאסטרטגיה שהוגדרה. (‎/I0b90d, ‏ b/176138543)

גרסה 2.3.0-alpha04

16 בדצמבר 2020

androidx.room:room-*:2.3.0-alpha04 משוחרר. גרסה 2.3.0-alpha04 מכילה את ההצהרות האלה.

תכונות חדשות

  • מעכשיו, ל-Room יש API כללי להודעות חזרה (callback) RoomDatabase.QueryCallback, לשימוש כששאילתות עומדות להתבצע. ה-API הזה יכול להיות שימושי לצורך רישום ביומן בגרסאות build לצורך ניפוי באגים. אפשר להגדיר את הקריאה החוזרת באמצעות RoomDatabase.Builder#setQueryCallback(). (Iaa513, ‏ b/174478034, ‏ b/74877608)
  • אם לא תספקו ממיר, Room ישתמש כברירת מחדל בממיר מסוג Enum למחרוזת ולהפך. אם כבר קיים ממיר טיפוסים של enum, המערכת של Room תעדיף להשתמש בו על פני ממיר ברירת המחדל. (b/73132006)

בעיה ידועה

  • אם כבר קיים ממיר מסוג חד-כיווני לקריאה של Enum, יכול להיות ש-Room ישתמש בטעות בממיר המובנה של String ל-Enum, וזה לא תמיד רצוי. זו בעיה ידועה, ואפשר לפתור אותה על ידי הפיכת הממיר לממיר דו-כיווני. מידע נוסף זמין בb/175707691

תיקוני באגים

  • תוקנה בעיה שבה Room השבית באופן שגוי את העיבוד המצטבר של הערות בגרסאות JDK חדשות יותר. (b/171387388)
  • תוקנה בעיה ב-Room בנוגע לאיתור הכיתה שנוצרה כשמשתמשים במספר מערכי טעינה של מחלקות. תודה על התיקון של Serendipity | 892449346@qq.com‏! (b/170141113)
  • תוקנה בעיה שבה Room יוצר קוד שגוי כשל-@Dao ב-Kotlin יש סוג בסיס שהגנריקה שלו היא פרימיטיבית ב-JVM. (b/160258066)

תרומה חיצונית

  • עכשיו ברירת המחדל של Room היא להשתמש ב-beginTransactionNonExclusive אם מצב WAL מופעל ו-API הוא 16 או יותר. תודה ל-'Ahmed I. Khalil | ahmedibrahimkhali@gmail.com’! (b/126258791)

גרסה 2.3.0-alpha03

14 באוקטובר 2020

androidx.room:room-*:2.3.0-alpha03 משוחרר. גרסה 2.3.0-alpha03 מכילה את ההוספות האלה.

תכונות חדשות

  • ל-Room יש עכשיו ממשקי API שמספקים מופעים של ממירי טיפוסים, כך שהאפליקציה יכולה לשלוט בהפעלה שלהם. כדי לסמן ממיר טיפוסים שיימסר ל-Room, משתמשים בהערה החדשה @ProvidedTypeConverter. תודה ל-mzgreen‏ yairobbe@gmail.com.‏ (Ie4fa5, ‏ b/121067210)

  • ל-Room יש עכשיו ממשקי API ליצירת מסד נתונים באמצעות מסד נתונים ארוז מראש שנקרא מזרם קלט. כך אפשר לטפל במקרים שבהם מסד הנתונים שנארז מראש עבר דחיסת GZIP. תודה ל-'Ahmed El-Helw ahmedre@gmail.com' (3e6792, b/146911060)

שינויים ב-API

  • הוסף יעד חסר להערה @ForeignKey כדי למנוע שימוש בה מחוץ להערה @Entity. (Iced1e)

  • השדה mCallbacks ב-RoomDatabase.java מוסתר עכשיו. (d576cb, ‏ b/76109329)

תיקוני באגים

  • עדכון למסמכי התיעוד של TypeConverters כדי להבהיר שאפשר להשתמש ב-TypeConverters רק כדי להמיר עמודות או שדות, ולא שורות. (I07c56, ‏ b/77307836)

  • עדכון ל-DaoProcessor לתיקון שגיאת מהדר ב-Dao עם סופר-טיפוס גנרי עם 'פרימיטיבים' של Kotlin. (Ice6bb, ‏ b/160258066)

  • עדכון המסמך בנושא שיטות להוספה/הסרה של משגיחים כדי להבהיר את הנושא של יצירת שרשור (Ifd1d9, ‏ b/153948821)

  • תוקנה בעיה ב-Room שבה מתבצע אימות שגוי של טבלאות FTS שהוצהרה עליהן עמודת rowid. (d62ebc, ‏ b/145858914)

תרומות חיצוניות

  • תיקון בעיות שקשורות לאזור גיאוגרפי עם שפה טורקית (5746e3), b/68159494

  • מחליפים את ConcurrentHashMap בתוך RoomDatabase ב-Collections.synchronizedMap() כדי למנוע בעיות ב-Android Lollipop‏ (d1cfc7, ‏ b/162431855)

  • מוסיפים קריאה חוזרת (callback) מסוג onOpenPrepackagedDatabase למקרה שמעתיקים מסד נתונים ארוז מראש. (I1ba74, ‏ b/148934423)

גרסה 2.3.0-alpha02

22 ביולי 2020

androidx.room:room-*:2.3.0-alpha02 משוחרר. גרסה 2.3.0-alpha02 מכילה את ההוספות האלה.

תכונות חדשות

  • תמיכה ב-RxJava3: מעכשיו אפשר להשתמש בסוגי RxJava3 ב-Room. בדומה ל-RxJava2, אפשר להצהיר על שיטות DAO שהסוג המוחזר שלהן הוא Flowable,‏ Single,‏ Maybe ו-Completable. בנוסף, יש ארטיפקט חדש androidx.room:room-rxjava3 שזמין לתמיכה ב-RxJava3. (b/152427884)

שינויים ב-API

  • עכשיו יש תמיכה בהצהרה על @TypeConverter בכיתה Object של Kotlin. (b/151110764)
  • האפשרות של עיבוד הערות מצטבר בחדר מופעלת עכשיו כברירת מחדל. (b/112110217)

גרסה 2.3.0-alpha01

10 ביוני 2020

androidx.room:room-*:2.3.0-alpha01 משוחרר. גרסה 2.3.0-alpha01 מכילה את ההוספות האלה.

תכונות חדשות

  • תמיכה ב-Paging 3.0: מעכשיו, ב-Room תהיה תמיכה ביצירת הטמעות של שיטות@Query עם הערות, שהסוג המוחזר שלהן הוא androidx.paging.PagingSource.

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

שינויים ב-API

  • @RewriteQueriesToDropUnusedColumns היא הערה נוחה חדשה שגורמת ל-Room לכתוב מחדש את ההקרנה '*' בשאילתה, כך שעמודות שלא בשימוש בתוצאה יוסרו.
  • אפשרות המעבד room.expandProjection הוצאה משימוש. משתמשים ב-@RewriteQueriesToDropUnusedColumns כתחליף לשאילתות של אופטימיזציה של חדרים עם תחזיות של כוכבים. הערה: הערך @RewriteQueriesToDropUnusedColumns לא מחליף את הפתרון לסכסוך עמודות room.expandProjection שמוצג לגבי סוגי החזרים שהכילו שדות @Embedded.

תיקוני באגים

  • תוקן באג שבו מערכת Room לא זיהתה בצורה נכונה את גרסת ה-JDK ששימשה להפעלת מעבד ההערות המצטבר. תודה ל-Blaz Solar‏ (me@blaz.solar)‏ (b/155215201)
  • עכשיו, Room מטמיע את התלות שלו ב-ANTLR במעבד ההערות כדי למנוע התנגשויות גרסאות עם מעבדים אחרים שמשתמשים גם ב-ANTLR. (b/150106190)

גרסה 2.2.6

גרסה 2.2.6

16 בדצמבר 2020

androidx.room:room-*:2.2.6 משוחרר. גרסה 2.2.6 מכילה את ההוספות האלה.

תיקוני באגים

  • תוקנה בעיה שבה Room השבית באופן שגוי את העיבוד המצטבר של הערות בגרסאות JDK חדשות יותר. (b/171387388)

גרסה 2.2.5

גרסה 2.2.5

18 במרץ 2020

androidx.room:room-*:2.2.5 משוחרר. גרסה 2.2.5 כוללת את ההוספות האלה.

תיקוני באגים

  • מגדירים את MultiInstanceInvalidationService כ-directBootAware. תודה ל-'Mygod contact-git@mygod.be' (b/148240967)
  • תוקן באג שגרם לקריסה כשהשבתת השגיאות בכמה מכונות הייתה מופעלת ומסד הנתונים הכיל ישות FTS. (b/148969394)
  • תוקנה בעיה בטעינה של הספריות הילידיות של SQLite במעבד ההערות של Room, שגרמה לקריסה של המהדר בגלל הידור במקביל. (b/146217083)

גרסה 2.2.4

גרסה 2.2.4

19 בפברואר 2020

המשתנים 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 ו-androidx.room:room-testing:2.2.4 משוחררים. גרסה 2.2.4 מכילה את ההצהרות האלה.

תיקוני באגים

  • תוקנה בעיה בהשהיית עסקאות, שבה הן היו נתקעות אם קורוטין בוטל במהירות לפני שהעסקה התחילה בפועל. (b/148181325)
  • תוקנה בעיה שבה נעשה שימוש שגוי ב-@Generated במהלך ה-build עם JDK 9. (b/146538330)
  • תוקנה בעיה שבה Room יוצר קוד שגוי כשממשק DAO ב-Kotlin מכיל פונקציה קונקרטית. (b/146825845)

גרסה 2.2.3

גרסה 2.2.3

18 בדצמבר 2019

androidx.room:room-*:2.2.3 משוחרר. גרסה 2.2.3 מכילה את ההוספות האלה.

תיקוני באגים

  • תוקנה באג שבו Room לא הצליח לאמת מסד נתונים שלא עבר העברה כלשהי וכלל גיבוב מדור קודם עם אינדקסים בסכימה שלו. (b/139306173)

גרסה 2.2.2

גרסה 2.2.2

20 בנובמבר 2019

androidx.room:room-*:2.2.2 משוחרר. גרסה 2.2.2 כוללת את ההצהרות האלה.

תיקוני באגים

  • תוקנה באג שבו איסוף של קשר אחד-לאחד עם יותר מ-999 שורות גרם ל-Room להחזיר פריטים קשורים עם ערך null. (b/143105450)

גרסה 2.2.1

גרסה 2.2.1

23 באוקטובר 2019

androidx.room:room-*:2.2.1 משוחרר. גרסה 2.2.1 מכילה את ההוספות האלה.

תיקוני באגים

  • תוקן באג שבו מערכת Room הזהירה באופן שגוי לגבי CURSOR_MISMATCH כשאפשרות המהדרר expandProjection מופעלת. (b/140759491)
  • נוספה מנגנון לניסיון חוזר לטיפול בספרייה המקורית החסרה שמשמש לאימות שאילתות במהלך הזמן של הידור.

גרסה 2.2.0

גרסה 2.2.0

9 באוקטובר 2019

androidx.room:room-*:2.2.0 משוחרר. גרסה 2.2.0 כוללת את ההצהרות האלה.

שינויים חשובים מאז גרסה 2.1.0

  • מסד נתונים ארוז מראש: שני ממשקי API חדשים ב-RoomDatabase.Builder זמינים עכשיו ליצירת RoomDatabase על סמך קובץ מסד נתונים שכבר מאוכלס. הערך createFromAsset() מיועד למקרה שבו קובץ מסד הנתונים המאוכלס מראש נמצא בתיקיית הנכסים של קובץ ה-APK, והערך createFromFile() מיועד למקרה שבו הקובץ נמצא במיקום שרירותי. השימוש ב-API האלה משנה את ההתנהגות של העברות נתונים הרסניות, כך שבמהלך העברה חלופית, Room ינסה להעתיק מחדש את מסד הנתונים המאוכלס מראש, אם הוא זמין. אחרת, הוא פשוט ימחק ויצור מחדש את כל הטבלאות. b/62185732
  • ערכי ברירת מחדל של סכימות: מעכשיו יש למאפיין @ColumnInfo מאפיין חדש, defaultValue, שאפשר להשתמש בו כדי לציין את ערך ברירת המחדל של עמודה. ערכי ברירת המחדל הם חלק מתבנית מסד נתונים, והם יאומתו במהלך ההעברות אם יצוינו. b/64088772
  • יחסים רבים לרבים: ל-@Relation יש עכשיו מאפיין חדש associateBy, שמקבל הערה חדשה @Junction, שמשמשת להצהרה על קשר שצריך להתקיים דרך טבלת צומת (שנקראת גם טבלת צירוף). b/69201917
  • יחסים אחד-לאחד: ההגבלה בשדות POJO עם הערה @Relation שהם מסוג List או Set בוטלה, וכך אפשר לייצג יחסים עם ערך יחיד. b/62905145
  • ישות היעד: להערות ה-DAO @Insert,‏ @Update ו-@Delete יש עכשיו מאפיין חדש, targetEntity, שמאפשר לציין את טבלת היעד ששיטת ה-DAO אמורה לפעול עליה. כך הפרמטרים של שיטות ה-DAO האלה יכולים להיות POJOs שרירותיים שיתורגמו כישויות חלקיות. בפועל, זה מאפשר להוסיף, למחוק ולעדכן נתונים באופן חלקי. b/127549506
  • Coroutines Flow: עכשיו אפשר להגדיר לסוג ההחזרה של שיטות DAO מסוג @Query את הערך Flow<T>. אם הטבלאות למעקב בשאילתה לא יהיו תקינות, תהליך ה-Flow המוחזר ישדר מחדש קבוצה חדשה של ערכים. הצהרה על פונקציית DAO עם סוג החזרה Channel<T> היא שגיאה. במקום זאת, מומלץ להשתמש ב-Flow ואז להשתמש בפונקציות הסמוכות כדי להמיר את ה-Flow ל-Channel. b/130428884
  • Gradle Incremental Annotation Processor: Room הוא עכשיו מעבד הערות מבודד של Gradle, ואפשר להפעיל את היכולת להגדיל את הערות באמצעות אפשרות המעבד room.incremental. מידע נוסף זמין במאמר אפשרויות של Room Compiler. אם תיתקלו בבעיות, תוכלו לדווח על באג כאן. אנחנו מתכננים להפעיל את האפשרות להגדלת הערך כברירת מחדל בגרסה יציבה עתידית. b/112110217
  • הרחבת הקרנות (projections): נוספה אפשרות חדשה וניסיונית למהדר room.expandProjection, שמובילה לכך ש-Room יכתוב מחדש שאילתה עם הקרנה מסוג כוכב כך שתכלול רק את העמודות בסוג ה-POJO המוחזר. לדוגמה, לשיטת DAO עם @Query("SELECT * FROM Song") שמחזירה POJO בשם SongIdAndTitle עם שני שדות בלבד. לאחר מכן, Room תכתוב מחדש את השאילתה ל-SELECT id, title FROM Song כך שתתבצע אחזור של קבוצת העמודות המינימלית שתוביל לסוג ההחזרה הרצוי. כך אפשר למנוע את ההצגה של האזהרה CURSOR_MISMATCH שמופיעה כשהשאילתה מחזירה עמודות נוספות שלא תואמות לשום שדה בסוג ה-POJO המוחזר.

גרסה 2.2.0-rc01

5 בספטמבר 2019

androidx.room:room:2.2.0-rc01 משוחרר. כאן אפשר למצוא את ההתחייבויות (commits) שכלולות בגרסה הזו.

לא בוצעו שינויים גלויים לכולם מאז 2.2.0-beta01.

גרסה 2.2.0-beta01

22 באוגוסט 2019

androidx.room:room-*:2.2.0-beta01 משוחרר. כאן אפשר למצוא את ההתחייבויות (commits) שכלולות בגרסה הזו.

תיקוני באגים

  • תוקן באג שבו שאילתה של Coroutine Flow הפסיקה לשדר ערכים חדשים אחרי זמן מסוים. (b/139175786)
  • תוקן באג שבו Room לא קיבל קוד גיבוב של סכימה מדור קודם בזמן פתיחת מסד נתונים שלא עבר העברה מאז Room 1.0, מה שגרם לקריסה בסביבת זמן הריצה בגלל סכימה לא חוקית. (b/139306173)

גרסה 2.2.0-alpha02

7 באוגוסט 2019

androidx.room:room-*:2.2.0-alpha02 משוחרר. כאן אפשר למצוא את ההתחייבויות (commits) שכלולות בגרסה הזו.

תכונות חדשות

  • Coroutines Flow: עכשיו אפשר להגדיר לסוג ההחזרה של שיטות DAO מסוג @Query את הערך Flow<T>. אם הטבלאות למעקב בשאילתה לא יהיו תקינות, תהליך ה-Flow המוחזר ישדר מחדש קבוצה חדשה של ערכים. הצהרה על פונקציית DAO עם סוג החזרה Channel<T> היא שגיאה. במקום זאת, מומלץ להשתמש ב-Flow ואז להשתמש בפונקציות הסמוכות כדי להמיר את ה-Flow ל-Channel. b/130428884
  • הרחבת הקרנות (projections): נוספה אפשרות חדשה וניסיונית למהדר room.expandProjection, שמובילה לכך ש-Room יכתוב מחדש שאילתה עם הקרנה מסוג כוכב כך שתכלול רק את העמודות בסוג ה-POJO המוחזר. לדוגמה, לשיטת DAO עם @Query("SELECT * FROM Song") שמחזירה POJO בשם SongIdAndTitle עם שני שדות בלבד. לאחר מכן, Room תכתוב מחדש את השאילתה ל-SELECT id, title FROM Song כך שתתבצע אחזור של קבוצת העמודות המינימלית שתוביל לסוג ההחזרה הרצוי. כך אפשר למנוע את ההצגה של האזהרה CURSOR_MISMATCH שמופיעה כשהשאילתה מחזירה עמודות נוספות שלא תואמות לשום שדה בסוג ה-POJO המוחזר.
  • onDestructiveMigrate הוא ממשק API חדש להודעות חזרה (callback) שנוסף ל-RoomDatabase.Callback במקרים שבהם Room מעביר באופן הרסני מסד נתונים. b/79962330

תיקוני באגים

  • תוקן באג שבו Room יוצר קוד שגוי באמצעות שיטה כ-setter של שדה כשהשדה מוגן. b/136194628
  • תוקן באג שגרם ל-InvalidationTracker להפעיל NPE בתהליך שני כשהשבתת הכפילויות הופעלה והשירות להשבתה הושבת. b/137454915
  • תוקן באג שבו Room לא זיהה בצורה נכונה את סוג ההחזרה של פונקציית השהיה שעברה בירושה עם הערה @RawQuery. b/137878827
  • עדכנו את הקוד שנוצר עבור @Relation כשהמפתח המשויך הוא מסוג BLOB, כך שישתמש ב-ByteBuffer שניתן להשוות. b/137881998
  • תוקנה באג שבו מערכת Room התלוננה על חסרים setters ב-POJOs ששימשו כפרמטרים חלקיים של ישויות של @Insert, ‏ @Update ו-@Delete. b/138664463
  • תוקן באג שבו מערכת Room התלוננה על חסרים פונקציות getter ו-setter לעמודה שנדחית באמצעות @Entity כשמשתמשים בכיתה של הישות בשיטות מסוימות של DAO. b/138238182
  • תוקן באג שבו Room לא ממירה בצורה נכונה ארגומנטים מחוברים עם שם לארגומנטים פוזיציונליים, מה שגורם לחריגה בסביבת זמן הריצה בזמן ביצוע שאילתה עם פרמטרים שנעשה בהם שימוש חוזר. b/137254857

גרסה 2.2.0-alpha01

10 ביולי 2019

תכונות חדשות

  • מסד נתונים ארוז מראש: שני ממשקי API חדשים ב-RoomDatabase.Builder זמינים עכשיו ליצירת RoomDatabase על סמך קובץ מסד נתונים שכבר מאוכלס. הערך createFromAsset() מיועד למקרה שבו קובץ מסד הנתונים המאוכלס מראש נמצא בתיקיית הנכסים של קובץ ה-APK, והערך createFromFile() מיועד למקרה שבו הקובץ נמצא במיקום שרירותי. השימוש ב-API האלה משנה את ההתנהגות של העברות נתונים הרסניות, כך שבמהלך העברה חלופית, Room ינסה להעתיק מחדש את מסד הנתונים המאוכלס מראש, אם הוא זמין. אחרת, הוא פשוט ימחק ויצור מחדש את כל הטבלאות. b/62185732
  • ערכי ברירת מחדל של סכימות: מעכשיו יש למאפיין @ColumnInfo מאפיין חדש, defaultValue, שאפשר להשתמש בו כדי לציין את ערך ברירת המחדל של עמודה. ערכי ברירת המחדל הם חלק מתבנית מסד נתונים, והם יאומתו במהלך ההעברות אם יצוינו. b/64088772

    הערה: אם לסכימה של מסד הנתונים כבר יש ערכי ברירת מחדל, כמו אלה שנוספו באמצעות ALTER TABLE x ADD COLUMN y INTEGER NOTNULL DEFAULT z, ואתם מחליטים להגדיר ערכי ברירת מחדל באמצעות @ColumnInfo לאותן עמודות, יכול להיות שתצטרכו לספק העברה כדי לאמת את ערכי ברירת המחדל שלא נלקחו בחשבון. מידע נוסף זמין במאמר העברת חדרים.

  • יחסים רבים לרבים: ל-@Relation יש עכשיו מאפיין חדש associateBy, שמקבל הערה חדשה @Junction, שמשמשת להצהרה על קשר שצריך להתקיים דרך טבלת צומת (שנקראת גם טבלת צירוף). b/69201917
  • יחסים אחד-לאחד: ההגבלה בשדות POJO עם הערה @Relation שהם מסוג List או Set בוטלה, וכך אפשר לייצג יחסים עם ערך יחיד. b/62905145
  • ישות היעד: להערות ה-DAO @Insert,‏ @Update ו-@Delete יש עכשיו מאפיין חדש, targetEntity, שמאפשר לציין את טבלת היעד ששיטת ה-DAO אמורה לפעול עליה. כך הפרמטרים של שיטות ה-DAO האלה יכולים להיות POJOs שרירותיים שיתורגמו כישויות חלקיות. בפועל, זה מאפשר להוסיף, למחוק ולעדכן נתונים באופן חלקי. b/127549506
  • Gradle Incremental Annotation Processor: Room הוא עכשיו מעבד הערות מבודד של Gradle, ואפשר להפעיל את היכולת להגדיל את הערות באמצעות אפשרות המעבד room.incremental. מידע נוסף זמין במאמר אפשרויות של Room Compiler. אם תיתקלו בבעיות, תוכלו לדווח על באג כאן. אנחנו מתכננים להפעיל את האפשרות להגדלת הערך כברירת מחדל בגרסה יציבה עתידית. b/112110217

תיקוני באגים

  • Room לא יעביר יותר את EmptySetResultException לבורר השגיאות הגלובלי כשזרם ה-Rx של שאילתה מסוימת יוסר לפני שהשאילתה תושלם. b/130257475
  • תוקן באג שבו הודעה שגויה על שגיאה הוצגה ב-Room כשלפונקציית DAO מושהית עם הערה @RawQuery לא היה סוג החזרה. b/134303897
  • Room לא ייצור יותר מתאמי DAO עם סוגי נתונים גולמיים. b/135747255

גרסה 2.1.0

גרסה 2.1.0

13 ביוני 2019

גרסת Room 2.1.0 פורסמה ללא שינויים מ-2.1.0-rc01. אפשר למצוא את ההצהרות על השינויים שכלולות בגרסה כאן.

שינויים חשובים מאז גרסה 2.0.0

  • FTS: מעכשיו אפשר להשתמש ב-Room עם ישויות עם טבלת מיפוי של FTS3 או FTS4. עכשיו אפשר להוסיף הערות עם @Fts3 או @Fts4 לכיתות עם הערות @Entity כדי להצהיר על כיתה עם טבלת חיפוש של טקסט מלא שממופה. אפשרויות נוספות להתאמה אישית של FTS זמינות באמצעות השיטות של ההערה.
  • תצוגות: עכשיו יש תמיכה ב-Room בהצהרה על כיתה כשאילתה שמאוחסנת, שנקראת גם תצוגה, באמצעות ההערה @DatabaseView.
  • פונקציות עורכות: עכשיו אפשר להשהות פונקציות של שיטות DAO. כדי לנצל את הפונקציונליות הזו, צריך לכלול את room-ktx ביחסי התלות. הארטיפקט של ktx מספק גם את פונקציית התוסף RoomDatabase.withTransaction לביצוע טרנזקציות במסד נתונים בתוך פונקציית קורוטין.
  • Auto Value: עכשיו אפשר להצהיר על כיתות עם הערות של AutoValue כישות ו-POJO. עכשיו אפשר להצהיר על ההערות של Room‏ @PrimaryKey,‏ @ColumnInfo, ‏ @Embedded ו-@Relation בשיטות המופשטות של הכיתה עם ההערה על הערך האוטומטי. חשוב לזכור שגם הערות כאלה צריכות להיות מלוות ב-@CopyAnnotations כדי שמערכת Room תוכל להבין אותן בצורה נכונה.
  • תמיכה נוספת ב-Async: שיטות DAO עם הערות של @Insert,‏ @Delete או @Update, יחד עם @Query שמכיל משפטים של INSERT,‏ DELETE או UPDATE, תומכות עכשיו בסוגי ההחזרה של Rx‏ Completable,‏ Single,‏ Maybe ובסוג ההחזרה של Guava‏ ListenableFuture, והן יכולות גם להיות פונקציות של suspend.
  • enableMultiInstanceInvalidation הוא ממשק API חדש ב-RoomDatabase.Builder שמאפשר לבטל את התוקף של כמה מכונות של RoomDatabase באמצעות אותו קובץ מסד נתונים.
  • fallbackToDestructiveMigrationOnDowngrade הוא ממשק API חדש ב-RoomDatabase.Builder שבעזרתו אפשר ליצור מחדש את מסד הנתונים באופן אוטומטי במקרה של הורדה לאחור.
  • ignoredColumns הוא ממשק API חדש בהערה @Entity שאפשר להשתמש בו כדי להציג רשימה של שדות שנדחו לפי שם.
  • מעכשיו, ב-Room נעשה שימוש נכון ב-constructor הראשי של Kotlin ב-data classes, וכך אין צורך להצהיר על המאפיינים כ-vars.

גרסה 2.1.0-rc01

29 במאי 2019

תיקוני באגים

  • תוקנה שגיאה באינטליגנציה של Room שעלולה להתרחש בגלל הגדרה של temp_store שכבר מוגדרת. b/132602198
  • תוקנה אזהרה לגבי שימוש במירכאות כפולות למשתמשים עם SQLite מגרסה 3.27.0 ואילך. b/131712640
  • תוקן באג שבו InvalidationTracker גרם לקריסה כשהתרחשו כמה בדיקות ביטול תוקף במקביל. b/133457594

גרסה 2.1.0-beta01

7 במאי 2019

androidx.room 2.1.0-beta01 פורסם ללא שינויים לעומת 2.1.0-alpha07. כאן אפשר למצוא את ההתחייבויות (commits) שכלולות בגרסה הזו.

גרסה 2.1.0-alpha07

25 באפריל 2019

שינויים ב-API או בהתנהגות

  • פונקציית התוסף RoomDatabase.withTransaction השתנתה כך שלא תקבל יותר בלוק פונקציה עם CoroutineScope בתור נמען. כך אפשר למנוע דילוג על העטיפה הנוספת של coroutineScope { } שנדרשת כדי להריץ דברים בבלוק העסקה בו-זמנית.

תיקוני באגים

  • תוקן באג שבו Room לא מצליח להתאים TypeConverter לפונקציית DAO ב-Kotlin שמכילה פרמטר מסוג Collection.‏ b/122066791

גרסה 2.1.0-alpha06

22 במרץ 2019

שינויים ב-API או בהתנהגות

  • שאילתות עסקאות אסינכררוניות מסודרות עכשיו בסדרה, כך ש-Room לא ישתמש ביותר משרשור אחד לביצוע עסקאות במסדי נתונים. הוספנו את RoomDatabase.Builder.setTransactionExecutor(Executor) כדי לאפשר להגדיר את המאגר לשימוש בעסקאות.
  • RoomDatabase.runInTransaction(Callable) לא יכסה יותר חריגות מאומתות ב-RuntimeExceptions.‏b/128623748

תיקוני באגים

  • תוקן באג שבו מעקב הפסילה הפסיק לעקוב אחרי טבלת תוכן אם נוספו משגיחים גם לטבלת התוכן וגם לטבלת FTS חיצונית של תוכן. b/128508917
  • עדכנו את הדקדוק של SQLite ב-Room כך שיתאים ל-SQLite 3.24.0. b/110883668

גרסה 2.1.0-alpha05

13 במרץ 2019

תכונות חדשות

  • פונקציית התוסף RoomDatabase.withTransaction מאפשרת לבצע עסקאות בבטחה במסגרת פונקציית קורוטין. הפונקציות של תוספים ל-Room, יחד עם תמיכה ב-coroutines, זמינות בארטיפקט room-ktx.
  • עכשיו אפשר להשהות פונקציות של שיטות DAO לא מופשטות עם הערה @Transaction. b/120241587

שינויים ב-API או בהתנהגות

  • שם הארטיפקט room-coroutines השתנה ל-room-ktx בהתאם לשמות של ארטיפקטים אחרים של androidx.
  • הפונקציות beginTransaction, setTransactionSuccessful ו-endTransaction ב-RoomDatabase הוצאו משימוש לטובת runInTransaction ופונקציית התוסף room-ktxwithTransaction.

תיקוני באגים

  • תוקן באג שבו ארגומנטים של מחוללי תווים הושמטו אם השתמשו במחולל התווים SIMPLE. b/125427014
  • תוקן באג שבו מערכת Room לא הצליחה לזהות כראוי פונקציות השהיה עם פרמטרים שהסוג שלהם היה כיתה פנימית. b/123767877
  • תוקנה באג שבו שיטת DAO @Query מושהית עם הצהרות INSERT, ‏ UPDATE או DELETE הכינה את השאילתה בחיפזון בשרשור הראשי. b/123695593
  • תוקנו באגים שונים שבהם Room יצר קוד שגוי לפונקציות השהיה מסוימות. b/123466702 ו-b/123457323
  • תוקן באג שבו השימוש בשיטות שהוצאו משימוש לא נדחק כראוי בקוד שנוצר. b/117602586
  • עדכנו את התלות של Room ב-androidx.sqlite לגרסה 1.0.2, שמכילה תיקונים לטיפול נכון במסדי נתונים פגומים. b/124476912

בעיות מוכרות

  • Room 2.1.0-alpha05 תלוי באובייקט kotlinx-metadata-jvm שאינו זמין כרגע ב-Maven Central (KT-27991). כדי לפתור את התלות הזו, צריך להוסיף את maven { url "https://kotlin.bintray.com/kotlinx/" } למאגרי הפרויקטים.

גרסה 2.1.0-alpha04

25 בינואר 2019

תכונות חדשות

  • שיטות DAO עם הערה @Query שמכילות הצהרות INSERT, ‏ UPDATE או DELETE יכולות עכשיו להחזיר את הסוגים האסינכרוניים Single, ‏ Mayble, ‏ Completable ו-ListenableFuture. בנוסף, הן יכולות להיות גם פונקציות השהיה. b/120227284

שינויים ב-API או בהתנהגות

  • מעכשיו, אם method של DAO לא מופשט עם הערה @Transaction מחזיר סוג אסינכרוני כמו Single,‏ Mayble,‏ Completable,‏ LiveData או ListenableFuture, תופיע שגיאה ב-Room. מאחר שהטרנזקציות מוגבלות לשרשור, כרגע אי אפשר ל-Room להתחיל ולסיים טרנזקציה סביב פונקציה שעשויה לבצע שאילתות בשרשור אחר. b/120109336
  • הערכים של OnConflictStrategy.FAIL ו-OnConflictStrategy.ROLLBACK הוגדרו כ-@Deprecated כי הם לא פועלים כמצופה עם קישורי ה-SQLite הנוכחיים של Android. b/117266738

תיקוני באגים

  • תוקן באג שבו Room לא השתמש בצורה נכונה ב-TypeConverter של סוג ההחזרה אם שיטת ה-DAO הייתה פונקציית השהיה. b/122988159
  • תוקן באג שבו Room זיהה באופן שגוי פונקציות השהיה שעברו בירושה כפונקציות שלא משהות. b/122902595
  • תוקנה באג שבו Room יוצר קוד שגוי כששדה @Embedded נמצא בכיתה הורה ומשומש בכמה כיתות צאצא. b/121099048
  • תוקנה בעיה שבה מסגרת הנעילה (deadlock) של מסד הנתונים הייתה מתרחשת כשמפעילים פונקציות השהיה של DAO בין beginTransaction() ל-endTransaction(). b/120854786

גרסה 2.1.0-alpha03

4 בדצמבר 2018

שינויים ב-API

  • FTS tokenizer ב-@Fts3/@Fts4 מקבל עכשיו מחרוזת במקום Enum. כך אפשר להשתמש ב-Room ב-tokenizers מותאמים אישית. מחוללי תווים מובנים עדיין מוגדרים ב-FtsOptions כקבועים של מחרוזות. b/119234881

תכונות חדשות

  • פונקציות עורכות: עכשיו אפשר להשהות פונקציות של שיטות DAO. כדי לתמוך בפונקציות השהיה ב-Room, הושק נכס חדש, room-coroutines. b/69474692
  • שיטות DAO עם הערה @Insert, ‏ @Delete או @Update תומכות עכשיו ב-ListenableFuture כסוג ההחזרה. b/119418331

תיקוני באגים

  • תוקנה באג שבו Room ניסה למצוא באופן שגוי קונסטרוקטור עם עמודות בנכס ignoredColumns של @Entity. b/119830714
  • תוקנה באג שבו Room לא סימן את הפרמטרים של שיטות DAO כסופיים בהטמעה שנוצרה. b/118015483
  • תוקן באג שבו המעבד של Room קרס כשדיווח על שגיאה בשאילתה עם סמלים מיוחדים. b/119520136
  • תוקן באג שבו Room דחה הטמעות שונות של Collection כארגומנטים של ביטוי IN. b/119884035
  • תוקן באג שבו נתוני LiveData שהוחזרו מ-Room נאספו כזבל כשהתרחשה תצפית מתמשכת, וכתוצאה מכך הם לא הוציאו יותר נתונים חדשים. b/74477406
  • עדכנו את הנעילה הסגורה של RoomDatabase כדי לצמצם את התחרות על הנעילה. b/117900450

גרסה 2.1.0-alpha02

30 באוקטובר 2018

תכונות חדשות

  • נוספה תמיכה בהפניה ל-@DatabaseView ב-@Relation. b/117680932

תיקוני באגים

  • תוקן באג שבו Room ביצע פעולות קלט/פלט (I/O) בדיסק ב-thread הראשי כשנרשמתם למינוי והשלכתם מ-type return של Rx. b/117201279
  • תוקן באג שבו מערכת Room לא מצליחה למצוא ממיר טיפוסים מתאים לשדה בכיתה של ישות ב-Kotlin. b/111404868
  • תוקן באג שבו Room יוצר קוד שגוי להטמעת ממשק DAO שמכיל שיטת ברירת מחדל של Kotlin ללא ארגומנטים. b/117527454
  • עדכנו את מנתח הדקדוק של SQLite ב-Room, ותוקנה בעיית ביצועים שגרמה לזמני build ארוכים. b/117401230

גרסה 2.1.0-alpha01

8 באוקטובר 2018

תכונות חדשות

  • FTS: מעכשיו אפשר להשתמש ב-Room עם ישויות עם טבלת מיפוי של FTS3 או FTS4. עכשיו אפשר להוסיף הערות לכיתות עם התווית @Entity באמצעות התווית @Fts3 או @Fts4 כדי להצהיר על כיתה עם טבלת חיפוש של טקסט מלא שממופה. אפשרויות נוספות להתאמה אישית של FTS זמינות באמצעות השיטות של ההערה. b/62356416
  • תצוגות: מעכשיו אפשר להצהיר על כיתה כשאילתה שמאוחסנת, שנקראת גם תצוגה, באמצעות ההערה ‎ @DatabaseView. b/67033276
  • Auto Value: עכשיו אפשר להצהיר ב-Room על כיתות עם הערות של AutoValue כישות וכ-POJO. עכשיו אפשר להצהיר על ההערות של Room‏ @PrimaryKey, ‏ @ColumnInfo, ‏ @Embedded ו-@Relation בשיטות המופשטות של הכיתה עם הערות של ערך אוטומטי. חשוב לזכור שצריך להוסיף את התווית @CopyAnnotations כדי שמערכת Room תבין את ההערות האלה. b/62408420
  • תמיכה בסוגים נוספים של חזרי Rx: שיטות DAO עם הערות @Insert, ‏ @Delete או @Update תומכות עכשיו בסוגים Completable, ‏ Single<T> ו-Maybe<T> של חזרי Rx. b/63317956
  • סוגים לא ניתנים לשינוי עם @Relation: בעבר, ב-Room היה צורך להגדיר שדות עם הערה @Relation, אבל עכשיו הם יכולים להיות פרמטרים של קונסטרוקטור.
  • enableMultiInstanceInvalidation: ממשק API חדש ב-RoomDatabase.Builder שמאפשר לבטל את התוקף של כמה מכונות של RoomDatabase באמצעות אותו קובץ מסד נתונים. מנגנון ביטול התוקף בכמה מופעים פועל גם במספר תהליכים. b/62334005
  • fallbackToDestructiveMigrationOnDowngrade: ממשק API חדש ב-RoomDatabase.Builder ליצירה מחדש אוטומטית של מסד הנתונים במקרה של הורדה לאחור. b/110416954
  • ignoredColumns: ממשק API חדש בהערה @Entity שאפשר להשתמש בו כדי לרשום שדות שנדחו לפי שם. שימושי להתעלמות משדות שעברו בירושה לישות. b/63522075

שינויים ב-API או בהתנהגות

  • mCallback ו-mDatabase ב-RoomDatabase הם עכשיו @Deprecated, והם יוסרו בגרסה הראשית הבאה של Room. b/76109329

תיקוני באגים

  • תוקנו שתי בעיות שבהן Room לא התאושש כראוי ממסד נתונים פגום או מהעברה שגויה במהלך האימות. b/111504749 ו-b/111519144
  • מעכשיו, Room ישתמש כראוי ב-constructor הראשי של Kotlin ב-data classes, וכך לא תצטרכו להצהיר על השדות כ-vars. b/105769985

גרסה 2.0.0

גרסה 2.0.0

1 באוקטובר 2018

androidx.room 2.0.0 פורסם ללא שינויים מ-2.0.0-rc01.

גרסה 2.0.0-rc01

20 בספטמבר 2018

גרסת androidx.room 2.0.0-rc01 פורסמה ללא שינויים מ-2.0.0-beta01.

גרסה 2.0.0-beta01

2 ביולי 2018

שינויים ב-API או בהתנהגות

  • נוספה RoomDatabase.Builder.setQueryExecutor() כדי לאפשר התאמה אישית של המיקום שבו השאילתות פועלות
  • נוספה תמיכה ב-Observable של RxJava2
  • ההטמעות של DAO ושל מסדי הנתונים שנוצרו הן סופיות עכשיו

תיקוני באגים

  • ציון שם הכיתה/השדה בשגיאה 'cannot find getter for field'‏ b/73334503
  • תוקנה התאימות לאחור של RoomOpenHelper לגרסאות ישנות יותר של Room b/110197391

יחסי תלות מהתקופה שלפני AndroidX

בגרסאות של Room שקדמו ל-AndroidX, צריך לכלול את יחסי התלות הבאים:

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"
}

גרסה 1.1.1

גרסה 1.1.1

19 ביוני 2018

החדר 1.1.1 זהה לחדר 1.1.1-rc1.

גרסה 1.1.1-rc1

16 במאי 2018 אנחנו ממליצים מאוד להשתמש ב-Room 1.1.1-rc1 במקום ב-1.1.0 אם אתם משתמשים בהעברות.

תוקן באג שבו Room לא מטפל כראוי בהפעלה הראשונית לאחר ההעברה b/79362399

גרסה 1.1.0

גרסה 1.1.0-beta3

19 באפריל 2018

תיקוני באגים

  • תיקון שגיאת הידור כש-POJO של Kotlin מפנה לישות יחס שהוגדרה ב-Java b/78199923

גרסה 1.1.0-beta2

5 באפריל 2018

תיקוני באגים

  • תוקנה באג קריטי בהטמעות של Rx Single ו-Maybe ב-Room, שבו השאילתה הייתה עוברת מיחזור מראש, מה שגרם לבעיות אם מוסיפים יותר ממבצע מעקב אחד למופעי Single או Maybe שהוחזרו. b/76031240

  • [RoomDatabase.clearAllTables][ref-clearAllTables] לא VACUUM את מסד הנתונים אם הוא נקרא בתוך טרנזקציה. b/77235565

גרסה 1.1.0-beta1

21 במרץ 2018

שינויים ב-API

  • על סמך משוב מ-API Review, @RawQuery לא מקבל יותר העברה של String כפרמטר של השאילתה. צריך להשתמש ב-[SupportSQLiteQuery][ref-SupportSQLiteQuery]. (אפשר לעיין ב-[SimpleSQLiteQuery][ref-SimpleSQLiteQuery] כדי ליצור בקלות מופע של [SupportSQLiteQuery][ref-SupportSQLiteQuery] עם תמיכה בארגומנטים).
  • השיטה [fallbackToDestructiveMigrationFrom][ref-fallbackToDestructiveMigrationFrom] של RoomDatabase.Builder מקבלת עכשיו את הערך vararg int במקום vararg Integer.

תיקוני באגים

  • הפונקציה [RoomDatabase.clearAllTables][ref-clearAllTables] מנסה עכשיו להחזיר מקום למערכת ההפעלה על ידי הגדרת נקודת עצירה של WAL וVACUUM של מסד הנתונים.
  • [@RawQuery][ref-RawQuery] מקבל עכשיו כל Pojo לנכס observedEntities, כל עוד ה-Pojo מפנה לישות אחת או יותר דרך השדות Embedded או ה-Relation שלו. b/74041772
  • דפים: הטמעת DataSource של Room מטפלת עכשיו בצורה נכונה ביחסי תלות בין טבלאות מרובות (כמו יחסי גומלין וחיבורים). בעבר, פעולות כאלה לא היו מפעילות תוצאות חדשות או שהן לא היו מצליחות להיערך. b/74128314

גרסה 1.1.0-alpha1

22 בינואר 2018

תכונות חדשות

  • RawQuery: ממשק ה-API החדש הזה מאפשר לשיטות @Dao לקבל את ה-SQL כפרמטר של שאילתה b/62103290, b/71458963
  • fallBackToDestructiveMigrationsFrom: ממשק ה-API החדש הזה ב-RoomDatabase.Builder מאפשר לשלוט ברמת פירוט גבוהה יותר בגרסאות ההתחלתיות של הסכימות שמהן מותר לבצע העברות הרסניות (בהשוואה ל-fallbackToDestructiveMigration) b/64989640
  • מעכשיו, אפשר להשתמש ב-Room רק בממשקי API חדשים יותר של דפים (alpha-4 ואילך), והתמיכה ב-LivePagedListProvider הוצאה משימוש. כדי להשתמש בגרסת ה-alpha החדשה של Room, תצטרכו להשתמש ב-paging alpha-4 ואילך, ולעבור מ-LivePagedListProvider ל-LivePagedListBuilder אם עדיין לא עשיתם זאת.

תיקוני באגים

  • תמיכה משופרת בסוגי Kotlin Kapt. ‏ b/69164099
  • סדר השדות לא מבטל יותר את התקינות של הסכימה. b/64290754