Now different module versions can be merged, compiler must check the equivalence of merged modules
This commit is contained in:
parent
5e4e2bdf4a
commit
bb25b2be72
@ -32,7 +32,7 @@ xomrk {
|
|||||||
warningsAsErrors()
|
warningsAsErrors()
|
||||||
optInContracts()
|
optInContracts()
|
||||||
setCompatibilityWithKotlin(KotlinVersion.KOTLIN_1_7)
|
setCompatibilityWithKotlin(KotlinVersion.KOTLIN_1_7)
|
||||||
configureAllCompilersOptions { freeCompilerArgs.add("-Xjvm-default=all-compatibility") }
|
configureAllCompilersOptions { freeCompilerArgs.add("-Xjvm-default=all") }
|
||||||
|
|
||||||
jvmToolchain(8)
|
jvmToolchain(8)
|
||||||
defineAllMultiplatformTargets()
|
defineAllMultiplatformTargets()
|
||||||
|
@ -10,7 +10,7 @@ import ru.landgrafhomyak.db.serdha0.api.table.TableConstructor
|
|||||||
* Scope methods for creating new [module template][ModuleTemplate].
|
* Scope methods for creating new [module template][ModuleTemplate].
|
||||||
*
|
*
|
||||||
* @see ModuleTemplate.CreateModuleTemplatesScope.createTemplate
|
* @see ModuleTemplate.CreateModuleTemplatesScope.createTemplate
|
||||||
* @see ModuleTemplate.ModuleCreator.createSchema
|
* @see ModuleTemplate.ModuleConstructor.createSchema
|
||||||
*/
|
*/
|
||||||
public interface CreateModuleScope {
|
public interface CreateModuleScope {
|
||||||
public val rootNs: Namespace
|
public val rootNs: Namespace
|
||||||
|
@ -2,33 +2,41 @@ package ru.landgrafhomyak.db.serdha0.api.module
|
|||||||
|
|
||||||
import ru.landgrafhomyak.db.serdha0.api.runtime.Transaction
|
import ru.landgrafhomyak.db.serdha0.api.runtime.Transaction
|
||||||
|
|
||||||
public interface ModuleTemplate<@Suppress("unused") ModuleUserExtension : Any> {
|
public interface ModuleTemplate<@Suppress("unused") mUE : Any> {
|
||||||
public interface Provider<UserExtension : Any> {
|
public interface VersionsInitializer<UE : Any> {
|
||||||
public fun createModuleTemplates(scope: CreateModuleTemplatesScope): UserExtension
|
public fun createModuleTemplates(context: Scope): UE
|
||||||
|
|
||||||
|
public interface Scope {
|
||||||
|
public fun <nmUE : Any> createTemplate(
|
||||||
|
versionKey: String,
|
||||||
|
constructor: ModuleConstructor<nmUE>,
|
||||||
|
): ModuleTemplate<nmUE>
|
||||||
|
|
||||||
|
public fun <omUE : Any, nmUE : Any> upgradeTemplate(
|
||||||
|
versionKey: String,
|
||||||
|
oldModule: ModuleTemplate<omUE>,
|
||||||
|
upgrade: ModuleUpgrade<omUE, nmUE>,
|
||||||
|
): ModuleTemplate<nmUE>
|
||||||
|
|
||||||
|
public fun <omUE : Any, nmUE : Any> upgradeTemplateAndMerge(
|
||||||
|
oldModule: ModuleTemplate<omUE>,
|
||||||
|
upgrade: ModuleUpgrade<omUE, nmUE>,
|
||||||
|
mergePoint: ModuleTemplate<nmUE>
|
||||||
|
): ModuleTemplate<nmUE>
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public interface CreateModuleTemplatesScope {
|
public interface ModuleConstructor<mUE : Any> {
|
||||||
public fun <NewModuleUserExtension : Any> createTemplate(
|
public fun createSchema(context: CreateModuleScope): mUE
|
||||||
versionKey: String,
|
|
||||||
creator: ModuleCreator<NewModuleUserExtension>,
|
|
||||||
): ModuleTemplate<NewModuleUserExtension>
|
|
||||||
|
|
||||||
public fun <OldModuleUserExtension : Any, NewModuleUserExtension : Any> upgradeTemplate(
|
public suspend fun initData(ext: mUE, transaction: Transaction) {}
|
||||||
versionKey: String,
|
|
||||||
upgrade: ModuleUpgrade<OldModuleUserExtension, NewModuleUserExtension>,
|
|
||||||
): ModuleTemplate<NewModuleUserExtension>
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public interface ModuleCreator<ModuleUserExtension : Any> {
|
public interface ModuleUpgrade<omUE : Any, nmUE : Any> {
|
||||||
public fun createSchema(context: CreateModuleScope): ModuleUserExtension
|
|
||||||
|
|
||||||
public suspend fun initData(ext: ModuleUserExtension, transaction: Transaction) {}
|
public fun upgradeSchema(context: UpgradeModuleScope<omUE>): nmUE
|
||||||
}
|
|
||||||
|
|
||||||
public interface ModuleUpgrade<OldModuleUserExtension : Any, NewModuleUserExtension : Any> {
|
public suspend fun upgradeData(ext: nmUE, transaction: Transaction) {}
|
||||||
public fun upgradeSchema(context: UpgradeModuleScope<OldModuleUserExtension>): NewModuleUserExtension
|
|
||||||
|
|
||||||
public suspend fun upgradeData(ext: NewModuleUserExtension, transaction: Transaction) {}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public val versionKey: String
|
public val versionKey: String
|
||||||
|
@ -4,7 +4,7 @@ import ru.landgrafhomyak.db.serdha0.api.module.ModuleTemplate
|
|||||||
|
|
||||||
@Suppress("SpellCheckingInspection")
|
@Suppress("SpellCheckingInspection")
|
||||||
public interface UnsynchronizedDatabase {
|
public interface UnsynchronizedDatabase {
|
||||||
public fun <UserExtension : Any> addModuleTemplates(creator: ModuleTemplate.Provider<UserExtension>): UserExtension
|
public fun <UserExtension : Any> addModuleTemplates(creator: ModuleTemplate.VersionsInitializer<UserExtension>): UserExtension
|
||||||
|
|
||||||
public suspend fun <ModuleUserExtension : Any> synchronize(conent: ModuleTemplate<ModuleUserExtension>): SynchronizedDatabase<ModuleUserExtension>
|
public suspend fun <ModuleUserExtension : Any> synchronize(conent: ModuleTemplate<ModuleUserExtension>): SynchronizedDatabase<ModuleUserExtension>
|
||||||
}
|
}
|
@ -27,6 +27,6 @@ public interface Index<OwnerTableUserExtension : Any> {
|
|||||||
* Columns that are indexed by this index. For debugging.
|
* Columns that are indexed by this index. For debugging.
|
||||||
*/
|
*/
|
||||||
@Suppress("INAPPLICABLE_JVM_NAME")
|
@Suppress("INAPPLICABLE_JVM_NAME")
|
||||||
@get:JvmName("table")
|
@get:JvmName("columns")
|
||||||
public val columns: List<Column<*, *, OwnerTableUserExtension>>
|
public val columns: List<Column<*, *, OwnerTableUserExtension>>
|
||||||
}
|
}
|
Loading…
Reference in New Issue
Block a user