[history/serdha] Modules, namespaces and top-level interfaces

This commit is contained in:
Andrew Golovashevich 2024-11-24 19:40:00 +03:00
parent c4db335dac
commit fe23959d9a
4 changed files with 79 additions and 0 deletions

View File

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

View File

@ -0,0 +1,52 @@
package ru.landgrafhomyak.serdha.api.v0.ddl
import ru.landgrafhomyak.serdha.api.v0.dml.Insert
import ru.landgrafhomyak.serdha.api.v0.dml.InsertCreator
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
public interface ModuleModifyingRound {
public fun <TableUserWrapper : Any> createTable(
namespace: Namespace,
name: String,
initializer: (TableCreator<TableUserWrapper>) -> TableUserWrapper
): Table<TableUserWrapper, Nothing>
public fun <TableNewUserWrapper : Any, TableOldUserWrapper : Any> updateTable(
oldTable: Table<TableOldUserWrapper, *>,
initializer: (TableUpdater<TableNewUserWrapper, TableOldUserWrapper>) -> TableNewUserWrapper
): Table<TableNewUserWrapper, TableOldUserWrapper>
public fun <TableNewUserWrapper : Any, TableOldUserWrapper : Any> renameTable(
table: Table<TableNewUserWrapper, TableOldUserWrapper>,
newName: String
): Table<TableNewUserWrapper, TableOldUserWrapper>
public fun <TableNewUserWrapper : Any, TableOldUserWrapper : Any> renameTable(
table: Table<TableNewUserWrapper, TableOldUserWrapper>,
newNamespace: Namespace,
newName: String
): Table<TableNewUserWrapper, TableOldUserWrapper>
public fun <TableNewUserWrapper : Any, TableOldUserWrapper : Any> updateAndRenameTable(
table: Table<TableOldUserWrapper, *>,
newName: String,
initializer: (TableUpdater<TableNewUserWrapper, TableOldUserWrapper>) -> TableNewUserWrapper
): Table<TableNewUserWrapper, TableOldUserWrapper>
public fun <TableNewUserWrapper : Any, TableOldUserWrapper : Any> updateAndRenameTable(
table: Table<TableNewUserWrapper, TableOldUserWrapper>,
newNamespace: Namespace,
newName: String,
initializer: (TableUpdater<TableNewUserWrapper, TableOldUserWrapper>) -> TableNewUserWrapper
): 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 <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

@ -0,0 +1,10 @@
package ru.landgrafhomyak.serdha.api.v0.ddl
public interface ModuleTemplate<W : Any> {
public fun <NW : Any> modify(
newVersionKey: String,
updater: (oldModule: ModuleTemplate<W>, rootNs: Namespace, updater: ModuleModifyingRound) -> NW
): ModuleTemplate<NW>
public val versionKey: String
}

View File

@ -0,0 +1,10 @@
package ru.landgrafhomyak.serdha.api.v0.ddl
public interface Namespace {
@Suppress("SpellCheckingInspection")
public fun subnamespace(name: String): Namespace
public val name: String
public val path: List<String>
}