Browse Source

Configure SQLite (#7495)

- Turn on `foreign_keys` to cascade on delete properly
- Turn on `journal_mode` and set `synchronous` to NORMAL which may help performance for larger libraries
Andreas 2 years ago
parent
commit
d977b89af1
1 changed files with 14 additions and 0 deletions
  1. 14 0
      app/src/main/java/eu/kanade/tachiyomi/AppModule.kt

+ 14 - 0
app/src/main/java/eu/kanade/tachiyomi/AppModule.kt

@@ -3,6 +3,7 @@ package eu.kanade.tachiyomi
 import android.app.Application
 import android.os.Build
 import androidx.core.content.ContextCompat
+import androidx.sqlite.db.SupportSQLiteDatabase
 import androidx.sqlite.db.framework.FrameworkSQLiteOpenHelperFactory
 import com.squareup.sqldelight.android.AndroidSqliteDriver
 import com.squareup.sqldelight.db.SqlDriver
@@ -46,6 +47,19 @@ class AppModule(val app: Application) : InjektModule {
                 } else {
                     RequerySQLiteOpenHelperFactory()
                 },
+                callback = object : AndroidSqliteDriver.Callback(Database.Schema) {
+                    override fun onOpen(db: SupportSQLiteDatabase) {
+                        super.onOpen(db)
+                        setPragma(db, "foreign_keys = ON")
+                        setPragma(db, "journal_mode = WAL")
+                        setPragma(db, "synchronous = NORMAL")
+                    }
+                    private fun setPragma(db: SupportSQLiteDatabase, pragma: String) {
+                        val cursor = db.query("PRAGMA $pragma")
+                        cursor.moveToFirst()
+                        cursor.close()
+                    }
+                },
             )
         }