package cc.unitmesh.devins.db import app.cash.sqldelight.db.SqlCursor import app.cash.sqldelight.db.SqlDriver import app.cash.sqldelight.db.SqlPreparedStatement actual class DatabaseDriverFactory { actual fun createDriver(): SqlDriver { // For JS platform, we use a simple in-memory mock driver // This is a simplified implementation for KMP compatibility return MockSqlDriver().also { driver -> DevInsDatabase.Schema.create(driver) } } } /** * A simple mock SQL driver for JS platform * This is a minimal implementation to satisfy the interface */ private class MockSqlDriver : SqlDriver { private val listeners = mutableMapOf>() override fun close() { listeners.clear() } override fun currentTransaction(): app.cash.sqldelight.Transacter.Transaction? = null override fun execute( identifier: Int?, sql: String, parameters: Int, binders: (SqlPreparedStatement.() -> Unit)? ): app.cash.sqldelight.db.QueryResult { // Simple mock implementation - just return success return app.cash.sqldelight.db.QueryResult.Value(0L) } override fun executeQuery( identifier: Int?, sql: String, mapper: (SqlCursor) -> app.cash.sqldelight.db.QueryResult, parameters: Int, binders: (SqlPreparedStatement.() -> Unit)? ): app.cash.sqldelight.db.QueryResult { // Simple mock implementation - return empty result val mockCursor = object : SqlCursor { override fun getString(index: Int): String? = null override fun getLong(index: Int): Long? = null override fun getBytes(index: Int): ByteArray? = null override fun getDouble(index: Int): Double? = null override fun getBoolean(index: Int): Boolean? = null override fun next(): app.cash.sqldelight.db.QueryResult = app.cash.sqldelight.db.QueryResult.Value(false) } return mapper(mockCursor) } override fun newTransaction(): app.cash.sqldelight.db.QueryResult { val transaction = object : app.cash.sqldelight.Transacter.Transaction() { override val enclosingTransaction: app.cash.sqldelight.Transacter.Transaction? = null override fun endTransaction(successful: Boolean): app.cash.sqldelight.db.QueryResult { return app.cash.sqldelight.db.QueryResult.Value(Unit) } } return app.cash.sqldelight.db.QueryResult.Value(transaction) } override fun addListener(vararg queryKeys: String, listener: app.cash.sqldelight.Query.Listener) { queryKeys.forEach { key -> listeners.getOrPut(key) { mutableSetOf() }.add(listener) } } override fun removeListener(vararg queryKeys: String, listener: app.cash.sqldelight.Query.Listener) { queryKeys.forEach { key -> listeners[key]?.remove(listener) } } override fun notifyListeners(vararg queryKeys: String) { queryKeys.forEach { key -> listeners[key]?.forEach { listener -> listener.queryResultsChanged() } } } }