Coverage Summary for Class: DatabaseImplKt (com.vsevolodganin.clicktrack.multiplatform)
Class |
Class, %
|
Method, %
|
Branch, %
|
Line, %
|
Instruction, %
|
DatabaseImplKt |
0%
(0/1)
|
0%
(0/2)
|
|
0%
(0/2)
|
0%
(0/7)
|
package com.vsevolodganin.clicktrack.multiplatform
import app.cash.sqldelight.TransacterImpl
import app.cash.sqldelight.db.AfterVersion
import app.cash.sqldelight.db.QueryResult
import app.cash.sqldelight.db.SqlDriver
import app.cash.sqldelight.db.SqlSchema
import com.vsevolodganin.clicktrack.Database
import com.vsevolodganin.clicktrack.storage.SqlClickSoundsQueries
import com.vsevolodganin.clicktrack.storage.SqlClickTrackQueries
import kotlin.Long
import kotlin.Unit
import kotlin.reflect.KClass
internal val KClass<Database>.schema: SqlSchema<QueryResult.Value<Unit>>
get() = DatabaseImpl.Schema
internal fun KClass<Database>.newInstance(driver: SqlDriver): Database = DatabaseImpl(driver)
private class DatabaseImpl(
driver: SqlDriver,
) : TransacterImpl(driver),
Database {
override val sqlClickSoundsQueries: SqlClickSoundsQueries = SqlClickSoundsQueries(driver)
override val sqlClickTrackQueries: SqlClickTrackQueries = SqlClickTrackQueries(driver)
public object Schema : SqlSchema<QueryResult.Value<Unit>> {
override val version: Long
get() = 3
override fun create(driver: SqlDriver): QueryResult.Value<Unit> {
driver.execute(null, """
|CREATE TABLE ClickSounds (
| id INTEGER NOT NULL PRIMARY KEY,
| serializedValue TEXT NOT NULL
|)
""".trimMargin(), 0)
driver.execute(null, """
|CREATE TABLE ClickTrack (
| id INTEGER NOT NULL PRIMARY KEY,
| name TEXT NOT NULL,
| serializedValue TEXT NOT NULL,
| ordinal INTEGER NOT NULL DEFAULT 0
|)
""".trimMargin(), 0)
return QueryResult.Unit
}
private fun migrateInternal(
driver: SqlDriver,
oldVersion: Long,
newVersion: Long,
): QueryResult.Value<Unit> {
if (oldVersion <= 1 && newVersion > 1) {
driver.execute(null, """
|CREATE TABLE ClickSounds (
| id INTEGER NOT NULL PRIMARY KEY,
| serializedValue TEXT NOT NULL
|)
""".trimMargin(), 0)
}
if (oldVersion <= 2 && newVersion > 2) {
driver.execute(null, "ALTER TABLE ClickTrack ADD ordinal INTEGER NOT NULL DEFAULT 0", 0)
}
return QueryResult.Unit
}
override fun migrate(
driver: SqlDriver,
oldVersion: Long,
newVersion: Long,
vararg callbacks: AfterVersion,
): QueryResult.Value<Unit> {
var lastVersion = oldVersion
callbacks.filter { it.afterVersion in oldVersion until newVersion }
.sortedBy { it.afterVersion }
.forEach { callback ->
migrateInternal(driver, oldVersion = lastVersion, newVersion = callback.afterVersion + 1)
callback.block(driver)
lastVersion = callback.afterVersion + 1
}
if (lastVersion < newVersion) {
migrateInternal(driver, lastVersion, newVersion)
}
return QueryResult.Unit
}
}
}