diff --git a/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/ddl/DefaultConstraint.kt b/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/ddl/DefaultConstraint.kt new file mode 100644 index 0000000..9d24ccb --- /dev/null +++ b/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/ddl/DefaultConstraint.kt @@ -0,0 +1,10 @@ +package ru.landgrafhomyak.serdha.api.v0.ddl + +import ru.landgrafhomyak.serdha.api.v0.Expression + +public interface DefaultConstraint, TableUserExtension : Any> { + public val name: String + public val table: Table + public val attachedToColumn: Column + public val expression: Expression +} \ No newline at end of file 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 8aef13f..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 } 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 1ad1f91..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,39 +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 public val types: ColumnType.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 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 @Suppress("PropertyName") public val rowId_column: Column, ColumnType>, TableUserExtension> @Suppress("PropertyName") - public val rowId_uniqueConstraint: UniqueConstraint + 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 + ): 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>, @@ -42,8 +56,15 @@ public interface TableCreator { toColumn2: Column<*, ColumnType2, TargetTableUserWrapper>, onUpdate: ForeignKey.OnUpdateAction, onDelete: ForeignKey.OnDeleteAction, - ): ForeignKey + ): 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>, @@ -54,5 +75,11 @@ public interface TableCreator { toColumn3: Column<*, ColumnType3, TargetTableUserWrapper>, onUpdate: ForeignKey.OnUpdateAction, onDelete: ForeignKey.OnDeleteAction, - ): ForeignKey + ): 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/TableUpdater.kt b/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/ddl/TableUpdater.kt index 30f53eb..8644c23 100644 --- a/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/ddl/TableUpdater.kt +++ b/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/ddl/TableUpdater.kt @@ -4,27 +4,35 @@ import ru.landgrafhomyak.serdha.api.v0.Expression public interface TableUpdater : TableCreator { + public val oldExpressionBuilder: Expression.Builder + public fun > keepColumn(c: Column): Column - public fun > renameColumn(c: Column, newName: String): Column - public fun > mapColumn(c: Column, newValue: Expression, where: Expression?) - public fun > mapColumn(c: Column, newValue: Expression): Unit = this.mapColumn(c, newValue, null) + public fun > renameAndKeepColumn(c: Column, newName: String): Column + public fun > mapAndKeepColumn(c: Column<*, *, TableOldUserExtension>, newValue: Expression, where: Expression?): Column + public fun > mapAndKeepColumn(c: Column<*, *, TableOldUserExtension>, newValue: Expression): Column = this.mapAndKeepColumn(c, newValue, null) + public fun > mapAndRenameAndKeepColumn(c: Column<*, *, TableOldUserExtension>, newName: String, newValue: Expression, where: Expression?): Column + public fun > mapAndRenameAndKeepColumn(c: Column<*, *, TableOldUserExtension>, newName: String, newValue: Expression): Column = this.mapAndRenameAndKeepColumn(c, newName, newValue, null) public fun deleteColumn(c: Column<*, *, TableOldUserExtension>) public fun keepIndex(i: Index): Index - public fun renameIndex(i: Index, newName: String): Index + public fun renameAndKeepIndex(i: Index, newName: String): Index public fun deleteIndex(i: Index) public fun keepCheck(i: CheckConstraint): CheckConstraint - public fun renameCheck(i: CheckConstraint, newName: String): CheckConstraint + public fun renameAndKeepCheck(i: CheckConstraint, newName: String): CheckConstraint public fun deleteCheck(i: CheckConstraint) - public fun keepUnique(i: UniqueConstraint): UniqueConstraint - public fun renameUnique(i: UniqueConstraint, newName: String): UniqueConstraint - public fun deleteUnique(i: UniqueConstraint) + public fun keepUniqueIndex(i: UniqueIndex): UniqueIndex + public fun renameAndKeepUniqueIndex(i: UniqueIndex, newName: String): UniqueIndex + public fun deleteUniqueIndex(i: UniqueIndex) + + public fun > keepDefaultValue(c: Column, d: DefaultConstraint): DefaultConstraint + public fun > changeDefaultValue(c: Column, d: DefaultConstraint<*, *, TableOldUserExtension>): DefaultConstraint + public fun deleteDefaultValue(i: DefaultConstraint<*, *, TableOldUserExtension>) public fun keepForeignKeyToUpdatedTable(i: ForeignKey, updatedTable: Table): ForeignKey public fun keepForeignKey(i: ForeignKey): ForeignKey - public fun renameForeignKeyToUpdatedTable(i: ForeignKey, updatedTable: Table): ForeignKey - public fun renameForeignKey(i: ForeignKey): ForeignKey + public fun renameAndKeepForeignKeyToUpdatedTable(i: ForeignKey, updatedTable: Table): ForeignKey + public fun renameAndKeepForeignKey(i: ForeignKey): ForeignKey public fun deleteForeignKey(i: ForeignKey) } \ 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 73% 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 886d791..d01fe2f 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> diff --git a/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/dml/InsertCreator.kt b/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/dml/InsertCreator.kt index feda927..c9928ff 100644 --- a/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/dml/InsertCreator.kt +++ b/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/dml/InsertCreator.kt @@ -3,7 +3,7 @@ package ru.landgrafhomyak.serdha.api.v0.dml import ru.landgrafhomyak.serdha.api.v0.Expression import ru.landgrafhomyak.serdha.api.v0.ddl.Column import ru.landgrafhomyak.serdha.api.v0.ddl.ColumnType -import ru.landgrafhomyak.serdha.api.v0.ddl.UniqueConstraint +import ru.landgrafhomyak.serdha.api.v0.ddl.UniqueIndex public interface InsertCreator : _CommonQueryMethods { public val insertedValues: SelectedTable @@ -15,11 +15,11 @@ public interface InsertCreator> updateColumn(c: Column, e: Expression) } - public fun onConflictUpdate(u: UniqueConstraint, c: (_UpsertCreator) -> Unit) + public fun onConflictUpdate(u: UniqueIndex, c: (_UpsertCreator) -> Unit) - public fun onConflictThrow(u: UniqueConstraint) + public fun onConflictThrow(u: UniqueIndex) - public fun onConflictIgnore(u: UniqueConstraint) + public fun onConflictIgnore(u: UniqueIndex) public val returningInserted: _CommonQueryMethods._Returning