From ab93292246a2fa0e9e88a858f4fd89204da9d1eb Mon Sep 17 00:00:00 2001 From: Andrew Golovashevich Date: Fri, 29 Nov 2024 22:10:24 +0300 Subject: [PATCH] Unified DML creators --- .../serdha/api/v0/ddl/CheckConstraint.kt | 8 +-- .../serdha/api/v0/ddl/Column.kt | 4 +- .../serdha/api/v0/ddl/ForeignKey.kt | 10 +-- .../landgrafhomyak/serdha/api/v0/ddl/Index.kt | 6 +- .../serdha/api/v0/ddl/Module.kt | 4 +- .../serdha/api/v0/ddl/ModuleModifyingRound.kt | 68 +++++++++---------- .../serdha/api/v0/ddl/ModuleTemplate.kt | 8 +-- .../landgrafhomyak/serdha/api/v0/ddl/RowId.kt | 2 +- .../landgrafhomyak/serdha/api/v0/ddl/Table.kt | 4 +- .../serdha/api/v0/ddl/TableCreator.kt | 36 +++++----- .../serdha/api/v0/ddl/TableUpdater.kt | 40 +++++------ .../serdha/api/v0/ddl/UniqueConstraint.kt | 6 +- .../serdha/api/v0/dml/Delete.kt | 4 +- .../serdha/api/v0/dml/DeleteCreator.kt | 12 ++-- .../serdha/api/v0/dml/InputParam.kt | 4 +- .../serdha/api/v0/dml/Insert.kt | 4 +- .../serdha/api/v0/dml/InsertCreator.kt | 20 ++++-- .../serdha/api/v0/dml/Select.kt | 8 ++- .../serdha/api/v0/dml/SelectCreator.kt | 19 ++---- .../serdha/api/v0/dml/SelectedColumn.kt | 8 --- .../serdha/api/v0/dml/SelectedTable.kt | 5 +- .../serdha/api/v0/dml/Update.kt | 3 +- .../serdha/api/v0/dml/UpdateCreator.kt | 18 +++-- .../serdha/api/v0/dml/_CommonQueryMethods.kt | 23 +++++++ .../serdha/api/v0/runtime/ParametersSetter.kt | 25 ++++--- .../serdha/api/v0/runtime/Row.kt | 24 +++---- .../api/v0/runtime/SynchronizedDatabase.kt | 2 +- .../api/v0/runtime/UnsynchronizedDatabase.kt | 4 +- .../api/v0/runtime/_ParametersSetter.kt | 2 +- .../serdha/api/v0/runtime/_ResultSet.kt | 2 +- 30 files changed, 202 insertions(+), 181 deletions(-) delete mode 100644 src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/dml/SelectedColumn.kt create mode 100644 src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/dml/_CommonQueryMethods.kt diff --git a/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/ddl/CheckConstraint.kt b/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/ddl/CheckConstraint.kt index 12887c7..43fe95d 100644 --- a/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/ddl/CheckConstraint.kt +++ b/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/ddl/CheckConstraint.kt @@ -2,9 +2,9 @@ package ru.landgrafhomyak.serdha.api.v0.ddl import ru.landgrafhomyak.serdha.api.v0.Expression -public interface CheckConstraint { +public interface CheckConstraint { public val name: String - public val table: Table - public val constraint: Expression - public val affectedColumns: List> + public val table: Table + public val constraint: Expression + public val affectedColumns: List> } \ No newline at end of file diff --git a/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/ddl/Column.kt b/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/ddl/Column.kt index 6435ef2..a6fa7d1 100644 --- a/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/ddl/Column.kt +++ b/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/ddl/Column.kt @@ -1,9 +1,9 @@ package ru.landgrafhomyak.serdha.api.v0.ddl -public interface Column, TableUserWrapper : Any> /*: Expression*/ { +public interface Column, TableUserExtension : Any> { public val name: String public val type: DatabaseType - public val table: Table + public val table: Table } \ No newline at end of file diff --git a/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/ddl/ForeignKey.kt b/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/ddl/ForeignKey.kt index 358f16d..17b4ef2 100644 --- a/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/ddl/ForeignKey.kt +++ b/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/ddl/ForeignKey.kt @@ -2,11 +2,11 @@ package ru.landgrafhomyak.serdha.api.v0.ddl import kotlin.jvm.JvmStatic -public interface ForeignKey { - public val fromTable: Table - public val fromColumns: List> - public val toTable: Table - public val toColumns: List> +public interface ForeignKey { + public val fromTable: Table + public val fromColumns: List> + public val toTable: Table + public val toColumns: List> public enum class OnUpdateAction { NO_ACTION, diff --git a/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/ddl/Index.kt b/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/ddl/Index.kt index 1b80d29..ecb5993 100644 --- a/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/ddl/Index.kt +++ b/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/ddl/Index.kt @@ -1,7 +1,7 @@ package ru.landgrafhomyak.serdha.api.v0.ddl -public interface Index { +public interface Index { public val name: String - public val table: Table - public val columns: List> + public val table: Table + public val columns: List> } \ No newline at end of file diff --git a/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/ddl/Module.kt b/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/ddl/Module.kt index 969c1ab..60f6ad2 100644 --- a/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/ddl/Module.kt +++ b/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/ddl/Module.kt @@ -2,8 +2,8 @@ package ru.landgrafhomyak.serdha.api.v0.ddl import ru.landgrafhomyak.serdha.api.v0.runtime.SynchronizedDatabase -public interface Module { - public val wrapper: W +public interface Module { + public val userExtension: ModuleUserExtension public val versionKey: String diff --git a/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/ddl/ModuleModifyingRound.kt b/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/ddl/ModuleModifyingRound.kt index fd49760..c4ab6d1 100644 --- a/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/ddl/ModuleModifyingRound.kt +++ b/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/ddl/ModuleModifyingRound.kt @@ -10,44 +10,44 @@ import ru.landgrafhomyak.serdha.api.v0.dml.Update import ru.landgrafhomyak.serdha.api.v0.dml.UpdateCreator public interface ModuleModifyingRound { - public fun interface CreateTable { - public fun createTable(creator: TableCreator): TableUserWrapper + public fun interface CreateTable { + public fun createTable(creator: TableCreator): TableUserExtension } - public fun createTable(namespace: Namespace, name: String, initializer: CreateTable): Table + public fun createTable(namespace: Namespace, name: String, initializer: CreateTable): Table - public fun interface UpdateTable { - public fun updateTable(oldTable: Table, updater: TableUpdater): TableNewUserWrapper + public fun interface UpdateTable { + public fun updateTable(oldTable: Table, updater: TableUpdater): TableNewUserExtension } - public fun updateTable( - oldTable: Table, - initializer: UpdateTable - ): Table + public fun updateTable( + oldTable: Table, + initializer: UpdateTable + ): Table - public fun renameTable( - table: Table, + public fun renameTable( + table: Table, newName: String - ): Table + ): Table - public fun renameTable( - table: Table, + public fun renameTable( + table: Table, newNamespace: Namespace, newName: String - ): Table + ): Table - public fun updateAndRenameTable( - table: Table, + public fun updateAndRenameTable( + table: Table, newName: String, - initializer: UpdateTable - ): Table + initializer: UpdateTable + ): Table - public fun updateAndRenameTable( - table: Table, + public fun updateAndRenameTable( + table: Table, newNamespace: Namespace, newName: String, - initializer: UpdateTable - ): Table + initializer: UpdateTable + ): Table public fun interface CreateSelect { public fun createSelect(creator: SelectCreator): QueryUserWrapper @@ -55,24 +55,24 @@ public interface ModuleModifyingRound { public fun createSelect(initializer: CreateSelect): Select - public fun interface CreateInsert { - public fun createInsert(table: Table, creator: InsertCreator): QueryUserWrapper + public fun interface CreateInsert { + public fun createInsert(table: Table, creator: InsertCreator): QueryUserWrapper } - public fun createInsert(table: Table, initializer: CreateInsert): Insert + public fun createInsert(table: Table, initializer: CreateInsert): Insert - public fun interface CreateUpdate { - public fun createUpdate(table: Table, creator: UpdateCreator): QueryUserWrapper + public fun interface CreateUpdate { + public fun createUpdate(table: Table, creator: UpdateCreator): QueryUserWrapper } - public fun createUpdate(table: Table, initializer: CreateUpdate): Update + public fun createUpdate(table: Table, initializer: CreateUpdate): Update - public fun interface CreateDelete { - public fun createDelete(table: Table, creator: DeleteCreator): QueryUserWrapper + public fun interface CreateDelete { + public fun createDelete(table: Table, creator: DeleteCreator): QueryUserWrapper } - public fun createDelete(table: Table, initializer: CreateDelete): Delete + public fun createDelete(table: Table, initializer: CreateDelete): Delete - public fun substituteModule(rootNs: Namespace, template: ModuleTemplate): Module - public fun upgradeModule(oldModule: Module<*>, rootNs: Namespace, template: ModuleTemplate): Module + public fun substituteModule(rootNs: Namespace, template: ModuleTemplate): Module + public fun upgradeModule(oldModule: Module<*>, rootNs: Namespace, template: ModuleTemplate): Module } \ No newline at end of file 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 cba1ba6..1fa9cd7 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 @@ -1,10 +1,10 @@ package ru.landgrafhomyak.serdha.api.v0.ddl -public interface ModuleTemplate { - public fun modify( +public interface ModuleTemplate { + public fun modify( newVersionKey: String, - updater: (oldModule: ModuleTemplate, rootNs: Namespace, updater: ModuleModifyingRound) -> NW - ): ModuleTemplate + updater: (oldModule: ModuleTemplate, rootNs: Namespace, updater: ModuleModifyingRound) -> NewModuleUserExtension + ): ModuleTemplate public val versionKey: String } \ No newline at end of file diff --git a/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/ddl/RowId.kt b/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/ddl/RowId.kt index e14f45b..45c4670 100644 --- a/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/ddl/RowId.kt +++ b/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/ddl/RowId.kt @@ -1,3 +1,3 @@ package ru.landgrafhomyak.serdha.api.v0.ddl -public interface RowId \ No newline at end of file +public interface RowId \ No newline at end of file diff --git a/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/ddl/Table.kt b/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/ddl/Table.kt index d6c3c72..a74ecbb 100644 --- a/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/ddl/Table.kt +++ b/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/ddl/Table.kt @@ -1,5 +1,5 @@ package ru.landgrafhomyak.serdha.api.v0.ddl -public interface Table { - public val wrapper: UserWrapper +public interface Table { + public val userExtension: UserExtension } \ No newline at end of file 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 6183c48..4d21c34 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 @@ -3,18 +3,18 @@ package ru.landgrafhomyak.serdha.api.v0.ddl import kotlin.jvm.JvmName import ru.landgrafhomyak.serdha.api.v0.Expression -public interface TableCreator { +public interface TableCreator { /** * 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 @Suppress("INAPPLICABLE_JVM_NAME") @JvmName("nullableColumn\$notNull") @Deprecated("This column can be not-null", replaceWith = ReplaceWith("this.column")) - public fun > nullableColumn(name: String, type: DatabaseType): Column = + public fun > nullableColumn(name: String, type: DatabaseType): Column = this.nullableColumn(name, type) /** @@ -22,45 +22,45 @@ public interface TableCreator { * * @return Descriptor of offered column for future operations. */ - public fun > nullableColumn(name: String, type: DatabaseType): Column + public fun > nullableColumn(name: String, type: DatabaseType): Column - public fun index(name: String, vararg columns: Column<*, *, TableUserWrapper>): Index + public fun index(name: String, vararg columns: Column<*, *, TableUserExtension>): Index // todo not-null column uniqueness - public fun unique(name: String, distinctNulls: Boolean, vararg columns: Column<*, *, TableUserWrapper>): UniqueConstraint - public fun check(name: String, constraint: Expression): CheckConstraint + public fun unique(name: String, distinctNulls: Boolean, vararg columns: Column<*, *, TableUserExtension>): UniqueConstraint + public fun check(name: String, constraint: Expression): CheckConstraint - public fun rowIdColumn(): Column, ColumnType>, TableUserWrapper> + public fun rowIdColumn(): Column, ColumnType>, TableUserExtension> - public fun rowIdUniqueConstraint(): UniqueConstraint + public fun rowIdUniqueConstraint(): UniqueConstraint public fun > foreignKey( - fromColumn: Column<*, ColumnType1, TableUserWrapper>, + fromColumn: Column<*, ColumnType1, TableUserExtension>, toTable: Table, toColumn: Column<*, ColumnType1, TargetTableUserWrapper>, onUpdate: ForeignKey.OnUpdateAction, onDelete: ForeignKey.OnDeleteAction - ): ForeignKey + ): ForeignKey public fun , ColumnType2 : ColumnType<*>> foreignKey( - fromColumn1: Column<*, ColumnType1, TableUserWrapper>, - fromColumn2: Column<*, ColumnType2, TableUserWrapper>, + fromColumn1: Column<*, ColumnType1, TableUserExtension>, + fromColumn2: Column<*, ColumnType2, TableUserExtension>, toTable: Table, toColumn1: Column<*, ColumnType1, TargetTableUserWrapper>, toColumn2: Column<*, ColumnType2, TargetTableUserWrapper>, onUpdate: ForeignKey.OnUpdateAction, onDelete: ForeignKey.OnDeleteAction - ): ForeignKey + ): ForeignKey public fun , ColumnType2 : ColumnType<*>, ColumnType3 : ColumnType<*>> foreignKey( - fromColumn1: Column<*, ColumnType1, TableUserWrapper>, - fromColumn2: Column<*, ColumnType2, TableUserWrapper>, - fromColumn3: Column<*, ColumnType3, TableUserWrapper>, + fromColumn1: Column<*, ColumnType1, TableUserExtension>, + fromColumn2: Column<*, ColumnType2, TableUserExtension>, + fromColumn3: Column<*, ColumnType3, TableUserExtension>, toTable: Table, toColumn1: Column<*, ColumnType1, TargetTableUserWrapper>, toColumn2: Column<*, ColumnType2, TargetTableUserWrapper>, toColumn3: Column<*, ColumnType3, TargetTableUserWrapper>, onUpdate: ForeignKey.OnUpdateAction, onDelete: ForeignKey.OnDeleteAction - ): ForeignKey + ): ForeignKey } \ 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 4db363b..641a453 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 @@ -3,28 +3,28 @@ package ru.landgrafhomyak.serdha.api.v0.ddl import ru.landgrafhomyak.serdha.api.v0.Expression -public interface TableUpdater : TableCreator { - 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 deleteColumn(c: Column<*, *, TableOldUserWrapper>) +public interface TableUpdater : TableCreator { + 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 deleteColumn(c: Column<*, *, TableOldUserExtension>) - public fun keepIndex(i: Index): Index - public fun renameIndex(i: Index, newName: String): Index - public fun deleteIndex(i: Index) + public fun keepIndex(i: Index): Index + public fun renameIndex(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 deleteCheck(i: CheckConstraint) + public fun keepCheck(i: CheckConstraint): CheckConstraint + public fun renameCheck(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 keepUnique(i: UniqueConstraint): UniqueConstraint + public fun renameUnique(i: UniqueConstraint, newName: String): UniqueConstraint + public fun deleteUnique(i: UniqueConstraint) - 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 deleteForeignKey(i: ForeignKey) + 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 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/UniqueConstraint.kt index 25b144c..886d791 100644 --- a/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/ddl/UniqueConstraint.kt +++ b/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/ddl/UniqueConstraint.kt @@ -1,7 +1,7 @@ package ru.landgrafhomyak.serdha.api.v0.ddl -public interface UniqueConstraint { +public interface UniqueConstraint { public val name: String - public val table: Table - public val columns: List> + public val table: Table + public val columns: List> } \ No newline at end of file diff --git a/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/dml/Delete.kt b/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/dml/Delete.kt index 0c76949..fad98c8 100644 --- a/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/dml/Delete.kt +++ b/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/dml/Delete.kt @@ -1,5 +1,5 @@ package ru.landgrafhomyak.serdha.api.v0.dml -public interface Delete { - public val userWrapper: QueryUserWrapper +public interface Delete { + public val userExtension: QueryUserExtension } \ No newline at end of file diff --git a/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/dml/DeleteCreator.kt b/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/dml/DeleteCreator.kt index d88b943..684309b 100644 --- a/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/dml/DeleteCreator.kt +++ b/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/dml/DeleteCreator.kt @@ -1,16 +1,14 @@ 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.Table -public interface DeleteCreator { - public fun > selectColumn(column: Column): SelectedColumn +public interface DeleteCreator : _CommonQueryMethods { + public val targetTable: SelectedTable - public fun > param(name: String, type: DatabaseType): InputParam + public fun where(expression: Expression) - public fun where(expression: Expression) + public fun limit(size: UInt) - public fun > returning(e: Expression): Column + public val returning: _CommonQueryMethods._Returning } \ No newline at end of file diff --git a/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/dml/InputParam.kt b/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/dml/InputParam.kt index f1480ab..b65f28d 100644 --- a/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/dml/InputParam.kt +++ b/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/dml/InputParam.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.ColumnType -public interface InputParam, OwnerQueryUserWrapper : Any> : Expression { +public interface InputParam, OwnerQueryUserExtension : Any> : Expression { public val name: String - public val userWrapper: OwnerQueryUserWrapper + public val userWrapper: OwnerQueryUserExtension } \ No newline at end of file diff --git a/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/dml/Insert.kt b/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/dml/Insert.kt index 60adf2f..e3019af 100644 --- a/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/dml/Insert.kt +++ b/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/dml/Insert.kt @@ -1,5 +1,5 @@ package ru.landgrafhomyak.serdha.api.v0.dml -public interface Insert { - public val userWrapper: UserWrapper +public interface Insert { + public val userExtension: UserExtension } \ No newline at end of file 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 98248fb..1bda744 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 @@ -5,16 +5,22 @@ import ru.landgrafhomyak.serdha.api.v0.ddl.Column import ru.landgrafhomyak.serdha.api.v0.ddl.ColumnType import ru.landgrafhomyak.serdha.api.v0.ddl.UniqueConstraint -public interface InsertCreator { - public fun > insertTo(c: Column): InputParam +public interface InsertCreator : _CommonQueryMethods { + public val insertedValues: SelectedTable - public fun > selectColumn(c: Column): SelectedColumn + public fun > insert(column: Column, expression: Expression) - public fun > returning(e: Expression): Column + public fun > oldColumnValue(c: Column): Expression - public interface UpsertCreator : UpdateCreator { - public fun > overwrittenColumn(c: Column): SelectedColumn + public interface UpsertCreator { + public fun > updateColumn(c: Column, e: Expression) } - public fun onConflict(u: UniqueConstraint, c: UpsertCreator.() -> Unit) + public fun onConflictUpdate(u: UniqueConstraint, c: UpsertCreator.() -> Unit) + + public fun onConflictThrow(u: UniqueConstraint) + + public fun onConflictIgnore(u: UniqueConstraint) + + public val returning: _CommonQueryMethods._Returning } \ No newline at end of file diff --git a/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/dml/Select.kt b/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/dml/Select.kt index e2e2c6f..137ed52 100644 --- a/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/dml/Select.kt +++ b/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/dml/Select.kt @@ -1,5 +1,9 @@ package ru.landgrafhomyak.serdha.api.v0.dml -public interface Select { - public val userWrapper: QueryUserWrapper +public interface Select { + public val userExtension: QueryUserExtension + + public enum class Order { + ASC, DESC + } } \ No newline at end of file diff --git a/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/dml/SelectCreator.kt b/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/dml/SelectCreator.kt index 48c3562..8012a0a 100644 --- a/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/dml/SelectCreator.kt +++ b/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/dml/SelectCreator.kt @@ -5,20 +5,11 @@ import ru.landgrafhomyak.serdha.api.v0.ddl.Column import ru.landgrafhomyak.serdha.api.v0.ddl.ColumnType import ru.landgrafhomyak.serdha.api.v0.ddl.Table -public interface SelectCreator { - public fun selectTable(t: Table): SelectedTable - public fun selectQuery(t: Select): SelectedTable +public interface SelectCreator : _CommonQueryMethods, _CommonQueryMethods._Returning{ + public fun where(expression: Expression) - public fun where(expression: Expression) + public fun limit(size: UInt) - // default false - public var isDistinct: Boolean - - public fun > returnExpression(expression: Expression): Column - - public fun orderBy(vararg columns: Column<*, *, QueryUserWrapper>) - - public fun groupBy(vararg columns: Column<*, *, QueryUserWrapper>) - - public fun > param(name: String, type: DatabaseType): InputParam + @Suppress("SpellCheckingInspection") + public fun offsetedLimit(offset: ULong, size: UInt) } \ No newline at end of file diff --git a/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/dml/SelectedColumn.kt b/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/dml/SelectedColumn.kt deleted file mode 100644 index 95ee139..0000000 --- a/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/dml/SelectedColumn.kt +++ /dev/null @@ -1,8 +0,0 @@ -package ru.landgrafhomyak.serdha.api.v0.dml - -import ru.landgrafhomyak.serdha.api.v0.Expression -import ru.landgrafhomyak.serdha.api.v0.ddl.ColumnType - -public interface SelectedColumn, OwnerTableUserWrapper : Any, QueryUserWrapper : Any> : Expression { - -} \ No newline at end of file diff --git a/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/dml/SelectedTable.kt b/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/dml/SelectedTable.kt index 564f04d..a3706a2 100644 --- a/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/dml/SelectedTable.kt +++ b/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/dml/SelectedTable.kt @@ -1,8 +1,9 @@ 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 -public interface SelectedTable { - public fun > selectColumn(column: Column): SelectedColumn +public interface SelectedTable { + public fun > selectColumn(column: Column): Expression } \ No newline at end of file diff --git a/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/dml/Update.kt b/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/dml/Update.kt index fb8ccd6..5aa6d20 100644 --- a/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/dml/Update.kt +++ b/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/dml/Update.kt @@ -1,4 +1,5 @@ package ru.landgrafhomyak.serdha.api.v0.dml -public interface Update { +public interface Update { + public val userExtension: QueryUserExtension } \ No newline at end of file diff --git a/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/dml/UpdateCreator.kt b/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/dml/UpdateCreator.kt index 5336635..f34d362 100644 --- a/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/dml/UpdateCreator.kt +++ b/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/dml/UpdateCreator.kt @@ -5,13 +5,19 @@ import ru.landgrafhomyak.serdha.api.v0.ddl.Column import ru.landgrafhomyak.serdha.api.v0.ddl.ColumnType import ru.landgrafhomyak.serdha.api.v0.ddl.Table -public interface UpdateCreator { - public fun selectTable(t: Table): SelectedTable - public fun selectQuery(t: Select): SelectedTable +public interface UpdateCreator : _CommonQueryMethods { + public val targetTable: SelectedTable - public fun > updateColumn(c: Column, e: Expression) + public fun > selectOldColumnValue(c: Column): Expression - public fun > param(name: String, type: DatabaseType): InputParam + public fun > updateColumn(c: Column, e: Expression) - public fun where(expression: Expression) + public fun where(expression: Expression) + + public fun limit(size: UInt) + + @Suppress("SpellCheckingInspection") + public fun offsetedLimit(offset: ULong, size: UInt) + + public val returning: _CommonQueryMethods._Returning } \ No newline at end of file diff --git a/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/dml/_CommonQueryMethods.kt b/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/dml/_CommonQueryMethods.kt new file mode 100644 index 0000000..71f42c1 --- /dev/null +++ b/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/dml/_CommonQueryMethods.kt @@ -0,0 +1,23 @@ +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.Table + +@Suppress("ClassName") +public interface _CommonQueryMethods { + public fun selectTable(t: Table): SelectedTable + public fun selectQuery(t: Select): SelectedTable + public fun > param(name: String, type: DatabaseType): InputParam + + public interface _Returning { + public fun > returnExpression(expression: Expression): Column + + public val isDistinct: Boolean + + public fun orderBy(order: Select.Order, vararg columns: Expression<*, *, QueryUserExtension>) + + public fun groupBy(vararg columns: Expression<*, *, QueryUserExtension>) + } +} \ No newline at end of file diff --git a/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/runtime/ParametersSetter.kt b/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/runtime/ParametersSetter.kt index c815f76..7f2ba6f 100644 --- a/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/runtime/ParametersSetter.kt +++ b/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/runtime/ParametersSetter.kt @@ -1,19 +1,18 @@ package ru.landgrafhomyak.serdha.api.v0.runtime -import ru.landgrafhomyak.serdha.api.v0.ddl.Column import ru.landgrafhomyak.serdha.api.v0.dml.InputParam -public interface ParametersSetter { - public operator fun set(c: InputParam, value: RuntimeType) +public interface ParametersSetter { + public operator fun set(c: InputParam, value: RuntimeType) - public operator fun set(c: InputParam, value: Byte): Unit = this.set(c, value) - public operator fun set(c: InputParam, value: UByte): Unit = this.set(c, value) - public operator fun set(c: InputParam, value: Short): Unit = this.set(c, value) - public operator fun set(c: InputParam, value: UShort): Unit = this.set(c, value) - public operator fun set(c: InputParam, value: Int): Unit = this.set(c, value) - public operator fun set(c: InputParam, value: UInt): Unit = this.set(c, value) - public operator fun set(c: InputParam, value: Long): Unit = this.set(c, value) - public operator fun set(c: InputParam, value: ULong): Unit = this.set(c, value) - public operator fun set(c: InputParam, value: Char): Unit = this.set(c, value) - public operator fun set(c: InputParam, value: Boolean): Unit = this.set(c, value) + public operator fun set(c: InputParam, value: Byte): Unit = this.set(c, value) + public operator fun set(c: InputParam, value: UByte): Unit = this.set(c, value) + public operator fun set(c: InputParam, value: Short): Unit = this.set(c, value) + public operator fun set(c: InputParam, value: UShort): Unit = this.set(c, value) + public operator fun set(c: InputParam, value: Int): Unit = this.set(c, value) + public operator fun set(c: InputParam, value: UInt): Unit = this.set(c, value) + public operator fun set(c: InputParam, value: Long): Unit = this.set(c, value) + public operator fun set(c: InputParam, value: ULong): Unit = this.set(c, value) + public operator fun set(c: InputParam, value: Char): Unit = this.set(c, value) + public operator fun set(c: InputParam, value: Boolean): Unit = this.set(c, value) } \ No newline at end of file diff --git a/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/runtime/Row.kt b/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/runtime/Row.kt index c6ac5fe..12cd1be 100644 --- a/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/runtime/Row.kt +++ b/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/runtime/Row.kt @@ -2,17 +2,17 @@ package ru.landgrafhomyak.serdha.api.v0.runtime import ru.landgrafhomyak.serdha.api.v0.ddl.Column -public interface Row { - public operator fun get(c: Column): RuntimeType +public interface Row { + public operator fun get(c: Column): RuntimeType - public operator fun get(c: Column): Byte = this.get(c) - public operator fun get(c: Column): UByte = this.get(c) - public operator fun get(c: Column): Short = this.get(c) - public operator fun get(c: Column): UShort = this.get(c) - public operator fun get(c: Column): Int = this.get(c) - public operator fun get(c: Column): UInt = this.get(c) - public operator fun get(c: Column): Long = this.get(c) - public operator fun get(c: Column): ULong = this.get(c) - public operator fun get(c: Column): Char = this.get(c) - public operator fun get(c: Column): Boolean = this.get(c) + public operator fun get(c: Column): Byte = this.get(c) + public operator fun get(c: Column): UByte = this.get(c) + public operator fun get(c: Column): Short = this.get(c) + public operator fun get(c: Column): UShort = this.get(c) + public operator fun get(c: Column): Int = this.get(c) + public operator fun get(c: Column): UInt = this.get(c) + public operator fun get(c: Column): Long = this.get(c) + public operator fun get(c: Column): ULong = this.get(c) + public operator fun get(c: Column): Char = this.get(c) + public operator fun get(c: Column): Boolean = this.get(c) } \ No newline at end of file diff --git a/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/runtime/SynchronizedDatabase.kt b/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/runtime/SynchronizedDatabase.kt index f2da287..7d0a7e4 100644 --- a/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/runtime/SynchronizedDatabase.kt +++ b/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/runtime/SynchronizedDatabase.kt @@ -7,7 +7,7 @@ import ru.landgrafhomyak.serdha.api.v0.dml.Insert import ru.landgrafhomyak.serdha.api.v0.dml.Select import ru.landgrafhomyak.serdha.api.v0.dml.Update -public interface SynchronizedDatabase : Module { +public interface SynchronizedDatabase : Module { @Suppress("FunctionName") @LowLevelApi public suspend fun _startTransaction(): Transaction diff --git a/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/runtime/UnsynchronizedDatabase.kt b/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/runtime/UnsynchronizedDatabase.kt index ac86127..07d26a9 100644 --- a/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/runtime/UnsynchronizedDatabase.kt +++ b/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/runtime/UnsynchronizedDatabase.kt @@ -6,7 +6,7 @@ import ru.landgrafhomyak.serdha.api.v0.ddl.Namespace @Suppress("SpellCheckingInspection") public interface UnsynchronizedDatabase { - public fun createModule(initialVersionKey: String, content: (rootNs: Namespace, updater: ModuleModifyingRound) -> W): ModuleTemplate + public fun createModule(initialVersionKey: String, content: (rootNs: Namespace, updater: ModuleModifyingRound) -> ModuleUserExtension): ModuleTemplate - public suspend fun synchronize(conent: ModuleTemplate): SynchronizedDatabase + public suspend fun synchronize(conent: ModuleTemplate): SynchronizedDatabase } \ No newline at end of file diff --git a/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/runtime/_ParametersSetter.kt b/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/runtime/_ParametersSetter.kt index 2b4e204..3b8fa6a 100644 --- a/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/runtime/_ParametersSetter.kt +++ b/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/runtime/_ParametersSetter.kt @@ -4,7 +4,7 @@ import ru.landgrafhomyak.serdha.api.v0.LowLevelApi @Suppress("ClassName", "FunctionName") @LowLevelApi -public interface _ParametersSetter : ParametersSetter { +public interface _ParametersSetter : ParametersSetter { @LowLevelApi public suspend fun _execute(): Result diff --git a/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/runtime/_ResultSet.kt b/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/runtime/_ResultSet.kt index 7328dd3..f5ae163 100644 --- a/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/runtime/_ResultSet.kt +++ b/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/runtime/_ResultSet.kt @@ -4,7 +4,7 @@ import ru.landgrafhomyak.serdha.api.v0.LowLevelApi @Suppress("ClassName") @LowLevelApi -public interface _ResultSet : Row { +public interface _ResultSet : Row { @Suppress("FunctionName") @LowLevelApi public suspend fun _next(): Boolean