database: migrate to Android-only

This commit is contained in:
Harsh Shandilya 2022-08-02 22:08:17 +05:30
parent 000b782b86
commit e7f4c8a7eb
No known key found for this signature in database
GPG key ID: 366D7BBAD1031E80
13 changed files with 18 additions and 66 deletions

View file

@ -7,7 +7,6 @@ import dagger.hilt.InstallIn
import dagger.hilt.android.qualifiers.ApplicationContext import dagger.hilt.android.qualifiers.ApplicationContext
import dagger.hilt.components.SingletonComponent import dagger.hilt.components.SingletonComponent
import dev.msfjarvis.claw.database.LobstersDatabase import dev.msfjarvis.claw.database.LobstersDatabase
import dev.msfjarvis.claw.database.local.DriverFactory
import dev.msfjarvis.claw.database.local.createDatabase import dev.msfjarvis.claw.database.local.createDatabase
@Module @Module
@ -15,12 +14,7 @@ import dev.msfjarvis.claw.database.local.createDatabase
object DatabaseModule { object DatabaseModule {
@Provides @Provides
fun provideDriverFactory(@ApplicationContext context: Context): DriverFactory { fun provideDatabase(@ApplicationContext context: Context): LobstersDatabase {
return DriverFactory(context) return createDatabase(context)
}
@Provides
fun provideDatabase(factory: DriverFactory): LobstersDatabase {
return createDatabase(factory)
} }
} }

View file

@ -1,38 +1,27 @@
@file:Suppress("DSL_SCOPE_VIOLATION", "UnstableApiUsage") @file:Suppress("DSL_SCOPE_VIOLATION", "UnstableApiUsage")
plugins { plugins {
kotlin("multiplatform") kotlin("android")
alias(libs.plugins.sqldelight) alias(libs.plugins.sqldelight)
id("dev.msfjarvis.claw.kotlin-common") id("dev.msfjarvis.claw.kotlin-common")
id("dev.msfjarvis.claw.android-library") id("dev.msfjarvis.claw.android-library")
} }
kotlin { android { namespace = "dev.msfjarvis.claw.database" }
android()
jvm("desktop")
sourceSets["androidMain"].apply { dependencies { implementation(libs.sqldelight.androidDriver) } }
sourceSets["commonMain"].apply {
dependencies { implementation(libs.sqldelight.primitiveAdapters) }
}
sourceSets["desktopMain"].apply { dependencies { implementation(libs.sqldelight.jvmDriver) } }
sourceSets["desktopTest"].apply {
dependencies {
implementation(libs.kotlinx.coroutines.core)
implementation(kotlin("test-junit"))
}
}
}
android {
namespace = "dev.msfjarvis.claw.database"
sourceSets["main"].manifest.srcFile("src/androidMain/AndroidManifest.xml")
}
sqldelight { sqldelight {
database("LobstersDatabase") { database("LobstersDatabase") {
packageName = "dev.msfjarvis.claw.database" packageName = "dev.msfjarvis.claw.database"
sourceFolders = listOf("sqldelight") sourceFolders = listOf("sqldelight")
schemaOutputDirectory = file("src/commonMain/sqldelight/databases") schemaOutputDirectory = file("src/main/sqldelight/databases")
verifyMigrations = true verifyMigrations = true
} }
} }
dependencies {
implementation(libs.sqldelight.androidDriver)
implementation(libs.sqldelight.primitiveAdapters)
testImplementation(libs.sqldelight.jvmDriver)
testImplementation(libs.kotlinx.coroutines.core)
testImplementation(kotlin("test-junit"))
}

View file

@ -1,12 +0,0 @@
package dev.msfjarvis.claw.database.local
import android.content.Context
import app.cash.sqldelight.db.SqlDriver
import app.cash.sqldelight.driver.android.AndroidSqliteDriver
import dev.msfjarvis.claw.database.LobstersDatabase
actual class DriverFactory(private val context: Context) {
actual fun createDriver(): SqlDriver {
return AndroidSqliteDriver(LobstersDatabase.Schema, context, LobstersDatabaseName)
}
}

View file

@ -1,17 +0,0 @@
package dev.msfjarvis.claw.database.local
import app.cash.sqldelight.db.SqlDriver
import app.cash.sqldelight.driver.jdbc.sqlite.JdbcSqliteDriver
import dev.msfjarvis.claw.database.LobstersDatabase
import java.io.File
actual class DriverFactory {
actual fun createDriver(): SqlDriver {
val env = System.getenv()
val home = env["HOME"]
val sqlitePath = "$home${File.pathSeparatorChar}.cache${File.pathSeparatorChar}Claw_database.db"
val driver: SqlDriver = JdbcSqliteDriver("jdbc:sqlite:$sqlitePath")
LobstersDatabase.Schema.create(driver)
return driver
}
}

View file

@ -1,17 +1,14 @@
package dev.msfjarvis.claw.database.local package dev.msfjarvis.claw.database.local
import android.content.Context
import app.cash.sqldelight.adapter.primitive.IntColumnAdapter import app.cash.sqldelight.adapter.primitive.IntColumnAdapter
import app.cash.sqldelight.db.SqlDriver import app.cash.sqldelight.driver.android.AndroidSqliteDriver
import dev.msfjarvis.claw.database.LobstersDatabase import dev.msfjarvis.claw.database.LobstersDatabase
import dev.msfjarvis.claw.database.model.TagsAdapter import dev.msfjarvis.claw.database.model.TagsAdapter
internal const val LobstersDatabaseName = "SavedPosts.db" internal const val LobstersDatabaseName = "SavedPosts.db"
expect class DriverFactory { fun createDatabase(context: Context): LobstersDatabase {
fun createDriver(): SqlDriver val driver = AndroidSqliteDriver(LobstersDatabase.Schema, context, LobstersDatabaseName)
}
fun createDatabase(driverFactory: DriverFactory): LobstersDatabase {
val driver = driverFactory.createDriver()
return LobstersDatabase(driver, SavedPost.Adapter(IntColumnAdapter, TagsAdapter())) return LobstersDatabase(driver, SavedPost.Adapter(IntColumnAdapter, TagsAdapter()))
} }

View file

@ -98,6 +98,7 @@ enableFeaturePreview("TYPESAFE_PROJECT_ACCESSORS")
include( include(
"api", "api",
"database",
"model", "model",
) )