Coverage Summary for Class: CachesKt (com.kotlinorm.cache)
Class |
Class, %
|
Method, %
|
Branch, %
|
Line, %
|
Instruction, %
|
CachesKt |
100%
(1/1)
|
100%
(21/21)
|
68.4%
(26/38)
|
97.3%
(36/37)
|
91.4%
(438/479)
|
/**
* Copyright 2022-2025 kronos-orm
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.kotlinorm.cache
import com.kotlinorm.Kronos.primaryKeyStrategy
import com.kotlinorm.beans.config.KronosCommonStrategy
import com.kotlinorm.beans.dsl.Field
import com.kotlinorm.beans.parser.ParsedSql
import com.kotlinorm.enums.PrimaryKeyType
import com.kotlinorm.interfaces.KPojo
import com.kotlinorm.utils.LRUCache
import com.kotlinorm.utils.createInstance
import com.kotlinorm.utils.toLinkedSet
import kotlin.reflect.KClass
val fieldsMapCache = LRUCache<KClass<KPojo>, Map<String, Field>> { kClass->
kPojoAllFieldsCache[kClass]!!.let { instance ->
instance.associateBy { it.name } + instance.associateBy { it.columnName }
}
}
val insertSqlCache = LRUCache<Pair<KClass<out KPojo>, Boolean>, String>()
val namedSqlCache = LRUCache<String, ParsedSql>()
val kPojoInstanceCache = LRUCache<KClass<out KPojo>, KPojo> { it.createInstance() }
val kPojoAllFieldsCache = LRUCache<KClass<out KPojo>, LinkedHashSet<Field>> { kClass ->
kPojoInstanceCache[kClass]!!.kronosColumns().toLinkedSet()
}
val kPojoAllColumnsCache = LRUCache<KClass<out KPojo>, List<Field>> { kClass ->
kPojoInstanceCache[kClass]!!.kronosColumns().filter { it.isColumn }
}
val kPojoFieldMapCache = LRUCache<KClass<out KPojo>, Map<String, Field>> { kClass ->
kPojoInstanceCache[kClass]!!.kronosColumns().associateBy { it.name }
}
val kPojoPrimaryKeyCache = LRUCache<KClass<out KPojo>, Field> { kClass ->
kPojoAllColumnsCache[kClass]!!.firstOrNull { it.primaryKey != PrimaryKeyType.NOT } ?: primaryKeyStrategy
.takeIf { it.enabled }?.field.takeIf { field ->
kPojoAllColumnsCache[kClass]!!.any { it.name == field?.name }
}
?: error("No primary key found for ${kClass.simpleName}!")
}
val kPojoCreateTimeCache = LRUCache<KClass<out KPojo>, KronosCommonStrategy?> { kClass ->
kPojoInstanceCache[kClass]!!.let { kPojo ->
kPojo.kronosCreateTime().takeIf { strategy -> strategy.enabled }?.bind(kPojo.kronosTableName())?.apply {
kPojoAllColumnsCache[kClass]!!.any { it.name == field.name }
}
}
}
val kPojoUpdateTimeCache = LRUCache<KClass<out KPojo>, KronosCommonStrategy?> { kClass ->
kPojoInstanceCache[kClass]!!.let { kPojo ->
kPojo.kronosUpdateTime().takeIf { strategy -> strategy.enabled }?.bind(kPojo.kronosTableName())?.apply {
kPojoAllColumnsCache[kClass]!!.any { it.name == field.name }
}
}
}
val kPojoLogicDeleteCache = LRUCache<KClass<out KPojo>, KronosCommonStrategy?> { kClass ->
kPojoInstanceCache[kClass]!!.let { kPojo ->
kPojo.kronosLogicDelete().takeIf { strategy -> strategy.enabled }?.bind(kPojo.kronosTableName())?.apply {
kPojoAllColumnsCache[kClass]!!.any { it.name == field.name }
}
}
}
val kPojoOptimisticLockCache = LRUCache<KClass<out KPojo>, KronosCommonStrategy?> { kClass ->
kPojoInstanceCache[kClass]!!.let { kPojo ->
kPojo.kronosOptimisticLock().takeIf { strategy -> strategy.enabled }?.bind(kPojo.kronosTableName())?.apply {
kPojoAllColumnsCache[kClass]!!.any { col-> col.name == field.name }
}
}
}