[history/serdha] Modules, namespaces and top-level interfaces
This commit is contained in:
parent
c4db335dac
commit
fe23959d9a
@ -0,0 +1,7 @@
|
||||
package ru.landgrafhomyak.serdha.api.v0.ddl
|
||||
|
||||
public interface Module<W : Any> {
|
||||
public val wrapper: W
|
||||
|
||||
public val versionKey: String
|
||||
}
|
@ -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>
|
||||
}
|
@ -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
|
||||
}
|
@ -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>
|
||||
}
|
Loading…
Reference in New Issue
Block a user