[history/serdha] DELETE, fixes, auto-transactions

This commit is contained in:
Andrew Golovashevich 2024-11-28 21:33:00 +03:00
parent fe23959d9a
commit b0f41097d2
3 changed files with 47 additions and 11 deletions

View File

@ -1,7 +1,11 @@
package ru.landgrafhomyak.serdha.api.v0.ddl
import ru.landgrafhomyak.serdha.api.v0.runtime.SynchronizedDatabase
public interface Module<W : Any> {
public val wrapper: W
public val versionKey: String
public val ownerDatabase: SynchronizedDatabase<*>
}

View File

@ -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 <TableUserWrapper : Any> createTable(
namespace: Namespace,
name: String,
initializer: (TableCreator<TableUserWrapper>) -> TableUserWrapper
): Table<TableUserWrapper, Nothing>
public fun interface CreateTable<TableUserWrapper : Any> {
public fun createTable(creator: TableCreator<TableUserWrapper>): TableUserWrapper
}
public fun <TableUserWrapper : Any> createTable(namespace: Namespace, name: String, initializer: CreateTable<TableUserWrapper>): Table<TableUserWrapper, Nothing>
public fun interface UpdateTable<TableNewUserWrapper : Any, TableOldUserWrapper : Any> {
public fun updateTable(oldTable: Table<TableOldUserWrapper, *>, updater: TableUpdater<TableNewUserWrapper, TableOldUserWrapper>): TableNewUserWrapper
}
public fun <TableNewUserWrapper : Any, TableOldUserWrapper : Any> updateTable(
oldTable: Table<TableOldUserWrapper, *>,
initializer: (TableUpdater<TableNewUserWrapper, TableOldUserWrapper>) -> TableNewUserWrapper
initializer: UpdateTable<TableNewUserWrapper, TableOldUserWrapper>
): Table<TableNewUserWrapper, TableOldUserWrapper>
public fun <TableNewUserWrapper : Any, TableOldUserWrapper : Any> renameTable(
@ -33,19 +39,39 @@ public interface ModuleModifyingRound {
public fun <TableNewUserWrapper : Any, TableOldUserWrapper : Any> updateAndRenameTable(
table: Table<TableOldUserWrapper, *>,
newName: String,
initializer: (TableUpdater<TableNewUserWrapper, TableOldUserWrapper>) -> TableNewUserWrapper
initializer: UpdateTable<TableNewUserWrapper, TableOldUserWrapper>
): Table<TableNewUserWrapper, TableOldUserWrapper>
public fun <TableNewUserWrapper : Any, TableOldUserWrapper : Any> updateAndRenameTable(
table: Table<TableNewUserWrapper, TableOldUserWrapper>,
newNamespace: Namespace,
newName: String,
initializer: (TableUpdater<TableNewUserWrapper, TableOldUserWrapper>) -> TableNewUserWrapper
initializer: UpdateTable<TableNewUserWrapper, TableOldUserWrapper>
): Table<TableNewUserWrapper, TableOldUserWrapper>
public fun <QueryUserWrapper : Any> createSelect(initializer: (SelectCreator<QueryUserWrapper>) -> QueryUserWrapper): Select<QueryUserWrapper>
public fun <TableUserWrapper : Any, QueryUserWrapper : Any> createInsert(table: Table<TableUserWrapper, *>, initializer: (InsertCreator<TableUserWrapper, QueryUserWrapper>) -> QueryUserWrapper): Insert<QueryUserWrapper>
public fun <TableUserWrapper : Any, QueryUserWrapper : Any> createUpdate(table: Table<TableUserWrapper, *>, initializer: (UpdateCreator<TableUserWrapper, QueryUserWrapper>) -> QueryUserWrapper): Update<QueryUserWrapper>
public fun interface CreateSelect<QueryUserWrapper : Any> {
public fun createSelect(creator: SelectCreator<QueryUserWrapper>): QueryUserWrapper
}
public fun <QueryUserWrapper : Any> createSelect(initializer: CreateSelect<QueryUserWrapper>): Select<QueryUserWrapper>
public fun interface CreateInsert<TableUserWrapper : Any, QueryUserWrapper : Any> {
public fun createInsert(table: Table<TableUserWrapper, *>, creator: InsertCreator<TableUserWrapper, QueryUserWrapper>): QueryUserWrapper
}
public fun <TableUserWrapper : Any, QueryUserWrapper : Any> createInsert(table: Table<TableUserWrapper, *>, initializer: CreateInsert<TableUserWrapper, QueryUserWrapper>): Insert<QueryUserWrapper>
public fun interface CreateUpdate<TableUserWrapper : Any, QueryUserWrapper : Any> {
public fun createUpdate(table: Table<TableUserWrapper, *>, creator: UpdateCreator<TableUserWrapper, QueryUserWrapper>): QueryUserWrapper
}
public fun <TableUserWrapper : Any, QueryUserWrapper : Any> createUpdate(table: Table<TableUserWrapper, *>, initializer: CreateUpdate<TableUserWrapper, QueryUserWrapper>): Update<QueryUserWrapper>
public fun interface CreateDelete<TableUserWrapper : Any, QueryUserWrapper : Any> {
public fun createDelete(table: Table<TableUserWrapper, *>, creator: DeleteCreator<TableUserWrapper, QueryUserWrapper>): QueryUserWrapper
}
public fun <TableUserWrapper : Any, QueryUserWrapper : Any> createDelete(table: Table<TableUserWrapper, *>, initializer: CreateDelete<TableUserWrapper, QueryUserWrapper>): Delete<QueryUserWrapper>
public fun <W : Any> substituteModule(rootNs: Namespace, template: ModuleTemplate<W>): Module<W>
public fun <W : Any> upgradeModule(oldModule: Module<*>, rootNs: Namespace, template: ModuleTemplate<W>): Module<W>

View File

@ -25,9 +25,15 @@ public interface TableCreator<TableUserWrapper : Any> {
public fun <RuntimeType, DatabaseType : ColumnType<RuntimeType & Any>> nullableColumn(name: String, type: DatabaseType): Column<RuntimeType?, DatabaseType, TableUserWrapper>
public fun index(name: String, vararg columns: Column<*, *, TableUserWrapper>): Index<TableUserWrapper>
// todo not-null column uniqueness
public fun unique(name: String, distinctNulls: Boolean, vararg columns: Column<*, *, TableUserWrapper>): UniqueConstraint<TableUserWrapper>
public fun check(name: String, constraint: Expression<Boolean, ColumnType.BOOLEAN, TableUserWrapper>): CheckConstraint<TableUserWrapper>
public fun rowIdColumn(): Column<RowId<TableUserWrapper>, ColumnType<RowId<TableUserWrapper>>, TableUserWrapper>
public fun rowIdUniqueConstraint(): UniqueConstraint<TableUserWrapper>
public fun <TargetTableUserWrapper : Any, ColumnType1 : ColumnType<*>> foreignKey(
fromColumn: Column<*, ColumnType1, TableUserWrapper>,
toTable: Table<TargetTableUserWrapper, *>,