Rework of lifetime and applying it to members properties in modules' and tables' handles

This commit is contained in:
Andrew Golovashevich 2025-06-05 00:13:59 +03:00
parent e2a10512fb
commit be4945fe32
7 changed files with 43 additions and 43 deletions

View File

@ -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
}

View File

@ -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<mUE : Any> {
public val pathFromParentModuleRoot: List<String>?
@ReflectionApi
@Suppress("INAPPLICABLE_JVM_NAME")
@get:JvmName("getMemberTables")
public val memberTables: Collection<Table<*, mUE>>
public val lifeTime: LifeTime
@ReflectionApi
@Suppress("INAPPLICABLE_JVM_NAME")
@get:JvmName("getMemberObjects")
public val memberObjects: Collection<ModuleScopedObject<mUE>>
public fun memberTables(lifeTime: LifeTime): Collection<Table<*, mUE>>
@ReflectionApi
@Suppress("INAPPLICABLE_JVM_NAME")
@get:JvmName("getMemberSubmodules")
public val memberSubmodules: Collection<Module<*>>
public fun memberObjects(lifeTime: LifeTime): Collection<ModuleScopedObject<mUE>>
@ReflectionApi
public fun memberSubmodules(lifeTime: LifeTime): Collection<Table<*, mUE>>
public val unwrappedModule: Module<mUE>

View File

@ -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<mUE : Any> {
public val rootNameNode: NameNode<mUE>
public fun <tUE : Any> table_create(
lifeTime: Table.LifeTime = Table.LifeTime.DATABASE_SCOPE,
lifeTime: LifeTime = LifeTime.REGULAR,
location: NameNode<mUE>,
initializer: Table.Constructor<tUE>
): Table<tUE, mUE>
public fun object_create(
lifeTime: LifeTime = LifeTime.REGULAR,
location: NameNode<mUE>,
metadata: ObjectClass.ImplementationsProvider
): ModuleScopedObject<mUE>

View File

@ -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<mUE : Any> {
public val objectClassProvider: ObjectClass.ImplementationsProvider
public val unwrappedModuleScopedObject: ModuleScopedObject<mUE>
@ReflectionApi
public val lifeTime: LifeTime
}

View File

@ -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<RT, tUE : Any> {
@ReflectionApi
@ -20,9 +21,7 @@ public interface Column<RT, tUE : Any> {
public val table: Table<tUE, *>
@ReflectionApi
@Suppress("INAPPLICABLE_JVM_NAME")
@get:JvmName("willBeDeletedAfterUpgrade")
public val willBeDeletedAfterUpgrade: Boolean
public val lifeTime: LifeTime
public val unwrappedColumn: Column<RT, tUE>
}

View File

@ -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<UE : Any, mUE : Any> {
public val unwrappedTable: Table<UE, mUE>
@ReflectionApi
public val pathFromParentModuleRoot: List<String>?
public val pathFromParentModuleRoot: List<String>
@ReflectionApi
public val parentModule: Module<mUE>
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<Column<*, UE>>
public fun memberColumns(scope: LifeTime): Collection<Column<*, UE>>
@ReflectionApi
@Suppress("INAPPLICABLE_JVM_NAME")
@get:JvmName("getMemberObjects")
public val memberObjects: Collection<TableScopedObject<UE>>
@ReflectionApi
@Suppress("INAPPLICABLE_JVM_NAME")
@get:JvmName("getMemberColumnsWhileUpgrade")
public val memberColumnsWhileUpgrade: Collection<Column<*, UE>>
@ReflectionApi
@Suppress("INAPPLICABLE_JVM_NAME")
@get:JvmName("getMemberObjectsWhileUpgrade")
public val memberObjectsWhileUpgrade: Collection<TableScopedObject<UE>>
public fun memberObjects(scope: LifeTime): Collection<TableScopedObject<UE>>
public interface Constructor<tUE : Any> {
public fun createTable(context: TableConstructorScope<tUE>): tUE

View File

@ -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<tUE : Any> {
@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<tUE>
}