Room 3 with FTS5
# android
h
Room 3 with FTS5
not kotlin but kotlin colored 4
Copy code
import androidx.room3.Entity
import androidx.room3.Fts5
import androidx.room3.Index
import androidx.room3.PrimaryKey
import kotlin.time.Instant

@Entity(
    tableName = "notes",
    indices = [
        Index(value = ["archived", "deletedAt", "pinned", "updatedAt"]),
        Index(value = ["deletedAt"])
    ]
)
data class NoteEntity(
    @PrimaryKey(autoGenerate = true)
    val id: Long = 0L,
    val title: String,
    val content: String,
    val pinned: Boolean = false,
    val archived: Boolean = false,
    val backgroundColor: Int? = null,
    val createdAt: Instant,
    val updatedAt: Instant,
    val deletedAt: Instant? = null
)

@Entity(tableName = "notes_fts")
@Fts5(contentEntity = NoteEntity::class)
data class NoteFtsEntity(
    val title: String,
    val content: String
)
FATAL EXCEPTION: main (Fix with AI) Process: com.example.hnotes.debug, PID: 18573 android.database.sqlite.SQLiteException: no such module: FTS5 (code 1 SQLITE_ERROR) at android.database.sqlite.SQLiteConnection.nativeExecute(Native Method) at android.database.sqlite.SQLiteConnection.execute(SQLiteConnection.java:764) at android.database.sqlite.SQLiteSession.execute(SQLiteSession.java:656) at android.database.sqlite.SQLiteStatement.execute(SQLiteStatement.java:47) at androidx.sqlite.db.framework.FrameworkSQLiteStatement.execute(FrameworkSQLiteStatement.android.kt:30) at androidx.sqlite.driver.SupportSQLiteStatement$OtherSQLiteStatement.step(SupportSQLiteStatement.android.kt:540) at androidx.sqlite.SQLite__SQLite_nonWebKt.execSQL(SQLite.nonWeb.kt:26) at androidx.sqlite.SQLite.execSQL(dex-id-1b3637f1e9ec71a2230b500a8e2af617efe88536:1) at com.example.hnotes.core.database.ApplicationDatabase_Impl$createOpenDelegate$_openDelegate$1.createAllTables(ApplicationDatabase_Impl.kt:73) at androidx.room3.BaseRoomConnectionManager.onCreate(RoomConnectionManager.kt:190) at androidx.room3.BaseRoomConnectionManager.configureDatabase(RoomConnectionManager.kt:130) at androidx.room3.BaseRoomConnectionManager.access$configureDatabase(RoomConnectionManager.kt:38) at androidx.room3.BaseRoomConnectionManager$openLocked$$inlined$withLock$1.invokeSuspend(ExclusiveMutex.kt:97) at androidx.room3.BaseRoomConnectionManager$openLocked$$inlined$withLock$1.invoke(ExclusiveMutex.kt:8) at androidx.room3.BaseRoomConnectionManager$openLocked$$inlined$withLock$1.invoke(ExclusiveMutex.kt:2) at androidx.room3.coroutines.ReentrantMutexKt$withReentrantLock$2.invokeSuspend(ReentrantMutex.kt:38) at androidx.room3.coroutines.ReentrantMutexKt$withReentrantLock$2.invoke(ReentrantMutex.kt:8) at androidx.room3.coroutines.ReentrantMutexKt$withReentrantLock$2.invoke(ReentrantMutex.kt:4) at kotlinx.coroutines.intrinsics.UndispatchedKt.startUndispatched(Undispatched.kt:66) at kotlinx.coroutines.intrinsics.UndispatchedKt.startUndispatchedOrReturn(Undispatched.kt:43) at kotlinx.coroutines.BuildersKt__Builders_commonKt.withContext(Builders.common.kt:497) at kotlinx.coroutines.BuildersKt.withContext(dex-id-9361055197890c80bbf3dcb926d3fb1bbae0f05c:1) at androidx.room3.coroutines.ReentrantMutexKt.withReentrantLock(ReentrantMutex.kt:38) at androidx.room3.BaseRoomConnectionManager.openLocked(RoomConnectionManager.kt:367) at androidx.room3.BaseRoomConnectionManager.access$openLocked(RoomConnectionManager.kt:38) at androidx.room3.BaseRoomConnectionManager$createConnectionFactory$1.invokeSuspend(RoomConnectionManager.kt:64) at androidx.room3.BaseRoomConnectionManager$createConnectionFactory$1.invoke(RoomConnectionManager.kt:8) at androidx.room3.BaseRoomConnectionManager$createConnectionFactory$1.invoke(RoomConnectionManager.kt:2) at androidx.room3.coroutines.PassthroughConnectionPool$useConnection$2.invokeSuspend(PassthroughConnectionPool.kt:78) at androidx.room3.coroutines.PassthroughConnectionPool$useConnection$2.invoke(PassthroughConnectionPool.kt:8) at androidx.room3.coroutines.PassthroughConnectionPool$useConnection$2.invoke(PassthroughConnectionPool.kt:2) at androidx.room3.coroutines.PassthroughConnectionPool$withInitializationLock$3.invokeSuspend(PassthroughConnectionPool.kt:121) at androidx.room3.coroutines.PassthroughConnectionPool$withInitializationLock$3.invoke(PassthroughConnectionPool.kt:8) at androidx.room3.coroutines.PassthroughConnectionPool$withInitializationLock$3.invoke(PassthroughConnectionPool.kt:2) at androidx.room3.coroutines.ReentrantMutexKt$withReentrantLock$2.invokeSuspend(ReentrantMutex.kt:38) at androidx.room3.coroutines.ReentrantMutexKt$withReentrantLock$2.invoke(ReentrantMutex.kt:8) at androidx.room3.coroutines.ReentrantMutexKt$withReentrantLock$2.invoke(ReentrantMutex.kt:4) at kotlinx.coroutines.intrinsics.UndispatchedKt.startUndispatched(Undispatched.kt:66) at kotlinx.coroutines.intrinsics.UndispatchedKt.startUndispatchedOrReturn(Undispatched.kt:43) 2026-07-15 184103.038 18573-18573 AndroidRuntime com.example.hnotes.debug E at kotlinx.coroutines.BuildersKt__Builders_commonKt.withContext(Builders.common.kt:497) (Fix with AI) at kotlinx.coroutines.BuildersKt.withContext(dex-id-9361055197890c80bbf3dcb926d3fb1bbae0f05c:1) at androidx.room3.coroutines.ReentrantMutexKt.withReentrantLock(ReentrantMutex.kt:38) at androidx.room3.coroutines.PassthroughConnectionPool.withInitializationLock(PassthroughConnectionPool.kt:121) at androidx.room3.coroutines.PassthroughConnectionPool.useConnection(PassthroughConnectionPool.kt:76) at androidx.room3.RoomConnectionManager.useConnection(RoomConnectionManager.android.kt:99) at androidx.room3.RoomDatabase.useConnection(RoomDatabase.android.kt:436) at androidx.room3.TriggerBasedInvalidationTracker.syncTriggers$room3_runtime(InvalidationTracker.kt:299) at androidx.room3.TriggerBasedInvalidationTracker$createFlow$1$1.invokeSuspend(InvalidationTracker.kt:239) at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:34) at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:100) at kotlinx.coroutines.internal.LimitedDispatcher$Worker.run(LimitedDispatcher.kt:124) 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:798) 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}@b92f9a2, Dispatchers.Main.immediate]
p
Ask in #C7KS458SJ
c
• Please refrain from cross-posting the same message on multiple channels. It is considered spamming.
https://kotlinlang.org/docs/slack-code-of-conduct.html#basic-usage-guidelines