All Downloads are FREE. Search and download functionalities are using the official Maven repository.

commonMain.com.harmony.kotlin.data.datasource.database.harmonykotlin.CacheDatabaseImpl.kt Maven / Gradle / Ivy

package com.harmony.kotlin.`data`.datasource.database.harmonykotlin

import com.harmony.core.db.Cache
import com.harmony.core.db.CacheQueries
import com.harmony.kotlin.`data`.datasource.database.CacheDatabase
import com.squareup.sqldelight.Query
import com.squareup.sqldelight.TransacterImpl
import com.squareup.sqldelight.`internal`.copyOnWriteList
import com.squareup.sqldelight.db.SqlCursor
import com.squareup.sqldelight.db.SqlDriver
import kotlin.Any
import kotlin.ByteArray
import kotlin.Int
import kotlin.String
import kotlin.Unit
import kotlin.collections.MutableList
import kotlin.reflect.KClass

internal val KClass.schema: SqlDriver.Schema
  get() = CacheDatabaseImpl.Schema

internal fun KClass.newInstance(driver: SqlDriver): CacheDatabase =
    CacheDatabaseImpl(driver)

private class CacheDatabaseImpl(
  driver: SqlDriver
) : TransacterImpl(driver), CacheDatabase {
  public override val cacheQueries: CacheQueriesImpl = CacheQueriesImpl(this, driver)

  public object Schema : SqlDriver.Schema {
    public override val version: Int
      get() = 1

    public override fun create(driver: SqlDriver): Unit {
      driver.execute(null, """
          |CREATE TABLE cache (
          |    key TEXT NOT NULL PRIMARY KEY,
          |    value BLOB NOT NULL
          |)
          """.trimMargin(), 0)
    }

    public override fun migrate(
      driver: SqlDriver,
      oldVersion: Int,
      newVersion: Int
    ): Unit {
    }
  }
}

private class CacheQueriesImpl(
  private val database: CacheDatabaseImpl,
  private val driver: SqlDriver
) : TransacterImpl(driver), CacheQueries {
  internal val `value`: MutableList> = copyOnWriteList()

  internal val selectAll: MutableList> = copyOnWriteList()

  public override fun  `value`(key: String, mapper: (key: String, value_: ByteArray) -> T):
      Query = ValueQuery(key) { cursor ->
    mapper(
      cursor.getString(0)!!,
      cursor.getBytes(1)!!
    )
  }

  public override fun `value`(key: String): Query = value(key) { key_, value_ ->
    Cache(
      key_,
      value_
    )
  }

  public override fun  selectAll(mapper: (key: String, value_: ByteArray) -> T): Query =
      Query(389569751, selectAll, driver, "Cache.sq", "selectAll", """
  |SELECT *
  |FROM cache
  """.trimMargin()) { cursor ->
    mapper(
      cursor.getString(0)!!,
      cursor.getBytes(1)!!
    )
  }

  public override fun selectAll(): Query = selectAll { key, value_ ->
    Cache(
      key,
      value_
    )
  }

  public override fun delete(key: String): Unit {
    driver.execute(1687135513, """DELETE FROM cache WHERE key LIKE ?""", 1) {
      bindString(1, key)
    }
    notifyQueries(1687135513, {database.cacheQueries.selectAll + database.cacheQueries.value})
  }

  public override fun insertOrUpdate(key: String, value_: ByteArray): Unit {
    driver.execute(-110285869, """
    |INSERT OR REPLACE INTO cache(key, value)
    |VALUES(?, ?)
    """.trimMargin(), 2) {
      bindString(1, key)
      bindBytes(2, value_)
    }
    notifyQueries(-110285869, {database.cacheQueries.selectAll + database.cacheQueries.value})
  }

  public override fun deleteAll(): Unit {
    driver.execute(1746835912, """DELETE FROM cache""", 0)
    notifyQueries(1746835912, {database.cacheQueries.selectAll + database.cacheQueries.value})
  }

  private inner class ValueQuery(
    public val key: String,
    mapper: (SqlCursor) -> T
  ) : Query(value, mapper) {
    public override fun execute(): SqlCursor = driver.executeQuery(1179307075, """
    |SELECT *
    |FROM cache
    |WHERE key LIKE ?
    """.trimMargin(), 1) {
      bindString(1, key)
    }

    public override fun toString(): String = "Cache.sq:value"
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy