Hi, is there any way to add Entities to our Databa...
# room
t
Hi, is there any way to add Entities to our Database that come from a different module? I am currently building a kmp app and my setup is that I have a
:database
module where most Entities, Daos, etc. live. However i now have a different module, say
:test
where I want to add another Entity that I can add to my
@Database
Declaration in the
:database
module. Whenever I try, i get an error saying I need to add a migration. When I add a migration however, I get the following error (see 🧵 )
Copy code
FATAL EXCEPTION: main
                            Process: org.example.project, PID: 7084
                            java.lang.IllegalStateException: Migration didn't properly handle: TestEntity(org.example.project.model.TestEntity).
                             Expected:
                            TableInfo {
                                name = 'TestEntity',
                                columns = {    
                                    Column {
                                       name = 'id',
                                       type = 'INTEGER',
                                       affinity = '3',
                                       notNull = 'true',
                                       primaryKeyPosition = '1',
                                       defaultValue = 'undefined'
                                    }
                                },
                                foreignKeys = { }
                                indices = { }
                            }
                             Found:
                            TableInfo {
                                name = 'TestEntity',
                                columns = { }
                                foreignKeys = { }
                                indices = { }
                            }
                            	at androidx.room.BaseRoomConnectionManager.onMigrate(RoomConnectionManager.kt:211)
                            	at androidx.room.BaseRoomConnectionManager.configureDatabase(RoomConnectionManager.kt:116)
                            	at androidx.room.BaseRoomConnectionManager.access$configureDatabase(RoomConnectionManager.kt:36)
                            	at androidx.room.BaseRoomConnectionManager$DriverWrapper.openLocked$lambda$1(RoomConnectionManager.kt:77)
                            	at androidx.room.BaseRoomConnectionManager$DriverWrapper.$r8$lambda$npawJpzGW_LQCHyPkGm5j4d35mo(Unknown Source:0)
                            	at androidx.room.BaseRoomConnectionManager$DriverWrapper$$ExternalSyntheticLambda0.invoke(D8$$SyntheticClass:0)
                            	at androidx.room.concurrent.ExclusiveLock.withLock(ExclusiveLock.kt:50)
                            	at androidx.room.BaseRoomConnectionManager$DriverWrapper.openLocked(RoomConnectionManager.kt:65)
                            	at androidx.room.BaseRoomConnectionManager$DriverWrapper.open(RoomConnectionManager.kt:57)
                            	at androidx.room.coroutines.ConnectionPoolImpl._init_$lambda$5(ConnectionPoolImpl.kt:90)
                            	at androidx.room.coroutines.ConnectionPoolImpl.$r8$lambda$PzkXqksVKGI0H8yDlVsmsrucc0E(Unknown Source:0)
                            	at androidx.room.coroutines.ConnectionPoolImpl$$ExternalSyntheticLambda1.invoke(D8$$SyntheticClass:0)
                            	at androidx.room.coroutines.Pool.tryOpenNewConnection(ConnectionPoolImpl.kt:222)
                            	at androidx.room.coroutines.Pool.acquire(ConnectionPoolImpl.kt:210)
                            	at androidx.room.coroutines.ConnectionPoolImpl$acquireWithTimeout$2.invokeSuspend(ConnectionPoolImpl.kt:167)
                            	at androidx.room.coroutines.ConnectionPoolImpl$acquireWithTimeout$2.invoke(Unknown Source:8)
                            	at androidx.room.coroutines.ConnectionPoolImpl$acquireWithTimeout$2.invoke(Unknown Source:4)
                            	at kotlinx.coroutines.intrinsics.UndispatchedKt.startUndispatchedOrReturnIgnoreTimeout(Undispatched.kt:54)
                            	at kotlinx.coroutines.TimeoutKt.setupTimeout(Timeout.kt:149)
                            	at kotlinx.coroutines.TimeoutKt.withTimeout(Timeout.kt:44)
                            	at kotlinx.coroutines.TimeoutKt.withTimeout-KLykuaI(Timeout.kt:72)
                            	at androidx.room.coroutines.ConnectionPoolImpl.useConnection(ConnectionPoolImpl.kt:537)
                            	at androidx.room.RoomConnectionManager.useConnection(RoomConnectionManager.android.kt:126)
                            	at androidx.room.RoomDatabase.useConnection$room_runtime_release(RoomDatabase.android.kt:587)
                            	at androidx.room.util.DBUtil__DBUtil_androidKt$performSuspending$$inlined$compatCoroutineExecute$DBUtil__DBUtil_androidKt$1.invokeSuspend(DBUtil.android.kt:109)
                            	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
                            	at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:100)
                            	at kotlinx.coroutines.internal.LimitedDispatcher$Worker.run(LimitedDispatcher.kt:113)
                            	at kotlinx.coroutines.scheduling.TaskImpl.run(Tasks.kt:89)
                            	at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:586)
                            	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:820)
                            	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:717)
                            	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:704)
                            	Suppressed: kotlinx.coroutines.internal.DiagnosticCoroutineContextException: [StandaloneCoroutine{Cancelling}@4635bdf, Dispatchers.Main.immediate]
d
I think you are seeing a manifestation of https://issuetracker.google.com/338842136. Essentially information is lost when the entity is in another module for non-JVM source sets. The issue is rooted in KSP and not Room which in turn is waiting for a Kotlin fix.
thank you color 1