From cdc9336d8bd40bdc36979564f93c80a68f0cbb91 Mon Sep 17 00:00:00 2001 From: lihenggui Date: Tue, 20 Feb 2024 17:26:17 -0800 Subject: [PATCH] Allow foreign keys --- .../apps/nowinandroid/core/database/DriverModule.kt | 12 +++++++++++- .../nowinandroid/core/database/BaseTest.android.kt | 6 +++++- .../apps/nowinandroid/core/database/DriverModule.kt | 6 +++++- .../apps/nowinandroid/core/database/BaseTest.jvm.kt | 6 +++++- .../apps/nowinandroid/core/database/DriverModule.kt | 12 +++++++++++- .../nowinandroid/core/database/BaseTest.native.kt | 11 ++++++++++- 6 files changed, 47 insertions(+), 6 deletions(-) diff --git a/core/database/src/androidMain/kotlin/com/google/samples/apps/nowinandroid/core/database/DriverModule.kt b/core/database/src/androidMain/kotlin/com/google/samples/apps/nowinandroid/core/database/DriverModule.kt index 4e703461d..932de70c6 100644 --- a/core/database/src/androidMain/kotlin/com/google/samples/apps/nowinandroid/core/database/DriverModule.kt +++ b/core/database/src/androidMain/kotlin/com/google/samples/apps/nowinandroid/core/database/DriverModule.kt @@ -17,6 +17,7 @@ package com.google.samples.apps.nowinandroid.core.database import android.content.Context +import androidx.sqlite.db.SupportSQLiteDatabase import app.cash.sqldelight.async.coroutines.synchronous import app.cash.sqldelight.db.QueryResult import app.cash.sqldelight.db.SqlDriver @@ -32,6 +33,15 @@ actual class DriverModule(private val context: Context) { actual suspend fun provideDbDriver( schema: SqlSchema>, ): SqlDriver { - return AndroidSqliteDriver(schema.synchronous(), context, "nia-database.db") + val synchronousSchema = schema.synchronous() + return AndroidSqliteDriver(schema = synchronousSchema, + context = context, + name = "nia-database.db", + callback = object : AndroidSqliteDriver.Callback(synchronousSchema) { + override fun onOpen(db: SupportSQLiteDatabase) { + db.setForeignKeyConstraintsEnabled(true) + } + } + ) } } diff --git a/core/database/src/androidUnitTest/kotlin/com/google/samples/apps/nowinandroid/core/database/BaseTest.android.kt b/core/database/src/androidUnitTest/kotlin/com/google/samples/apps/nowinandroid/core/database/BaseTest.android.kt index 56e63a063..14e178877 100644 --- a/core/database/src/androidUnitTest/kotlin/com/google/samples/apps/nowinandroid/core/database/BaseTest.android.kt +++ b/core/database/src/androidUnitTest/kotlin/com/google/samples/apps/nowinandroid/core/database/BaseTest.android.kt @@ -18,8 +18,12 @@ package com.google.samples.apps.nowinandroid.core.database import app.cash.sqldelight.db.SqlDriver import app.cash.sqldelight.driver.jdbc.sqlite.JdbcSqliteDriver +import java.util.Properties actual suspend fun createDriver(): SqlDriver { - return JdbcSqliteDriver(JdbcSqliteDriver.IN_MEMORY) + return JdbcSqliteDriver( + url = JdbcSqliteDriver.IN_MEMORY, + properties = Properties().apply { put("foreign_keys", "true") }, + ) .also { NiaDatabase.Schema.create(it).await() } } diff --git a/core/database/src/jvmMain/kotlin/com/google/samples/apps/nowinandroid/core/database/DriverModule.kt b/core/database/src/jvmMain/kotlin/com/google/samples/apps/nowinandroid/core/database/DriverModule.kt index 8b8e797dc..d69966a12 100644 --- a/core/database/src/jvmMain/kotlin/com/google/samples/apps/nowinandroid/core/database/DriverModule.kt +++ b/core/database/src/jvmMain/kotlin/com/google/samples/apps/nowinandroid/core/database/DriverModule.kt @@ -21,13 +21,17 @@ import app.cash.sqldelight.db.SqlDriver import app.cash.sqldelight.db.SqlSchema import app.cash.sqldelight.driver.jdbc.sqlite.JdbcSqliteDriver import me.tatarka.inject.annotations.Provides +import java.util.Properties actual class DriverModule { @Provides actual suspend fun provideDbDriver( schema: SqlSchema>, ): SqlDriver { - return JdbcSqliteDriver(JdbcSqliteDriver.IN_MEMORY) + return JdbcSqliteDriver( + url = JdbcSqliteDriver.IN_MEMORY, + properties = Properties().apply { put("foreign_keys", "true") }, + ) .also { schema.create(it).await() } } } diff --git a/core/database/src/jvmTest/kotlin/com/google/samples/apps/nowinandroid/core/database/BaseTest.jvm.kt b/core/database/src/jvmTest/kotlin/com/google/samples/apps/nowinandroid/core/database/BaseTest.jvm.kt index a77aa2349..d650bbf6f 100644 --- a/core/database/src/jvmTest/kotlin/com/google/samples/apps/nowinandroid/core/database/BaseTest.jvm.kt +++ b/core/database/src/jvmTest/kotlin/com/google/samples/apps/nowinandroid/core/database/BaseTest.jvm.kt @@ -19,8 +19,12 @@ package com.google.samples.apps.nowinandroid.core.database import app.cash.sqldelight.db.SqlDriver import app.cash.sqldelight.driver.jdbc.sqlite.JdbcSqliteDriver import com.google.samples.apps.nowinandroid.core.database.NiaDatabase.Companion.Schema +import java.util.Properties actual suspend fun createDriver(): SqlDriver { - return JdbcSqliteDriver(JdbcSqliteDriver.IN_MEMORY) + return JdbcSqliteDriver( + url = JdbcSqliteDriver.IN_MEMORY, + properties = Properties().apply { put("foreign_keys", "true") }, + ) .also { Schema.create(it).await() } } diff --git a/core/database/src/nativeMain/kotlin/com/google/samples/apps/nowinandroid/core/database/DriverModule.kt b/core/database/src/nativeMain/kotlin/com/google/samples/apps/nowinandroid/core/database/DriverModule.kt index cd54d58d2..311c0e470 100644 --- a/core/database/src/nativeMain/kotlin/com/google/samples/apps/nowinandroid/core/database/DriverModule.kt +++ b/core/database/src/nativeMain/kotlin/com/google/samples/apps/nowinandroid/core/database/DriverModule.kt @@ -21,6 +21,7 @@ import app.cash.sqldelight.db.QueryResult import app.cash.sqldelight.db.SqlDriver import app.cash.sqldelight.db.SqlSchema import app.cash.sqldelight.driver.native.NativeSqliteDriver +import co.touchlab.sqliter.DatabaseConfiguration import me.tatarka.inject.annotations.Provides actual class DriverModule { @@ -29,6 +30,15 @@ actual class DriverModule { actual suspend fun provideDbDriver( schema: SqlSchema>, ): SqlDriver { - return NativeSqliteDriver(schema.synchronous(), "nia-database.db") + val synchronousSchema = schema.synchronous() + return NativeSqliteDriver( + schema = synchronousSchema, + name = "nia-database.db", + onConfiguration = { config: DatabaseConfiguration -> + config.copy( + extendedConfig = DatabaseConfiguration.Extended(foreignKeyConstraints = true), + ) + }, + ) } } diff --git a/core/database/src/nativeTest/kotlin/com/google/samples/apps/nowinandroid/core/database/BaseTest.native.kt b/core/database/src/nativeTest/kotlin/com/google/samples/apps/nowinandroid/core/database/BaseTest.native.kt index d7b6b1c9d..ae6d56d81 100644 --- a/core/database/src/nativeTest/kotlin/com/google/samples/apps/nowinandroid/core/database/BaseTest.native.kt +++ b/core/database/src/nativeTest/kotlin/com/google/samples/apps/nowinandroid/core/database/BaseTest.native.kt @@ -19,8 +19,17 @@ package com.google.samples.apps.nowinandroid.core.database import app.cash.sqldelight.async.coroutines.synchronous import app.cash.sqldelight.db.SqlDriver import app.cash.sqldelight.driver.native.NativeSqliteDriver +import co.touchlab.sqliter.DatabaseConfiguration import com.google.samples.apps.nowinandroid.core.database.NiaDatabase.Companion.Schema actual suspend fun createDriver(): SqlDriver { - return NativeSqliteDriver(Schema.synchronous(), "nia-database-test.db") + return NativeSqliteDriver( + schema = Schema.synchronous(), + name = "nia-database-test.db", + onConfiguration = { config: DatabaseConfiguration -> + config.copy( + extendedConfig = DatabaseConfiguration.Extended(foreignKeyConstraints = true), + ) + }, + ) }