Merge pull request #1569 from vector-im/julioromano/sqldelight2
Migrate SqlDelight to 2.0.0
This commit is contained in:
commit
d3834cff9c
5 changed files with 40 additions and 23 deletions
|
|
@ -43,7 +43,7 @@ appyx = "1.4.0"
|
||||||
dependencycheck = "8.4.0"
|
dependencycheck = "8.4.0"
|
||||||
dependencyanalysis = "1.25.0"
|
dependencyanalysis = "1.25.0"
|
||||||
stem = "2.3.0"
|
stem = "2.3.0"
|
||||||
sqldelight = "1.5.5"
|
sqldelight = "2.0.0"
|
||||||
telephoto = "0.6.2"
|
telephoto = "0.6.2"
|
||||||
wysiwyg = "2.14.1"
|
wysiwyg = "2.14.1"
|
||||||
|
|
||||||
|
|
@ -146,9 +146,9 @@ timber = "com.jakewharton.timber:timber:5.0.1"
|
||||||
matrix_sdk = "org.matrix.rustcomponents:sdk-android:0.1.62"
|
matrix_sdk = "org.matrix.rustcomponents:sdk-android:0.1.62"
|
||||||
matrix_richtexteditor = { module = "io.element.android:wysiwyg", version.ref = "wysiwyg" }
|
matrix_richtexteditor = { module = "io.element.android:wysiwyg", version.ref = "wysiwyg" }
|
||||||
matrix_richtexteditor_compose = { module = "io.element.android:wysiwyg-compose", version.ref = "wysiwyg" }
|
matrix_richtexteditor_compose = { module = "io.element.android:wysiwyg-compose", version.ref = "wysiwyg" }
|
||||||
sqldelight-driver-android = { module = "com.squareup.sqldelight:android-driver", version.ref = "sqldelight" }
|
sqldelight-driver-android = { module = "app.cash.sqldelight:android-driver", version.ref = "sqldelight" }
|
||||||
sqldelight-driver-jvm = { module = "com.squareup.sqldelight:sqlite-driver", version.ref = "sqldelight" }
|
sqldelight-driver-jvm = { module = "app.cash.sqldelight:sqlite-driver", version.ref = "sqldelight" }
|
||||||
sqldelight-coroutines = { module = "com.squareup.sqldelight:coroutines-extensions", version.ref = "sqldelight" }
|
sqldelight-coroutines = { module = "app.cash.sqldelight:coroutines-extensions", version.ref = "sqldelight" }
|
||||||
sqlcipher = "net.zetetic:android-database-sqlcipher:4.5.4"
|
sqlcipher = "net.zetetic:android-database-sqlcipher:4.5.4"
|
||||||
sqlite = "androidx.sqlite:sqlite-ktx:2.3.1"
|
sqlite = "androidx.sqlite:sqlite-ktx:2.3.1"
|
||||||
unifiedpush = "com.github.UnifiedPush:android-connector:2.1.1"
|
unifiedpush = "com.github.UnifiedPush:android-connector:2.1.1"
|
||||||
|
|
@ -203,7 +203,7 @@ dependencycheck = { id = "org.owasp.dependencycheck", version.ref = "dependencyc
|
||||||
dependencyanalysis = { id = "com.autonomousapps.dependency-analysis", version.ref = "dependencyanalysis" }
|
dependencyanalysis = { id = "com.autonomousapps.dependency-analysis", version.ref = "dependencyanalysis" }
|
||||||
paparazzi = "app.cash.paparazzi:1.3.1"
|
paparazzi = "app.cash.paparazzi:1.3.1"
|
||||||
kover = "org.jetbrains.kotlinx.kover:0.6.1"
|
kover = "org.jetbrains.kotlinx.kover:0.6.1"
|
||||||
sqldelight = { id = "com.squareup.sqldelight", version.ref = "sqldelight" }
|
sqldelight = { id = "app.cash.sqldelight", version.ref = "sqldelight" }
|
||||||
|
|
||||||
# Version '4.3.1.3277' introduced some regressions in CI time (more than 2x slower), so make sure
|
# Version '4.3.1.3277' introduced some regressions in CI time (more than 2x slower), so make sure
|
||||||
# this is no longer the case before upgrading.
|
# this is no longer the case before upgrading.
|
||||||
|
|
|
||||||
|
|
@ -17,8 +17,10 @@
|
||||||
package io.element.encrypteddb
|
package io.element.encrypteddb
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import com.squareup.sqldelight.android.AndroidSqliteDriver
|
import app.cash.sqldelight.db.QueryResult
|
||||||
import com.squareup.sqldelight.db.SqlDriver
|
import app.cash.sqldelight.db.SqlDriver
|
||||||
|
import app.cash.sqldelight.db.SqlSchema
|
||||||
|
import app.cash.sqldelight.driver.android.AndroidSqliteDriver
|
||||||
import io.element.encrypteddb.passphrase.PassphraseProvider
|
import io.element.encrypteddb.passphrase.PassphraseProvider
|
||||||
import net.sqlcipher.database.SupportFactory
|
import net.sqlcipher.database.SupportFactory
|
||||||
|
|
||||||
|
|
@ -35,7 +37,7 @@ class SqlCipherDriverFactory(
|
||||||
* @param name The name of the database to create.
|
* @param name The name of the database to create.
|
||||||
* @param context Android [Context], used to instantiate the driver.
|
* @param context Android [Context], used to instantiate the driver.
|
||||||
*/
|
*/
|
||||||
fun create(schema: SqlDriver.Schema, name: String, context: Context): SqlDriver {
|
fun create(schema: SqlSchema<QueryResult.Value<Unit>>, name: String, context: Context): SqlDriver {
|
||||||
val passphrase = passphraseProvider.getPassphrase()
|
val passphrase = passphraseProvider.getPassphrase()
|
||||||
val factory = SupportFactory(passphrase)
|
val factory = SupportFactory(passphrase)
|
||||||
return AndroidSqliteDriver(schema = schema, context = context, name = name, factory = factory)
|
return AndroidSqliteDriver(schema = schema, context = context, name = name, factory = factory)
|
||||||
|
|
|
||||||
|
|
@ -50,13 +50,15 @@ dependencies {
|
||||||
}
|
}
|
||||||
|
|
||||||
sqldelight {
|
sqldelight {
|
||||||
database("SessionDatabase") {
|
databases {
|
||||||
// https://cashapp.github.io/sqldelight/1.5.4/multiplatform_sqlite/migrations/
|
create("SessionDatabase") {
|
||||||
// To generate a .db file from your latest schema, run this task
|
// https://cashapp.github.io/sqldelight/2.0.0/android_sqlite/migrations/
|
||||||
// ./gradlew generateDebugSessionDatabaseSchema
|
// To generate a .db file from your latest schema, run this task
|
||||||
// Test migration by running
|
// ./gradlew generateDebugSessionDatabaseSchema
|
||||||
// ./gradlew verifySqlDelightMigration
|
// Test migration by running
|
||||||
schemaOutputDirectory = File("src/main/sqldelight/databases")
|
// ./gradlew verifySqlDelightMigration
|
||||||
verifyMigrations = true
|
schemaOutputDirectory = File("src/main/sqldelight/databases")
|
||||||
|
verifyMigrations = true
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -16,10 +16,11 @@
|
||||||
|
|
||||||
package io.element.android.libraries.sessionstorage.impl
|
package io.element.android.libraries.sessionstorage.impl
|
||||||
|
|
||||||
|
import app.cash.sqldelight.coroutines.asFlow
|
||||||
|
import app.cash.sqldelight.coroutines.mapToList
|
||||||
|
import app.cash.sqldelight.coroutines.mapToOneOrNull
|
||||||
import com.squareup.anvil.annotations.ContributesBinding
|
import com.squareup.anvil.annotations.ContributesBinding
|
||||||
import com.squareup.sqldelight.runtime.coroutines.asFlow
|
import io.element.android.libraries.core.coroutine.CoroutineDispatchers
|
||||||
import com.squareup.sqldelight.runtime.coroutines.mapToList
|
|
||||||
import com.squareup.sqldelight.runtime.coroutines.mapToOneOrNull
|
|
||||||
import io.element.android.libraries.di.AppScope
|
import io.element.android.libraries.di.AppScope
|
||||||
import io.element.android.libraries.di.SingleIn
|
import io.element.android.libraries.di.SingleIn
|
||||||
import io.element.android.libraries.sessionstorage.api.LoggedInState
|
import io.element.android.libraries.sessionstorage.api.LoggedInState
|
||||||
|
|
@ -34,12 +35,13 @@ import javax.inject.Inject
|
||||||
@ContributesBinding(AppScope::class)
|
@ContributesBinding(AppScope::class)
|
||||||
class DatabaseSessionStore @Inject constructor(
|
class DatabaseSessionStore @Inject constructor(
|
||||||
private val database: SessionDatabase,
|
private val database: SessionDatabase,
|
||||||
|
private val dispatchers: CoroutineDispatchers,
|
||||||
) : SessionStore {
|
) : SessionStore {
|
||||||
|
|
||||||
override fun isLoggedIn(): Flow<LoggedInState> {
|
override fun isLoggedIn(): Flow<LoggedInState> {
|
||||||
return database.sessionDataQueries.selectFirst()
|
return database.sessionDataQueries.selectFirst()
|
||||||
.asFlow()
|
.asFlow()
|
||||||
.mapToOneOrNull()
|
.mapToOneOrNull(dispatchers.io)
|
||||||
.map {
|
.map {
|
||||||
if (it == null) {
|
if (it == null) {
|
||||||
LoggedInState.NotLoggedIn
|
LoggedInState.NotLoggedIn
|
||||||
|
|
@ -96,7 +98,7 @@ class DatabaseSessionStore @Inject constructor(
|
||||||
Timber.w("Observing session list!")
|
Timber.w("Observing session list!")
|
||||||
return database.sessionDataQueries.selectAll()
|
return database.sessionDataQueries.selectAll()
|
||||||
.asFlow()
|
.asFlow()
|
||||||
.mapToList()
|
.mapToList(dispatchers.io)
|
||||||
.map { it.map { sessionData -> sessionData.toApiModel() } }
|
.map { it.map { sessionData -> sessionData.toApiModel() } }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -16,12 +16,15 @@
|
||||||
|
|
||||||
package io.element.android.libraries.sessionstorage.impl
|
package io.element.android.libraries.sessionstorage.impl
|
||||||
|
|
||||||
|
import app.cash.sqldelight.driver.jdbc.sqlite.JdbcSqliteDriver
|
||||||
import app.cash.turbine.test
|
import app.cash.turbine.test
|
||||||
import com.google.common.truth.Truth.assertThat
|
import com.google.common.truth.Truth.assertThat
|
||||||
import com.squareup.sqldelight.sqlite.driver.JdbcSqliteDriver
|
import io.element.android.libraries.core.coroutine.CoroutineDispatchers
|
||||||
import io.element.android.libraries.matrix.session.SessionData
|
import io.element.android.libraries.matrix.session.SessionData
|
||||||
import io.element.android.libraries.sessionstorage.api.LoggedInState
|
import io.element.android.libraries.sessionstorage.api.LoggedInState
|
||||||
import io.element.android.libraries.sessionstorage.api.LoginType
|
import io.element.android.libraries.sessionstorage.api.LoginType
|
||||||
|
import kotlinx.coroutines.ExperimentalCoroutinesApi
|
||||||
|
import kotlinx.coroutines.test.UnconfinedTestDispatcher
|
||||||
import kotlinx.coroutines.test.runTest
|
import kotlinx.coroutines.test.runTest
|
||||||
import org.junit.Before
|
import org.junit.Before
|
||||||
import org.junit.Test
|
import org.junit.Test
|
||||||
|
|
@ -44,6 +47,7 @@ class DatabaseSessionStoreTests {
|
||||||
loginType = LoginType.UNKNOWN.name,
|
loginType = LoginType.UNKNOWN.name,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@OptIn(ExperimentalCoroutinesApi::class)
|
||||||
@Before
|
@Before
|
||||||
fun setup() {
|
fun setup() {
|
||||||
// Initialise in memory SQLite driver
|
// Initialise in memory SQLite driver
|
||||||
|
|
@ -51,7 +55,14 @@ class DatabaseSessionStoreTests {
|
||||||
SessionDatabase.Schema.create(driver)
|
SessionDatabase.Schema.create(driver)
|
||||||
|
|
||||||
database = SessionDatabase(driver)
|
database = SessionDatabase(driver)
|
||||||
databaseSessionStore = DatabaseSessionStore(database)
|
databaseSessionStore = DatabaseSessionStore(
|
||||||
|
database = database,
|
||||||
|
dispatchers = CoroutineDispatchers(
|
||||||
|
io = UnconfinedTestDispatcher(),
|
||||||
|
computation = UnconfinedTestDispatcher(),
|
||||||
|
main = UnconfinedTestDispatcher(),
|
||||||
|
)
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue