diff --git a/sqldelight-compiler/src/main/kotlin/app/cash/sqldelight/core/compiler/DatabaseGenerator.kt b/sqldelight-compiler/src/main/kotlin/app/cash/sqldelight/core/compiler/DatabaseGenerator.kt index 2375b6fdce9..a8de73ff38e 100644 --- a/sqldelight-compiler/src/main/kotlin/app/cash/sqldelight/core/compiler/DatabaseGenerator.kt +++ b/sqldelight-compiler/src/main/kotlin/app/cash/sqldelight/core/compiler/DatabaseGenerator.kt @@ -17,8 +17,6 @@ package app.cash.sqldelight.core.compiler import app.cash.sqldelight.core.SqlDelightException import app.cash.sqldelight.core.SqlDelightFileIndex -import app.cash.sqldelight.core.compiler.integration.adapterProperty -import app.cash.sqldelight.core.compiler.integration.needsAdapters import app.cash.sqldelight.core.lang.DATABASE_SCHEMA_TYPE import app.cash.sqldelight.core.lang.DRIVER_NAME import app.cash.sqldelight.core.lang.DRIVER_TYPE @@ -118,14 +116,11 @@ internal class DatabaseGenerator( private fun forAdapters( block: (PropertySpec) -> Unit ) { - val queriesFile = sourceFolders + sourceFolders .flatMap { it.queryFiles() } + .flatMap { it.requiredAdapters } .sortedBy { it.name } - .firstOrNull() ?: return - queriesFile.tables(true) .toSet() - .mapNotNull { if (it.needsAdapters()) it.adapterProperty() else null } - .sortedBy { it.name } .forEach(block) } diff --git a/sqldelight-compiler/src/test/kotlin/app/cash/sqldelight/core/QueriesTypeTest.kt b/sqldelight-compiler/src/test/kotlin/app/cash/sqldelight/core/QueriesTypeTest.kt index 536c0ee71d7..fa8a299d82c 100644 --- a/sqldelight-compiler/src/test/kotlin/app/cash/sqldelight/core/QueriesTypeTest.kt +++ b/sqldelight-compiler/src/test/kotlin/app/cash/sqldelight/core/QueriesTypeTest.kt @@ -207,6 +207,84 @@ class QueriesTypeTest { ) } + @Test fun `unused adapters are not passed to the database constructor`() { + val result = FixtureCompiler.compileSql( + """ + |import kotlin.Int; + | + |CREATE TABLE data ( + | id TEXT PRIMARY KEY, + | value INTEGER AS Int NOT NULL + |); + """.trimMargin(), + temporaryFolder, fileName = "Data.sq" + ) + + val database = File(result.outputDirectory, "com/example/testmodule/TestDatabaseImpl.kt") + assertThat(result.compilerOutput).containsKey(database) + assertThat(result.compilerOutput[database].toString()).isEqualTo( + """ + |package com.example.testmodule + | + |import app.cash.sqldelight.TransacterImpl + |import app.cash.sqldelight.db.SqlDriver + |import com.example.DataQueries + |import com.example.TestDatabase + |import kotlin.Int + |import kotlin.Unit + |import kotlin.reflect.KClass + | + |internal val KClass.schema: SqlDriver.Schema + | get() = TestDatabaseImpl.Schema + | + |internal fun KClass.newInstance(driver: SqlDriver): TestDatabase = + | TestDatabaseImpl(driver) + | + |private class TestDatabaseImpl( + | driver: SqlDriver, + |) : TransacterImpl(driver), TestDatabase { + | public override val dataQueries: DataQueries = DataQueries(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 data ( + | | id TEXT PRIMARY KEY, + | | value INTEGER NOT NULL + | |) + | ""${'"'}.trimMargin(), 0) + | } + | + | public override fun migrate( + | driver: SqlDriver, + | oldVersion: Int, + | newVersion: Int, + | ): Unit { + | } + | } + |} + |""".trimMargin() + ) + + val dataQueries = File(result.outputDirectory, "com/example/DataQueries.kt") + assertThat(result.compilerOutput).containsKey(dataQueries) + assertThat(result.compilerOutput[dataQueries].toString()).isEqualTo( + """ + |package com.example + | + |import app.cash.sqldelight.TransacterImpl + |import app.cash.sqldelight.db.SqlDriver + | + |public class DataQueries( + | private val driver: SqlDriver, + |) : TransacterImpl(driver) + |""".trimMargin() + ) + } + @Test fun `queries file is generated properly via compilation1a`() { val result = FixtureCompiler.compileSql( """ diff --git a/sqldelight-compiler/src/test/kotlin/app/cash/sqldelight/core/QueryWrapperTest.kt b/sqldelight-compiler/src/test/kotlin/app/cash/sqldelight/core/QueryWrapperTest.kt index dfe6867fcb2..1d9a56cadc6 100644 --- a/sqldelight-compiler/src/test/kotlin/app/cash/sqldelight/core/QueryWrapperTest.kt +++ b/sqldelight-compiler/src/test/kotlin/app/cash/sqldelight/core/QueryWrapperTest.kt @@ -96,6 +96,11 @@ class QueryWrapperTest { | _id INTEGER NOT NULL PRIMARY KEY, | value TEXT AS List |); + | + |query: + |SELECT value FROM test_table + |UNION ALL + |SELECT value FROM test_table2; """.trimMargin(), tempFolder ) @@ -132,7 +137,8 @@ class QueryWrapperTest { | test_table2Adapter: Test_table2.Adapter, | test_tableAdapter: Test_table.Adapter, |) : TransacterImpl(driver), TestDatabase { - | public override val testQueries: TestQueries = TestQueries(driver) + | public override val testQueries: TestQueries = TestQueries(driver, test_tableAdapter, + | test_table2Adapter) | | public object Schema : SqlDriver.Schema { | public override val version: Int