diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 48c520d..e751bf1 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -11,7 +11,7 @@ on: jobs: build-on-macos: - runs-on: macos-15-intel + runs-on: macos-latest timeout-minutes: 60 steps: @@ -41,56 +41,20 @@ jobs: - name: Build sqllin-driver run: ./gradlew :sqllin-driver:assemble -PonCICD - - name: Run sqllin-driver macOS X64 Tests - run: ./test_driver_macos.sh + - name: Run sqllin-driver macOS Arm64 Tests + run: ./gradlew :sqllin-driver-test:cleanMacosArm64Test :sqllin-driver-test:macosArm64Test --stacktrace - - name: Run sqllin-driver JVM Unit Tests on macOS X64 - run: ./test_driver_jvm.sh + - name: Run sqllin-driver JVM Unit Tests on macOS Arm64 + run: ./gradlew :sqllin-driver-test:cleanJvmTest :sqllin-driver-test:jvmTest --stacktrace - name: Build sqllin-dsl run: ./gradlew :sqllin-dsl:assemble -PonCICD - - name: Run sqllin-dsl macOS X64 Tests - run: ./test_dsl_macos.sh + - name: Run sqllin-dsl macOS Arm64 Tests + run: ./gradlew :sqllin-dsl-test:cleanMacosArm64Test :sqllin-dsl-test:macosArm64Test --stacktrace - - name: Run sqllin-dsl JVM Unit Tests on macOS X64 - run: ./test_dsl_jvm.sh - - - name: AVD Cache - uses: actions/cache@v4 - id: avd-cache - with: - path: | - ~/.android/avd/* - ~/.android/adb* - key: avd-36 - - - name: Create AVD and Generate Snapshot for Caching - if: steps.avd-cache.outputs.cache-hit != 'true' - uses: reactivecircus/android-emulator-runner@v2 - with: - api-level: 36 - target: google_apis - arch: x86_64 - profile: pixel_6 - emulator-build: 14257411 - force-avd-creation: false - emulator-options: -no-window -gpu swiftshader_indirect -noaudio -no-boot-anim -camera-back none - disable-animations: true - script: echo "Generated AVD snapshot for caching." - - - name: Run Android 16 Instrumented Tests - uses: reactivecircus/android-emulator-runner@v2 - with: - api-level: 36 - target: google_apis - arch: x86_64 - profile: pixel_6 - emulator-build: 14257411 - force-avd-creation: false - emulator-options: -no-snapshot-save -no-window -gpu swiftshader_indirect -noaudio -no-boot-anim -camera-back none - disable-animations: true - script: ./test_android.sh + - name: Run sqllin-dsl JVM Unit Tests on macOS Arm64 + run: ./gradlew :sqllin-dsl-test:cleanJvmTest :sqllin-dsl-test:jvmTest --stacktrace - name: Upload sqllin-driver Reports uses: actions/upload-artifact@v4 @@ -135,7 +99,7 @@ jobs: ${{ runner.os }}-konan- - name: Build sqllin-driver - run: ./gradlew :sqllin-driver:mingwX64MainKlibrary + run: ./gradlew :sqllin-driver:mingwX64MainKlibrary :sqllin-driver:jvmJar - name: Run sqllin-driver MinGW X64 Tests run: ./gradlew :sqllin-driver:cleanMingwX64Test && ./gradlew :sqllin-driver:mingwX64Test --stacktrace @@ -144,7 +108,7 @@ jobs: run: ./gradlew :sqllin-driver:cleanJvmTest && ./gradlew :sqllin-driver:jvmTest --stacktrace - name: Build sqllin-dsl - run: ./gradlew :sqllin-dsl:mingwX64MainKlibrary + run: ./gradlew :sqllin-dsl:mingwX64MainKlibrary :sqllin-dsl:jvmJar - name: Run sqllin-dsl MinGW X64 Tests run: ./gradlew :sqllin-dsl-test:cleanMingwX64Test && ./gradlew :sqllin-dsl-test:mingwX64Test --stacktrace @@ -195,25 +159,71 @@ jobs: ${{ runner.os }}-konan- - name: Build sqllin-driver - run: ./gradlew :sqllin-driver:assemble -PonCICD + run: ./gradlew :sqllin-driver:linuxX64MainKlibrary :sqllin-driver:jvmJar - name: Run sqllin-driver Linux X64 Tests - run: ./test_driver_linux.sh + run: ./gradlew :sqllin-driver-test:cleanLinuxX64Test :sqllin-driver-test:linuxX64Test --stacktrace - name: Run sqllin-driver JVM Unit Tests on Linux X64 - run: ./test_driver_jvm.sh + run: ./gradlew :sqllin-driver-test:cleanJvmTest :sqllin-driver-test:jvmTest --stacktrace - name: Build sqllin-processor run: ./gradlew :sqllin-processor:assemble - name: Build sqllin-dsl - run: ./gradlew :sqllin-dsl:assemble -PonCICD + run: ./gradlew :sqllin-dsl:linuxX64MainKlibrary :sqllin-dsl:jvmJar - name: Run sqllin-dsl Linux X64 Tests - run: ./test_dsl_linux.sh + run: ./gradlew :sqllin-dsl-test:cleanLinuxX64Test :sqllin-dsl-test:linuxX64Test --stacktrace - name: Run sqllin-dsl JVM Unit Tests on Linux X64 - run: ./test_dsl_jvm.sh + run: ./gradlew :sqllin-dsl-test:cleanJvmTest :sqllin-dsl-test:jvmTest --stacktrace + + - name: Upload sqllin-driver Reports + uses: actions/upload-artifact@v4 + with: + name: Test-Reports-Linux-driver + path: sqllin-driver/build/reports + if: failure() + + - name: Upload sqllin-dsl Reports + uses: actions/upload-artifact@v4 + with: + name: Test-Reports-Linux-dsl + path: sqllin-dsl/build/reports + if: failure() + + build-android-and-test: + runs-on: ubuntu-latest + timeout-minutes: 60 + strategy: + matrix: + include: + - api-level: 26 + target: default + device: pixel_2 + - api-level: 36 + target: google_apis + device: pixel_6 + + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Validate Gradle Wrapper + uses: gradle/actions/wrapper-validation@v3 + + - name: Set up JDK 21 + uses: actions/setup-java@v4 + with: + distribution: 'zulu' + java-version: 21 + + - name: Setup Gradle + uses: gradle/actions/setup-gradle@v4 + + - name: Build Android + run: ./gradlew :sqllin-driver:assembleAndroidMain :sqllin-dsl:assembleAndroidMain - name: AVD Cache uses: actions/cache@v4 @@ -222,45 +232,45 @@ jobs: path: | ~/.android/avd/* ~/.android/adb* - key: avd-26 + key: avd-${{ matrix.api-level }} - name: Create AVD and Generate Snapshot for Caching if: steps.avd-cache.outputs.cache-hit != 'true' uses: reactivecircus/android-emulator-runner@v2 with: - api-level: 26 - target: default + api-level: ${{ matrix.api-level }} + target: ${{ matrix.target }} arch: x86_64 - profile: pixel_2 - emulator-build: 14257411 + profile: ${{ matrix.device }} + emulator-build: 15368433 force-avd-creation: false emulator-options: -no-window -gpu swiftshader_indirect -noaudio -no-boot-anim -camera-back none disable-animations: true script: echo "Generated AVD snapshot for caching." - - name: Run Android 8 Instrumented Tests + - name: Run Android Instrumented Tests uses: reactivecircus/android-emulator-runner@v2 with: - api-level: 26 - target: default + api-level: ${{ matrix.api-level }} + target: ${{ matrix.target }} arch: x86_64 - profile: pixel_2 - emulator-build: 14257411 + profile: ${{ matrix.device }} + emulator-build: 15368433 force-avd-creation: false emulator-options: -no-snapshot-save -no-window -gpu swiftshader_indirect -noaudio -no-boot-anim -camera-back none disable-animations: true - script: ./test_android.sh + script: ./gradlew :sqllin-driver-test:connectedAndroidDeviceTest --stacktrace & ./gradlew :sqllin-dsl-test:connectedAndroidDeviceTest --stacktrace - name: Upload sqllin-driver Reports uses: actions/upload-artifact@v4 with: - name: Test-Reports-Linux-driver + name: Test-Reports-Android-driver-API${{ matrix.api-level }} path: sqllin-driver/build/reports if: failure() - name: Upload sqllin-dsl Reports uses: actions/upload-artifact@v4 with: - name: Test-Reports-Linux-dsl + name: Test-Reports-Android-dsl-API${{ matrix.api-level }} path: sqllin-dsl/build/reports if: failure() diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 9a5db10..fa84e76 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -13,7 +13,7 @@ env: jobs: build-on-macos: - runs-on: macos-15-intel + runs-on: macos-latest timeout-minutes: 60 steps: diff --git a/.gitignore b/.gitignore index 857e32e..44bd9a7 100644 --- a/.gitignore +++ b/.gitignore @@ -12,6 +12,7 @@ local.properties /sqllin-driver/build /sqllin-dsl/build /sqllin-processor/build +/sqllin-driver-test/build /sqllin-dsl-test/build /sample/build *.podspec diff --git a/CHANGELOG.md b/CHANGELOG.md index 2ea8466..470ac33 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,25 @@ - Date format: YYYY-MM-dd +## 2.3.0 / 2026-05-16 + +### All + +* Update `Kotlin`'s version to `2.3.21` +* Update `AGP`'s version to `9.0.0`, migrated from `com.android.library` plugin to `com.android.kotlin.multiplatform.library` +* Update `kotlinx.serialization`'s version to `1.11.0` +* Update `kotlinx.coroutines`'s version to `1.11.0` +* Fix documentation: Android minimum supported version has been `7.0+` (API 24) since `2.0.0`, the README incorrectly stated `6.0+` +* **Breaking change**: Drop `iosX64`, `macosX64`, `watchosX64`, and `tvosX64` target support + +### sqllin-driver + +* Update `sqlite-jdbc`'s version to `3.53.1.0` + +### sqllin-processor + +* Update `KSP`'s version to `2.3.7` + ## 2.2.0 / 2025-12-15 ### sqllin-dsl diff --git a/README.md b/README.md index 66a1b27..781532f 100644 --- a/README.md +++ b/README.md @@ -31,12 +31,12 @@ and deserialization ability is based on [kotlinx.serialization](https://github.c SQLlin supports these platforms: - Multiplatform Common -- Android (6.0+) +- Android (7.0+) - JVM (Java 11+, since `1.2.0`) -- iOS (x64, arm64, simulatorArm64) -- macOS (x64, arm64) -- watchOS (x64, arm32, arm64, simulatorArm64, deviceArm64) -- tvOS (x64, arm64, simulatorArm64) +- iOS (arm64, simulatorArm64) +- macOS (arm64) +- watchOS (arm32, arm64, simulatorArm64, deviceArm64) +- tvOS (arm64, simulatorArm64) - Linux (x64, arm64) - Windows (mingwX64) diff --git a/README_CN.md b/README_CN.md index 21434d6..f2adc20 100644 --- a/README_CN.md +++ b/README_CN.md @@ -28,12 +28,12 @@ SQLlin 能够直接向数据库插入 Kotlin 对象,也能够直接从数据 SQLlin 支持如下平台: - Multiplatform Common -- Android (6.0+) +- Android (7.0+) - JVM (Java 11+, since `1.2.0`) -- iOS (x64, arm64, simulatorArm64) -- macOS (x64, arm64) -- watchOS (x64, arm32, arm64, simulatorArm64, deviceArm64) -- tvOS (x64, arm64, simulatorArm64) +- iOS (arm64, simulatorArm64) +- macOS (arm64) +- watchOS (arm32, arm64, simulatorArm64, deviceArm64) +- tvOS (arm64, simulatorArm64) - Linux (x64, arm64) - Windows (mingwX64) diff --git a/ROADMAP.md b/ROADMAP.md index 596729e..9f81acb 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -4,6 +4,7 @@ * Support FOREIGN KEY DSL (2.2.0 ✅) * Support CREATE INDEX DSL (2.2.0 ✅) +* Support INSERT OR REPLACE ## Medium Priority diff --git a/gradle.properties b/gradle.properties index df4999d..2eafc6c 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,4 +1,4 @@ -VERSION=2.2.0 +VERSION=2.3.0 GROUP_ID=com.ctrip.kotlin #Maven Publishing Information @@ -31,5 +31,4 @@ kotlin.native.ignoreDisabledTargets=true kotlin.jvm.target.validation.mode=warning kotlin.native.binary.pagedAllocator=false kotlin.native.binary.latin1Strings=true -kotlin.native.cacheKind.linuxX64=none #kotlin.compiler.execution.strategy=out-of-process \ No newline at end of file diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index dba5044..99ca92a 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,18 +1,18 @@ [versions] -kotlin = "2.2.21" -agp = "8.12.3" -ksp = "2.3.3" -serialization = "1.9.0" -coroutines = "1.10.2" -androidx-annotation = "1.9.1" +kotlin = "2.3.21" +agp = "9.2.1" +ksp = "2.3.7" +serialization = "1.11.0" +coroutines = "1.11.0" +androidx-annotation = "1.10.0" androidx-test = "1.7.0" androidx-test-runner = "1.7.0" -sqlite-jdbc = "3.51.1.0" +sqlite-jdbc = "3.53.1.0" jvm-toolchain = "21" -android-sdk-compile = "36" +android-sdk-compile = "37" android-sdk-min = "24" -vanniktech-maven-publish = "0.35.0" +vanniktech-maven-publish = "0.36.0" [libraries] @@ -35,5 +35,5 @@ kotlin-multiplatform = { id = "org.jetbrains.kotlin.multiplatform", version.ref kotlin-jvm = { id = "org.jetbrains.kotlin.jvm", version.ref = "kotlin" } kotlinx-serialization = { id = "org.jetbrains.kotlin.plugin.serialization", version.ref = "kotlin" } ksp = { id = "com.google.devtools.ksp", version.ref = "ksp" } -android-library = { id = "com.android.library", version.ref = "agp" } +android-library = { id = "com.android.kotlin.multiplatform.library", version.ref = "agp" } vanniktech-maven-publish = { id = "com.vanniktech.maven.publish", version.ref = "vanniktech-maven-publish" } \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index f76881e..c1627d7 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ #Tue Mar 08 15:11:46 CST 2022 distributionBase=GRADLE_USER_HOME -distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.3-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-9.5.1-bin.zip distributionPath=wrapper/dists zipStorePath=wrapper/dists zipStoreBase=GRADLE_USER_HOME \ No newline at end of file diff --git a/sample/build.gradle.kts b/sample/build.gradle.kts index 0c9ab93..3275348 100644 --- a/sample/build.gradle.kts +++ b/sample/build.gradle.kts @@ -12,18 +12,19 @@ version = "1.0" kotlin { jvmToolchain(libs.versions.jvm.toolchain.get().toInt()) - androidTarget { - publishLibraryVariants("release") + android { + namespace = "com.ctrip.sqllin.sample" + compileSdk = libs.versions.android.sdk.compile.get().toInt() + minSdk = libs.versions.android.sdk.min.get().toInt() } jvm { compilerOptions.jvmTarget.set(JvmTarget.JVM_11) } - iosX64() iosArm64() iosSimulatorArm64() compilerOptions { - freeCompilerArgs.addAll("-Xexpect-actual-classes", "-Xcontext-parameters", "-Xnested-type-aliases") + freeCompilerArgs.addAll("-Xexpect-actual-classes", "-Xcontext-parameters") } sourceSets { @@ -41,14 +42,6 @@ kotlin { } } -android { - namespace = "com.ctrip.sqllin.sample" - compileSdk = libs.versions.android.sdk.compile.get().toInt() - defaultConfig { - minSdk = libs.versions.android.sdk.min.get().toInt() - } -} - dependencies { add("kspCommonMainMetadata", project(":sqllin-processor")) } diff --git a/settings.gradle.kts b/settings.gradle.kts index d7ae4a7..3c49385 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -3,6 +3,7 @@ include(":sqllin-driver") include(":sqllin-dsl") include(":sqllin-processor") include(":sqllin-dsl-test") +include(":sqllin-driver-test") include(":sample") pluginManagement { diff --git a/sqllin-driver-test/build.gradle.kts b/sqllin-driver-test/build.gradle.kts new file mode 100644 index 0000000..ec99121 --- /dev/null +++ b/sqllin-driver-test/build.gradle.kts @@ -0,0 +1,100 @@ +import org.jetbrains.kotlin.gradle.dsl.JvmTarget +import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTarget +import org.jetbrains.kotlin.konan.target.HostManager + +plugins { + alias(libs.plugins.kotlin.multiplatform) + alias(libs.plugins.android.library) +} + +version = "1.0" + +kotlin { + jvmToolchain(libs.versions.jvm.toolchain.get().toInt()) + android { + namespace = "com.ctrip.sqllin.driver.test" + compileSdk = libs.versions.android.sdk.compile.get().toInt() + minSdk = libs.versions.android.sdk.min.get().toInt() + withDeviceTest { + instrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" + } + } + + jvm { + compilerOptions.jvmTarget.set(JvmTarget.JVM_11) + } + + listOf( + iosArm64(), + iosSimulatorArm64(), + + macosArm64(), + + watchosArm32(), + watchosArm64(), + watchosSimulatorArm64(), + watchosDeviceArm64(), + + tvosArm64(), + tvosSimulatorArm64(), + + linuxX64(), + linuxArm64(), + + mingwX64(), + ).forEach { + it.setupNativeConfig() + } + + compilerOptions { + freeCompilerArgs.addAll("-Xexpect-actual-classes", "-Xcontext-parameters") + } + + sourceSets { + all { + languageSettings { + optIn("kotlin.RequiresOptIn") + } + } + commonMain { + dependencies { + implementation(project(":sqllin-driver")) + implementation(kotlin("test")) + implementation(libs.kotlinx.coroutines.core) + implementation(libs.kotlinx.coroutines.test) + } + } + getByName("androidDeviceTest").dependencies { + implementation(libs.androidx.test.core) + implementation(libs.androidx.test.runner) + implementation(libs.androidx.test.rules) + } + } +} + +gradle.taskGraph.whenReady { + if (!project.hasProperty("onCICD")) + return@whenReady + tasks.forEach { + when { + it.name.contains("linux", true) -> it.enabled = HostManager.hostIsLinux + it.name.contains("mingw", true) -> it.enabled = HostManager.hostIsMingw + it.name.contains("ios", true) + || it.name.contains("macos", true) + || it.name.contains("watchos", true) + || it.name.contains("tvos", true) -> it.enabled = HostManager.hostIsMac + } + } +} + +fun KotlinNativeTarget.setupNativeConfig() { + binaries { + all { + linkerOpts += when { + HostManager.hostIsLinux -> listOf("-lsqlite3", "-L$rootDir/libs/linux", "-L/usr/lib/x86_64-linux-gnu", "-L/usr/lib", "-L/usr/lib64") + HostManager.hostIsMingw -> listOf("-Lc:\\msys64\\mingw64\\lib", "-L$rootDir\\libs\\windows", "-lsqlite3") + else -> listOf("-lsqlite3") + } + } + } +} diff --git a/sqllin-driver-test/build/konan.txt b/sqllin-driver-test/build/konan.txt new file mode 100644 index 0000000..aaf65fa --- /dev/null +++ b/sqllin-driver-test/build/konan.txt @@ -0,0 +1 @@ +/Users/qiaoyuang/.konan/kotlin-native-prebuilt-macos-x86_64-2.3.21 \ No newline at end of file diff --git a/sqllin-driver-test/build/kotlin/commonizedNativeDistributionLocation.txt b/sqllin-driver-test/build/kotlin/commonizedNativeDistributionLocation.txt new file mode 100644 index 0000000..731dc41 --- /dev/null +++ b/sqllin-driver-test/build/kotlin/commonizedNativeDistributionLocation.txt @@ -0,0 +1 @@ +/Users/qiaoyuang/.konan/kotlin-native-prebuilt-macos-x86_64-2.3.21/klib/commonized/2.3.21 \ No newline at end of file diff --git a/sqllin-driver/src/androidInstrumentedTest/kotlin/com/ctrip/sqllin/driver/AndroidTest.kt b/sqllin-driver-test/src/androidDeviceTest/kotlin/com/ctrip/sqllin/driver/test/AndroidTest.kt similarity index 95% rename from sqllin-driver/src/androidInstrumentedTest/kotlin/com/ctrip/sqllin/driver/AndroidTest.kt rename to sqllin-driver-test/src/androidDeviceTest/kotlin/com/ctrip/sqllin/driver/test/AndroidTest.kt index 28dc11d..215ebef 100644 --- a/sqllin-driver/src/androidInstrumentedTest/kotlin/com/ctrip/sqllin/driver/AndroidTest.kt +++ b/sqllin-driver-test/src/androidDeviceTest/kotlin/com/ctrip/sqllin/driver/test/AndroidTest.kt @@ -14,12 +14,13 @@ * limitations under the License. */ -package com.ctrip.sqllin.driver +package com.ctrip.sqllin.driver.test import android.content.Context import androidx.test.core.app.ApplicationProvider import androidx.test.internal.runner.junit4.AndroidJUnit4ClassRunner import androidx.test.platform.app.InstrumentationRegistry +import com.ctrip.sqllin.driver.toDatabasePath import org.junit.After import org.junit.Test import org.junit.runner.RunWith @@ -59,4 +60,4 @@ class AndroidTest { val context = InstrumentationRegistry.getInstrumentation().targetContext context.deleteDatabase(SQL.DATABASE_NAME) } -} \ No newline at end of file +} diff --git a/sqllin-driver/src/appleTest/kotlin/com/ctrip/sqllin/driver/PlatformApple.kt b/sqllin-driver-test/src/appleTest/kotlin/com/ctrip/sqllin/driver/test/PlatformApple.kt similarity index 96% rename from sqllin-driver/src/appleTest/kotlin/com/ctrip/sqllin/driver/PlatformApple.kt rename to sqllin-driver-test/src/appleTest/kotlin/com/ctrip/sqllin/driver/test/PlatformApple.kt index b23b42c..5f2b7f9 100644 --- a/sqllin-driver/src/appleTest/kotlin/com/ctrip/sqllin/driver/PlatformApple.kt +++ b/sqllin-driver-test/src/appleTest/kotlin/com/ctrip/sqllin/driver/test/PlatformApple.kt @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.ctrip.sqllin.driver +package com.ctrip.sqllin.driver.test import kotlinx.cinterop.UnsafeNumber import platform.Foundation.NSDocumentDirectory diff --git a/sqllin-driver/src/commonTest/kotlin/com/ctrip/sqllin/driver/CommonBasicTest.kt b/sqllin-driver-test/src/commonMain/kotlin/com/ctrip/sqllin/driver/test/CommonBasicTest.kt similarity index 92% rename from sqllin-driver/src/commonTest/kotlin/com/ctrip/sqllin/driver/CommonBasicTest.kt rename to sqllin-driver-test/src/commonMain/kotlin/com/ctrip/sqllin/driver/test/CommonBasicTest.kt index fca49d3..74f34d3 100644 --- a/sqllin-driver/src/commonTest/kotlin/com/ctrip/sqllin/driver/CommonBasicTest.kt +++ b/sqllin-driver-test/src/commonMain/kotlin/com/ctrip/sqllin/driver/test/CommonBasicTest.kt @@ -14,8 +14,13 @@ * limitations under the License. */ -package com.ctrip.sqllin.driver +package com.ctrip.sqllin.driver.test +import com.ctrip.sqllin.driver.DatabaseConfiguration +import com.ctrip.sqllin.driver.DatabasePath +import com.ctrip.sqllin.driver.openDatabase +import com.ctrip.sqllin.driver.withQuery +import com.ctrip.sqllin.driver.withTransaction import kotlinx.coroutines.* import kotlinx.coroutines.test.runTest import kotlin.test.assertEquals @@ -91,7 +96,7 @@ class CommonBasicTest(private val path: DatabasePath) { connection.executeInsert(SQL.INSERT_BOOK, arrayOf("The Da Vinci Code", "Dan Brown", 454, 16.96, byteArrayOf())) connection.executeInsert(SQL.INSERT_BOOK, arrayOf("The Lost Symbol", "Dan Brown", 510, 19.95, byteArrayOf(1, 2, 3))) connection.executeInsert(SQL.INSERT_BOOK, arrayOf("", "Dan Brown", 454, 16.96, byteArrayOf())) - connection.executeInsert(SQL.INSERT_BOOK, arrayOf("The Lost Symbol", null, 510, 19.95, null)) + connection.executeInsert(SQL.INSERT_BOOK, arrayOf("The Lost Symbol", null, 510, 19.95, null)) } } val readOnlyConfig = getDefaultDBConfig(true) @@ -114,13 +119,13 @@ class CommonBasicTest(private val path: DatabasePath) { val readWriteConfig = getDefaultDBConfig(false) openDatabase(readWriteConfig) { it.withTransaction { connection -> - connection.executeUpdateDelete(SQL.INSERT_BOOK, arrayOf("The Da Vinci Code", "Dan Brown", 454, 16.96)) - connection.executeUpdateDelete(SQL.INSERT_BOOK, arrayOf("The Lost Symbol", "Dan Brown", 510, 19.95)) + connection.executeUpdateDelete(SQL.INSERT_BOOK, arrayOf("The Da Vinci Code", "Dan Brown", 454, 16.96)) + connection.executeUpdateDelete(SQL.INSERT_BOOK, arrayOf("The Lost Symbol", "Dan Brown", 510, 19.95)) } it.withTransaction { connection -> - connection.executeUpdateDelete(SQL.UPDATE_BOOK, arrayOf(18.99, "The Da Vinci Code")) - connection.executeUpdateDelete(SQL.UPDATE_BOOK, arrayOf(25.88, "The Lost Symbol")) + connection.executeUpdateDelete(SQL.UPDATE_BOOK, arrayOf(18.99, "The Da Vinci Code")) + connection.executeUpdateDelete(SQL.UPDATE_BOOK, arrayOf(25.88, "The Lost Symbol")) } } val readOnlyConfig = getDefaultDBConfig(true) @@ -143,8 +148,8 @@ class CommonBasicTest(private val path: DatabasePath) { val readWriteConfig = getDefaultDBConfig(false) openDatabase(readWriteConfig) { it.withTransaction { connection -> - connection.executeUpdateDelete(SQL.INSERT_BOOK, arrayOf("The Da Vinci Code", "Dan Brown", 454, 16.96)) - connection.executeUpdateDelete(SQL.INSERT_BOOK, arrayOf("The Lost Symbol", "Dan Brown", 510, 19.95)) + connection.executeUpdateDelete(SQL.INSERT_BOOK, arrayOf("The Da Vinci Code", "Dan Brown", 454, 16.96)) + connection.executeUpdateDelete(SQL.INSERT_BOOK, arrayOf("The Lost Symbol", "Dan Brown", 510, 19.95)) } it.executeUpdateDelete(SQL.DELETE_BOOK, arrayOf(500)) @@ -174,8 +179,8 @@ class CommonBasicTest(private val path: DatabasePath) { try { it.withTransaction { connection -> - connection.executeUpdateDelete(SQL.UPDATE_BOOK, arrayOf(18.99, "The Da Vinci Code")) - connection.executeUpdateDelete(SQL.UPDATE_BOOK, arrayOf(25.88, "The Lost Symbol")) + connection.executeUpdateDelete(SQL.UPDATE_BOOK, arrayOf(18.99, "The Da Vinci Code")) + connection.executeUpdateDelete(SQL.UPDATE_BOOK, arrayOf(25.88, "The Lost Symbol")) throw IllegalStateException("Simulate transaction failed.") } } catch (e: IllegalStateException) { diff --git a/sqllin-driver/src/commonTest/kotlin/com/ctrip/sqllin/driver/SQL.kt b/sqllin-driver-test/src/commonMain/kotlin/com/ctrip/sqllin/driver/test/SQL.kt similarity index 97% rename from sqllin-driver/src/commonTest/kotlin/com/ctrip/sqllin/driver/SQL.kt rename to sqllin-driver-test/src/commonMain/kotlin/com/ctrip/sqllin/driver/test/SQL.kt index 453f87a..8f3d71d 100644 --- a/sqllin-driver/src/commonTest/kotlin/com/ctrip/sqllin/driver/SQL.kt +++ b/sqllin-driver-test/src/commonMain/kotlin/com/ctrip/sqllin/driver/test/SQL.kt @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.ctrip.sqllin.driver +package com.ctrip.sqllin.driver.test /** * SQL statement that used for unit test. diff --git a/sqllin-driver/src/jvmTest/kotlin/com/ctrip/sqllin/driver/JvmTest.kt b/sqllin-driver-test/src/jvmTest/kotlin/com/ctrip/sqllin/driver/test/JvmTest.kt similarity index 89% rename from sqllin-driver/src/jvmTest/kotlin/com/ctrip/sqllin/driver/JvmTest.kt rename to sqllin-driver-test/src/jvmTest/kotlin/com/ctrip/sqllin/driver/test/JvmTest.kt index 8fd4dbc..4e8fc8c 100644 --- a/sqllin-driver/src/jvmTest/kotlin/com/ctrip/sqllin/driver/JvmTest.kt +++ b/sqllin-driver-test/src/jvmTest/kotlin/com/ctrip/sqllin/driver/test/JvmTest.kt @@ -14,13 +14,15 @@ * limitations under the License. */ -package com.ctrip.sqllin.driver +package com.ctrip.sqllin.driver.test +import com.ctrip.sqllin.driver.deleteDatabase +import com.ctrip.sqllin.driver.toDatabasePath import kotlin.test.AfterTest import kotlin.test.Test /** - * Native unit test + * JVM unit test * @author Yuang Qiao */ @@ -51,4 +53,4 @@ class JvmTest { fun setDown() { deleteDatabase(path, SQL.DATABASE_NAME) } -} \ No newline at end of file +} diff --git a/sqllin-driver/src/linuxTest/kotlin/com/ctrip/sqllin/driver/PlatformLinux.kt b/sqllin-driver-test/src/linuxTest/kotlin/com/ctrip/sqllin/driver/test/PlatformLinux.kt similarity index 96% rename from sqllin-driver/src/linuxTest/kotlin/com/ctrip/sqllin/driver/PlatformLinux.kt rename to sqllin-driver-test/src/linuxTest/kotlin/com/ctrip/sqllin/driver/test/PlatformLinux.kt index ee01438..30ca0a5 100644 --- a/sqllin-driver/src/linuxTest/kotlin/com/ctrip/sqllin/driver/PlatformLinux.kt +++ b/sqllin-driver-test/src/linuxTest/kotlin/com/ctrip/sqllin/driver/test/PlatformLinux.kt @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.ctrip.sqllin.driver +package com.ctrip.sqllin.driver.test import kotlinx.cinterop.ExperimentalForeignApi import kotlinx.cinterop.toKString diff --git a/sqllin-driver/src/mingwTest/kotlin/com/ctrip/sqllin/driver/PlatformMingw.kt b/sqllin-driver-test/src/mingwTest/kotlin/com/ctrip/sqllin/driver/test/PlatformMingw.kt similarity index 96% rename from sqllin-driver/src/mingwTest/kotlin/com/ctrip/sqllin/driver/PlatformMingw.kt rename to sqllin-driver-test/src/mingwTest/kotlin/com/ctrip/sqllin/driver/test/PlatformMingw.kt index 02866e0..de3fbf7 100644 --- a/sqllin-driver/src/mingwTest/kotlin/com/ctrip/sqllin/driver/PlatformMingw.kt +++ b/sqllin-driver-test/src/mingwTest/kotlin/com/ctrip/sqllin/driver/test/PlatformMingw.kt @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.ctrip.sqllin.driver +package com.ctrip.sqllin.driver.test import kotlinx.cinterop.* import platform.posix._wgetcwd diff --git a/sqllin-driver/src/nativeTest/kotlin/com/ctrip/sqllin/driver/NativeTest.kt b/sqllin-driver-test/src/nativeTest/kotlin/com/ctrip/sqllin/driver/test/NativeTest.kt similarity index 90% rename from sqllin-driver/src/nativeTest/kotlin/com/ctrip/sqllin/driver/NativeTest.kt rename to sqllin-driver-test/src/nativeTest/kotlin/com/ctrip/sqllin/driver/test/NativeTest.kt index 99c5e8a..7c7a50b 100644 --- a/sqllin-driver/src/nativeTest/kotlin/com/ctrip/sqllin/driver/NativeTest.kt +++ b/sqllin-driver-test/src/nativeTest/kotlin/com/ctrip/sqllin/driver/test/NativeTest.kt @@ -14,8 +14,10 @@ * limitations under the License. */ -package com.ctrip.sqllin.driver +package com.ctrip.sqllin.driver.test +import com.ctrip.sqllin.driver.deleteDatabase +import com.ctrip.sqllin.driver.toDatabasePath import kotlin.test.AfterTest import kotlin.test.Test @@ -51,4 +53,4 @@ class NativeTest { fun setDown() { deleteDatabase(path, SQL.DATABASE_NAME) } -} \ No newline at end of file +} diff --git a/sqllin-driver/src/nativeTest/kotlin/com/ctrip/sqllin/driver/Platform.kt b/sqllin-driver-test/src/nativeTest/kotlin/com/ctrip/sqllin/driver/test/Platform.kt similarity index 95% rename from sqllin-driver/src/nativeTest/kotlin/com/ctrip/sqllin/driver/Platform.kt rename to sqllin-driver-test/src/nativeTest/kotlin/com/ctrip/sqllin/driver/test/Platform.kt index 4af84f3..ce5373b 100644 --- a/sqllin-driver/src/nativeTest/kotlin/com/ctrip/sqllin/driver/Platform.kt +++ b/sqllin-driver-test/src/nativeTest/kotlin/com/ctrip/sqllin/driver/test/Platform.kt @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.ctrip.sqllin.driver +package com.ctrip.sqllin.driver.test /** * Some platform-related functions diff --git a/sqllin-driver/build.gradle.kts b/sqllin-driver/build.gradle.kts index d86b0b7..a38cbf1 100644 --- a/sqllin-driver/build.gradle.kts +++ b/sqllin-driver/build.gradle.kts @@ -1,6 +1,4 @@ -import org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi import org.jetbrains.kotlin.gradle.dsl.JvmTarget -import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSetTree import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTarget import org.jetbrains.kotlin.konan.target.HostManager @@ -16,13 +14,13 @@ val VERSION: String by project group = GROUP_ID version = VERSION -@OptIn(ExperimentalKotlinGradlePluginApi::class) kotlin { explicitApi() jvmToolchain(libs.versions.jvm.toolchain.get().toInt()) - androidTarget { - publishLibraryVariants("release") - instrumentedTestVariant.sourceSetTree.set(KotlinSourceSetTree.test) + android { + namespace = "com.ctrip.sqllin.driver" + compileSdk = libs.versions.android.sdk.compile.get().toInt() + minSdk = libs.versions.android.sdk.min.get().toInt() } jvm { @@ -30,21 +28,17 @@ kotlin { } listOf( - iosX64(), iosArm64(), iosSimulatorArm64(), - macosX64(), macosArm64(), watchosArm32(), watchosArm64(), - watchosX64(), watchosSimulatorArm64(), watchosDeviceArm64(), tvosArm64(), - tvosX64(), tvosSimulatorArm64(), linuxX64(), @@ -56,7 +50,7 @@ kotlin { } compilerOptions { - freeCompilerArgs.addAll("-Xexpect-actual-classes", "-Xcontext-parameters", "-Xnested-type-aliases") + freeCompilerArgs.addAll("-Xexpect-actual-classes", "-Xcontext-parameters") } sourceSets { @@ -65,19 +59,9 @@ kotlin { optIn("kotlin.RequiresOptIn") } } - commonTest.dependencies { - implementation(kotlin("test")) - implementation(libs.kotlinx.coroutines.core) - implementation(libs.kotlinx.coroutines.test) - } androidMain.dependencies { implementation(libs.androidx.annotation) } - androidInstrumentedTest.dependencies { - implementation(libs.androidx.test.core) - implementation(libs.androidx.test.runner) - implementation(libs.androidx.test.rules) - } jvmMain.dependencies { implementation(libs.sqlite.jdbc) } @@ -99,15 +83,6 @@ gradle.taskGraph.whenReady { } } -android { - namespace = "com.ctrip.sqllin.driver" - compileSdk = libs.versions.android.sdk.compile.get().toInt() - defaultConfig { - minSdk = libs.versions.android.sdk.min.get().toInt() - testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" - } -} - fun KotlinNativeTarget.setupNativeConfig() { val main by compilations.getting val sqlite3 by main.cinterops.creating { diff --git a/sqllin-dsl-test/build.gradle.kts b/sqllin-dsl-test/build.gradle.kts index 78bab53..af2c09d 100644 --- a/sqllin-dsl-test/build.gradle.kts +++ b/sqllin-dsl-test/build.gradle.kts @@ -1,10 +1,7 @@ -import org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi import org.jetbrains.kotlin.gradle.dsl.JvmTarget -import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSetTree import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTarget import org.jetbrains.kotlin.gradle.tasks.KotlinCompilationTask import org.jetbrains.kotlin.konan.target.HostManager -import kotlin.collections.plusAssign plugins { alias(libs.plugins.kotlin.multiplatform) @@ -15,12 +12,15 @@ plugins { version = "1.0" -@OptIn(ExperimentalKotlinGradlePluginApi::class) kotlin { jvmToolchain(libs.versions.jvm.toolchain.get().toInt()) - androidTarget { - publishLibraryVariants("release") - instrumentedTestVariant.sourceSetTree.set(KotlinSourceSetTree.test) + android { + namespace = "com.ctrip.sqllin.dsl.test" + compileSdk = libs.versions.android.sdk.compile.get().toInt() + minSdk = libs.versions.android.sdk.min.get().toInt() + withDeviceTest { + instrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" + } } jvm { @@ -28,21 +28,17 @@ kotlin { } listOf( - iosX64(), iosArm64(), iosSimulatorArm64(), - macosX64(), macosArm64(), watchosArm32(), watchosArm64(), - watchosX64(), watchosSimulatorArm64(), watchosDeviceArm64(), tvosArm64(), - tvosX64(), tvosSimulatorArm64(), linuxX64(), @@ -54,7 +50,7 @@ kotlin { } compilerOptions { - freeCompilerArgs.addAll("-Xexpect-actual-classes", "-Xcontext-parameters", "-Xnested-type-aliases") + freeCompilerArgs.addAll("-Xexpect-actual-classes", "-Xcontext-parameters") } sourceSets { @@ -67,18 +63,14 @@ kotlin { implementation(project(":sqllin-dsl")) implementation(libs.kotlinx.serialization) implementation(libs.kotlinx.coroutines.core) + implementation(kotlin("test")) + implementation(libs.kotlinx.coroutines.test) } } - commonTest.dependencies { - implementation(kotlin("test")) - implementation(libs.kotlinx.coroutines.test) - } - androidInstrumentedTest { - dependencies { - implementation(libs.androidx.test.core) - implementation(libs.androidx.test.runner) - implementation(libs.androidx.test.rules) - } + getByName("androidDeviceTest").dependencies { + implementation(libs.androidx.test.core) + implementation(libs.androidx.test.runner) + implementation(libs.androidx.test.rules) } } } @@ -98,14 +90,6 @@ gradle.taskGraph.whenReady { } } -android { - namespace = "com.ctrip.sqllin.dsl.test" - compileSdk = libs.versions.android.sdk.compile.get().toInt() - defaultConfig { - minSdk = libs.versions.android.sdk.min.get().toInt() - testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" - } -} fun KotlinNativeTarget.setupNativeConfig() { binaries { diff --git a/sqllin-dsl-test/src/androidInstrumentedTest/kotlin/com/ctrip/sqllin/dsl/test/AndroidTest.kt b/sqllin-dsl-test/src/androidDeviceTest/kotlin/com/ctrip/sqllin/dsl/test/AndroidTest.kt similarity index 100% rename from sqllin-dsl-test/src/androidInstrumentedTest/kotlin/com/ctrip/sqllin/dsl/test/AndroidTest.kt rename to sqllin-dsl-test/src/androidDeviceTest/kotlin/com/ctrip/sqllin/dsl/test/AndroidTest.kt diff --git a/sqllin-dsl-test/src/commonTest/kotlin/com/ctrip/sqllin/dsl/test/CommonBasicTest.kt b/sqllin-dsl-test/src/commonMain/kotlin/com/ctrip/sqllin/dsl/test/CommonBasicTest.kt similarity index 100% rename from sqllin-dsl-test/src/commonTest/kotlin/com/ctrip/sqllin/dsl/test/CommonBasicTest.kt rename to sqllin-dsl-test/src/commonMain/kotlin/com/ctrip/sqllin/dsl/test/CommonBasicTest.kt diff --git a/sqllin-dsl/build.gradle.kts b/sqllin-dsl/build.gradle.kts index 70ea846..404e88f 100644 --- a/sqllin-dsl/build.gradle.kts +++ b/sqllin-dsl/build.gradle.kts @@ -18,29 +18,27 @@ version = VERSION kotlin { explicitApi() jvmToolchain(libs.versions.jvm.toolchain.get().toInt()) - androidTarget { - publishLibraryVariants("release") + android { + namespace = "com.ctrip.sqllin.dsl" + compileSdk = libs.versions.android.sdk.compile.get().toInt() + minSdk = libs.versions.android.sdk.min.get().toInt() } jvm { compilerOptions.jvmTarget.set(JvmTarget.JVM_11) } - iosX64() iosArm64() iosSimulatorArm64() - macosX64() macosArm64() watchosArm32() watchosArm64() - watchosX64() watchosSimulatorArm64() watchosDeviceArm64() tvosArm64() - tvosX64() tvosSimulatorArm64() linuxX64() @@ -49,7 +47,7 @@ kotlin { mingwX64() compilerOptions { - freeCompilerArgs.addAll("-Xexpect-actual-classes", "-Xcontext-parameters", "-Xnested-type-aliases") + freeCompilerArgs.addAll("-Xexpect-actual-classes", "-Xcontext-parameters") } sourceSets { @@ -81,14 +79,6 @@ gradle.taskGraph.whenReady { } } -android { - namespace = "com.ctrip.sqllin.dsl" - compileSdk = libs.versions.android.sdk.compile.get().toInt() - defaultConfig { - minSdk = libs.versions.android.sdk.min.get().toInt() - } -} - mavenPublishing { publishToMavenCentral() signAllPublications() diff --git a/test_android.sh b/test_android.sh deleted file mode 100755 index a4f845b..0000000 --- a/test_android.sh +++ /dev/null @@ -1,5 +0,0 @@ -#Run Android instrumented tests -./gradlew :sqllin-driver:connectedDebugAndroidTest --stacktrace -./gradlew :sqllin-dsl-test:connectedDebugAndroidTest --stacktrace -#adb uninstall com.ctrip.sqllin.driver.test -#adb uninstall com.ctrip.sqllin.dsl.test \ No newline at end of file diff --git a/test_driver_jvm.sh b/test_driver_jvm.sh deleted file mode 100755 index 8167367..0000000 --- a/test_driver_jvm.sh +++ /dev/null @@ -1,3 +0,0 @@ -#Run sqllin-driver unit tests on JVM -./gradlew :sqllin-driver:cleanJvmTest -./gradlew :sqllin-driver:jvmTest --stacktrace \ No newline at end of file diff --git a/test_driver_linux.sh b/test_driver_linux.sh deleted file mode 100755 index cc9b560..0000000 --- a/test_driver_linux.sh +++ /dev/null @@ -1,3 +0,0 @@ -#Run sqllin-driver unit tests on Linux -./gradlew :sqllin-driver:cleanLinuxX64Test -./gradlew :sqllin-driver:linuxX64Test --stacktrace \ No newline at end of file diff --git a/test_driver_macos.sh b/test_driver_macos.sh deleted file mode 100755 index 6c143c3..0000000 --- a/test_driver_macos.sh +++ /dev/null @@ -1,3 +0,0 @@ -#Run sqllin-driver unit tests on macOS -./gradlew :sqllin-driver:cleanMacosX64Test -./gradlew :sqllin-driver:macosX64Test --stacktrace \ No newline at end of file diff --git a/test_dsl_jvm.sh b/test_dsl_jvm.sh deleted file mode 100755 index 248f32b..0000000 --- a/test_dsl_jvm.sh +++ /dev/null @@ -1,3 +0,0 @@ -#Run sqllin-driver unit tests on JVM -./gradlew :sqllin-dsl-test:cleanJvmTest -./gradlew :sqllin-dsl-test:jvmTest --stacktrace \ No newline at end of file diff --git a/test_dsl_linux.sh b/test_dsl_linux.sh deleted file mode 100755 index 504e0fc..0000000 --- a/test_dsl_linux.sh +++ /dev/null @@ -1,3 +0,0 @@ -#Run sqllin-dsl unit tests on Linux -./gradlew :sqllin-dsl-test:cleanLinuxX64Test -./gradlew :sqllin-dsl-test:linuxX64Test --stacktrace \ No newline at end of file diff --git a/test_dsl_macos.sh b/test_dsl_macos.sh deleted file mode 100755 index 9089b05..0000000 --- a/test_dsl_macos.sh +++ /dev/null @@ -1,3 +0,0 @@ -#Run sqllin-dsl unit tests on macOS -./gradlew :sqllin-dsl-test:cleanMacosX64Test -./gradlew :sqllin-dsl-test:macosX64Test --stacktrace \ No newline at end of file