diff --git a/src/commonMain/kotlin/ru/landgrafhomyak/db/skeleton1/api/LifeTime.kt b/src/commonMain/kotlin/ru/landgrafhomyak/db/skeleton1/api/LifeTime.kt new file mode 100644 index 0000000..587c4ad --- /dev/null +++ b/src/commonMain/kotlin/ru/landgrafhomyak/db/skeleton1/api/LifeTime.kt @@ -0,0 +1,21 @@ +package ru.landgrafhomyak.db.skeleton1.api + +public enum class LifeTime { + REGULAR { + override fun isAlwaysAvailableAt(parent: LifeTime): Boolean = true + }, + + TRANSACTION_SCOPE { + override fun isAlwaysAvailableAt(scope: LifeTime): Boolean = scope === this + }, + + CONNECTION_SCOPE { + override fun isAlwaysAvailableAt(scope: LifeTime): Boolean = scope === LifeTime.TRANSACTION_SCOPE || scope === this + }, + + MODULE_UPGRADE_SCOPE { + override fun isAlwaysAvailableAt(scope: LifeTime): Boolean = scope === this + }; + + public abstract fun isAlwaysAvailableAt(scope: LifeTime): Boolean +} \ No newline at end of file diff --git a/src/commonMain/kotlin/ru/landgrafhomyak/db/skeleton1/api/module/Module.kt b/src/commonMain/kotlin/ru/landgrafhomyak/db/skeleton1/api/module/Module.kt index 20521ad..f0bfce3 100644 --- a/src/commonMain/kotlin/ru/landgrafhomyak/db/skeleton1/api/module/Module.kt +++ b/src/commonMain/kotlin/ru/landgrafhomyak/db/skeleton1/api/module/Module.kt @@ -1,6 +1,7 @@ package ru.landgrafhomyak.db.skeleton1.api.module import kotlin.jvm.JvmName +import ru.landgrafhomyak.db.skeleton1.api.LifeTime import ru.landgrafhomyak.db.skeleton1.api.ReflectionApi import ru.landgrafhomyak.db.skeleton1.api.LowLevelApi import ru.landgrafhomyak.db.skeleton1.api.statement.QueriesCompiler @@ -29,19 +30,16 @@ public interface Module { public val pathFromParentModuleRoot: List? @ReflectionApi - @Suppress("INAPPLICABLE_JVM_NAME") - @get:JvmName("getMemberTables") - public val memberTables: Collection> + public val lifeTime: LifeTime @ReflectionApi - @Suppress("INAPPLICABLE_JVM_NAME") - @get:JvmName("getMemberObjects") - public val memberObjects: Collection> + public fun memberTables(lifeTime: LifeTime): Collection> @ReflectionApi - @Suppress("INAPPLICABLE_JVM_NAME") - @get:JvmName("getMemberSubmodules") - public val memberSubmodules: Collection> + public fun memberObjects(lifeTime: LifeTime): Collection> + + @ReflectionApi + public fun memberSubmodules(lifeTime: LifeTime): Collection> public val unwrappedModule: Module diff --git a/src/commonMain/kotlin/ru/landgrafhomyak/db/skeleton1/api/module/ModuleConstructorScope.kt b/src/commonMain/kotlin/ru/landgrafhomyak/db/skeleton1/api/module/ModuleConstructorScope.kt index aa10830..c7c214e 100644 --- a/src/commonMain/kotlin/ru/landgrafhomyak/db/skeleton1/api/module/ModuleConstructorScope.kt +++ b/src/commonMain/kotlin/ru/landgrafhomyak/db/skeleton1/api/module/ModuleConstructorScope.kt @@ -1,6 +1,7 @@ package ru.landgrafhomyak.db.skeleton1.api.module import kotlin.jvm.JvmName +import ru.landgrafhomyak.db.skeleton1.api.LifeTime import ru.landgrafhomyak.db.skeleton1.api.LowLevelApi import ru.landgrafhomyak.db.skeleton1.api.ObjectClass import ru.landgrafhomyak.db.skeleton1.api.statement.RawStatement @@ -15,12 +16,13 @@ public interface ModuleConstructorScope { public val rootNameNode: NameNode public fun table_create( - lifeTime: Table.LifeTime = Table.LifeTime.DATABASE_SCOPE, + lifeTime: LifeTime = LifeTime.REGULAR, location: NameNode, initializer: Table.Constructor ): Table public fun object_create( + lifeTime: LifeTime = LifeTime.REGULAR, location: NameNode, metadata: ObjectClass.ImplementationsProvider ): ModuleScopedObject diff --git a/src/commonMain/kotlin/ru/landgrafhomyak/db/skeleton1/api/module/ModuleScopedObject.kt b/src/commonMain/kotlin/ru/landgrafhomyak/db/skeleton1/api/module/ModuleScopedObject.kt index fdfadf5..5649d24 100644 --- a/src/commonMain/kotlin/ru/landgrafhomyak/db/skeleton1/api/module/ModuleScopedObject.kt +++ b/src/commonMain/kotlin/ru/landgrafhomyak/db/skeleton1/api/module/ModuleScopedObject.kt @@ -1,6 +1,7 @@ package ru.landgrafhomyak.db.skeleton1.api.module import kotlin.jvm.JvmName +import ru.landgrafhomyak.db.skeleton1.api.LifeTime import ru.landgrafhomyak.db.skeleton1.api.ReflectionApi import ru.landgrafhomyak.db.skeleton1.api.ObjectClass @@ -15,4 +16,7 @@ public interface ModuleScopedObject { public val objectClassProvider: ObjectClass.ImplementationsProvider public val unwrappedModuleScopedObject: ModuleScopedObject + + @ReflectionApi + public val lifeTime: LifeTime } \ No newline at end of file diff --git a/src/commonMain/kotlin/ru/landgrafhomyak/db/skeleton1/api/table/Column.kt b/src/commonMain/kotlin/ru/landgrafhomyak/db/skeleton1/api/table/Column.kt index e73adfb..b18233a 100644 --- a/src/commonMain/kotlin/ru/landgrafhomyak/db/skeleton1/api/table/Column.kt +++ b/src/commonMain/kotlin/ru/landgrafhomyak/db/skeleton1/api/table/Column.kt @@ -3,6 +3,7 @@ package ru.landgrafhomyak.db.skeleton1.api.table import kotlin.jvm.JvmName import ru.landgrafhomyak.db.skeleton1.api.ReflectionApi import ru.landgrafhomyak.db.skeleton1.api.DatabaseType +import ru.landgrafhomyak.db.skeleton1.api.LifeTime public interface Column { @ReflectionApi @@ -20,9 +21,7 @@ public interface Column { public val table: Table @ReflectionApi - @Suppress("INAPPLICABLE_JVM_NAME") - @get:JvmName("willBeDeletedAfterUpgrade") - public val willBeDeletedAfterUpgrade: Boolean + public val lifeTime: LifeTime public val unwrappedColumn: Column } \ No newline at end of file diff --git a/src/commonMain/kotlin/ru/landgrafhomyak/db/skeleton1/api/table/Table.kt b/src/commonMain/kotlin/ru/landgrafhomyak/db/skeleton1/api/table/Table.kt index da76aaa..966a156 100644 --- a/src/commonMain/kotlin/ru/landgrafhomyak/db/skeleton1/api/table/Table.kt +++ b/src/commonMain/kotlin/ru/landgrafhomyak/db/skeleton1/api/table/Table.kt @@ -1,6 +1,7 @@ package ru.landgrafhomyak.db.skeleton1.api.table import kotlin.jvm.JvmName +import ru.landgrafhomyak.db.skeleton1.api.LifeTime import ru.landgrafhomyak.db.skeleton1.api.ReflectionApi import ru.landgrafhomyak.db.skeleton1.api.module.Module import ru.landgrafhomyak.db.skeleton1.api.module.ModuleScopedObject @@ -13,42 +14,19 @@ public interface Table { public val unwrappedTable: Table @ReflectionApi - public val pathFromParentModuleRoot: List? + public val pathFromParentModuleRoot: List @ReflectionApi public val parentModule: Module - public enum class LifeTime { - DATABASE_SCOPE, - TRANSACTION_SCOPE, - CONNECTION_SCOPE, - MODULE_UPGRADE_SCOPE - } - @ReflectionApi - @Suppress("INAPPLICABLE_JVM_NAME") - @get:JvmName("getLifeTime") public val lifeTime: LifeTime @ReflectionApi - @Suppress("INAPPLICABLE_JVM_NAME") - @get:JvmName("getMemberColumns") - public val memberColumns: Collection> + public fun memberColumns(scope: LifeTime): Collection> @ReflectionApi - @Suppress("INAPPLICABLE_JVM_NAME") - @get:JvmName("getMemberObjects") - public val memberObjects: Collection> - - @ReflectionApi - @Suppress("INAPPLICABLE_JVM_NAME") - @get:JvmName("getMemberColumnsWhileUpgrade") - public val memberColumnsWhileUpgrade: Collection> - - @ReflectionApi - @Suppress("INAPPLICABLE_JVM_NAME") - @get:JvmName("getMemberObjectsWhileUpgrade") - public val memberObjectsWhileUpgrade: Collection> + public fun memberObjects(scope: LifeTime): Collection> public interface Constructor { public fun createTable(context: TableConstructorScope): tUE diff --git a/src/commonMain/kotlin/ru/landgrafhomyak/db/skeleton1/api/table/TableScopedObject.kt b/src/commonMain/kotlin/ru/landgrafhomyak/db/skeleton1/api/table/TableScopedObject.kt index 2c18b26..2ba91d4 100644 --- a/src/commonMain/kotlin/ru/landgrafhomyak/db/skeleton1/api/table/TableScopedObject.kt +++ b/src/commonMain/kotlin/ru/landgrafhomyak/db/skeleton1/api/table/TableScopedObject.kt @@ -1,6 +1,7 @@ package ru.landgrafhomyak.db.skeleton1.api.table import kotlin.jvm.JvmName +import ru.landgrafhomyak.db.skeleton1.api.LifeTime import ru.landgrafhomyak.db.skeleton1.api.ReflectionApi import ru.landgrafhomyak.db.skeleton1.api.ObjectClass @@ -14,11 +15,8 @@ public interface TableScopedObject { @ReflectionApi public val objectClassProvider: ObjectClass.ImplementationsProvider - @ReflectionApi - @Suppress("INAPPLICABLE_JVM_NAME") - @get:JvmName("willBeDeletedAfterUpgrade") - public val willBeDeletedAfterUpgrade: Boolean + public val lifeTime: LifeTime public val unwrappedTableScopedObject: TableScopedObject } \ No newline at end of file