diff --git a/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/ddl/ModuleCreator.kt b/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/ddl/ModuleCreator.kt index cb777ea..a4e08ca 100644 --- a/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/ddl/ModuleCreator.kt +++ b/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/ddl/ModuleCreator.kt @@ -8,8 +8,9 @@ import ru.landgrafhomyak.serdha.api.v0.dml.Select import ru.landgrafhomyak.serdha.api.v0.dml.SelectCreator import ru.landgrafhomyak.serdha.api.v0.dml.Update import ru.landgrafhomyak.serdha.api.v0.dml.UpdateCreator +import ru.landgrafhomyak.serdha.api.v0.runtime.Transaction -public interface ModuleCreator { +public interface ModuleCreator : Transaction { public interface CreateTable { public fun createTable(creator: TableCreator): TableUserExtension } @@ -55,11 +56,17 @@ public interface ModuleCreator { public fun createSelect(initializer: CreateSelect): Select - public interface CreateInsert { - public fun createInsert(table: Table, creator: InsertCreator): QueryUserWrapper + public interface CreateInsertParams { + public fun createInsert(table: Table, creator: InsertCreator.InsertParams): QueryUserWrapper } - public fun createInsert(table: Table, initializer: CreateInsert): Insert + public fun createInsertParams(table: Table, initializer: CreateInsertParams): Insert.InsertParams + + public interface CreateInsertFromQuery { + public fun createInsert(table: Table, creator: InsertCreator.InsertFromQuery): QueryUserWrapper + } + + public fun createInsertFromQuery(table: Table, initializer: CreateInsertFromQuery): Insert.InsertFromQuery public interface CreateUpdate { public fun createUpdate(table: Table, creator: UpdateCreator): QueryUserWrapper diff --git a/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/ddl/ModuleTemplate.kt b/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/ddl/ModuleTemplate.kt index 2751fb3..7327918 100644 --- a/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/ddl/ModuleTemplate.kt +++ b/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/ddl/ModuleTemplate.kt @@ -14,11 +14,11 @@ public interface ModuleTemplate { } public interface CreateModule { - public fun createModule(rootNs: Namespace, creator: ModuleCreator): ModuleUserExtension + public suspend fun createModule(rootNs: Namespace, creator: ModuleCreator): ModuleUserExtension } public interface UpgradeModule { - public fun upgradeModule(oldModule: Module, rootNs: Namespace, updater: ModuleCreator): NewModuleUserExtension + public suspend fun upgradeModule(oldModule: Module, rootNs: Namespace, updater: ModuleCreator): NewModuleUserExtension } public val versionKey: String diff --git a/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/ddl/TableCreator.kt b/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/ddl/TableCreator.kt index 46f5a63..8644598 100644 --- a/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/ddl/TableCreator.kt +++ b/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/ddl/TableCreator.kt @@ -1,35 +1,53 @@ package ru.landgrafhomyak.serdha.api.v0.ddl -import kotlin.jvm.JvmName import ru.landgrafhomyak.serdha.api.v0.Expression +import ru.landgrafhomyak.serdha.api.v0.LowLevelApi public interface TableCreator { public val expressionBuilder: Expression.Builder - /** - * Offers column of type [D][type] with `NOT NULL` constraint named [name] and runtime type [RuntimeType]. - * - * @return Descriptor of offered column for future operations. - */ - public fun > column(name: String, type: DatabaseType): Column + public val types: ColumnType.Builder + + public fun > column(name: String, type: DatabaseType): Column public fun index(name: String, vararg columns: Column<*, *, TableUserExtension>): Index - public fun unique(name: String, distinctNulls: Boolean, vararg columns: Column<*, *, TableUserExtension>): UniqueConstraint - public fun check(name: String, constraint: Expression): CheckConstraint + public fun uniqueIndex(name: String, distinctNulls: Boolean, vararg columns: Column<*, *, TableUserExtension>): UniqueIndex + public fun checkConstraint(name: String, constraint: Expression): CheckConstraint + public fun > defaultValue(c: Column, expr: Expression): DefaultConstraint - public fun rowIdColumn(): Column, ColumnType>, TableUserExtension> + @Suppress("PropertyName") + public val rowId_column: Column, ColumnType>, TableUserExtension> - public fun rowIdUniqueConstraint(): UniqueConstraint + @Suppress("PropertyName") + public val rowId_uniqueConstraint: UniqueIndex + @Suppress("FunctionName") + @LowLevelApi + public fun _foreignKey( + fromColumns: Array>, + toTable: Table, + toColumns: Array>, + onUpdate: ForeignKey.OnUpdateAction, + onDelete: ForeignKey.OnDeleteAction, + ): ForeignKey + + @OptIn(LowLevelApi::class) public fun > foreignKey( fromColumn: Column<*, ColumnType1, TableUserExtension>, toTable: Table, toColumn: Column<*, ColumnType1, TargetTableUserWrapper>, onUpdate: ForeignKey.OnUpdateAction, - onDelete: ForeignKey.OnDeleteAction - ): ForeignKey + onDelete: ForeignKey.OnDeleteAction, + ): ForeignKey = this._foreignKey( + fromColumns = arrayOf(fromColumn), + toTable = toTable, + toColumns = arrayOf(toColumn), + onUpdate = onUpdate, + onDelete = onDelete + ) + @OptIn(LowLevelApi::class) public fun , ColumnType2 : ColumnType<*>> foreignKey( fromColumn1: Column<*, ColumnType1, TableUserExtension>, fromColumn2: Column<*, ColumnType2, TableUserExtension>, @@ -37,9 +55,16 @@ public interface TableCreator { toColumn1: Column<*, ColumnType1, TargetTableUserWrapper>, toColumn2: Column<*, ColumnType2, TargetTableUserWrapper>, onUpdate: ForeignKey.OnUpdateAction, - onDelete: ForeignKey.OnDeleteAction - ): ForeignKey + onDelete: ForeignKey.OnDeleteAction, + ): ForeignKey = this._foreignKey( + fromColumns = arrayOf(fromColumn1, fromColumn2), + toTable = toTable, + toColumns = arrayOf(toColumn1, toColumn2), + onUpdate = onUpdate, + onDelete = onDelete + ) + @OptIn(LowLevelApi::class) public fun , ColumnType2 : ColumnType<*>, ColumnType3 : ColumnType<*>> foreignKey( fromColumn1: Column<*, ColumnType1, TableUserExtension>, fromColumn2: Column<*, ColumnType2, TableUserExtension>, @@ -49,6 +74,12 @@ public interface TableCreator { toColumn2: Column<*, ColumnType2, TargetTableUserWrapper>, toColumn3: Column<*, ColumnType3, TargetTableUserWrapper>, onUpdate: ForeignKey.OnUpdateAction, - onDelete: ForeignKey.OnDeleteAction - ): ForeignKey + onDelete: ForeignKey.OnDeleteAction, + ): ForeignKey = this._foreignKey( + fromColumns = arrayOf(fromColumn1, fromColumn2, fromColumn3), + toTable = toTable, + toColumns = arrayOf(toColumn1, toColumn2, toColumn3), + onUpdate = onUpdate, + onDelete = onDelete + ) } \ No newline at end of file diff --git a/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/ddl/UniqueConstraint.kt b/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/ddl/UniqueIndex.kt similarity index 74% rename from src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/ddl/UniqueConstraint.kt rename to src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/ddl/UniqueIndex.kt index 25b144c..7ca3b21 100644 --- a/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/ddl/UniqueConstraint.kt +++ b/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/ddl/UniqueIndex.kt @@ -1,6 +1,6 @@ package ru.landgrafhomyak.serdha.api.v0.ddl -public interface UniqueConstraint { +public interface UniqueIndex { public val name: String public val table: Table public val columns: List>