From b0f41097d2be6cf7c66549b7238c242f6c783e50 Mon Sep 17 00:00:00 2001 From: Andrew Golovashevich Date: Thu, 28 Nov 2024 21:33:00 +0300 Subject: [PATCH] [history/serdha] DELETE, fixes, auto-transactions --- .../serdha/api/v0/ddl/Module.kt | 4 ++ .../serdha/api/v0/ddl/ModuleModifyingRound.kt | 48 ++++++++++++++----- .../serdha/api/v0/ddl/TableCreator.kt | 6 +++ 3 files changed, 47 insertions(+), 11 deletions(-) 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 07164c6..969c1ab 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 @@ -1,7 +1,11 @@ package ru.landgrafhomyak.serdha.api.v0.ddl +import ru.landgrafhomyak.serdha.api.v0.runtime.SynchronizedDatabase + public interface Module { public val wrapper: W public val versionKey: String + + public val ownerDatabase: SynchronizedDatabase<*> } \ No newline at end of file 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 4d4bccb..fd49760 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 @@ -1,5 +1,7 @@ package ru.landgrafhomyak.serdha.api.v0.ddl +import ru.landgrafhomyak.serdha.api.v0.dml.Delete +import ru.landgrafhomyak.serdha.api.v0.dml.DeleteCreator import ru.landgrafhomyak.serdha.api.v0.dml.Insert import ru.landgrafhomyak.serdha.api.v0.dml.InsertCreator import ru.landgrafhomyak.serdha.api.v0.dml.Select @@ -8,15 +10,19 @@ import ru.landgrafhomyak.serdha.api.v0.dml.Update import ru.landgrafhomyak.serdha.api.v0.dml.UpdateCreator public interface ModuleModifyingRound { - public fun createTable( - namespace: Namespace, - name: String, - initializer: (TableCreator) -> TableUserWrapper - ): Table + public fun interface CreateTable { + public fun createTable(creator: TableCreator): TableUserWrapper + } + + public fun createTable(namespace: Namespace, name: String, initializer: CreateTable): Table + + public fun interface UpdateTable { + public fun updateTable(oldTable: Table, updater: TableUpdater): TableNewUserWrapper + } public fun updateTable( oldTable: Table, - initializer: (TableUpdater) -> TableNewUserWrapper + initializer: UpdateTable ): Table public fun renameTable( @@ -33,19 +39,39 @@ public interface ModuleModifyingRound { public fun updateAndRenameTable( table: Table, newName: String, - initializer: (TableUpdater) -> TableNewUserWrapper + initializer: UpdateTable ): Table public fun updateAndRenameTable( table: Table, newNamespace: Namespace, newName: String, - initializer: (TableUpdater) -> TableNewUserWrapper + initializer: UpdateTable ): Table - public fun createSelect(initializer: (SelectCreator) -> QueryUserWrapper): Select - public fun createInsert(table: Table, initializer: (InsertCreator) -> QueryUserWrapper): Insert - public fun createUpdate(table: Table, initializer: (UpdateCreator) -> QueryUserWrapper): Update + public fun interface CreateSelect { + public fun createSelect(creator: SelectCreator): QueryUserWrapper + } + + public fun createSelect(initializer: CreateSelect): Select + + public fun interface CreateInsert { + public fun createInsert(table: Table, creator: InsertCreator): QueryUserWrapper + } + + public fun createInsert(table: Table, initializer: CreateInsert): Insert + + public fun interface CreateUpdate { + public fun createUpdate(table: Table, creator: UpdateCreator): QueryUserWrapper + } + + public fun createUpdate(table: Table, initializer: CreateUpdate): Update + + public fun interface CreateDelete { + public fun createDelete(table: Table, creator: DeleteCreator): QueryUserWrapper + } + + 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 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 55a282e..6183c48 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 @@ -25,9 +25,15 @@ public interface TableCreator { public fun > nullableColumn(name: String, type: DatabaseType): Column public fun index(name: String, vararg columns: Column<*, *, TableUserWrapper>): 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 rowIdColumn(): Column, ColumnType>, TableUserWrapper> + + public fun rowIdUniqueConstraint(): UniqueConstraint + public fun > foreignKey( fromColumn: Column<*, ColumnType1, TableUserWrapper>, toTable: Table,