From 819eabde88c8627532eecea51434e6ca683def05 Mon Sep 17 00:00:00 2001 From: qiaoyuang Date: Tue, 21 Oct 2025 20:31:35 +0100 Subject: [PATCH 1/2] Fix a bug of Create.kt --- CHANGELOG.md | 1 + gradle.properties | 2 +- .../kotlin/com/ctrip/sqllin/dsl/sql/operation/Create.kt | 4 +--- 3 files changed, 3 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 792981e..16431ca 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,7 @@ ### sqllin-dsl * Optimized performance for SQL assembly +* New API for creating Database: `DSLDBConfiguration` * New experimental API: `DatabaseScope#CREATE` * New experimental API: `DatabaseScope#DROP` * New experimental API: `DatabaseSceop#ALERT` diff --git a/gradle.properties b/gradle.properties index 690ba06..ad301ec 100644 --- a/gradle.properties +++ b/gradle.properties @@ -26,7 +26,7 @@ android.enableJetifier=true kotlin.code.style=official kotlin.mpp.stability.nowarn=true kotlin.mpp.enableCInteropCommonization=true -kotlin.natvie.increment=true +kotlin.native.increment=true kotlin.jvm.target.validation.mode=warning kotlin.native.binary.pagedAllocator=false kotlin.native.binary.latin1Strings=true diff --git a/sqllin-dsl/src/commonMain/kotlin/com/ctrip/sqllin/dsl/sql/operation/Create.kt b/sqllin-dsl/src/commonMain/kotlin/com/ctrip/sqllin/dsl/sql/operation/Create.kt index 0c7f4f6..96e8b7e 100644 --- a/sqllin-dsl/src/commonMain/kotlin/com/ctrip/sqllin/dsl/sql/operation/Create.kt +++ b/sqllin-dsl/src/commonMain/kotlin/com/ctrip/sqllin/dsl/sql/operation/Create.kt @@ -114,10 +114,8 @@ internal object Create : Operation { append(',') } } - table.primaryKeyInfo?.compositePrimaryKeys?.let { + table.primaryKeyInfo?.compositePrimaryKeys?.takeIf { it.isNotEmpty() }?.let { append(", PRIMARY KEY (") - if (it.isEmpty()) - return@let append(it[0]) for (i in 1 ..< it.size) { append(',') From fe3e0fe668dc626edb0abb0986e45ec88eba3805 Mon Sep 17 00:00:00 2001 From: qiaoyuang Date: Tue, 21 Oct 2025 21:55:28 +0100 Subject: [PATCH 2/2] Mark the new APIs as ExperimentalDSLDatabaseAPI.kt --- .../ctrip/sqllin/dsl/DSLDBConfiguration.kt | 2 + .../com/ctrip/sqllin/dsl/DatabaseCreators.kt | 2 + .../com/ctrip/sqllin/dsl/DatabaseScope.kt | 3 ++ .../annotation/ExperimentalDSLDatabaseAPI.kt | 46 +++++++++++++++++++ 4 files changed, 53 insertions(+) create mode 100644 sqllin-dsl/src/commonMain/kotlin/com/ctrip/sqllin/dsl/annotation/ExperimentalDSLDatabaseAPI.kt diff --git a/sqllin-dsl/src/commonMain/kotlin/com/ctrip/sqllin/dsl/DSLDBConfiguration.kt b/sqllin-dsl/src/commonMain/kotlin/com/ctrip/sqllin/dsl/DSLDBConfiguration.kt index d7cbb20..d30fc92 100644 --- a/sqllin-dsl/src/commonMain/kotlin/com/ctrip/sqllin/dsl/DSLDBConfiguration.kt +++ b/sqllin-dsl/src/commonMain/kotlin/com/ctrip/sqllin/dsl/DSLDBConfiguration.kt @@ -20,6 +20,7 @@ import com.ctrip.sqllin.driver.DatabaseConfiguration import com.ctrip.sqllin.driver.DatabasePath import com.ctrip.sqllin.driver.JournalMode import com.ctrip.sqllin.driver.SynchronousMode +import com.ctrip.sqllin.dsl.annotation.ExperimentalDSLDatabaseAPI /** * DSL-level database configuration with [DatabaseScope] callbacks. @@ -42,6 +43,7 @@ import com.ctrip.sqllin.driver.SynchronousMode * * @author Yuang Qiao */ +@ExperimentalDSLDatabaseAPI public data class DSLDBConfiguration( val name: String, val path: DatabasePath, diff --git a/sqllin-dsl/src/commonMain/kotlin/com/ctrip/sqllin/dsl/DatabaseCreators.kt b/sqllin-dsl/src/commonMain/kotlin/com/ctrip/sqllin/dsl/DatabaseCreators.kt index cbaed42..61a015b 100644 --- a/sqllin-dsl/src/commonMain/kotlin/com/ctrip/sqllin/dsl/DatabaseCreators.kt +++ b/sqllin-dsl/src/commonMain/kotlin/com/ctrip/sqllin/dsl/DatabaseCreators.kt @@ -19,6 +19,7 @@ package com.ctrip.sqllin.dsl import com.ctrip.sqllin.driver.DatabaseConfiguration import com.ctrip.sqllin.driver.DatabasePath import com.ctrip.sqllin.driver.openDatabase +import com.ctrip.sqllin.dsl.annotation.ExperimentalDSLDatabaseAPI /** * Factory functions for creating [Database] instances. @@ -73,6 +74,7 @@ public fun Database( * @param enableSimpleSQLLog Whether to enable simple SQL logging for debugging * @return A new database instance */ +@ExperimentalDSLDatabaseAPI public fun Database( dsldbConfiguration: DSLDBConfiguration, enableSimpleSQLLog: Boolean = false, diff --git a/sqllin-dsl/src/commonMain/kotlin/com/ctrip/sqllin/dsl/DatabaseScope.kt b/sqllin-dsl/src/commonMain/kotlin/com/ctrip/sqllin/dsl/DatabaseScope.kt index 201ba0e..bea7bfc 100644 --- a/sqllin-dsl/src/commonMain/kotlin/com/ctrip/sqllin/dsl/DatabaseScope.kt +++ b/sqllin-dsl/src/commonMain/kotlin/com/ctrip/sqllin/dsl/DatabaseScope.kt @@ -18,6 +18,7 @@ package com.ctrip.sqllin.dsl import com.ctrip.sqllin.driver.DatabaseConnection import com.ctrip.sqllin.dsl.annotation.AdvancedInsertAPI +import com.ctrip.sqllin.dsl.annotation.ExperimentalDSLDatabaseAPI import com.ctrip.sqllin.dsl.annotation.StatementDslMaker import com.ctrip.sqllin.dsl.sql.Table import com.ctrip.sqllin.dsl.sql.X @@ -544,6 +545,7 @@ public class DatabaseScope internal constructor( * PersonTable.CREATE() * ``` */ + @ExperimentalDSLDatabaseAPI @StatementDslMaker public infix fun CREATE(table: Table) { val statement = Create.create(table, databaseConnection) @@ -553,6 +555,7 @@ public class DatabaseScope internal constructor( /** * Creates this table from its definition (extension function variant). */ + @ExperimentalDSLDatabaseAPI @StatementDslMaker @JvmName("create") public fun Table.CREATE(): Unit = CREATE(this) diff --git a/sqllin-dsl/src/commonMain/kotlin/com/ctrip/sqllin/dsl/annotation/ExperimentalDSLDatabaseAPI.kt b/sqllin-dsl/src/commonMain/kotlin/com/ctrip/sqllin/dsl/annotation/ExperimentalDSLDatabaseAPI.kt new file mode 100644 index 0000000..cb7652e --- /dev/null +++ b/sqllin-dsl/src/commonMain/kotlin/com/ctrip/sqllin/dsl/annotation/ExperimentalDSLDatabaseAPI.kt @@ -0,0 +1,46 @@ +/* + * Copyright (C) 2025 Ctrip.com. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.ctrip.sqllin.dsl.annotation + +/** + * Marks declarations that are **experimental** in SQLlin DSL database API. + * + * This annotation indicates that the API is still being refined and may undergo changes + * in future releases. These APIs include experimental features that provide additional + * functionality but may not be as stable as the core APIs. + * + * Any usage of a declaration annotated with `@ExperimentalDSLDatabaseAPI` must be accepted either by + * annotating that usage with the [OptIn] annotation, e.g. `@OptIn(ExperimentalDSLDatabaseAPI::class)`, + * or by using the compiler argument `-opt-in=com.ctrip.sqllin.dsl.annotation.ExperimentalDSLDatabaseAPI`. + * + * @see OptIn + * @see RequiresOptIn + */ +@RequiresOptIn( + message = "This is an experimental API for SQLlin DSL database operations. " + + "It may be changed or removed in future releases. " + + "Use with caution and be prepared for potential breaking changes.", + level = RequiresOptIn.Level.WARNING +) +@Target( + AnnotationTarget.CLASS, + AnnotationTarget.FUNCTION, + AnnotationTarget.PROPERTY, + AnnotationTarget.TYPEALIAS +) +@Retention(AnnotationRetention.BINARY) +public annotation class ExperimentalDSLDatabaseAPI \ No newline at end of file