Skip to content

Commit 9c5aa2b

Browse files
committed
Upgrade to Room 3.0
1 parent 955fdca commit 9c5aa2b

8 files changed

Lines changed: 33 additions & 36 deletions

File tree

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
# Changelog
22

3+
## 1.14.0 (unreleased)
4+
5+
- __Breaking change__ (for Room integration): The Room integration uses Room 3.0 now.
6+
37
## 1.13.0
48

59
- __Breaking change__: Aligning with Kotlin and Androidx multiplatform libraries, this

gradle/libs.versions.toml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ compose-preview = "1.11.2"
3232
compose-lifecycle = "2.10.0"
3333
androidxSqlite = "2.7.0"
3434
androidxSplashscreen = "1.2.0"
35-
room = "2.8.4"
35+
room = "3.0.0"
3636
sqldelight = "2.3.2"
3737

3838
# plugins
@@ -102,8 +102,8 @@ supabase-storage = { module = "io.github.jan-tennert.supabase:storage-kt", versi
102102
androidx-sqlite-sqlite = { module = "androidx.sqlite:sqlite", version.ref = "androidxSqlite" }
103103
androidx-sqlite-async = { module = "androidx.sqlite:sqlite-async", version.ref = "androidxSqlite" }
104104
androidx-sqlite-bundled = { module = "androidx.sqlite:sqlite-bundled", version.ref = "androidxSqlite" }
105-
androidx-room-runtime = { module = "androidx.room:room-runtime", version.ref = "room" }
106-
androidx-room-compiler = { module = "androidx.room:room-compiler", version.ref = "room" }
105+
androidx-room-runtime = { module = "androidx.room3:room3-runtime", version.ref = "room" }
106+
androidx-room-compiler = { module = "androidx.room3:room3-compiler", version.ref = "room" }
107107
sqldelight-coroutines = { module = "app.cash.sqldelight:coroutines-extensions", version.ref = "sqldelight" }
108108
sqldelight-runtime = { module = "app.cash.sqldelight:runtime", version.ref = "sqldelight" }
109109
sqldelight-dialect-sqlite38 = { module = "app.cash.sqldelight:sqlite-3-38-dialect", version.ref = "sqldelight" }
@@ -152,5 +152,5 @@ kotlinter = { id = "org.jmailen.kotlinter", version.ref = "kotlinter" }
152152
kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" }
153153
buildKonfig = { id = "com.codingfeline.buildkonfig", version.ref = "buildKonfig" }
154154
ksp = { id = "com.google.devtools.ksp", version.ref = "ksp" }
155-
androidx-room = { id = "androidx.room", version.ref = "room" }
155+
androidx-room = { id = "androidx.room3", version.ref = "room" }
156156
sqldelight = { id = "app.cash.sqldelight", version.ref = "sqldelight" }

integrations/room/build.gradle.kts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,8 @@ kotlin {
1717
powersyncTargets(
1818
android = {
1919
namespace = "com.powersync.integrations.room"
20-
}
20+
},
21+
legacyJavaSupport = false
2122
)
2223

2324
explicitApi()

integrations/room/src/commonIntegrationTest/kotlin/com/powersync/integrations/room/TestDatabase.kt

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
11
package com.powersync.integrations.room
22

3-
import androidx.room.ConstructedBy
4-
import androidx.room.Dao
5-
import androidx.room.Database
6-
import androidx.room.Delete
7-
import androidx.room.Entity
8-
import androidx.room.Insert
9-
import androidx.room.PrimaryKey
10-
import androidx.room.Query
11-
import androidx.room.RoomDatabase
12-
import androidx.room.RoomDatabaseConstructor
3+
import androidx.room3.ConstructedBy
4+
import androidx.room3.Dao
5+
import androidx.room3.Database
6+
import androidx.room3.Delete
7+
import androidx.room3.Entity
8+
import androidx.room3.Insert
9+
import androidx.room3.PrimaryKey
10+
import androidx.room3.Query
11+
import androidx.room3.RoomDatabase
12+
import androidx.room3.RoomDatabaseConstructor
1313
import androidx.sqlite.SQLiteConnection
1414
import androidx.sqlite.execSQL
1515
import com.powersync.db.schema.RawTable
@@ -52,7 +52,7 @@ abstract class TestDatabase : RoomDatabase() {
5252
),
5353
)
5454

55-
override fun onOpen(connection: SQLiteConnection) {
55+
override suspend fun onOpen(connection: SQLiteConnection) {
5656
connection.execSQL("CREATE VIRTUAL TABLE users_fts USING fts5(id UNINDEXED, name)")
5757
}
5858
}
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
package com.powersync.integrations.room
22

3-
import androidx.room.RoomDatabase
3+
import androidx.room3.RoomDatabase
44

55
expect fun createDatabaseBuilder(): RoomDatabase.Builder<TestDatabase>

integrations/room/src/commonMain/kotlin/com/powersync/integrations/room/RoomConnectionPool.kt

Lines changed: 7 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
package com.powersync.integrations.room
22

3-
import androidx.room.RoomDatabase
4-
import androidx.room.Transactor
5-
import androidx.room.execSQL
6-
import androidx.room.useReaderConnection
7-
import androidx.room.useWriterConnection
3+
import androidx.room3.RoomDatabase
4+
import androidx.room3.Transactor
5+
import androidx.room3.executeSQL
6+
import androidx.room3.useReaderConnection
7+
import androidx.room3.useWriterConnection
88
import androidx.sqlite.SQLiteException
99
import androidx.sqlite.SQLiteStatement
1010
import com.powersync.db.driver.SQLiteConnectionLease
@@ -15,7 +15,6 @@ import kotlinx.coroutines.flow.MutableSharedFlow
1515
import kotlinx.coroutines.flow.SharedFlow
1616
import kotlinx.coroutines.launch
1717
import kotlinx.coroutines.runBlocking
18-
import kotlinx.serialization.json.Json
1918
import kotlin.coroutines.CoroutineContext
2019

2120
/**
@@ -94,7 +93,7 @@ public class RoomConnectionPool(
9493
db.useWriterConnection {
9594
if (!hasInstalledUpdateHook) {
9695
hasInstalledUpdateHook = true
97-
it.execSQL("SELECT powersync_update_hooks('install')")
96+
it.executeSQL("SELECT powersync_update_hooks('install')")
9897
}
9998

10099
try {
@@ -157,14 +156,7 @@ private class RoomTransactionLease(
157156
override suspend fun <R> usePreparedAsync(
158157
sql: String,
159158
block: suspend (SQLiteStatement) -> R,
160-
): R =
161-
transactor.usePrepared(sql) {
162-
// TODO: This is suspending in Room3, where we can avoid the runBlocking here.
163-
stmt ->
164-
// Don't use the context here, Room2 does that for us. We're not allowed to use the
165-
// connection from different threads.
166-
runBlocking { block(stmt) }
167-
}
159+
): R = transactor.usePrepared(sql, block)
168160

169161
override fun isInTransactionSync(): Boolean =
170162
runBlocking(context) {
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package com.powersync.integrations.room
22

3-
import androidx.room.Room
4-
import androidx.room.RoomDatabase
3+
import androidx.room3.Room
4+
import androidx.room3.RoomDatabase
55

66
actual fun createDatabaseBuilder(): RoomDatabase.Builder<TestDatabase> =
77
Room.inMemoryDatabaseBuilder<TestDatabase>().addCallback(TestDatabase)
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package com.powersync.integrations.room
22

3-
import androidx.room.Room
4-
import androidx.room.RoomDatabase
3+
import androidx.room3.Room
4+
import androidx.room3.RoomDatabase
55

66
actual fun createDatabaseBuilder(): RoomDatabase.Builder<TestDatabase> =
77
Room.inMemoryDatabaseBuilder<TestDatabase>().addCallback(TestDatabase)

0 commit comments

Comments
 (0)