From 78f6752598daae736c3a22e2b1cde0bc54ec5bca Mon Sep 17 00:00:00 2001 From: Andrew Golovashevich Date: Thu, 8 May 2025 17:42:39 +0300 Subject: [PATCH] Module templates refactoring --- .../api/module/CreateModuleScope.kt | 2 +- .../db/sql_skeleton_0/api/module/Module.kt | 37 ++++++++++++-- .../api/module/ModuleTemplate.kt | 51 ------------------- .../api/module/UpgradeModuleScope.kt | 4 +- 4 files changed, 35 insertions(+), 59 deletions(-) delete mode 100644 src/commonMain/kotlin/ru/landgrafhomyak/db/sql_skeleton_0/api/module/ModuleTemplate.kt diff --git a/src/commonMain/kotlin/ru/landgrafhomyak/db/sql_skeleton_0/api/module/CreateModuleScope.kt b/src/commonMain/kotlin/ru/landgrafhomyak/db/sql_skeleton_0/api/module/CreateModuleScope.kt index d695241..059b11f 100644 --- a/src/commonMain/kotlin/ru/landgrafhomyak/db/sql_skeleton_0/api/module/CreateModuleScope.kt +++ b/src/commonMain/kotlin/ru/landgrafhomyak/db/sql_skeleton_0/api/module/CreateModuleScope.kt @@ -22,7 +22,7 @@ public interface CreateModuleScope { public fun moduleScopedObject(namespace: Namespace = this.rootNs, name: String): ModuleScopedObject - public fun substituteModule(rootNs: Namespace, template: ModuleTemplate): Module + public fun substituteModule(rootNs: Namespace, template: Module.Template): Module public fun namespace(parent: Namespace, name: String): Namespace diff --git a/src/commonMain/kotlin/ru/landgrafhomyak/db/sql_skeleton_0/api/module/Module.kt b/src/commonMain/kotlin/ru/landgrafhomyak/db/sql_skeleton_0/api/module/Module.kt index 5707451..58eaad3 100644 --- a/src/commonMain/kotlin/ru/landgrafhomyak/db/sql_skeleton_0/api/module/Module.kt +++ b/src/commonMain/kotlin/ru/landgrafhomyak/db/sql_skeleton_0/api/module/Module.kt @@ -2,13 +2,12 @@ package ru.landgrafhomyak.db.sql_skeleton_0.api.module import kotlin.jvm.JvmName import ru.landgrafhomyak.db.sql_skeleton_0.api.DebugApi -import ru.landgrafhomyak.db.sql_skeleton_0.api.queries._Statement -import ru.landgrafhomyak.db.sql_skeleton_0.api.runtime.Executor -import ru.landgrafhomyak.db.sql_skeleton_0.api.table.Table -import ru.landgrafhomyak.db.sql_skeleton_0.api.table.TableConstructor +import ru.landgrafhomyak.db.sql_skeleton_0.api.LowLevelApi +import ru.landgrafhomyak.db.sql_skeleton_0.api.queries.QueriesCompiler +import ru.landgrafhomyak.db.sql_skeleton_0.api.runtime.Transaction -public interface Module { +public interface Module { @Suppress("INAPPLICABLE_JVM_NAME") @get:JvmName("uExt") public val uExt: mUE @@ -22,4 +21,32 @@ public interface Module { @Suppress("INAPPLICABLE_JVM_NAME") @get:JvmName("getParent") public val parent: Module<*, RUNTIME_KEY>? + + public interface Constructor { + @Suppress("INAPPLICABLE_JVM_NAME") + @get:JvmName("versionKey") + public val versionKey: String + + public fun createSchema(context: CreateModuleScope): mUE + + public suspend fun initData(ext: mUE, compiler: QueriesCompiler, transaction: Transaction) {} + } + + public interface Upgrade { + @Suppress("INAPPLICABLE_JVM_NAME") + @get:JvmName("versionKey") + public val versionKey: String + + public fun upgradeSchema(context: UpgradeModuleScope): nmUE + + public suspend fun upgradeData(ext: nmUE, compiler: QueriesCompiler, transaction: Transaction) {} + } + + public interface Template<@Suppress("unused") mUE : Any> { + @LowLevelApi + public fun getConstructor(): Constructor<*, RUNTIME_KEY> + + @LowLevelApi + public fun getUpgrade(version: String): Upgrade<*, *, RUNTIME_KEY>? + } } \ No newline at end of file diff --git a/src/commonMain/kotlin/ru/landgrafhomyak/db/sql_skeleton_0/api/module/ModuleTemplate.kt b/src/commonMain/kotlin/ru/landgrafhomyak/db/sql_skeleton_0/api/module/ModuleTemplate.kt deleted file mode 100644 index 86e5d88..0000000 --- a/src/commonMain/kotlin/ru/landgrafhomyak/db/sql_skeleton_0/api/module/ModuleTemplate.kt +++ /dev/null @@ -1,51 +0,0 @@ -package ru.landgrafhomyak.db.sql_skeleton_0.api.module - -import kotlin.jvm.JvmName -import ru.landgrafhomyak.db.sql_skeleton_0.api.runtime.Transaction - -public interface ModuleTemplate<@Suppress("unused") mUE : Any> { - public interface VersionsInitializer { - public fun createModuleTemplates(context: Scope): UE - - public interface Scope { - public fun createTemplate( - constructor: ModuleConstructor, - ): ModuleTemplate - - public fun upgradeTemplate( - oldModule: ModuleTemplate, - upgrade: ModuleUpgrade, - ): ModuleTemplate - - public fun upgradeTemplateAndMerge( - oldModule: ModuleTemplate, - upgrade: ModuleUpgrade, - mergeTo: ModuleTemplate - ): ModuleTemplate - } - } - - public interface ModuleConstructor { - @Suppress("INAPPLICABLE_JVM_NAME") - @get:JvmName("versionKey") - public val versionKey: String - - public fun createSchema(context: CreateModuleScope): mUE - - public suspend fun initData(ext: mUE, transaction: Transaction) {} - } - - public interface ModuleUpgrade { - @Suppress("INAPPLICABLE_JVM_NAME") - @get:JvmName("versionKey") - public val versionKey: String - - public fun upgradeSchema(context: UpgradeModuleScope): nmUE - - public suspend fun upgradeData(ext: nmUE, transaction: Transaction) {} - } - - @Suppress("INAPPLICABLE_JVM_NAME") - @get:JvmName("getVersionKey") - public val versionKey: String -} \ No newline at end of file diff --git a/src/commonMain/kotlin/ru/landgrafhomyak/db/sql_skeleton_0/api/module/UpgradeModuleScope.kt b/src/commonMain/kotlin/ru/landgrafhomyak/db/sql_skeleton_0/api/module/UpgradeModuleScope.kt index 7667f9c..c7c1f0b 100644 --- a/src/commonMain/kotlin/ru/landgrafhomyak/db/sql_skeleton_0/api/module/UpgradeModuleScope.kt +++ b/src/commonMain/kotlin/ru/landgrafhomyak/db/sql_skeleton_0/api/module/UpgradeModuleScope.kt @@ -56,8 +56,8 @@ public interface UpgradeModuleScope : public fun keepModule(module: Module): Module public fun keepAndMoveModule(oldModule: Module, newNs: Namespace): Module - public fun upgradeModule(oldModule: Module<*, RUNTIME_KEY>, template: ModuleTemplate): Module - public fun upgradeAndMoveModule(oldModule: Module<*, RUNTIME_KEY>, newNs: Namespace, template: ModuleTemplate): Module + public fun upgradeModule(oldModule: Module<*, RUNTIME_KEY>, template: Module.Template): Module + public fun upgradeAndMoveModule(oldModule: Module<*, RUNTIME_KEY>, newNs: Namespace, template: Module.Template): Module public fun removeModule(oldModule: Module<*, RUNTIME_KEY>) public fun removeModuleAfterUpgrade(oldModule: Module): Module