Change database checkpoint procedure (#406)
This commit is contained in:
parent
cfe5dc965f
commit
5e5868bd3c
2 changed files with 14 additions and 23 deletions
|
@ -2,7 +2,6 @@ package it.vfsfitvnm.vimusic
|
||||||
|
|
||||||
import android.content.ContentValues
|
import android.content.ContentValues
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.database.Cursor
|
|
||||||
import android.database.sqlite.SQLiteDatabase.CONFLICT_IGNORE
|
import android.database.sqlite.SQLiteDatabase.CONFLICT_IGNORE
|
||||||
import android.os.Parcel
|
import android.os.Parcel
|
||||||
import androidx.core.database.getFloatOrNull
|
import androidx.core.database.getFloatOrNull
|
||||||
|
@ -15,6 +14,7 @@ import androidx.room.DeleteTable
|
||||||
import androidx.room.Insert
|
import androidx.room.Insert
|
||||||
import androidx.room.OnConflictStrategy
|
import androidx.room.OnConflictStrategy
|
||||||
import androidx.room.Query
|
import androidx.room.Query
|
||||||
|
import androidx.room.RawQuery
|
||||||
import androidx.room.RenameColumn
|
import androidx.room.RenameColumn
|
||||||
import androidx.room.RenameTable
|
import androidx.room.RenameTable
|
||||||
import androidx.room.RewriteQueriesToDropUnusedColumns
|
import androidx.room.RewriteQueriesToDropUnusedColumns
|
||||||
|
@ -29,6 +29,7 @@ import androidx.room.migration.AutoMigrationSpec
|
||||||
import androidx.room.migration.Migration
|
import androidx.room.migration.Migration
|
||||||
import androidx.sqlite.db.SimpleSQLiteQuery
|
import androidx.sqlite.db.SimpleSQLiteQuery
|
||||||
import androidx.sqlite.db.SupportSQLiteDatabase
|
import androidx.sqlite.db.SupportSQLiteDatabase
|
||||||
|
import androidx.sqlite.db.SupportSQLiteQuery
|
||||||
import it.vfsfitvnm.vimusic.enums.AlbumSortBy
|
import it.vfsfitvnm.vimusic.enums.AlbumSortBy
|
||||||
import it.vfsfitvnm.vimusic.enums.ArtistSortBy
|
import it.vfsfitvnm.vimusic.enums.ArtistSortBy
|
||||||
import it.vfsfitvnm.vimusic.enums.PlaylistSortBy
|
import it.vfsfitvnm.vimusic.enums.PlaylistSortBy
|
||||||
|
@ -410,6 +411,13 @@ interface Database {
|
||||||
|
|
||||||
@Delete
|
@Delete
|
||||||
fun delete(songPlaylistMap: SongPlaylistMap)
|
fun delete(songPlaylistMap: SongPlaylistMap)
|
||||||
|
|
||||||
|
@RawQuery
|
||||||
|
fun raw(supportSQLiteQuery: SupportSQLiteQuery): Int
|
||||||
|
|
||||||
|
fun checkpoint() {
|
||||||
|
raw(SimpleSQLiteQuery("PRAGMA wal_checkpoint(FULL)"))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@androidx.room.Database(
|
@androidx.room.Database(
|
||||||
|
@ -635,19 +643,3 @@ fun transaction(block: () -> Unit) = with(DatabaseInitializer.Instance) {
|
||||||
|
|
||||||
val RoomDatabase.path: String?
|
val RoomDatabase.path: String?
|
||||||
get() = openHelper.writableDatabase.path
|
get() = openHelper.writableDatabase.path
|
||||||
|
|
||||||
fun RoomDatabase.checkpoint() {
|
|
||||||
openHelper.writableDatabase.run {
|
|
||||||
query("PRAGMA journal_mode").use { cursor ->
|
|
||||||
if (cursor.moveToFirst()) {
|
|
||||||
when (cursor.getString(0).lowercase()) {
|
|
||||||
"wal" -> {
|
|
||||||
query("PRAGMA wal_checkpoint").use(Cursor::moveToFirst)
|
|
||||||
query("PRAGMA wal_checkpoint(TRUNCATE)").use(Cursor::moveToFirst)
|
|
||||||
query("PRAGMA wal_checkpoint").use(Cursor::moveToFirst)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
|
@ -6,7 +6,10 @@ import androidx.activity.result.contract.ActivityResultContracts
|
||||||
import androidx.compose.animation.ExperimentalAnimationApi
|
import androidx.compose.animation.ExperimentalAnimationApi
|
||||||
import androidx.compose.foundation.background
|
import androidx.compose.foundation.background
|
||||||
import androidx.compose.foundation.layout.Column
|
import androidx.compose.foundation.layout.Column
|
||||||
|
import androidx.compose.foundation.layout.WindowInsetsSides
|
||||||
|
import androidx.compose.foundation.layout.asPaddingValues
|
||||||
import androidx.compose.foundation.layout.fillMaxSize
|
import androidx.compose.foundation.layout.fillMaxSize
|
||||||
|
import androidx.compose.foundation.layout.only
|
||||||
import androidx.compose.foundation.layout.padding
|
import androidx.compose.foundation.layout.padding
|
||||||
import androidx.compose.foundation.rememberScrollState
|
import androidx.compose.foundation.rememberScrollState
|
||||||
import androidx.compose.foundation.verticalScroll
|
import androidx.compose.foundation.verticalScroll
|
||||||
|
@ -17,10 +20,6 @@ import androidx.compose.ui.Modifier
|
||||||
import androidx.compose.ui.platform.LocalContext
|
import androidx.compose.ui.platform.LocalContext
|
||||||
import it.vfsfitvnm.vimusic.Database
|
import it.vfsfitvnm.vimusic.Database
|
||||||
import it.vfsfitvnm.vimusic.LocalPlayerAwareWindowInsets
|
import it.vfsfitvnm.vimusic.LocalPlayerAwareWindowInsets
|
||||||
import androidx.compose.foundation.layout.WindowInsetsSides
|
|
||||||
import androidx.compose.foundation.layout.asPaddingValues
|
|
||||||
import androidx.compose.foundation.layout.only
|
|
||||||
import it.vfsfitvnm.vimusic.checkpoint
|
|
||||||
import it.vfsfitvnm.vimusic.internal
|
import it.vfsfitvnm.vimusic.internal
|
||||||
import it.vfsfitvnm.vimusic.path
|
import it.vfsfitvnm.vimusic.path
|
||||||
import it.vfsfitvnm.vimusic.query
|
import it.vfsfitvnm.vimusic.query
|
||||||
|
@ -56,7 +55,7 @@ fun DatabaseSettings() {
|
||||||
if (uri == null) return@rememberLauncherForActivityResult
|
if (uri == null) return@rememberLauncherForActivityResult
|
||||||
|
|
||||||
query {
|
query {
|
||||||
Database.internal.checkpoint()
|
Database.checkpoint()
|
||||||
|
|
||||||
context.applicationContext.contentResolver.openOutputStream(uri)
|
context.applicationContext.contentResolver.openOutputStream(uri)
|
||||||
?.use { outputStream ->
|
?.use { outputStream ->
|
||||||
|
@ -72,7 +71,7 @@ fun DatabaseSettings() {
|
||||||
if (uri == null) return@rememberLauncherForActivityResult
|
if (uri == null) return@rememberLauncherForActivityResult
|
||||||
|
|
||||||
query {
|
query {
|
||||||
Database.internal.checkpoint()
|
Database.checkpoint()
|
||||||
Database.internal.close()
|
Database.internal.close()
|
||||||
|
|
||||||
context.applicationContext.contentResolver.openInputStream(uri)
|
context.applicationContext.contentResolver.openInputStream(uri)
|
||||||
|
|
Loading…
Reference in a new issue