fix KtormTableName target bug

This commit is contained in:
tursom 2022-04-05 21:45:25 +08:00
parent 9d8b6e3f71
commit 63c3cf531d
3 changed files with 19 additions and 7 deletions

View File

@ -6,17 +6,17 @@ import java.util.concurrent.atomic.AtomicInteger
class ArrayContextEnv : ContextEnv {
val envId = ContextEnv.newEnvId()
private val idGenerator = AtomicInteger()
private val emptyContext = EmptyArrayContext(envId, idGenerator)
override fun emptyContext(): Context = ArrayContext(envId, idGenerator, empty = true)
override fun emptyContext(): Context = emptyContext
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 = if (empty) emptyArray() else arrayOfNulls<Any?>(idGenerator.get())
private var array = arrayOfNulls<Any?>(idGenerator.get())
override operator fun <T> get(key: ContextKey<T>): T? {
checkEnv(key)
@ -27,12 +27,23 @@ class ArrayContextEnv : ContextEnv {
}
}
override operator fun <T> set(key: ContextKey<T>, value: T) {
override fun <T> set(key: ContextKey<T>, value: T): ArrayContext {
checkEnv(key)
if (array.size < key.id) {
array = array.copyOf(idGenerator.get())
}
array[key.id] = value
return this
}
}
private class EmptyArrayContext(
override val envId: Int,
private val idGenerator: AtomicInteger,
) : Context {
override fun <T> get(key: ContextKey<T>): T? = null
override fun <T> get(key: DefaultContextKey<T>): T = key.provider()
override fun <T> set(key: ContextKey<T>, value: T) =
ArrayContext(envId, idGenerator).set(key, value)
}
}

View File

@ -15,7 +15,7 @@ interface Context {
}
operator fun <T> get(key: ContextKey<T>): T?
operator fun <T> set(key: ContextKey<T>, value: T)
fun <T> set(key: ContextKey<T>, value: T): Context
fun checkEnv(key: ContextKey<*>) {
if (envId != key.envId) {

View File

@ -15,14 +15,15 @@ class HashMapContextEnv : ContextEnv {
) : Context {
private var map = HashMap<Int, Any?>()
override operator fun <T> get(key: ContextKey<T>): T? {
override fun <T> get(key: ContextKey<T>): T? {
checkEnv(key)
return map[key.id]?.uncheckedCast<T>()
}
override operator fun <T> set(key: ContextKey<T>, value: T) {
override fun <T> set(key: ContextKey<T>, value: T): HashMapContext {
checkEnv(key)
map[key.id] = value
return this
}
}
}