diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index d5444138e6e..7232b2b033f 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -30,7 +30,7 @@ kover = "0.7.1" multiplatform-settings = "1.0.0" # if you update sqlDelight check if https://github.com/cashapp/sqldelight/issues/4154 is fixed # and delete the work around in the dev.mk file -sqldelight = "2.0.0-alpha05" +sqldelight = "2.0.0" sqlcipher-android = "4.5.5" pbandk = "0.14.2" turbine = "1.0.0" @@ -157,7 +157,7 @@ sqldelight-androidDriver = { module = "app.cash.sqldelight:android-driver", vers sqldelight-androidxPaging = { module = "app.cash.sqldelight:androidx-paging3-extensions", version.ref = "sqldelight" } sqldelight-nativeDriver = { module = "app.cash.sqldelight:native-driver", version.ref = "sqldelight" } sqldelight-jvmDriver = { module = "app.cash.sqldelight:sqlite-driver", version.ref = "sqldelight" } -sqldelight-jsDriver = { module = "app.cash.sqldelight:sqljs-driver", version.ref = "sqldelight" } +sqldelight-jsDriver = { module = "app.cash.sqldelight:web-worker-driver", version.ref = "sqldelight" } sqldelight-primitiveAdapters = { module = "app.cash.sqldelight:primitive-adapters", version.ref = "sqldelight" } sqldelight-dialect = { module = "app.cash.sqldelight:sqlite-3-33-dialect", version.ref = "sqldelight" } diff --git a/persistence/build.gradle.kts b/persistence/build.gradle.kts index dbffe5b6939..539aa731d28 100644 --- a/persistence/build.gradle.kts +++ b/persistence/build.gradle.kts @@ -41,7 +41,7 @@ sqldelight { dialect(libs.sqldelight.dialect.get().toString()) packageName.set("com.wire.kalium.persistence") val sourceFolderName = "db_user" - sourceFolders.set(listOf(sourceFolderName)) + srcDirs.setFrom(listOf("src/commonMain/$sourceFolderName")) schemaOutputDirectory.set(file("src/commonMain/$sourceFolderName/schemas")) } @@ -49,7 +49,7 @@ sqldelight { dialect(libs.sqldelight.dialect.get().toString()) packageName.set("com.wire.kalium.persistence") val sourceFolderName = "db_global" - sourceFolders.set(listOf(sourceFolderName)) + srcDirs.setFrom(listOf("src/commonMain/$sourceFolderName")) schemaOutputDirectory.set(file("src/commonMain/$sourceFolderName/schemas")) } } diff --git a/persistence/src/androidMain/kotlin/com/wire/kalium/persistence/db/support/SqliteCallback.kt b/persistence/src/androidMain/kotlin/com/wire/kalium/persistence/db/support/SqliteCallback.kt index 7c8ec758915..d440b86ad77 100644 --- a/persistence/src/androidMain/kotlin/com/wire/kalium/persistence/db/support/SqliteCallback.kt +++ b/persistence/src/androidMain/kotlin/com/wire/kalium/persistence/db/support/SqliteCallback.kt @@ -20,10 +20,14 @@ package com.wire.kalium.persistence.db.support import androidx.sqlite.db.SupportSQLiteDatabase import androidx.sqlite.db.SupportSQLiteOpenHelper +import app.cash.sqldelight.db.QueryResult import app.cash.sqldelight.db.SqlSchema import app.cash.sqldelight.driver.android.AndroidSqliteDriver -internal class SqliteCallback(schema: SqlSchema, private val enableWAL: Boolean) : SupportSQLiteOpenHelper.Callback(schema.version) { +internal class SqliteCallback( + schema: SqlSchema>, + private val enableWAL: Boolean +) : SupportSQLiteOpenHelper.Callback(schema.version.toInt()) { private val baseCallback = AndroidSqliteDriver.Callback(schema) override fun onCreate(db: SupportSQLiteDatabase) = baseCallback.onCreate(db) diff --git a/persistence/src/appleMain/kotlin/com/wire/kalium/persistence/db/GlobalDatabaseProvider.kt b/persistence/src/appleMain/kotlin/com/wire/kalium/persistence/db/GlobalDatabaseProvider.kt index c75aaea6812..1bfa8732b0f 100644 --- a/persistence/src/appleMain/kotlin/com/wire/kalium/persistence/db/GlobalDatabaseProvider.kt +++ b/persistence/src/appleMain/kotlin/com/wire/kalium/persistence/db/GlobalDatabaseProvider.kt @@ -48,17 +48,16 @@ actual class GlobalDatabaseProvider( init { NSFileManager.defaultManager.createDirectoryAtPath(storePath, true, null, null) - val schema = GlobalDatabase.Schema val driver = NativeSqliteDriver( DatabaseConfiguration( name = dbName, - version = schema.version, + version = schema.version.toInt(), create = { connection -> wrapConnection(connection) { schema.create(it) } }, upgrade = { connection, oldVersion, newVersion -> - wrapConnection(connection) { schema.migrate(it, oldVersion, newVersion) } + wrapConnection(connection) { schema.migrate(it, oldVersion.toLong(), newVersion.toLong()) } }, extendedConfig = DatabaseConfiguration.Extended( basePath = storePath diff --git a/persistence/src/appleMain/kotlin/com/wire/kalium/persistence/db/UserDatabase.kt b/persistence/src/appleMain/kotlin/com/wire/kalium/persistence/db/UserDatabase.kt index f76c621c7f3..aa2a2ac0b20 100644 --- a/persistence/src/appleMain/kotlin/com/wire/kalium/persistence/db/UserDatabase.kt +++ b/persistence/src/appleMain/kotlin/com/wire/kalium/persistence/db/UserDatabase.kt @@ -53,13 +53,13 @@ actual fun userDatabaseBuilder( val driver = NativeSqliteDriver( DatabaseConfiguration( name = FileNameUtil.userDBName(userId), - version = schema.version, + version = schema.version.toInt(), journalMode = if (enableWAL) JournalMode.WAL else JournalMode.DELETE, create = { connection -> wrapConnection(connection) { schema.create(it) } }, upgrade = { connection, oldVersion, newVersion -> - wrapConnection(connection) { schema.migrate(it, oldVersion, newVersion) } + wrapConnection(connection) { schema.migrate(it, oldVersion.toLong(), newVersion.toLong()) } }, extendedConfig = DatabaseConfiguration.Extended( basePath = platformDatabaseData.storePath @@ -96,13 +96,13 @@ fun inMemoryDatabase( val driver = NativeSqliteDriver( DatabaseConfiguration( name = FileNameUtil.userDBName(userId), - version = schema.version, + version = schema.version.toInt(), inMemory = true, create = { connection -> wrapConnection(connection) { schema.create(it) } }, upgrade = { connection, oldVersion, newVersion -> - wrapConnection(connection) { schema.migrate(it, oldVersion, newVersion) } + wrapConnection(connection) { schema.migrate(it, oldVersion.toLong(), newVersion.toLong()) } } ) ) diff --git a/persistence/src/commonMain/db_user/com/wire/kalium/persistence/Clients.sq b/persistence/src/commonMain/db_user/com/wire/kalium/persistence/Clients.sq index 89dc806e53d..e28e564c20a 100644 --- a/persistence/src/commonMain/db_user/com/wire/kalium/persistence/Clients.sq +++ b/persistence/src/commonMain/db_user/com/wire/kalium/persistence/Clients.sq @@ -2,6 +2,7 @@ import com.wire.kalium.persistence.dao.QualifiedIDEntity; import com.wire.kalium.persistence.dao.client.ClientTypeEntity; import com.wire.kalium.persistence.dao.client.DeviceTypeEntity; import kotlin.Boolean; +import kotlin.String; import kotlin.collections.Map; import kotlinx.datetime.Instant; diff --git a/persistence/src/commonMain/db_user/com/wire/kalium/persistence/Messages.sq b/persistence/src/commonMain/db_user/com/wire/kalium/persistence/Messages.sq index 99040f8da66..938c54c71d4 100644 --- a/persistence/src/commonMain/db_user/com/wire/kalium/persistence/Messages.sq +++ b/persistence/src/commonMain/db_user/com/wire/kalium/persistence/Messages.sq @@ -6,6 +6,7 @@ import com.wire.kalium.persistence.dao.message.MessageEntity; import com.wire.kalium.persistence.dao.message.RecipientFailureTypeEntity; import kotlin.Boolean; import kotlin.Int; +import kotlin.String; import kotlin.collections.List; import kotlinx.datetime.Instant; diff --git a/persistence/src/commonMain/db_user/com/wire/kalium/persistence/Service.sq b/persistence/src/commonMain/db_user/com/wire/kalium/persistence/Service.sq index d5b6e61d5eb..41ee9ab4f8a 100644 --- a/persistence/src/commonMain/db_user/com/wire/kalium/persistence/Service.sq +++ b/persistence/src/commonMain/db_user/com/wire/kalium/persistence/Service.sq @@ -1,6 +1,7 @@ import com.wire.kalium.persistence.dao.BotIdEntity; import com.wire.kalium.persistence.dao.QualifiedIDEntity; import kotlin.Boolean; +import kotlin.String; import kotlin.collections.List; CREATE TABLE Service ( diff --git a/persistence/src/commonMain/kotlin/com/wire/kalium/persistence/db/UserDatabaseBuilder.kt b/persistence/src/commonMain/kotlin/com/wire/kalium/persistence/db/UserDatabaseBuilder.kt index db606595276..7c2f8734d68 100644 --- a/persistence/src/commonMain/kotlin/com/wire/kalium/persistence/db/UserDatabaseBuilder.kt +++ b/persistence/src/commonMain/kotlin/com/wire/kalium/persistence/db/UserDatabaseBuilder.kt @@ -18,6 +18,7 @@ package com.wire.kalium.persistence.db +import app.cash.sqldelight.db.QueryResult import app.cash.sqldelight.db.SqlDriver import app.cash.sqldelight.db.SqlSchema import com.wire.kalium.persistence.UserDatabase @@ -283,11 +284,11 @@ internal expect fun getDatabaseAbsoluteFileLocation( ): String? @Suppress("TooGenericExceptionCaught") -fun SqlDriver.migrate(sqlSchema: SqlSchema): Boolean { +fun SqlDriver.migrate(sqlSchema: SqlSchema>): Boolean { val oldVersion = this.executeQuery(null, "PRAGMA user_version;", { it.next() - it.getLong(0) - }, 0).value?.toInt() ?: return false + it.getLong(0).let { QueryResult.Value(it) } + }, 0).value ?: return false val newVersion = sqlSchema.version return try { @@ -309,9 +310,10 @@ fun SqlDriver.checkFKViolations(): Boolean { // foreign_key_check returns the rows with the fk violations // if the cursor has a next, it means there are violations // and the backup is corrupted - if (it.next()) { + if (it.next().value) { result = true } + QueryResult.Unit }, 0, null) return result