diff --git a/scripts/setup_db_scripts.sh b/scripts/setup_db_scripts.sh index 8018ebf..76c2e7a 100755 --- a/scripts/setup_db_scripts.sh +++ b/scripts/setup_db_scripts.sh @@ -4,10 +4,10 @@ # is the directory from where the docker-compose is called and everything under that directory # is included in the image. So for example if docker compose in a directory 'foo' then # everything under 'foo/*' is included inside including the DB setup scripts. We write these paths based on that. -export SQLITE_SCRIPT=terpal-sql-core/src/test/resources/db/sqlite-schema.sql -export MYSQL_SCRIPT=terpal-sql-core/src/test/resources/db/mysql-schema.sql -export SQL_SERVER_SCRIPT=terpal-sql-core/src/test/resources/db/sqlserver-schema.sql -export ORACLE_SCRIPT=terpal-sql-core/src/test/resources/db/oracle-schema.sql +export SQLITE_SCRIPT=terpal-sql-jdbc/src/test/resources/db/sqlite-schema.sql +export MYSQL_SCRIPT=terpal-sql-jdbc/src/test/resources/db/mysql-schema.sql +export SQL_SERVER_SCRIPT=terpal-sql-jdbc/src/test/resources/db/sqlserver-schema.sql +export ORACLE_SCRIPT=terpal-sql-jdbc/src/test/resources/db/oracle-schema.sql function get_host() { if [ -z "$1" ]; then @@ -21,7 +21,7 @@ function get_host() { function setup_sqlite() { # DB File in terpal-sql echo "Creating sqlite DB File" - DB_FILE=terpal-sql-core/terpal_test.db + DB_FILE=terpal-sql-jdbc/terpal_test.db echo "Removing Previous sqlite DB File (if any)" rm -f $DB_FILE echo "Creating sqlite DB File" diff --git a/settings.gradle.kts b/settings.gradle.kts index 1318433..de18482 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -1,4 +1,5 @@ includeBuild("terpal-sql-core") +includeBuild("terpal-sql-jdbc") rootProject.name = "terpal-sql" diff --git a/terpal-sql-core/src/main/kotlin/io/exoquery/sql/Context.kt b/terpal-sql-core/src/main/kotlin/io/exoquery/sql/Context.kt index c86bb43..4854bdb 100644 --- a/terpal-sql-core/src/main/kotlin/io/exoquery/sql/Context.kt +++ b/terpal-sql-core/src/main/kotlin/io/exoquery/sql/Context.kt @@ -15,7 +15,7 @@ abstract class Context { abstract fun closeSession(session: Session): Unit abstract fun isClosedSession(session: Session): Boolean - abstract internal suspend fun runTransactionally(block: suspend CoroutineScope.() -> T): T + abstract suspend fun runTransactionally(block: suspend CoroutineScope.() -> T): T abstract val sessionKey: CoroutineContext.Key> diff --git a/terpal-sql-core/src/main/kotlin/io/exoquery/sql/RowDecoder.kt b/terpal-sql-core/src/main/kotlin/io/exoquery/sql/RowDecoder.kt index 92d508a..b7c1fef 100644 --- a/terpal-sql-core/src/main/kotlin/io/exoquery/sql/RowDecoder.kt +++ b/terpal-sql-core/src/main/kotlin/io/exoquery/sql/RowDecoder.kt @@ -1,6 +1,5 @@ package io.exoquery.sql -import io.exoquery.sql.jdbc.JdbcDecodingContext import kotlinx.serialization.DeserializationStrategy import kotlinx.serialization.ExperimentalSerializationApi import kotlinx.serialization.descriptors.* @@ -38,35 +37,6 @@ fun SerialDescriptor.verifyColumns(columns: List): Unit { } } -class JdbcRowDecoder( - ctx: JdbcDecodingContext, - initialRowIndex: Int, - api: ApiDecoders, - decoders: Set>, - columnInfos: List, - type: RowDecoderType, - endCallback: (Int) -> Unit -): RowDecoder(ctx, initialRowIndex, api, decoders, columnInfos, type, endCallback) { - - companion object { - operator fun invoke( - ctx: JdbcDecodingContext, - api: ApiDecoders, - decoders: Set>, - descriptor: SerialDescriptor - ): JdbcRowDecoder { - fun metaColumnData(meta: ResultSetMetaData) = - (1..meta.columnCount).map { ColumnInfo(meta.getColumnName(it), meta.getColumnTypeName(it)) } - val metaColumns = metaColumnData(ctx.row.metaData) - descriptor.verifyColumns(metaColumns) - return JdbcRowDecoder(ctx, 1, api, decoders, metaColumns, RowDecoderType.Regular, {}) - } - } - - override fun cloneSelf(ctx: JdbcDecodingContext, initialRowIndex: Int, type: RowDecoderType, endCallback: (Int) -> Unit): RowDecoder = - JdbcRowDecoder(ctx, initialRowIndex, api, decoders, columnInfos, type, endCallback) -} - sealed interface RowDecoderType { data class Inline(val descriptor: SerialDescriptor): RowDecoderType object Regular: RowDecoderType diff --git a/terpal-sql-core/src/main/kotlin/io/exoquery/sql/jdbc/CoroutineTransaction.kt b/terpal-sql-core/src/main/kotlin/io/exoquery/sql/jdbc/CoroutineTransaction.kt index 443fe16..4658376 100644 --- a/terpal-sql-core/src/main/kotlin/io/exoquery/sql/jdbc/CoroutineTransaction.kt +++ b/terpal-sql-core/src/main/kotlin/io/exoquery/sql/jdbc/CoroutineTransaction.kt @@ -3,7 +3,7 @@ package io.exoquery.sql.jdbc import kotlin.coroutines.AbstractCoroutineContextElement import kotlin.coroutines.CoroutineContext -internal class CoroutineTransaction(private var completed: Boolean = false) : AbstractCoroutineContextElement(CoroutineTransaction) { +class CoroutineTransaction(private var completed: Boolean = false) : AbstractCoroutineContextElement(CoroutineTransaction) { companion object Key : CoroutineContext.Key val incomplete: Boolean get() = !completed diff --git a/terpal-sql-jdbc/build.gradle.kts b/terpal-sql-jdbc/build.gradle.kts new file mode 100644 index 0000000..08cde52 --- /dev/null +++ b/terpal-sql-jdbc/build.gradle.kts @@ -0,0 +1,46 @@ +import org.gradle.api.tasks.testing.logging.TestExceptionFormat +import org.gradle.api.tasks.testing.logging.TestLogEvent +import org.jetbrains.kotlin.gradle.dsl.JvmTarget + +plugins { + id("conventions") + id("publish") + id("io.exoquery.terpal-plugin") version "2.0.0-0.2.0" + kotlin("jvm") version "2.0.0" + kotlin("plugin.serialization") version "2.0.0" +} + +val thisVersion = version + +dependencies { + // Looks like it knows to do a project-dependency even if there is a version attached (i.e. I guess it ignores the version?) + api("io.exoquery:terpal-sql-core:${thisVersion}") + + api("org.jetbrains.kotlinx:kotlinx-serialization-core:1.6.2") + api("org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.2") + api("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.8.1") + // Optional by the user. This library provides certain utilities that enhance Hikari. + implementation("com.zaxxer:HikariCP:5.0.1") + implementation("com.typesafe:config:1.4.1") + + testImplementation("io.exoquery:pprint-kotlin:2.0.2") + testImplementation("io.zonky.test:embedded-postgres:2.0.7") + testImplementation("mysql:mysql-connector-java:8.0.29") + testImplementation("com.microsoft.sqlserver:mssql-jdbc:7.4.1.jre11") + testImplementation("com.h2database:h2:2.2.224") + testImplementation("org.xerial:sqlite-jdbc:3.42.0.1") + testImplementation("com.oracle.ojdbc:ojdbc8:19.3.0.0") + + testImplementation(kotlin("test")) + testImplementation("io.kotest:kotest-runner-junit5:5.9.1") + testImplementation("io.kotest.extensions:kotest-extensions-testcontainers:2.0.2") + + testImplementation("org.testcontainers:mysql:1.19.8") + testImplementation("org.testcontainers:postgresql:1.19.8") + testImplementation("org.testcontainers:mssqlserver:1.19.8") + testImplementation("org.testcontainers:oracle-xe:1.19.8") + + testApi(platform("io.zonky.test.postgres:embedded-postgres-binaries-bom:16.2.0")) + testImplementation("org.flywaydb:flyway-core:7.15.0") // corresponding to embedded-postgres + testImplementation("org.jetbrains.kotlinx:kotlinx-coroutines-test:1.8.1") +} diff --git a/terpal-sql-jdbc/settings.gradle.kts b/terpal-sql-jdbc/settings.gradle.kts new file mode 100644 index 0000000..65d7560 --- /dev/null +++ b/terpal-sql-jdbc/settings.gradle.kts @@ -0,0 +1,9 @@ +pluginManagement { + includeBuild("../build-logic") + + repositories { + gradlePluginPortal() + mavenCentral() + mavenLocal() + } +} diff --git a/terpal-sql-core/src/main/kotlin/io/exoquery/sql/jdbc/BooleanEncoding.kt b/terpal-sql-jdbc/src/main/kotlin/io/exoquery/sql/jdbc/BooleanEncoding.kt similarity index 100% rename from terpal-sql-core/src/main/kotlin/io/exoquery/sql/jdbc/BooleanEncoding.kt rename to terpal-sql-jdbc/src/main/kotlin/io/exoquery/sql/jdbc/BooleanEncoding.kt diff --git a/terpal-sql-core/src/main/kotlin/io/exoquery/sql/jdbc/HikariHelper.kt b/terpal-sql-jdbc/src/main/kotlin/io/exoquery/sql/jdbc/HikariHelper.kt similarity index 100% rename from terpal-sql-core/src/main/kotlin/io/exoquery/sql/jdbc/HikariHelper.kt rename to terpal-sql-jdbc/src/main/kotlin/io/exoquery/sql/jdbc/HikariHelper.kt diff --git a/terpal-sql-core/src/main/kotlin/io/exoquery/sql/jdbc/JdbcContext.kt b/terpal-sql-jdbc/src/main/kotlin/io/exoquery/sql/jdbc/JdbcContext.kt similarity index 98% rename from terpal-sql-core/src/main/kotlin/io/exoquery/sql/jdbc/JdbcContext.kt rename to terpal-sql-jdbc/src/main/kotlin/io/exoquery/sql/jdbc/JdbcContext.kt index f3fd716..0a9ae7e 100644 --- a/terpal-sql-core/src/main/kotlin/io/exoquery/sql/jdbc/JdbcContext.kt +++ b/terpal-sql-jdbc/src/main/kotlin/io/exoquery/sql/jdbc/JdbcContext.kt @@ -34,7 +34,7 @@ abstract class JdbcContext(override val database: DataSource): Context> {} override val sessionKey: CoroutineContext.Key> = JdbcCoroutineContext - override open internal suspend fun runTransactionally(block: suspend CoroutineScope.() -> T): T { + override open suspend fun runTransactionally(block: suspend CoroutineScope.() -> T): T { val session = coroutineContext.get(sessionKey)?.session ?: error("No connection found") session.runWithManualCommit { val transaction = CoroutineTransaction() diff --git a/terpal-sql-core/src/main/kotlin/io/exoquery/sql/jdbc/JdbcContextConfig.kt b/terpal-sql-jdbc/src/main/kotlin/io/exoquery/sql/jdbc/JdbcContextConfig.kt similarity index 100% rename from terpal-sql-core/src/main/kotlin/io/exoquery/sql/jdbc/JdbcContextConfig.kt rename to terpal-sql-jdbc/src/main/kotlin/io/exoquery/sql/jdbc/JdbcContextConfig.kt diff --git a/terpal-sql-core/src/main/kotlin/io/exoquery/sql/jdbc/JdbcDecoders.kt b/terpal-sql-jdbc/src/main/kotlin/io/exoquery/sql/jdbc/JdbcDecoders.kt similarity index 100% rename from terpal-sql-core/src/main/kotlin/io/exoquery/sql/jdbc/JdbcDecoders.kt rename to terpal-sql-jdbc/src/main/kotlin/io/exoquery/sql/jdbc/JdbcDecoders.kt diff --git a/terpal-sql-core/src/main/kotlin/io/exoquery/sql/jdbc/JdbcEncoders.kt b/terpal-sql-jdbc/src/main/kotlin/io/exoquery/sql/jdbc/JdbcEncoders.kt similarity index 100% rename from terpal-sql-core/src/main/kotlin/io/exoquery/sql/jdbc/JdbcEncoders.kt rename to terpal-sql-jdbc/src/main/kotlin/io/exoquery/sql/jdbc/JdbcEncoders.kt diff --git a/terpal-sql-core/src/main/kotlin/io/exoquery/sql/jdbc/JdbcEncodingContext.kt b/terpal-sql-jdbc/src/main/kotlin/io/exoquery/sql/jdbc/JdbcEncodingContext.kt similarity index 100% rename from terpal-sql-core/src/main/kotlin/io/exoquery/sql/jdbc/JdbcEncodingContext.kt rename to terpal-sql-jdbc/src/main/kotlin/io/exoquery/sql/jdbc/JdbcEncodingContext.kt diff --git a/terpal-sql-jdbc/src/main/kotlin/io/exoquery/sql/jdbc/JdbcRowDecoder.kt b/terpal-sql-jdbc/src/main/kotlin/io/exoquery/sql/jdbc/JdbcRowDecoder.kt new file mode 100644 index 0000000..b72ec95 --- /dev/null +++ b/terpal-sql-jdbc/src/main/kotlin/io/exoquery/sql/jdbc/JdbcRowDecoder.kt @@ -0,0 +1,36 @@ +package io.exoquery.sql.jdbc + +import io.exoquery.sql.* +import kotlinx.serialization.descriptors.SerialDescriptor +import java.sql.Connection +import java.sql.ResultSet +import java.sql.ResultSetMetaData + +class JdbcRowDecoder( + ctx: JdbcDecodingContext, + initialRowIndex: Int, + api: ApiDecoders, + decoders: Set>, + columnInfos: List, + type: RowDecoderType, + endCallback: (Int) -> Unit +): RowDecoder(ctx, initialRowIndex, api, decoders, columnInfos, type, endCallback) { + + companion object { + operator fun invoke( + ctx: JdbcDecodingContext, + api: ApiDecoders, + decoders: Set>, + descriptor: SerialDescriptor + ): JdbcRowDecoder { + fun metaColumnData(meta: ResultSetMetaData) = + (1..meta.columnCount).map { ColumnInfo(meta.getColumnName(it), meta.getColumnTypeName(it)) } + val metaColumns = metaColumnData(ctx.row.metaData) + descriptor.verifyColumns(metaColumns) + return JdbcRowDecoder(ctx, 1, api, decoders, metaColumns, RowDecoderType.Regular, {}) + } + } + + override fun cloneSelf(ctx: JdbcDecodingContext, initialRowIndex: Int, type: RowDecoderType, endCallback: (Int) -> Unit): RowDecoder = + JdbcRowDecoder(ctx, initialRowIndex, api, decoders, columnInfos, type, endCallback) +} diff --git a/terpal-sql-core/src/main/kotlin/io/exoquery/sql/jdbc/JdbcUuidStringEncoding.kt b/terpal-sql-jdbc/src/main/kotlin/io/exoquery/sql/jdbc/JdbcUuidStringEncoding.kt similarity index 100% rename from terpal-sql-core/src/main/kotlin/io/exoquery/sql/jdbc/JdbcUuidStringEncoding.kt rename to terpal-sql-jdbc/src/main/kotlin/io/exoquery/sql/jdbc/JdbcUuidStringEncoding.kt diff --git a/terpal-sql-core/src/main/kotlin/io/exoquery/sql/jdbc/Sql.kt b/terpal-sql-jdbc/src/main/kotlin/io/exoquery/sql/jdbc/Sql.kt similarity index 100% rename from terpal-sql-core/src/main/kotlin/io/exoquery/sql/jdbc/Sql.kt rename to terpal-sql-jdbc/src/main/kotlin/io/exoquery/sql/jdbc/Sql.kt diff --git a/terpal-sql-core/src/main/kotlin/io/exoquery/sql/jdbc/SwitchingContextSerializer.kt b/terpal-sql-jdbc/src/main/kotlin/io/exoquery/sql/jdbc/SwitchingContextSerializer.kt similarity index 100% rename from terpal-sql-core/src/main/kotlin/io/exoquery/sql/jdbc/SwitchingContextSerializer.kt rename to terpal-sql-jdbc/src/main/kotlin/io/exoquery/sql/jdbc/SwitchingContextSerializer.kt diff --git a/terpal-sql-core/src/main/kotlin/io/exoquery/sql/jdbc/TerpalContext.kt b/terpal-sql-jdbc/src/main/kotlin/io/exoquery/sql/jdbc/TerpalContext.kt similarity index 100% rename from terpal-sql-core/src/main/kotlin/io/exoquery/sql/jdbc/TerpalContext.kt rename to terpal-sql-jdbc/src/main/kotlin/io/exoquery/sql/jdbc/TerpalContext.kt diff --git a/terpal-sql-core/src/test/kotlin/io/exoquery/sql/BatchActionSpecData.kt b/terpal-sql-jdbc/src/test/kotlin/io/exoquery/sql/BatchActionSpecData.kt similarity index 100% rename from terpal-sql-core/src/test/kotlin/io/exoquery/sql/BatchActionSpecData.kt rename to terpal-sql-jdbc/src/test/kotlin/io/exoquery/sql/BatchActionSpecData.kt diff --git a/terpal-sql-core/src/test/kotlin/io/exoquery/sql/EncodingSpecData.kt b/terpal-sql-jdbc/src/test/kotlin/io/exoquery/sql/EncodingSpecData.kt similarity index 100% rename from terpal-sql-core/src/test/kotlin/io/exoquery/sql/EncodingSpecData.kt rename to terpal-sql-jdbc/src/test/kotlin/io/exoquery/sql/EncodingSpecData.kt diff --git a/terpal-sql-core/src/test/kotlin/io/exoquery/sql/KotestProjectConfig.kt b/terpal-sql-jdbc/src/test/kotlin/io/exoquery/sql/KotestProjectConfig.kt similarity index 100% rename from terpal-sql-core/src/test/kotlin/io/exoquery/sql/KotestProjectConfig.kt rename to terpal-sql-jdbc/src/test/kotlin/io/exoquery/sql/KotestProjectConfig.kt diff --git a/terpal-sql-core/src/test/kotlin/io/exoquery/sql/Main.kt b/terpal-sql-jdbc/src/test/kotlin/io/exoquery/sql/Main.kt similarity index 100% rename from terpal-sql-core/src/test/kotlin/io/exoquery/sql/Main.kt rename to terpal-sql-jdbc/src/test/kotlin/io/exoquery/sql/Main.kt diff --git a/terpal-sql-core/src/test/kotlin/io/exoquery/sql/Model.kt b/terpal-sql-jdbc/src/test/kotlin/io/exoquery/sql/Model.kt similarity index 100% rename from terpal-sql-core/src/test/kotlin/io/exoquery/sql/Model.kt rename to terpal-sql-jdbc/src/test/kotlin/io/exoquery/sql/Model.kt diff --git a/terpal-sql-core/src/test/kotlin/io/exoquery/sql/NestedInterpolationSpec.kt b/terpal-sql-jdbc/src/test/kotlin/io/exoquery/sql/NestedInterpolationSpec.kt similarity index 100% rename from terpal-sql-core/src/test/kotlin/io/exoquery/sql/NestedInterpolationSpec.kt rename to terpal-sql-jdbc/src/test/kotlin/io/exoquery/sql/NestedInterpolationSpec.kt diff --git a/terpal-sql-core/src/test/kotlin/io/exoquery/sql/TestDatabases.kt b/terpal-sql-jdbc/src/test/kotlin/io/exoquery/sql/TestDatabases.kt similarity index 100% rename from terpal-sql-core/src/test/kotlin/io/exoquery/sql/TestDatabases.kt rename to terpal-sql-jdbc/src/test/kotlin/io/exoquery/sql/TestDatabases.kt diff --git a/terpal-sql-core/src/test/kotlin/io/exoquery/sql/TestExtensions.kt b/terpal-sql-jdbc/src/test/kotlin/io/exoquery/sql/TestExtensions.kt similarity index 100% rename from terpal-sql-core/src/test/kotlin/io/exoquery/sql/TestExtensions.kt rename to terpal-sql-jdbc/src/test/kotlin/io/exoquery/sql/TestExtensions.kt diff --git a/terpal-sql-core/src/test/kotlin/io/exoquery/sql/examples/ContextualColumn.kt b/terpal-sql-jdbc/src/test/kotlin/io/exoquery/sql/examples/ContextualColumn.kt similarity index 100% rename from terpal-sql-core/src/test/kotlin/io/exoquery/sql/examples/ContextualColumn.kt rename to terpal-sql-jdbc/src/test/kotlin/io/exoquery/sql/examples/ContextualColumn.kt diff --git a/terpal-sql-core/src/test/kotlin/io/exoquery/sql/examples/ContextualColumnCustom.kt b/terpal-sql-jdbc/src/test/kotlin/io/exoquery/sql/examples/ContextualColumnCustom.kt similarity index 100% rename from terpal-sql-core/src/test/kotlin/io/exoquery/sql/examples/ContextualColumnCustom.kt rename to terpal-sql-jdbc/src/test/kotlin/io/exoquery/sql/examples/ContextualColumnCustom.kt diff --git a/terpal-sql-core/src/test/kotlin/io/exoquery/sql/examples/QuickPostgres.kt b/terpal-sql-jdbc/src/test/kotlin/io/exoquery/sql/examples/QuickPostgres.kt similarity index 100% rename from terpal-sql-core/src/test/kotlin/io/exoquery/sql/examples/QuickPostgres.kt rename to terpal-sql-jdbc/src/test/kotlin/io/exoquery/sql/examples/QuickPostgres.kt diff --git a/terpal-sql-core/src/test/kotlin/io/exoquery/sql/examples/RowSurrogate.kt b/terpal-sql-jdbc/src/test/kotlin/io/exoquery/sql/examples/RowSurrogate.kt similarity index 100% rename from terpal-sql-core/src/test/kotlin/io/exoquery/sql/examples/RowSurrogate.kt rename to terpal-sql-jdbc/src/test/kotlin/io/exoquery/sql/examples/RowSurrogate.kt diff --git a/terpal-sql-core/src/test/kotlin/io/exoquery/sql/h2/BasicActionSpec.kt b/terpal-sql-jdbc/src/test/kotlin/io/exoquery/sql/h2/BasicActionSpec.kt similarity index 100% rename from terpal-sql-core/src/test/kotlin/io/exoquery/sql/h2/BasicActionSpec.kt rename to terpal-sql-jdbc/src/test/kotlin/io/exoquery/sql/h2/BasicActionSpec.kt diff --git a/terpal-sql-core/src/test/kotlin/io/exoquery/sql/h2/BasicQuerySpec.kt b/terpal-sql-jdbc/src/test/kotlin/io/exoquery/sql/h2/BasicQuerySpec.kt similarity index 100% rename from terpal-sql-core/src/test/kotlin/io/exoquery/sql/h2/BasicQuerySpec.kt rename to terpal-sql-jdbc/src/test/kotlin/io/exoquery/sql/h2/BasicQuerySpec.kt diff --git a/terpal-sql-core/src/test/kotlin/io/exoquery/sql/h2/BatchValuesSpec.kt b/terpal-sql-jdbc/src/test/kotlin/io/exoquery/sql/h2/BatchValuesSpec.kt similarity index 100% rename from terpal-sql-core/src/test/kotlin/io/exoquery/sql/h2/BatchValuesSpec.kt rename to terpal-sql-jdbc/src/test/kotlin/io/exoquery/sql/h2/BatchValuesSpec.kt diff --git a/terpal-sql-core/src/test/kotlin/io/exoquery/sql/h2/EncodingSpec.kt b/terpal-sql-jdbc/src/test/kotlin/io/exoquery/sql/h2/EncodingSpec.kt similarity index 100% rename from terpal-sql-core/src/test/kotlin/io/exoquery/sql/h2/EncodingSpec.kt rename to terpal-sql-jdbc/src/test/kotlin/io/exoquery/sql/h2/EncodingSpec.kt diff --git a/terpal-sql-core/src/test/kotlin/io/exoquery/sql/h2/TransactionSpec.kt b/terpal-sql-jdbc/src/test/kotlin/io/exoquery/sql/h2/TransactionSpec.kt similarity index 100% rename from terpal-sql-core/src/test/kotlin/io/exoquery/sql/h2/TransactionSpec.kt rename to terpal-sql-jdbc/src/test/kotlin/io/exoquery/sql/h2/TransactionSpec.kt diff --git a/terpal-sql-core/src/test/kotlin/io/exoquery/sql/mysql/BasicActionSpec.kt b/terpal-sql-jdbc/src/test/kotlin/io/exoquery/sql/mysql/BasicActionSpec.kt similarity index 100% rename from terpal-sql-core/src/test/kotlin/io/exoquery/sql/mysql/BasicActionSpec.kt rename to terpal-sql-jdbc/src/test/kotlin/io/exoquery/sql/mysql/BasicActionSpec.kt diff --git a/terpal-sql-core/src/test/kotlin/io/exoquery/sql/mysql/BasicQuerySpec.kt b/terpal-sql-jdbc/src/test/kotlin/io/exoquery/sql/mysql/BasicQuerySpec.kt similarity index 100% rename from terpal-sql-core/src/test/kotlin/io/exoquery/sql/mysql/BasicQuerySpec.kt rename to terpal-sql-jdbc/src/test/kotlin/io/exoquery/sql/mysql/BasicQuerySpec.kt diff --git a/terpal-sql-core/src/test/kotlin/io/exoquery/sql/mysql/BatchValuesSpec.kt b/terpal-sql-jdbc/src/test/kotlin/io/exoquery/sql/mysql/BatchValuesSpec.kt similarity index 100% rename from terpal-sql-core/src/test/kotlin/io/exoquery/sql/mysql/BatchValuesSpec.kt rename to terpal-sql-jdbc/src/test/kotlin/io/exoquery/sql/mysql/BatchValuesSpec.kt diff --git a/terpal-sql-core/src/test/kotlin/io/exoquery/sql/mysql/EncodingSpec.kt b/terpal-sql-jdbc/src/test/kotlin/io/exoquery/sql/mysql/EncodingSpec.kt similarity index 100% rename from terpal-sql-core/src/test/kotlin/io/exoquery/sql/mysql/EncodingSpec.kt rename to terpal-sql-jdbc/src/test/kotlin/io/exoquery/sql/mysql/EncodingSpec.kt diff --git a/terpal-sql-core/src/test/kotlin/io/exoquery/sql/mysql/TransactionSpec.kt b/terpal-sql-jdbc/src/test/kotlin/io/exoquery/sql/mysql/TransactionSpec.kt similarity index 100% rename from terpal-sql-core/src/test/kotlin/io/exoquery/sql/mysql/TransactionSpec.kt rename to terpal-sql-jdbc/src/test/kotlin/io/exoquery/sql/mysql/TransactionSpec.kt diff --git a/terpal-sql-core/src/test/kotlin/io/exoquery/sql/oracle/BasicActionSpec.kt b/terpal-sql-jdbc/src/test/kotlin/io/exoquery/sql/oracle/BasicActionSpec.kt similarity index 100% rename from terpal-sql-core/src/test/kotlin/io/exoquery/sql/oracle/BasicActionSpec.kt rename to terpal-sql-jdbc/src/test/kotlin/io/exoquery/sql/oracle/BasicActionSpec.kt diff --git a/terpal-sql-core/src/test/kotlin/io/exoquery/sql/oracle/BasicQuerySpec.kt b/terpal-sql-jdbc/src/test/kotlin/io/exoquery/sql/oracle/BasicQuerySpec.kt similarity index 100% rename from terpal-sql-core/src/test/kotlin/io/exoquery/sql/oracle/BasicQuerySpec.kt rename to terpal-sql-jdbc/src/test/kotlin/io/exoquery/sql/oracle/BasicQuerySpec.kt diff --git a/terpal-sql-core/src/test/kotlin/io/exoquery/sql/oracle/BatchValuesSpec.kt b/terpal-sql-jdbc/src/test/kotlin/io/exoquery/sql/oracle/BatchValuesSpec.kt similarity index 100% rename from terpal-sql-core/src/test/kotlin/io/exoquery/sql/oracle/BatchValuesSpec.kt rename to terpal-sql-jdbc/src/test/kotlin/io/exoquery/sql/oracle/BatchValuesSpec.kt diff --git a/terpal-sql-core/src/test/kotlin/io/exoquery/sql/oracle/EncodingSpec.kt b/terpal-sql-jdbc/src/test/kotlin/io/exoquery/sql/oracle/EncodingSpec.kt similarity index 100% rename from terpal-sql-core/src/test/kotlin/io/exoquery/sql/oracle/EncodingSpec.kt rename to terpal-sql-jdbc/src/test/kotlin/io/exoquery/sql/oracle/EncodingSpec.kt diff --git a/terpal-sql-core/src/test/kotlin/io/exoquery/sql/oracle/TransactionSpec.kt b/terpal-sql-jdbc/src/test/kotlin/io/exoquery/sql/oracle/TransactionSpec.kt similarity index 100% rename from terpal-sql-core/src/test/kotlin/io/exoquery/sql/oracle/TransactionSpec.kt rename to terpal-sql-jdbc/src/test/kotlin/io/exoquery/sql/oracle/TransactionSpec.kt diff --git a/terpal-sql-core/src/test/kotlin/io/exoquery/sql/postgres/BasicActionSpec.kt b/terpal-sql-jdbc/src/test/kotlin/io/exoquery/sql/postgres/BasicActionSpec.kt similarity index 100% rename from terpal-sql-core/src/test/kotlin/io/exoquery/sql/postgres/BasicActionSpec.kt rename to terpal-sql-jdbc/src/test/kotlin/io/exoquery/sql/postgres/BasicActionSpec.kt diff --git a/terpal-sql-core/src/test/kotlin/io/exoquery/sql/postgres/BasicQuerySpec.kt b/terpal-sql-jdbc/src/test/kotlin/io/exoquery/sql/postgres/BasicQuerySpec.kt similarity index 100% rename from terpal-sql-core/src/test/kotlin/io/exoquery/sql/postgres/BasicQuerySpec.kt rename to terpal-sql-jdbc/src/test/kotlin/io/exoquery/sql/postgres/BasicQuerySpec.kt diff --git a/terpal-sql-core/src/test/kotlin/io/exoquery/sql/postgres/BatchValuesSpec.kt b/terpal-sql-jdbc/src/test/kotlin/io/exoquery/sql/postgres/BatchValuesSpec.kt similarity index 100% rename from terpal-sql-core/src/test/kotlin/io/exoquery/sql/postgres/BatchValuesSpec.kt rename to terpal-sql-jdbc/src/test/kotlin/io/exoquery/sql/postgres/BatchValuesSpec.kt diff --git a/terpal-sql-core/src/test/kotlin/io/exoquery/sql/postgres/EncodingSpec.kt b/terpal-sql-jdbc/src/test/kotlin/io/exoquery/sql/postgres/EncodingSpec.kt similarity index 100% rename from terpal-sql-core/src/test/kotlin/io/exoquery/sql/postgres/EncodingSpec.kt rename to terpal-sql-jdbc/src/test/kotlin/io/exoquery/sql/postgres/EncodingSpec.kt diff --git a/terpal-sql-core/src/test/kotlin/io/exoquery/sql/postgres/TransactionSpec.kt b/terpal-sql-jdbc/src/test/kotlin/io/exoquery/sql/postgres/TransactionSpec.kt similarity index 100% rename from terpal-sql-core/src/test/kotlin/io/exoquery/sql/postgres/TransactionSpec.kt rename to terpal-sql-jdbc/src/test/kotlin/io/exoquery/sql/postgres/TransactionSpec.kt diff --git a/terpal-sql-core/src/test/kotlin/io/exoquery/sql/sqlite/BasicActionSpec.kt b/terpal-sql-jdbc/src/test/kotlin/io/exoquery/sql/sqlite/BasicActionSpec.kt similarity index 100% rename from terpal-sql-core/src/test/kotlin/io/exoquery/sql/sqlite/BasicActionSpec.kt rename to terpal-sql-jdbc/src/test/kotlin/io/exoquery/sql/sqlite/BasicActionSpec.kt diff --git a/terpal-sql-core/src/test/kotlin/io/exoquery/sql/sqlite/BasicQuerySpec.kt b/terpal-sql-jdbc/src/test/kotlin/io/exoquery/sql/sqlite/BasicQuerySpec.kt similarity index 100% rename from terpal-sql-core/src/test/kotlin/io/exoquery/sql/sqlite/BasicQuerySpec.kt rename to terpal-sql-jdbc/src/test/kotlin/io/exoquery/sql/sqlite/BasicQuerySpec.kt diff --git a/terpal-sql-core/src/test/kotlin/io/exoquery/sql/sqlite/BatchValuesSpec.kt b/terpal-sql-jdbc/src/test/kotlin/io/exoquery/sql/sqlite/BatchValuesSpec.kt similarity index 100% rename from terpal-sql-core/src/test/kotlin/io/exoquery/sql/sqlite/BatchValuesSpec.kt rename to terpal-sql-jdbc/src/test/kotlin/io/exoquery/sql/sqlite/BatchValuesSpec.kt diff --git a/terpal-sql-core/src/test/kotlin/io/exoquery/sql/sqlite/EncodingSpec.kt b/terpal-sql-jdbc/src/test/kotlin/io/exoquery/sql/sqlite/EncodingSpec.kt similarity index 100% rename from terpal-sql-core/src/test/kotlin/io/exoquery/sql/sqlite/EncodingSpec.kt rename to terpal-sql-jdbc/src/test/kotlin/io/exoquery/sql/sqlite/EncodingSpec.kt diff --git a/terpal-sql-core/src/test/kotlin/io/exoquery/sql/sqlite/TransactionSpec.kt b/terpal-sql-jdbc/src/test/kotlin/io/exoquery/sql/sqlite/TransactionSpec.kt similarity index 100% rename from terpal-sql-core/src/test/kotlin/io/exoquery/sql/sqlite/TransactionSpec.kt rename to terpal-sql-jdbc/src/test/kotlin/io/exoquery/sql/sqlite/TransactionSpec.kt diff --git a/terpal-sql-core/src/test/kotlin/io/exoquery/sql/sqlserver/BasicActionSpec.kt b/terpal-sql-jdbc/src/test/kotlin/io/exoquery/sql/sqlserver/BasicActionSpec.kt similarity index 100% rename from terpal-sql-core/src/test/kotlin/io/exoquery/sql/sqlserver/BasicActionSpec.kt rename to terpal-sql-jdbc/src/test/kotlin/io/exoquery/sql/sqlserver/BasicActionSpec.kt diff --git a/terpal-sql-core/src/test/kotlin/io/exoquery/sql/sqlserver/BasicQuerySpec.kt b/terpal-sql-jdbc/src/test/kotlin/io/exoquery/sql/sqlserver/BasicQuerySpec.kt similarity index 100% rename from terpal-sql-core/src/test/kotlin/io/exoquery/sql/sqlserver/BasicQuerySpec.kt rename to terpal-sql-jdbc/src/test/kotlin/io/exoquery/sql/sqlserver/BasicQuerySpec.kt diff --git a/terpal-sql-core/src/test/kotlin/io/exoquery/sql/sqlserver/BatchValuesSpec.kt b/terpal-sql-jdbc/src/test/kotlin/io/exoquery/sql/sqlserver/BatchValuesSpec.kt similarity index 100% rename from terpal-sql-core/src/test/kotlin/io/exoquery/sql/sqlserver/BatchValuesSpec.kt rename to terpal-sql-jdbc/src/test/kotlin/io/exoquery/sql/sqlserver/BatchValuesSpec.kt diff --git a/terpal-sql-core/src/test/kotlin/io/exoquery/sql/sqlserver/EncodingSpec.kt b/terpal-sql-jdbc/src/test/kotlin/io/exoquery/sql/sqlserver/EncodingSpec.kt similarity index 100% rename from terpal-sql-core/src/test/kotlin/io/exoquery/sql/sqlserver/EncodingSpec.kt rename to terpal-sql-jdbc/src/test/kotlin/io/exoquery/sql/sqlserver/EncodingSpec.kt diff --git a/terpal-sql-core/src/test/kotlin/io/exoquery/sql/sqlserver/TransactionSpec.kt b/terpal-sql-jdbc/src/test/kotlin/io/exoquery/sql/sqlserver/TransactionSpec.kt similarity index 100% rename from terpal-sql-core/src/test/kotlin/io/exoquery/sql/sqlserver/TransactionSpec.kt rename to terpal-sql-jdbc/src/test/kotlin/io/exoquery/sql/sqlserver/TransactionSpec.kt diff --git a/terpal-sql-core/src/test/resources/application.conf b/terpal-sql-jdbc/src/test/resources/application.conf similarity index 100% rename from terpal-sql-core/src/test/resources/application.conf rename to terpal-sql-jdbc/src/test/resources/application.conf diff --git a/terpal-sql-core/src/test/resources/db/h2-schema.sql b/terpal-sql-jdbc/src/test/resources/db/h2-schema.sql similarity index 100% rename from terpal-sql-core/src/test/resources/db/h2-schema.sql rename to terpal-sql-jdbc/src/test/resources/db/h2-schema.sql diff --git a/terpal-sql-core/src/test/resources/db/mysql-schema.sql b/terpal-sql-jdbc/src/test/resources/db/mysql-schema.sql similarity index 100% rename from terpal-sql-core/src/test/resources/db/mysql-schema.sql rename to terpal-sql-jdbc/src/test/resources/db/mysql-schema.sql diff --git a/terpal-sql-core/src/test/resources/db/oracle-schema.sql b/terpal-sql-jdbc/src/test/resources/db/oracle-schema.sql similarity index 100% rename from terpal-sql-core/src/test/resources/db/oracle-schema.sql rename to terpal-sql-jdbc/src/test/resources/db/oracle-schema.sql diff --git a/terpal-sql-core/src/test/resources/db/postgres-schema.sql b/terpal-sql-jdbc/src/test/resources/db/postgres-schema.sql similarity index 100% rename from terpal-sql-core/src/test/resources/db/postgres-schema.sql rename to terpal-sql-jdbc/src/test/resources/db/postgres-schema.sql diff --git a/terpal-sql-core/src/test/resources/db/sqlite-schema.sql b/terpal-sql-jdbc/src/test/resources/db/sqlite-schema.sql similarity index 100% rename from terpal-sql-core/src/test/resources/db/sqlite-schema.sql rename to terpal-sql-jdbc/src/test/resources/db/sqlite-schema.sql diff --git a/terpal-sql-core/src/test/resources/db/sqlserver-schema.sql b/terpal-sql-jdbc/src/test/resources/db/sqlserver-schema.sql similarity index 100% rename from terpal-sql-core/src/test/resources/db/sqlserver-schema.sql rename to terpal-sql-jdbc/src/test/resources/db/sqlserver-schema.sql diff --git a/terpal-sql-core/src/test/resources/kotest.properties b/terpal-sql-jdbc/src/test/resources/kotest.properties similarity index 100% rename from terpal-sql-core/src/test/resources/kotest.properties rename to terpal-sql-jdbc/src/test/resources/kotest.properties