From bb25b2be726a75fb6ee8bc792475ee64bcbae1c9 Mon Sep 17 00:00:00 2001 From: Andrew Golovashevich Date: Sun, 2 Feb 2025 03:02:25 +0300 Subject: [PATCH] Now different module versions can be merged, compiler must check the equivalence of merged modules --- build.gradle.kts | 2 +- .../serdha0/api/module/CreateModuleScope.kt | 2 +- .../db/serdha0/api/module/ModuleTemplate.kt | 48 +++++++++++-------- .../api/runtime/UnsynchronizedDatabase.kt | 2 +- .../db/serdha0/api/table/Index.kt | 2 +- 5 files changed, 32 insertions(+), 24 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index 205fec3..c0164d7 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -32,7 +32,7 @@ xomrk { warningsAsErrors() optInContracts() setCompatibilityWithKotlin(KotlinVersion.KOTLIN_1_7) - configureAllCompilersOptions { freeCompilerArgs.add("-Xjvm-default=all-compatibility") } + configureAllCompilersOptions { freeCompilerArgs.add("-Xjvm-default=all") } jvmToolchain(8) defineAllMultiplatformTargets() diff --git a/src/commonMain/kotlin/ru/landgrafhomyak/db/serdha0/api/module/CreateModuleScope.kt b/src/commonMain/kotlin/ru/landgrafhomyak/db/serdha0/api/module/CreateModuleScope.kt index 0421757..8ab7df6 100644 --- a/src/commonMain/kotlin/ru/landgrafhomyak/db/serdha0/api/module/CreateModuleScope.kt +++ b/src/commonMain/kotlin/ru/landgrafhomyak/db/serdha0/api/module/CreateModuleScope.kt @@ -10,7 +10,7 @@ import ru.landgrafhomyak.db.serdha0.api.table.TableConstructor * Scope methods for creating new [module template][ModuleTemplate]. * * @see ModuleTemplate.CreateModuleTemplatesScope.createTemplate - * @see ModuleTemplate.ModuleCreator.createSchema + * @see ModuleTemplate.ModuleConstructor.createSchema */ public interface CreateModuleScope { public val rootNs: Namespace diff --git a/src/commonMain/kotlin/ru/landgrafhomyak/db/serdha0/api/module/ModuleTemplate.kt b/src/commonMain/kotlin/ru/landgrafhomyak/db/serdha0/api/module/ModuleTemplate.kt index 7653c14..e20e950 100644 --- a/src/commonMain/kotlin/ru/landgrafhomyak/db/serdha0/api/module/ModuleTemplate.kt +++ b/src/commonMain/kotlin/ru/landgrafhomyak/db/serdha0/api/module/ModuleTemplate.kt @@ -2,33 +2,41 @@ package ru.landgrafhomyak.db.serdha0.api.module import ru.landgrafhomyak.db.serdha0.api.runtime.Transaction -public interface ModuleTemplate<@Suppress("unused") ModuleUserExtension : Any> { - public interface Provider { - public fun createModuleTemplates(scope: CreateModuleTemplatesScope): UserExtension +public interface ModuleTemplate<@Suppress("unused") mUE : Any> { + public interface VersionsInitializer { + public fun createModuleTemplates(context: Scope): UE + + public interface Scope { + public fun createTemplate( + versionKey: String, + constructor: ModuleConstructor, + ): ModuleTemplate + + public fun upgradeTemplate( + versionKey: String, + oldModule: ModuleTemplate, + upgrade: ModuleUpgrade, + ): ModuleTemplate + + public fun upgradeTemplateAndMerge( + oldModule: ModuleTemplate, + upgrade: ModuleUpgrade, + mergePoint: ModuleTemplate + ): ModuleTemplate + } } - public interface CreateModuleTemplatesScope { - public fun createTemplate( - versionKey: String, - creator: ModuleCreator, - ): ModuleTemplate + public interface ModuleConstructor { + public fun createSchema(context: CreateModuleScope): mUE - public fun upgradeTemplate( - versionKey: String, - upgrade: ModuleUpgrade, - ): ModuleTemplate + public suspend fun initData(ext: mUE, transaction: Transaction) {} } - public interface ModuleCreator { - public fun createSchema(context: CreateModuleScope): ModuleUserExtension + public interface ModuleUpgrade { - public suspend fun initData(ext: ModuleUserExtension, transaction: Transaction) {} - } + public fun upgradeSchema(context: UpgradeModuleScope): nmUE - public interface ModuleUpgrade { - public fun upgradeSchema(context: UpgradeModuleScope): NewModuleUserExtension - - public suspend fun upgradeData(ext: NewModuleUserExtension, transaction: Transaction) {} + public suspend fun upgradeData(ext: nmUE, transaction: Transaction) {} } public val versionKey: String diff --git a/src/commonMain/kotlin/ru/landgrafhomyak/db/serdha0/api/runtime/UnsynchronizedDatabase.kt b/src/commonMain/kotlin/ru/landgrafhomyak/db/serdha0/api/runtime/UnsynchronizedDatabase.kt index 4452325..fc45d35 100644 --- a/src/commonMain/kotlin/ru/landgrafhomyak/db/serdha0/api/runtime/UnsynchronizedDatabase.kt +++ b/src/commonMain/kotlin/ru/landgrafhomyak/db/serdha0/api/runtime/UnsynchronizedDatabase.kt @@ -4,7 +4,7 @@ import ru.landgrafhomyak.db.serdha0.api.module.ModuleTemplate @Suppress("SpellCheckingInspection") public interface UnsynchronizedDatabase { - public fun addModuleTemplates(creator: ModuleTemplate.Provider): UserExtension + public fun addModuleTemplates(creator: ModuleTemplate.VersionsInitializer): UserExtension public suspend fun synchronize(conent: ModuleTemplate): SynchronizedDatabase } \ No newline at end of file diff --git a/src/commonMain/kotlin/ru/landgrafhomyak/db/serdha0/api/table/Index.kt b/src/commonMain/kotlin/ru/landgrafhomyak/db/serdha0/api/table/Index.kt index 116878e..c12a878 100644 --- a/src/commonMain/kotlin/ru/landgrafhomyak/db/serdha0/api/table/Index.kt +++ b/src/commonMain/kotlin/ru/landgrafhomyak/db/serdha0/api/table/Index.kt @@ -27,6 +27,6 @@ public interface Index { * Columns that are indexed by this index. For debugging. */ @Suppress("INAPPLICABLE_JVM_NAME") - @get:JvmName("table") + @get:JvmName("columns") public val columns: List> } \ No newline at end of file