Skip to content

Commit

Permalink
Use TRUNCATE mode for databases to allow ATTACH
Browse files Browse the repository at this point in the history
This is a workaround to requery/sqlite-android#127
  • Loading branch information
tuomas2 committed May 26, 2023
1 parent 5ad3de8 commit 9d4a308
Show file tree
Hide file tree
Showing 3 changed files with 40 additions and 43 deletions.
4 changes: 4 additions & 0 deletions app/src/main/java/net/bible/service/db/DatabaseContainer.kt
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ package net.bible.service.db
import io.requery.android.database.sqlite.SQLiteDatabase
import android.util.Log
import androidx.room.Room
import androidx.room.RoomDatabase
import androidx.sqlite.db.SupportSQLiteDatabase
import io.requery.android.database.sqlite.RequerySQLiteOpenHelperFactory
import net.bible.android.BibleApplication.Companion.application
Expand Down Expand Up @@ -166,6 +167,7 @@ class DatabaseContainer {
)
.allowMainThreadQueries()
.addMigrations(*bookmarkMigrations)
.setJournalMode(RoomDatabase.JournalMode.TRUNCATE)
.openHelperFactory(dbFactory)
.build()

Expand All @@ -181,6 +183,7 @@ class DatabaseContainer {
)
.openHelperFactory(dbFactory)
.allowMainThreadQueries()
.setJournalMode(RoomDatabase.JournalMode.TRUNCATE)
.addMigrations(*readingPlanMigrations)
.build()

Expand All @@ -196,6 +199,7 @@ class DatabaseContainer {
)
.allowMainThreadQueries()
.addMigrations(*workspacesMigrations)
.setJournalMode(RoomDatabase.JournalMode.TRUNCATE)
.openHelperFactory(dbFactory)
.build()

Expand Down
15 changes: 4 additions & 11 deletions app/src/main/java/net/bible/service/db/DatabasePatching.kt
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,6 @@ package net.bible.service.db

import android.util.Log
import androidx.sqlite.db.SupportSQLiteDatabase
import io.requery.android.database.sqlite.SQLiteDatabase
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.async
import kotlinx.coroutines.awaitAll
Expand All @@ -32,7 +31,6 @@ import net.bible.android.database.WorkspaceDatabase
import net.bible.android.database.migrations.getColumnNames
import net.bible.android.database.migrations.getColumnNamesJoined
import net.bible.android.view.activity.base.Dialogs
import net.bible.android.view.activity.page.application
import net.bible.service.common.CommonUtils
import net.bible.service.common.forEach
import net.bible.service.common.getFirst
Expand All @@ -42,7 +40,6 @@ import java.io.Closeable
import java.io.File
import java.util.zip.GZIPInputStream
import java.util.zip.GZIPOutputStream
import android.database.sqlite.SQLiteDatabase as AndroidSQLiteDatabase

class TableDef(val tableName: String, val idField1: String = "id", val idField2: String? = null)

Expand Down Expand Up @@ -159,8 +156,7 @@ object DatabasePatching {
val dbDef = dbDefFactory()
var needPatch: Boolean
dbDef.use {
it.db.close()
SQLiteDatabase.openDatabase(application.getDatabasePath(it.dbFileName).absolutePath, null, SQLiteDatabase.OPEN_READWRITE).use { db -> db.run {
it.db.openHelper.writableDatabase.run {
val amountUpdated = query("SELECT COUNT(*) FROM Log WHERE lastUpdated > $lastSynchronized").getFirst { c -> c.getInt(0)}
needPatch = amountUpdated > 0
if (needPatch) {
Expand All @@ -173,8 +169,7 @@ object DatabasePatching {
execSQL("PRAGMA patch.foreign_keys=ON;")
execSQL("DETACH DATABASE patch")
}
}}
it.resetDb.invoke()
}
}
if(needPatch) {
val gzippedOutput = File(GoogleDrive.patchOutFilesDir, dbDef.categoryName + ".sqlite3.gz")
Expand Down Expand Up @@ -204,8 +199,7 @@ object DatabasePatching {
}
}
dbDef.use {
it.db.close()
SQLiteDatabase.openDatabase(application.getDatabasePath(it.dbFileName).absolutePath, null, SQLiteDatabase.OPEN_READWRITE).use { db -> db.run {
it.db.openHelper.writableDatabase.run {
execSQL("ATTACH DATABASE '${it.patchDbFile.absolutePath}' AS patch")
for (tableDef in it.tableDefs) {
readPatchData(this, tableDef.tableName, tableDef.idField1, tableDef.idField2)
Expand All @@ -214,8 +208,7 @@ object DatabasePatching {
if(CommonUtils.isDebugMode) {
checkForeignKeys(this)
}
}}
it.resetDb.invoke()
}
}
}
}
Expand Down
Loading

0 comments on commit 9d4a308

Please sign in to comment.