sqldelight
sqldelight copied to clipboard
Table dependency not working. Getter not implemented on the final merged interface implementation
:app
sqldelight {
AppDatabase {
packageName = "sk.foo.app"
dependency project(":install:impl")
}
}
import sk.foo.install.AppDatabase as AppDatabase0
interface AppDatabase : Transacter, AppDatabase0 {
val dummyQueries: DummyQueries
companion object {
val Schema: SqlDriver.Schema
get() = AppDatabase::class.schema
operator fun invoke(driver: SqlDriver): AppDatabase = AppDatabase::class.newInstance(driver)}
}
internal val KClass<AppDatabase>.schema: SqlDriver.Schema
get() = AppDatabaseImpl.Schema
internal fun KClass<AppDatabase>.newInstance(driver: SqlDriver): AppDatabase =
AppDatabaseImpl(driver)
private class AppDatabaseImpl(
driver: SqlDriver
) : TransacterImpl(driver), AppDatabase {
override val dummyQueries: DummyQueriesImpl = DummyQueriesImpl(this, driver)
///////// installdQueries missing here ///////////////
object Schema : SqlDriver.Schema {
override val version: Int
get() = 1
override fun create(driver: SqlDriver) {
driver.execute(null, """
|CREATE TABLE dummy (
| value TEXT
|)
""".trimMargin(), 0)
}
override fun migrate(
driver: SqlDriver,
oldVersion: Int,
newVersion: Int
) {
}
}
}
private class DummyQueriesImpl(
private val database: AppDatabaseImpl,
private val driver: SqlDriver
) : TransacterImpl(driver), DummyQueries
:install:impl
sqldelight {
AppDatabase {
packageName = "sk.foo.install"
}
}
package sk.foo.install
import com.squareup.sqldelight.Transacter
import com.squareup.sqldelight.db.SqlDriver
import sk.o2.install.impl.newInstance
import sk.o2.install.impl.schema
interface AppDatabase : Transacter {
val installIdQueries: InstallIdQueries
companion object {
val Schema: SqlDriver.Schema
get() = AppDatabase::class.schema
operator fun invoke(driver: SqlDriver): AppDatabase = AppDatabase::class.newInstance(driver)}
}
The final AppDatabase implementa AppDatabase0 correctly. However the AppDatabaseImpl doesnt implement the AppDatabase0 getter
Class 'AppDatabaseImpl' is not abstract and does not implement abstract member public abstract val installIdQueries: InstallIdQueries defined in sk.foo.app.AppDatabase
Am I doing something wrong?
I figured out the cause. It's flavors. Whenever I add this
flavorDimensions "api"
productFlavors {
mock {
dimension "api"
}
tst {
dimension "api"
}
}
the error above manifests itself. (as you can see the flavors don't do anything really, don't change package name etc so it seems like a bug in the compiler)
This seems to be a duplicate of #1360 (but this report is more detailed).
Also I discovered the same error when using dependencies in a multiplatform project. Not sure if I should report it separately.