fix KtormTableName target bug

This commit is contained in:
tursom 2022-04-05 21:37:27 +08:00
parent 086079fa8d
commit 9d8b6e3f71
5 changed files with 25 additions and 2 deletions

View File

@ -7,14 +7,16 @@ class ArrayContextEnv : ContextEnv {
val envId = ContextEnv.newEnvId()
private val idGenerator = AtomicInteger()
override fun emptyContext(): Context = ArrayContext(envId, idGenerator, empty = true)
override fun newContext(): Context = ArrayContext(envId, idGenerator)
override fun <T> newKey() = ContextKey<T>(envId, idGenerator.getAndIncrement())
private class ArrayContext(
override val envId: Int,
private val idGenerator: AtomicInteger,
empty: Boolean = false,
) : Context {
private var array = arrayOfNulls<Any?>(idGenerator.get())
private var array = if (empty) emptyArray() else arrayOfNulls<Any?>(idGenerator.get())
override operator fun <T> get(key: ContextKey<T>): T? {
checkEnv(key)

View File

@ -3,6 +3,17 @@ package cn.tursom.core.context
interface Context {
val envId: Int
operator fun <T> get(key: DefaultContextKey<T>): T {
var value = get(key as ContextKey<T>)
return if (value != null) {
value
} else {
value = key.provider()
set(key, value)
value
}
}
operator fun <T> get(key: ContextKey<T>): T?
operator fun <T> set(key: ContextKey<T>, value: T)

View File

@ -8,6 +8,7 @@ interface ContextEnv {
fun newEnvId() = contextEnvIdGenerator.incrementAndGet()
}
fun emptyContext(): Context = newContext()
fun newContext(): Context
fun <T> newKey(): ContextKey<T>
}

View File

@ -1,9 +1,11 @@
package cn.tursom.core.context
data class ContextKey<T>(
open class ContextKey<T>(
val envId: Int,
val id: Int,
) {
fun withDefault(provider: () -> T) = DefaultContextKey(envId, id, provider)
override fun hashCode(): Int {
return id
}
@ -17,4 +19,8 @@ data class ContextKey<T>(
return true
}
override fun toString(): String {
return "ContextKey(envId=$envId, id=$id)"
}
}

View File

@ -0,0 +1,3 @@
package cn.tursom.core.context
class DefaultContextKey<T>(envId: Int, id: Int, val provider: () -> T) : ContextKey<T>(envId, id)