From 647d989aa1d6567dfe24206b5c9b857525e6061a Mon Sep 17 00:00:00 2001 From: tursom Date: Mon, 12 Apr 2021 10:47:31 +0800 Subject: [PATCH 01/15] update --- build.gradle.kts | 2 +- settings.gradle.kts | 1 + ts-core/build.gradle.kts | 2 +- .../ts-coroutine-lock/build.gradle.kts | 1 + .../delegation/DecoratorDelegateProvider.kt | 2 +- .../delegation/DecoratorDelegatedField.kt | 2 +- .../DecoratorMutableDelegateProvider.kt | 2 +- .../DecoratorMutableDelegatedField.kt | 2 +- .../{ => core}/delegation/DelegateProvider.kt | 2 +- .../{ => core}/delegation/DelegatedField.kt | 2 +- .../delegation/DelegatedFieldAttachmentKey.kt | 2 +- .../ExecutorMutableDelegatedField.kt | 2 +- .../delegation/FilterDelegatedField.kt | 2 +- .../delegation/GetterDelegatedField.kt | 2 +- .../delegation/GetterMutableDelegatedField.kt | 2 +- .../delegation/KPropertyDelegatedField.kt | 2 +- .../KPropertyMutableDelegatedField.kt | 2 +- .../delegation/LockMutableDelegatedField.kt | 2 +- .../delegation/MutableDelegatedField.kt | 2 +- .../delegation/MutableDelegatedFieldValue.kt | 2 +- .../delegation/NotNullDelegatedField.kt | 2 +- .../NotNullMutableDelegatedField.kt | 2 +- .../ReadWriteLockMutableDelegatedField.kt | 2 +- .../delegation/SetterDelegatedField.kt | 2 +- .../delegation/SetterMutableDelegatedField.kt | 2 +- .../SimpThreadLocalMutableDelegatedField.kt | 2 +- .../ThreadLocalMutableDelegatedField.kt | 2 +- .../{ => core}/delegation/delegations.kt | 2 +- .../main/kotlin/cn/tursom/core/encrypt/ECC.kt | 13 +- ts-database/build.gradle.kts | 34 ++++ .../kotlin/cn/tursom/database/AutoTable.kt | 84 ++++++++++ .../kotlin/cn/tursom/database/JsonType.kt | 27 ++++ .../kotlin/cn/tursom/database/SqlExtension.kt | 151 ++++++++++++++++++ .../kotlin/cn/tursom/database/TypeAdapter.kt | 25 +++ .../cn/tursom/database/TypeAdapterFactory.kt | 76 +++++++++ .../cn/tursom/database/annotations/Json.kt | 7 + .../database/typeadapter/BooleanAdapter.kt | 20 +++ .../database/typeadapter/BytesAdapter.kt | 20 +++ .../database/typeadapter/DateAdapter.kt | 21 +++ .../database/typeadapter/DoubleAdapter.kt | 20 +++ .../database/typeadapter/EnumAdapter.kt | 28 ++++ .../database/typeadapter/FloatAdapter.kt | 20 +++ .../database/typeadapter/InstantAdapter.kt | 21 +++ .../tursom/database/typeadapter/IntAdapter.kt | 20 +++ .../database/typeadapter/IntAdapterAdapter.kt | 21 +++ .../database/typeadapter/JsonAdapter.kt | 23 +++ .../database/typeadapter/LocalDateAdapter.kt | 21 +++ .../typeadapter/LocalDateTimeAdapter.kt | 21 +++ .../database/typeadapter/LocalTimeAdapter.kt | 21 +++ .../database/typeadapter/LongAdapter.kt | 20 +++ .../database/typeadapter/MonthDayAdapter.kt | 21 +++ .../database/typeadapter/StringAdapter.kt | 20 +++ .../database/typeadapter/TimeAdapter.kt | 21 +++ .../database/typeadapter/TimestampAdapter.kt | 21 +++ .../database/typeadapter/UUIDAdapter.kt | 21 +++ .../database/typeadapter/YearAdapter.kt | 21 +++ .../database/typeadapter/YearMonthAdapter.kt | 21 +++ 57 files changed, 883 insertions(+), 31 deletions(-) rename ts-core/ts-delegation/src/main/kotlin/cn/tursom/{ => core}/delegation/DecoratorDelegateProvider.kt (89%) rename ts-core/ts-delegation/src/main/kotlin/cn/tursom/{ => core}/delegation/DecoratorDelegatedField.kt (73%) rename ts-core/ts-delegation/src/main/kotlin/cn/tursom/{ => core}/delegation/DecoratorMutableDelegateProvider.kt (91%) rename ts-core/ts-delegation/src/main/kotlin/cn/tursom/{ => core}/delegation/DecoratorMutableDelegatedField.kt (86%) rename ts-core/ts-delegation/src/main/kotlin/cn/tursom/{ => core}/delegation/DelegateProvider.kt (80%) rename ts-core/ts-delegation/src/main/kotlin/cn/tursom/{ => core}/delegation/DelegatedField.kt (97%) rename ts-core/ts-delegation/src/main/kotlin/cn/tursom/{ => core}/delegation/DelegatedFieldAttachmentKey.kt (54%) rename ts-core/ts-delegation/src/main/kotlin/cn/tursom/{ => core}/delegation/ExecutorMutableDelegatedField.kt (95%) rename ts-core/ts-delegation/src/main/kotlin/cn/tursom/{ => core}/delegation/FilterDelegatedField.kt (96%) rename ts-core/ts-delegation/src/main/kotlin/cn/tursom/{ => core}/delegation/GetterDelegatedField.kt (92%) rename ts-core/ts-delegation/src/main/kotlin/cn/tursom/{ => core}/delegation/GetterMutableDelegatedField.kt (92%) rename ts-core/ts-delegation/src/main/kotlin/cn/tursom/{ => core}/delegation/KPropertyDelegatedField.kt (84%) rename ts-core/ts-delegation/src/main/kotlin/cn/tursom/{ => core}/delegation/KPropertyMutableDelegatedField.kt (88%) rename ts-core/ts-delegation/src/main/kotlin/cn/tursom/{ => core}/delegation/LockMutableDelegatedField.kt (96%) rename ts-core/ts-delegation/src/main/kotlin/cn/tursom/{ => core}/delegation/MutableDelegatedField.kt (94%) rename ts-core/ts-delegation/src/main/kotlin/cn/tursom/{ => core}/delegation/MutableDelegatedFieldValue.kt (92%) rename ts-core/ts-delegation/src/main/kotlin/cn/tursom/{ => core}/delegation/NotNullDelegatedField.kt (86%) rename ts-core/ts-delegation/src/main/kotlin/cn/tursom/{ => core}/delegation/NotNullMutableDelegatedField.kt (88%) rename ts-core/ts-delegation/src/main/kotlin/cn/tursom/{ => core}/delegation/ReadWriteLockMutableDelegatedField.kt (97%) rename ts-core/ts-delegation/src/main/kotlin/cn/tursom/{ => core}/delegation/SetterDelegatedField.kt (90%) rename ts-core/ts-delegation/src/main/kotlin/cn/tursom/{ => core}/delegation/SetterMutableDelegatedField.kt (93%) rename ts-core/ts-delegation/src/main/kotlin/cn/tursom/{ => core}/delegation/SimpThreadLocalMutableDelegatedField.kt (91%) rename ts-core/ts-delegation/src/main/kotlin/cn/tursom/{ => core}/delegation/ThreadLocalMutableDelegatedField.kt (88%) rename ts-core/ts-delegation/src/main/kotlin/cn/tursom/{ => core}/delegation/delegations.kt (99%) create mode 100644 ts-database/build.gradle.kts create mode 100644 ts-database/src/main/kotlin/cn/tursom/database/AutoTable.kt create mode 100644 ts-database/src/main/kotlin/cn/tursom/database/JsonType.kt create mode 100644 ts-database/src/main/kotlin/cn/tursom/database/SqlExtension.kt create mode 100644 ts-database/src/main/kotlin/cn/tursom/database/TypeAdapter.kt create mode 100644 ts-database/src/main/kotlin/cn/tursom/database/TypeAdapterFactory.kt create mode 100644 ts-database/src/main/kotlin/cn/tursom/database/annotations/Json.kt create mode 100644 ts-database/src/main/kotlin/cn/tursom/database/typeadapter/BooleanAdapter.kt create mode 100644 ts-database/src/main/kotlin/cn/tursom/database/typeadapter/BytesAdapter.kt create mode 100644 ts-database/src/main/kotlin/cn/tursom/database/typeadapter/DateAdapter.kt create mode 100644 ts-database/src/main/kotlin/cn/tursom/database/typeadapter/DoubleAdapter.kt create mode 100644 ts-database/src/main/kotlin/cn/tursom/database/typeadapter/EnumAdapter.kt create mode 100644 ts-database/src/main/kotlin/cn/tursom/database/typeadapter/FloatAdapter.kt create mode 100644 ts-database/src/main/kotlin/cn/tursom/database/typeadapter/InstantAdapter.kt create mode 100644 ts-database/src/main/kotlin/cn/tursom/database/typeadapter/IntAdapter.kt create mode 100644 ts-database/src/main/kotlin/cn/tursom/database/typeadapter/IntAdapterAdapter.kt create mode 100644 ts-database/src/main/kotlin/cn/tursom/database/typeadapter/JsonAdapter.kt create mode 100644 ts-database/src/main/kotlin/cn/tursom/database/typeadapter/LocalDateAdapter.kt create mode 100644 ts-database/src/main/kotlin/cn/tursom/database/typeadapter/LocalDateTimeAdapter.kt create mode 100644 ts-database/src/main/kotlin/cn/tursom/database/typeadapter/LocalTimeAdapter.kt create mode 100644 ts-database/src/main/kotlin/cn/tursom/database/typeadapter/LongAdapter.kt create mode 100644 ts-database/src/main/kotlin/cn/tursom/database/typeadapter/MonthDayAdapter.kt create mode 100644 ts-database/src/main/kotlin/cn/tursom/database/typeadapter/StringAdapter.kt create mode 100644 ts-database/src/main/kotlin/cn/tursom/database/typeadapter/TimeAdapter.kt create mode 100644 ts-database/src/main/kotlin/cn/tursom/database/typeadapter/TimestampAdapter.kt create mode 100644 ts-database/src/main/kotlin/cn/tursom/database/typeadapter/UUIDAdapter.kt create mode 100644 ts-database/src/main/kotlin/cn/tursom/database/typeadapter/YearAdapter.kt create mode 100644 ts-database/src/main/kotlin/cn/tursom/database/typeadapter/YearMonthAdapter.kt diff --git a/build.gradle.kts b/build.gradle.kts index 06b3bb4..b49c786 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -17,7 +17,7 @@ ext["excludeTest"] = { project: Project, tasks: TaskContainer -> plugins { - kotlin("jvm") version "1.4.31" + kotlin("jvm") version "1.4.32" `maven-publish` } diff --git a/settings.gradle.kts b/settings.gradle.kts index 3cca404..fc338bc 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -18,6 +18,7 @@ include("ts-socket") include("ts-web") include("ts-web:ts-web-netty") include("ts-web:ts-web-coroutine") +include("ts-database") //include("web", "aop", "database", "utils", "utils:xml", "utils:async-http", "web:netty-web") //include("socket", "socket:socket-async") //include("AsyncSocket") diff --git a/ts-core/build.gradle.kts b/ts-core/build.gradle.kts index 53a3b36..4a36a85 100644 --- a/ts-core/build.gradle.kts +++ b/ts-core/build.gradle.kts @@ -4,7 +4,7 @@ plugins { } dependencies { - implementation(project(":")) + api(project(":")) compileOnly(group = "com.google.code.gson", name = "gson", version = "2.8.6") compileOnly(group = "io.netty", name = "netty-all", version = "4.1.43.Final") } diff --git a/ts-core/ts-coroutine/ts-coroutine-lock/build.gradle.kts b/ts-core/ts-coroutine/ts-coroutine-lock/build.gradle.kts index 4602613..1b0fb84 100644 --- a/ts-core/ts-coroutine/ts-coroutine-lock/build.gradle.kts +++ b/ts-core/ts-coroutine/ts-coroutine-lock/build.gradle.kts @@ -5,6 +5,7 @@ plugins { dependencies { implementation(project(":ts-core")) + api("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.4.2") } @kotlin.Suppress("UNCHECKED_CAST") diff --git a/ts-core/ts-delegation/src/main/kotlin/cn/tursom/delegation/DecoratorDelegateProvider.kt b/ts-core/ts-delegation/src/main/kotlin/cn/tursom/core/delegation/DecoratorDelegateProvider.kt similarity index 89% rename from ts-core/ts-delegation/src/main/kotlin/cn/tursom/delegation/DecoratorDelegateProvider.kt rename to ts-core/ts-delegation/src/main/kotlin/cn/tursom/core/delegation/DecoratorDelegateProvider.kt index aebbc6c..9e8db36 100644 --- a/ts-core/ts-delegation/src/main/kotlin/cn/tursom/delegation/DecoratorDelegateProvider.kt +++ b/ts-core/ts-delegation/src/main/kotlin/cn/tursom/core/delegation/DecoratorDelegateProvider.kt @@ -1,4 +1,4 @@ -package cn.tursom.delegation +package cn.tursom.core.delegation import kotlin.reflect.KProperty diff --git a/ts-core/ts-delegation/src/main/kotlin/cn/tursom/delegation/DecoratorDelegatedField.kt b/ts-core/ts-delegation/src/main/kotlin/cn/tursom/core/delegation/DecoratorDelegatedField.kt similarity index 73% rename from ts-core/ts-delegation/src/main/kotlin/cn/tursom/delegation/DecoratorDelegatedField.kt rename to ts-core/ts-delegation/src/main/kotlin/cn/tursom/core/delegation/DecoratorDelegatedField.kt index e007cae..94167d9 100644 --- a/ts-core/ts-delegation/src/main/kotlin/cn/tursom/delegation/DecoratorDelegatedField.kt +++ b/ts-core/ts-delegation/src/main/kotlin/cn/tursom/core/delegation/DecoratorDelegatedField.kt @@ -1,4 +1,4 @@ -package cn.tursom.delegation +package cn.tursom.core.delegation interface DecoratorDelegatedField { val delegatedField: DelegatedField diff --git a/ts-core/ts-delegation/src/main/kotlin/cn/tursom/delegation/DecoratorMutableDelegateProvider.kt b/ts-core/ts-delegation/src/main/kotlin/cn/tursom/core/delegation/DecoratorMutableDelegateProvider.kt similarity index 91% rename from ts-core/ts-delegation/src/main/kotlin/cn/tursom/delegation/DecoratorMutableDelegateProvider.kt rename to ts-core/ts-delegation/src/main/kotlin/cn/tursom/core/delegation/DecoratorMutableDelegateProvider.kt index d0c44ea..2c6011d 100644 --- a/ts-core/ts-delegation/src/main/kotlin/cn/tursom/delegation/DecoratorMutableDelegateProvider.kt +++ b/ts-core/ts-delegation/src/main/kotlin/cn/tursom/core/delegation/DecoratorMutableDelegateProvider.kt @@ -1,4 +1,4 @@ -package cn.tursom.delegation +package cn.tursom.core.delegation import kotlin.reflect.KProperty diff --git a/ts-core/ts-delegation/src/main/kotlin/cn/tursom/delegation/DecoratorMutableDelegatedField.kt b/ts-core/ts-delegation/src/main/kotlin/cn/tursom/core/delegation/DecoratorMutableDelegatedField.kt similarity index 86% rename from ts-core/ts-delegation/src/main/kotlin/cn/tursom/delegation/DecoratorMutableDelegatedField.kt rename to ts-core/ts-delegation/src/main/kotlin/cn/tursom/core/delegation/DecoratorMutableDelegatedField.kt index 0bb2f9f..3b5ca37 100644 --- a/ts-core/ts-delegation/src/main/kotlin/cn/tursom/delegation/DecoratorMutableDelegatedField.kt +++ b/ts-core/ts-delegation/src/main/kotlin/cn/tursom/core/delegation/DecoratorMutableDelegatedField.kt @@ -1,4 +1,4 @@ -package cn.tursom.delegation +package cn.tursom.core.delegation interface DecoratorMutableDelegatedField : DecoratorDelegatedField { val mutableDelegatedField: MutableDelegatedField diff --git a/ts-core/ts-delegation/src/main/kotlin/cn/tursom/delegation/DelegateProvider.kt b/ts-core/ts-delegation/src/main/kotlin/cn/tursom/core/delegation/DelegateProvider.kt similarity index 80% rename from ts-core/ts-delegation/src/main/kotlin/cn/tursom/delegation/DelegateProvider.kt rename to ts-core/ts-delegation/src/main/kotlin/cn/tursom/core/delegation/DelegateProvider.kt index d737a49..945e0db 100644 --- a/ts-core/ts-delegation/src/main/kotlin/cn/tursom/delegation/DelegateProvider.kt +++ b/ts-core/ts-delegation/src/main/kotlin/cn/tursom/core/delegation/DelegateProvider.kt @@ -1,4 +1,4 @@ -package cn.tursom.delegation +package cn.tursom.core.delegation import kotlin.reflect.KProperty diff --git a/ts-core/ts-delegation/src/main/kotlin/cn/tursom/delegation/DelegatedField.kt b/ts-core/ts-delegation/src/main/kotlin/cn/tursom/core/delegation/DelegatedField.kt similarity index 97% rename from ts-core/ts-delegation/src/main/kotlin/cn/tursom/delegation/DelegatedField.kt rename to ts-core/ts-delegation/src/main/kotlin/cn/tursom/core/delegation/DelegatedField.kt index c59cf69..b736d6e 100644 --- a/ts-core/ts-delegation/src/main/kotlin/cn/tursom/delegation/DelegatedField.kt +++ b/ts-core/ts-delegation/src/main/kotlin/cn/tursom/core/delegation/DelegatedField.kt @@ -1,4 +1,4 @@ -package cn.tursom.delegation +package cn.tursom.core.delegation import kotlin.reflect.KProperty diff --git a/ts-core/ts-delegation/src/main/kotlin/cn/tursom/delegation/DelegatedFieldAttachmentKey.kt b/ts-core/ts-delegation/src/main/kotlin/cn/tursom/core/delegation/DelegatedFieldAttachmentKey.kt similarity index 54% rename from ts-core/ts-delegation/src/main/kotlin/cn/tursom/delegation/DelegatedFieldAttachmentKey.kt rename to ts-core/ts-delegation/src/main/kotlin/cn/tursom/core/delegation/DelegatedFieldAttachmentKey.kt index 1f26256..f843077 100644 --- a/ts-core/ts-delegation/src/main/kotlin/cn/tursom/delegation/DelegatedFieldAttachmentKey.kt +++ b/ts-core/ts-delegation/src/main/kotlin/cn/tursom/core/delegation/DelegatedFieldAttachmentKey.kt @@ -1,3 +1,3 @@ -package cn.tursom.delegation +package cn.tursom.core.delegation interface DelegatedFieldAttachmentKey \ No newline at end of file diff --git a/ts-core/ts-delegation/src/main/kotlin/cn/tursom/delegation/ExecutorMutableDelegatedField.kt b/ts-core/ts-delegation/src/main/kotlin/cn/tursom/core/delegation/ExecutorMutableDelegatedField.kt similarity index 95% rename from ts-core/ts-delegation/src/main/kotlin/cn/tursom/delegation/ExecutorMutableDelegatedField.kt rename to ts-core/ts-delegation/src/main/kotlin/cn/tursom/core/delegation/ExecutorMutableDelegatedField.kt index d1f2366..d16d16c 100644 --- a/ts-core/ts-delegation/src/main/kotlin/cn/tursom/delegation/ExecutorMutableDelegatedField.kt +++ b/ts-core/ts-delegation/src/main/kotlin/cn/tursom/core/delegation/ExecutorMutableDelegatedField.kt @@ -1,4 +1,4 @@ -package cn.tursom.delegation +package cn.tursom.core.delegation import java.util.concurrent.Executor import kotlin.reflect.KProperty diff --git a/ts-core/ts-delegation/src/main/kotlin/cn/tursom/delegation/FilterDelegatedField.kt b/ts-core/ts-delegation/src/main/kotlin/cn/tursom/core/delegation/FilterDelegatedField.kt similarity index 96% rename from ts-core/ts-delegation/src/main/kotlin/cn/tursom/delegation/FilterDelegatedField.kt rename to ts-core/ts-delegation/src/main/kotlin/cn/tursom/core/delegation/FilterDelegatedField.kt index 4a82cc6..a6899b0 100644 --- a/ts-core/ts-delegation/src/main/kotlin/cn/tursom/delegation/FilterDelegatedField.kt +++ b/ts-core/ts-delegation/src/main/kotlin/cn/tursom/core/delegation/FilterDelegatedField.kt @@ -1,4 +1,4 @@ -package cn.tursom.delegation +package cn.tursom.core.delegation import cn.tursom.core.cast import kotlin.reflect.KProperty diff --git a/ts-core/ts-delegation/src/main/kotlin/cn/tursom/delegation/GetterDelegatedField.kt b/ts-core/ts-delegation/src/main/kotlin/cn/tursom/core/delegation/GetterDelegatedField.kt similarity index 92% rename from ts-core/ts-delegation/src/main/kotlin/cn/tursom/delegation/GetterDelegatedField.kt rename to ts-core/ts-delegation/src/main/kotlin/cn/tursom/core/delegation/GetterDelegatedField.kt index 86b205d..5d94c33 100644 --- a/ts-core/ts-delegation/src/main/kotlin/cn/tursom/delegation/GetterDelegatedField.kt +++ b/ts-core/ts-delegation/src/main/kotlin/cn/tursom/core/delegation/GetterDelegatedField.kt @@ -1,4 +1,4 @@ -package cn.tursom.delegation +package cn.tursom.core.delegation import kotlin.reflect.KProperty diff --git a/ts-core/ts-delegation/src/main/kotlin/cn/tursom/delegation/GetterMutableDelegatedField.kt b/ts-core/ts-delegation/src/main/kotlin/cn/tursom/core/delegation/GetterMutableDelegatedField.kt similarity index 92% rename from ts-core/ts-delegation/src/main/kotlin/cn/tursom/delegation/GetterMutableDelegatedField.kt rename to ts-core/ts-delegation/src/main/kotlin/cn/tursom/core/delegation/GetterMutableDelegatedField.kt index b8a9f0a..b0a4809 100644 --- a/ts-core/ts-delegation/src/main/kotlin/cn/tursom/delegation/GetterMutableDelegatedField.kt +++ b/ts-core/ts-delegation/src/main/kotlin/cn/tursom/core/delegation/GetterMutableDelegatedField.kt @@ -1,4 +1,4 @@ -package cn.tursom.delegation +package cn.tursom.core.delegation import kotlin.reflect.KProperty diff --git a/ts-core/ts-delegation/src/main/kotlin/cn/tursom/delegation/KPropertyDelegatedField.kt b/ts-core/ts-delegation/src/main/kotlin/cn/tursom/core/delegation/KPropertyDelegatedField.kt similarity index 84% rename from ts-core/ts-delegation/src/main/kotlin/cn/tursom/delegation/KPropertyDelegatedField.kt rename to ts-core/ts-delegation/src/main/kotlin/cn/tursom/core/delegation/KPropertyDelegatedField.kt index 2ab2d7b..1960a89 100644 --- a/ts-core/ts-delegation/src/main/kotlin/cn/tursom/delegation/KPropertyDelegatedField.kt +++ b/ts-core/ts-delegation/src/main/kotlin/cn/tursom/core/delegation/KPropertyDelegatedField.kt @@ -1,4 +1,4 @@ -package cn.tursom.delegation +package cn.tursom.core.delegation import kotlin.reflect.KProperty0 diff --git a/ts-core/ts-delegation/src/main/kotlin/cn/tursom/delegation/KPropertyMutableDelegatedField.kt b/ts-core/ts-delegation/src/main/kotlin/cn/tursom/core/delegation/KPropertyMutableDelegatedField.kt similarity index 88% rename from ts-core/ts-delegation/src/main/kotlin/cn/tursom/delegation/KPropertyMutableDelegatedField.kt rename to ts-core/ts-delegation/src/main/kotlin/cn/tursom/core/delegation/KPropertyMutableDelegatedField.kt index 168d5ca..0c364cd 100644 --- a/ts-core/ts-delegation/src/main/kotlin/cn/tursom/delegation/KPropertyMutableDelegatedField.kt +++ b/ts-core/ts-delegation/src/main/kotlin/cn/tursom/core/delegation/KPropertyMutableDelegatedField.kt @@ -1,4 +1,4 @@ -package cn.tursom.delegation +package cn.tursom.core.delegation import kotlin.reflect.KMutableProperty0 diff --git a/ts-core/ts-delegation/src/main/kotlin/cn/tursom/delegation/LockMutableDelegatedField.kt b/ts-core/ts-delegation/src/main/kotlin/cn/tursom/core/delegation/LockMutableDelegatedField.kt similarity index 96% rename from ts-core/ts-delegation/src/main/kotlin/cn/tursom/delegation/LockMutableDelegatedField.kt rename to ts-core/ts-delegation/src/main/kotlin/cn/tursom/core/delegation/LockMutableDelegatedField.kt index 76c2924..a1a20f0 100644 --- a/ts-core/ts-delegation/src/main/kotlin/cn/tursom/delegation/LockMutableDelegatedField.kt +++ b/ts-core/ts-delegation/src/main/kotlin/cn/tursom/core/delegation/LockMutableDelegatedField.kt @@ -1,4 +1,4 @@ -package cn.tursom.delegation +package cn.tursom.core.delegation import java.util.concurrent.locks.Lock import java.util.concurrent.locks.ReentrantLock diff --git a/ts-core/ts-delegation/src/main/kotlin/cn/tursom/delegation/MutableDelegatedField.kt b/ts-core/ts-delegation/src/main/kotlin/cn/tursom/core/delegation/MutableDelegatedField.kt similarity index 94% rename from ts-core/ts-delegation/src/main/kotlin/cn/tursom/delegation/MutableDelegatedField.kt rename to ts-core/ts-delegation/src/main/kotlin/cn/tursom/core/delegation/MutableDelegatedField.kt index fd4f19e..d998c9a 100644 --- a/ts-core/ts-delegation/src/main/kotlin/cn/tursom/delegation/MutableDelegatedField.kt +++ b/ts-core/ts-delegation/src/main/kotlin/cn/tursom/core/delegation/MutableDelegatedField.kt @@ -1,4 +1,4 @@ -package cn.tursom.delegation +package cn.tursom.core.delegation import kotlin.reflect.KProperty diff --git a/ts-core/ts-delegation/src/main/kotlin/cn/tursom/delegation/MutableDelegatedFieldValue.kt b/ts-core/ts-delegation/src/main/kotlin/cn/tursom/core/delegation/MutableDelegatedFieldValue.kt similarity index 92% rename from ts-core/ts-delegation/src/main/kotlin/cn/tursom/delegation/MutableDelegatedFieldValue.kt rename to ts-core/ts-delegation/src/main/kotlin/cn/tursom/core/delegation/MutableDelegatedFieldValue.kt index c2aca26..2af9a52 100644 --- a/ts-core/ts-delegation/src/main/kotlin/cn/tursom/delegation/MutableDelegatedFieldValue.kt +++ b/ts-core/ts-delegation/src/main/kotlin/cn/tursom/core/delegation/MutableDelegatedFieldValue.kt @@ -1,4 +1,4 @@ -package cn.tursom.delegation +package cn.tursom.core.delegation import kotlin.reflect.KProperty diff --git a/ts-core/ts-delegation/src/main/kotlin/cn/tursom/delegation/NotNullDelegatedField.kt b/ts-core/ts-delegation/src/main/kotlin/cn/tursom/core/delegation/NotNullDelegatedField.kt similarity index 86% rename from ts-core/ts-delegation/src/main/kotlin/cn/tursom/delegation/NotNullDelegatedField.kt rename to ts-core/ts-delegation/src/main/kotlin/cn/tursom/core/delegation/NotNullDelegatedField.kt index 7e82e96..f04f04f 100644 --- a/ts-core/ts-delegation/src/main/kotlin/cn/tursom/delegation/NotNullDelegatedField.kt +++ b/ts-core/ts-delegation/src/main/kotlin/cn/tursom/core/delegation/NotNullDelegatedField.kt @@ -1,4 +1,4 @@ -package cn.tursom.delegation +package cn.tursom.core.delegation import cn.tursom.core.cast diff --git a/ts-core/ts-delegation/src/main/kotlin/cn/tursom/delegation/NotNullMutableDelegatedField.kt b/ts-core/ts-delegation/src/main/kotlin/cn/tursom/core/delegation/NotNullMutableDelegatedField.kt similarity index 88% rename from ts-core/ts-delegation/src/main/kotlin/cn/tursom/delegation/NotNullMutableDelegatedField.kt rename to ts-core/ts-delegation/src/main/kotlin/cn/tursom/core/delegation/NotNullMutableDelegatedField.kt index 9e2b9ad..446a773 100644 --- a/ts-core/ts-delegation/src/main/kotlin/cn/tursom/delegation/NotNullMutableDelegatedField.kt +++ b/ts-core/ts-delegation/src/main/kotlin/cn/tursom/core/delegation/NotNullMutableDelegatedField.kt @@ -1,4 +1,4 @@ -package cn.tursom.delegation +package cn.tursom.core.delegation import cn.tursom.core.cast diff --git a/ts-core/ts-delegation/src/main/kotlin/cn/tursom/delegation/ReadWriteLockMutableDelegatedField.kt b/ts-core/ts-delegation/src/main/kotlin/cn/tursom/core/delegation/ReadWriteLockMutableDelegatedField.kt similarity index 97% rename from ts-core/ts-delegation/src/main/kotlin/cn/tursom/delegation/ReadWriteLockMutableDelegatedField.kt rename to ts-core/ts-delegation/src/main/kotlin/cn/tursom/core/delegation/ReadWriteLockMutableDelegatedField.kt index 4f2d2ee..028f4d5 100644 --- a/ts-core/ts-delegation/src/main/kotlin/cn/tursom/delegation/ReadWriteLockMutableDelegatedField.kt +++ b/ts-core/ts-delegation/src/main/kotlin/cn/tursom/core/delegation/ReadWriteLockMutableDelegatedField.kt @@ -1,4 +1,4 @@ -package cn.tursom.delegation +package cn.tursom.core.delegation import java.util.concurrent.locks.ReadWriteLock import java.util.concurrent.locks.ReentrantReadWriteLock diff --git a/ts-core/ts-delegation/src/main/kotlin/cn/tursom/delegation/SetterDelegatedField.kt b/ts-core/ts-delegation/src/main/kotlin/cn/tursom/core/delegation/SetterDelegatedField.kt similarity index 90% rename from ts-core/ts-delegation/src/main/kotlin/cn/tursom/delegation/SetterDelegatedField.kt rename to ts-core/ts-delegation/src/main/kotlin/cn/tursom/core/delegation/SetterDelegatedField.kt index 140654c..3d977d3 100644 --- a/ts-core/ts-delegation/src/main/kotlin/cn/tursom/delegation/SetterDelegatedField.kt +++ b/ts-core/ts-delegation/src/main/kotlin/cn/tursom/core/delegation/SetterDelegatedField.kt @@ -1,4 +1,4 @@ -package cn.tursom.delegation +package cn.tursom.core.delegation class SetterDelegatedField( override val delegatedField: DelegatedField, diff --git a/ts-core/ts-delegation/src/main/kotlin/cn/tursom/delegation/SetterMutableDelegatedField.kt b/ts-core/ts-delegation/src/main/kotlin/cn/tursom/core/delegation/SetterMutableDelegatedField.kt similarity index 93% rename from ts-core/ts-delegation/src/main/kotlin/cn/tursom/delegation/SetterMutableDelegatedField.kt rename to ts-core/ts-delegation/src/main/kotlin/cn/tursom/core/delegation/SetterMutableDelegatedField.kt index 5bfb42b..d80bbab 100644 --- a/ts-core/ts-delegation/src/main/kotlin/cn/tursom/delegation/SetterMutableDelegatedField.kt +++ b/ts-core/ts-delegation/src/main/kotlin/cn/tursom/core/delegation/SetterMutableDelegatedField.kt @@ -1,4 +1,4 @@ -package cn.tursom.delegation +package cn.tursom.core.delegation import kotlin.reflect.KProperty diff --git a/ts-core/ts-delegation/src/main/kotlin/cn/tursom/delegation/SimpThreadLocalMutableDelegatedField.kt b/ts-core/ts-delegation/src/main/kotlin/cn/tursom/core/delegation/SimpThreadLocalMutableDelegatedField.kt similarity index 91% rename from ts-core/ts-delegation/src/main/kotlin/cn/tursom/delegation/SimpThreadLocalMutableDelegatedField.kt rename to ts-core/ts-delegation/src/main/kotlin/cn/tursom/core/delegation/SimpThreadLocalMutableDelegatedField.kt index 0aadf5d..5dfdeae 100644 --- a/ts-core/ts-delegation/src/main/kotlin/cn/tursom/delegation/SimpThreadLocalMutableDelegatedField.kt +++ b/ts-core/ts-delegation/src/main/kotlin/cn/tursom/core/delegation/SimpThreadLocalMutableDelegatedField.kt @@ -1,4 +1,4 @@ -package cn.tursom.delegation +package cn.tursom.core.delegation import cn.tursom.core.SimpThreadLocal diff --git a/ts-core/ts-delegation/src/main/kotlin/cn/tursom/delegation/ThreadLocalMutableDelegatedField.kt b/ts-core/ts-delegation/src/main/kotlin/cn/tursom/core/delegation/ThreadLocalMutableDelegatedField.kt similarity index 88% rename from ts-core/ts-delegation/src/main/kotlin/cn/tursom/delegation/ThreadLocalMutableDelegatedField.kt rename to ts-core/ts-delegation/src/main/kotlin/cn/tursom/core/delegation/ThreadLocalMutableDelegatedField.kt index ba5ee3f..8284aba 100644 --- a/ts-core/ts-delegation/src/main/kotlin/cn/tursom/delegation/ThreadLocalMutableDelegatedField.kt +++ b/ts-core/ts-delegation/src/main/kotlin/cn/tursom/core/delegation/ThreadLocalMutableDelegatedField.kt @@ -1,4 +1,4 @@ -package cn.tursom.delegation +package cn.tursom.core.delegation class ThreadLocalMutableDelegatedField( private val threadLocal: ThreadLocal = ThreadLocal() diff --git a/ts-core/ts-delegation/src/main/kotlin/cn/tursom/delegation/delegations.kt b/ts-core/ts-delegation/src/main/kotlin/cn/tursom/core/delegation/delegations.kt similarity index 99% rename from ts-core/ts-delegation/src/main/kotlin/cn/tursom/delegation/delegations.kt rename to ts-core/ts-delegation/src/main/kotlin/cn/tursom/core/delegation/delegations.kt index f0e5428..c0099e7 100644 --- a/ts-core/ts-delegation/src/main/kotlin/cn/tursom/delegation/delegations.kt +++ b/ts-core/ts-delegation/src/main/kotlin/cn/tursom/core/delegation/delegations.kt @@ -1,6 +1,6 @@ @file:Suppress("unused") -package cn.tursom.delegation +package cn.tursom.core.delegation import cn.tursom.core.SimpThreadLocal import cn.tursom.core.cast diff --git a/ts-core/ts-encrypt/src/main/kotlin/cn/tursom/core/encrypt/ECC.kt b/ts-core/ts-encrypt/src/main/kotlin/cn/tursom/core/encrypt/ECC.kt index f881ddf..891f257 100644 --- a/ts-core/ts-encrypt/src/main/kotlin/cn/tursom/core/encrypt/ECC.kt +++ b/ts-core/ts-encrypt/src/main/kotlin/cn/tursom/core/encrypt/ECC.kt @@ -2,7 +2,6 @@ package cn.tursom.core.encrypt import cn.tursom.core.Unsafe import cn.tursom.core.cast -import sun.security.ec.CurveDB import java.security.KeyFactory import java.security.KeyPair import java.security.KeyPairGenerator @@ -17,7 +16,7 @@ import java.security.spec.X509EncodedKeySpec @Suppress("unused", "MemberVisibilityCanBePrivate") class ECC( publicKey: ECPublicKey, - privateKey: ECPrivateKey? = null + privateKey: ECPrivateKey? = null, ) : AbstractPublicKeyEncrypt("EC", publicKey, privateKey) { override val decryptMaxLen = Int.MAX_VALUE @@ -41,7 +40,7 @@ class ECC( constructor( keySize: Int = 256, - standardCurveLine: String = StandardCurveLine.secp256k1.name.replace('_', ' ') + standardCurveLine: String = StandardCurveLine.secp256k1.name.replace('_', ' '), ) : this( keySize, ECGenParameterSpec(standardCurveLine) @@ -71,8 +70,12 @@ class ECC( companion object { val standardCurveLineSet by lazy { - Unsafe { - CurveDB::class.java["nameMap"].cast>().keys + try { + Unsafe { + Class.forName("sun.security.ec.CurveDB")["nameMap"].cast>().keys + } + } catch (e: Exception) { + emptySet() } } } diff --git a/ts-database/build.gradle.kts b/ts-database/build.gradle.kts new file mode 100644 index 0000000..401523a --- /dev/null +++ b/ts-database/build.gradle.kts @@ -0,0 +1,34 @@ +plugins { + kotlin("jvm") + `maven-publish` +} + +dependencies { + api(project(":")) + api(group = "me.liuwj.ktorm", name = "ktorm-core", version = "3.1.0") + compileOnly(group = "com.baomidou", name = "mybatis-plus", version = "3.4.2") + compileOnly(group = "com.google.code.gson", name = "gson", version = "2.8.6") +} + +@kotlin.Suppress("UNCHECKED_CAST") +(rootProject.ext["excludeTest"] as (Project, TaskContainer) -> Unit)(project, tasks) + +tasks.register("install") { + finalizedBy(tasks["publishToMavenLocal"]) +} + +publishing { + publications { + create("maven") { + groupId = project.group.toString() + artifactId = project.name + version = project.version.toString() + + from(components["java"]) + try { + artifact(tasks["sourcesJar"]) + } catch (e: Exception) { + } + } + } +} diff --git a/ts-database/src/main/kotlin/cn/tursom/database/AutoTable.kt b/ts-database/src/main/kotlin/cn/tursom/database/AutoTable.kt new file mode 100644 index 0000000..b9e615d --- /dev/null +++ b/ts-database/src/main/kotlin/cn/tursom/database/AutoTable.kt @@ -0,0 +1,84 @@ +package cn.tursom.database + +import com.baomidou.mybatisplus.annotation.TableField +import com.ddbes.kotlin.clone.Property +import com.ddbes.kotlin.clone.inject +import com.ddbes.kotlin.clone.instance +import com.ddbes.kotlin.jdbc.simpTableField +import com.ddbes.kotlin.jdbc.tableName +import com.ddbes.kotlin.uncheckedCast +import me.liuwj.ktorm.dsl.QueryRowSet +import me.liuwj.ktorm.schema.BaseTable +import me.liuwj.ktorm.schema.Column +import java.util.concurrent.ConcurrentHashMap +import kotlin.reflect.KClass +import kotlin.reflect.KProperty +import kotlin.reflect.KProperty0 +import kotlin.reflect.KProperty1 +import kotlin.reflect.full.memberProperties +import kotlin.reflect.jvm.javaField + +open class AutoTable( + entityClass: KClass, + tableName: String = entityClass.tableName, + alias: String? = null, + catalog: String? = null, + schema: String? = null, + val unsafe: Boolean = true, +) : BaseTable(tableName, alias, catalog, schema, entityClass) { + private val fieldMap: Map> + private val fieldColumns: MutableMap, Column<*>> = HashMap() + private val fieldNameColumnMap: MutableMap> = HashMap() + + init { + fieldMap = entityClass.memberProperties.associateBy { it.simpTableField } + entityClass.memberProperties.forEach { + val field = it.javaField ?: return@forEach + val tableField: TableField? = field.getAnnotation(TableField::class.java) + if (tableField?.exist == false) return@forEach + //TypeAdapterFactory.register(this, it) + val column = TypeAdapterFactory.register(this, it) ?: return@forEach + fieldColumns[it] = column + fieldNameColumnMap[it.name] = column + } + } + + override fun doCreateEntity(row: QueryRowSet, withReferences: Boolean): T { + val instance = instance(unsafe, entityClass!!.java) + columns.forEach { + val field = fieldMap[it.name] ?: return@forEach + row[it]?.inject(instance, field.uncheckedCast>()) + } + return instance + } + + operator fun get(property: KProperty1): Column = fieldColumns[property].uncheckedCast() + //operator fun get(property: KProperty1): Column = this[property.simpTableField].cast() + + fun field(): FieldProxy = fieldProxyInstance.uncheckedCast() + fun field(property: KProperty0<*>): Column = fieldNameColumnMap[property.name].uncheckedCast() + + companion object { + private val fieldProxyInstance = FieldProxy() + private val autoTableMap = ConcurrentHashMap, AutoTable<*>>() + operator fun get(clazz: KClass): AutoTable = get(clazz.java) + + operator fun get(clazz: Class): AutoTable { + var autoTable = autoTableMap[clazz] + if (autoTable == null) { + synchronized(autoTableMap) { + autoTable = AutoTable(clazz.kotlin) + autoTableMap[clazz] = autoTable.uncheckedCast() + } + } + return autoTable.uncheckedCast() + } + + class FieldProxy { + operator fun getValue( + autoTable: AutoTable, + property: KProperty<*>, + ): Column = autoTable.fieldNameColumnMap[property.name].uncheckedCast() + } + } +} diff --git a/ts-database/src/main/kotlin/cn/tursom/database/JsonType.kt b/ts-database/src/main/kotlin/cn/tursom/database/JsonType.kt new file mode 100644 index 0000000..74539cf --- /dev/null +++ b/ts-database/src/main/kotlin/cn/tursom/database/JsonType.kt @@ -0,0 +1,27 @@ +package cn.tursom.database + +import com.ddbes.kotlin.Utils +import com.google.gson.Gson +import me.liuwj.ktorm.schema.SqlType +import java.lang.reflect.Type +import java.sql.PreparedStatement +import java.sql.ResultSet +import java.sql.Types + +@Suppress("MemberVisibilityCanBePrivate") +class JsonType( + val clazz: Type, + type: Int = Types.VARCHAR, + val gson: Gson = Utils.gson +) : SqlType(type, "json") { + constructor(clazz: Class, type: Int = Types.VARCHAR) : this(clazz as Type, type) + + override fun doGetResult(rs: ResultSet, index: Int): T? { + val result = rs.getString(index) ?: return null + return gson.fromJson(result, clazz) + } + + override fun doSetParameter(ps: PreparedStatement, index: Int, parameter: T) { + ps.setString(index, gson.toJson(parameter)) + } +} \ No newline at end of file diff --git a/ts-database/src/main/kotlin/cn/tursom/database/SqlExtension.kt b/ts-database/src/main/kotlin/cn/tursom/database/SqlExtension.kt new file mode 100644 index 0000000..ae7aa40 --- /dev/null +++ b/ts-database/src/main/kotlin/cn/tursom/database/SqlExtension.kt @@ -0,0 +1,151 @@ +@file:Suppress("unused") + +package cn.tursom.database + +import com.ddbes.kotlin.Utils +import com.ddbes.kotlin.jdbc.simpTableField +import com.ddbes.kotlin.uncheckedCast +import com.google.gson.Gson +import me.liuwj.ktorm.dsl.Query +import me.liuwj.ktorm.dsl.QueryRowSet +import me.liuwj.ktorm.schema.* +import java.math.BigDecimal +import java.sql.Date +import java.sql.Time +import java.sql.Timestamp +import java.sql.Types +import java.time.* +import java.util.* +import kotlin.reflect.KProperty +import kotlin.reflect.KProperty1 +import kotlin.reflect.jvm.javaField +import kotlin.reflect.jvm.javaType + +val KProperty<*>.table + get() = AutoTable[javaField!!.declaringClass].uncheckedCast>() +val KProperty.sql + get() = table[this.uncheckedCast>()] + +inline val KProperty1.table + get() = AutoTable[T::class.java] + +inline val KProperty1.sql + get() = table[this] + +fun Query.getOne(transform: (rowSet: QueryRowSet) -> T): T? = if (rowSet.next()) { + transform(rowSet) +} else { + null +} + +inline fun Query.getOne(): T? = if (rowSet.next()) { + AutoTable[T::class].createEntity(rowSet) +} else { + null +} + +fun BaseTable.json( + field: KProperty1, + type: Int = Types.VARCHAR, + gson: Gson = Utils.gson, +): Column { + val sqlType = JsonType(field.returnType.javaType, type, gson) + return this.registerColumn(field.simpTableField, sqlType) +} + +fun BaseTable.boolean( + field: KProperty1, +) = boolean(field.simpTableField) + +fun BaseTable.int( + field: KProperty1, +) = int(field.simpTableField) + +fun BaseTable.long( + field: KProperty1, +) = long(field.simpTableField) + +fun BaseTable.float( + field: KProperty1, +) = float(field.simpTableField) + +fun BaseTable.double( + field: KProperty1, +) = double(field.simpTableField) + +fun BaseTable.decimal( + field: KProperty1, +) = decimal(field.simpTableField) + +fun BaseTable.varchar( + field: KProperty1, +) = varchar(field.simpTableField) + +fun BaseTable.text( + field: KProperty1, +) = text(field.simpTableField) + +fun BaseTable.blob( + field: KProperty1, +) = blob(field.simpTableField) + +fun BaseTable.bytes( + field: KProperty1, +) = bytes(field.simpTableField) + +fun BaseTable.jdbcTimestamp( + field: KProperty1, +) = jdbcTimestamp(field.simpTableField) + +fun BaseTable.jdbcDate( + field: KProperty1, +) = jdbcDate(field.simpTableField) + +fun BaseTable.jdbcTime( + field: KProperty1, +) = jdbcTime(field.simpTableField) + +fun BaseTable.timestamp( + field: KProperty1, +) = timestamp(field.simpTableField) + +fun BaseTable.datetime( + field: KProperty1, +) = datetime(field.simpTableField) + +fun BaseTable.date( + field: KProperty1, +) = date(field.simpTableField) + +fun BaseTable.time( + field: KProperty1, +) = time(field.simpTableField) + +fun BaseTable.monthDay( + field: KProperty1, +) = monthDay(field.simpTableField) + + +fun BaseTable.yearMonth( + field: KProperty1, +) = yearMonth(field.simpTableField) + + +fun BaseTable.year( + field: KProperty1, +) = year(field.simpTableField) + +fun BaseTable.uuid( + field: KProperty1, +) = uuid(field.simpTableField) + +fun > BaseTable.enum( + field: KProperty1, + typeRef: TypeReference, +) = enum(field.simpTableField, typeRef) + +fun > BaseTable.enum( + field: KProperty1, + type: Class, +) = registerColumn(field.simpTableField, EnumSqlType(type)) + diff --git a/ts-database/src/main/kotlin/cn/tursom/database/TypeAdapter.kt b/ts-database/src/main/kotlin/cn/tursom/database/TypeAdapter.kt new file mode 100644 index 0000000..e38fc29 --- /dev/null +++ b/ts-database/src/main/kotlin/cn/tursom/database/TypeAdapter.kt @@ -0,0 +1,25 @@ +package cn.tursom.database + +import me.liuwj.ktorm.schema.BaseTable +import me.liuwj.ktorm.schema.Column +import kotlin.reflect.KProperty1 + +/** + * 将属性转化为表列的适配器 + */ +interface TypeAdapter { + /** + * 该适配器的优先级,优先级越高则越优先匹配 + * 同等优先级先注册者先匹配 + */ + val level: Int get() = 0 + + /** + * 注册列 + * 如果失败则返回null + */ + fun register( + table: BaseTable, + field: KProperty1 + ): Column? +} \ No newline at end of file diff --git a/ts-database/src/main/kotlin/cn/tursom/database/TypeAdapterFactory.kt b/ts-database/src/main/kotlin/cn/tursom/database/TypeAdapterFactory.kt new file mode 100644 index 0000000..a82961f --- /dev/null +++ b/ts-database/src/main/kotlin/cn/tursom/database/TypeAdapterFactory.kt @@ -0,0 +1,76 @@ +package cn.tursom.database + +import com.ddbes.kotlin.classutil.getClassByPackage +import com.ddbes.kotlin.clone.InstantAllocator +import com.ddbes.kotlin.uncheckedCast +import me.liuwj.ktorm.schema.BaseTable +import me.liuwj.ktorm.schema.Column +import java.util.concurrent.ConcurrentSkipListMap +import java.util.concurrent.CopyOnWriteArraySet +import kotlin.reflect.KProperty1 +import kotlin.reflect.full.isSubclassOf + +/** + * 注册类型适配器的工厂 + */ +object TypeAdapterFactory { + private val adapterMap = ConcurrentSkipListMap>>() + + init { + scanPackage(TypeAdapterFactory::class.java.`package`.name + ".typeadapter") + } + + private fun getAdapterQueue(level: Int): MutableCollection> { + var set = adapterMap[-level] + if (set == null) { + synchronized(this) { + adapterMap[-level] = CopyOnWriteArraySet() + set = adapterMap[-level]!! + } + } + return set!! + } + + /** + * 扫描包并注册适配器 + */ + fun scanPackage( + pkg: String, + classLoader: ClassLoader = this.javaClass.classLoader, + ) { + classLoader.getClassByPackage(pkg).forEach { + try { + val clazz = Class.forName(it).kotlin + if (clazz.isSubclassOf(TypeAdapter::class)) { + val adapter: TypeAdapter<*> = InstantAllocator[clazz].uncheckedCast() + registerAdapter(adapter) + } + } catch (e: Throwable) { + } + } + } + + /** + * 注册适配器实例 + */ + fun registerAdapter(adapter: TypeAdapter<*>) { + getAdapterQueue(adapter.level).add(adapter) + } + + fun register( + table: BaseTable<*>, + field: KProperty1<*, *>, + ): Column<*>? { + adapterMap.forEach { (_, queue) -> + queue.forEach { + val column = it.register(table.uncheckedCast(), field.uncheckedCast()) + if (column != null) { + return column + } + } + } + return null + } + + override fun toString() = adapterMap.toString() +} diff --git a/ts-database/src/main/kotlin/cn/tursom/database/annotations/Json.kt b/ts-database/src/main/kotlin/cn/tursom/database/annotations/Json.kt new file mode 100644 index 0000000..b26a628 --- /dev/null +++ b/ts-database/src/main/kotlin/cn/tursom/database/annotations/Json.kt @@ -0,0 +1,7 @@ +package cn.tursom.database.annotations + + +@MustBeDocumented +@Retention(AnnotationRetention.RUNTIME) +@Target(AnnotationTarget.PROPERTY) +annotation class Json \ No newline at end of file diff --git a/ts-database/src/main/kotlin/cn/tursom/database/typeadapter/BooleanAdapter.kt b/ts-database/src/main/kotlin/cn/tursom/database/typeadapter/BooleanAdapter.kt new file mode 100644 index 0000000..31b2328 --- /dev/null +++ b/ts-database/src/main/kotlin/cn/tursom/database/typeadapter/BooleanAdapter.kt @@ -0,0 +1,20 @@ +package cn.tursom.database.typeadapter + +import cn.tursom.database.TypeAdapter +import cn.tursom.database.boolean +import me.liuwj.ktorm.schema.BaseTable +import me.liuwj.ktorm.schema.Column +import kotlin.reflect.KProperty1 +import kotlin.reflect.jvm.jvmErasure + +object BooleanAdapter : TypeAdapter { + override fun register(table: BaseTable, field: KProperty1): Column? { + return if (field.returnType.jvmErasure == Boolean::class) { + table.boolean(field) + } else { + null + } + } + + override fun toString() = "BooleanAdapter" +} \ No newline at end of file diff --git a/ts-database/src/main/kotlin/cn/tursom/database/typeadapter/BytesAdapter.kt b/ts-database/src/main/kotlin/cn/tursom/database/typeadapter/BytesAdapter.kt new file mode 100644 index 0000000..3720b9b --- /dev/null +++ b/ts-database/src/main/kotlin/cn/tursom/database/typeadapter/BytesAdapter.kt @@ -0,0 +1,20 @@ +package cn.tursom.database.typeadapter + +import cn.tursom.database.TypeAdapter +import cn.tursom.database.bytes +import me.liuwj.ktorm.schema.BaseTable +import me.liuwj.ktorm.schema.Column +import kotlin.reflect.KProperty1 +import kotlin.reflect.jvm.jvmErasure + +object BytesAdapter : TypeAdapter { + override fun register(table: BaseTable, field: KProperty1): Column? { + return if (field.returnType.jvmErasure == ByteArray::class) { + table.bytes(field) + } else { + null + } + } + + override fun toString() = "BytesAdapter" +} \ No newline at end of file diff --git a/ts-database/src/main/kotlin/cn/tursom/database/typeadapter/DateAdapter.kt b/ts-database/src/main/kotlin/cn/tursom/database/typeadapter/DateAdapter.kt new file mode 100644 index 0000000..e1b5219 --- /dev/null +++ b/ts-database/src/main/kotlin/cn/tursom/database/typeadapter/DateAdapter.kt @@ -0,0 +1,21 @@ +package cn.tursom.database.typeadapter + +import cn.tursom.database.TypeAdapter +import cn.tursom.database.jdbcDate +import me.liuwj.ktorm.schema.BaseTable +import me.liuwj.ktorm.schema.Column +import java.sql.Date +import kotlin.reflect.KProperty1 +import kotlin.reflect.jvm.jvmErasure + +object DateAdapter : TypeAdapter { + override fun register(table: BaseTable, field: KProperty1): Column? { + return if (field.returnType.jvmErasure == Date::class) { + table.jdbcDate(field) + } else { + null + } + } + + override fun toString() = "DateAdapter" +} \ No newline at end of file diff --git a/ts-database/src/main/kotlin/cn/tursom/database/typeadapter/DoubleAdapter.kt b/ts-database/src/main/kotlin/cn/tursom/database/typeadapter/DoubleAdapter.kt new file mode 100644 index 0000000..7c089df --- /dev/null +++ b/ts-database/src/main/kotlin/cn/tursom/database/typeadapter/DoubleAdapter.kt @@ -0,0 +1,20 @@ +package cn.tursom.database.typeadapter + +import cn.tursom.database.TypeAdapter +import cn.tursom.database.double +import me.liuwj.ktorm.schema.BaseTable +import me.liuwj.ktorm.schema.Column +import kotlin.reflect.KProperty1 +import kotlin.reflect.jvm.jvmErasure + +object DoubleAdapter : TypeAdapter { + override fun register(table: BaseTable, field: KProperty1): Column? { + return if (field.returnType.jvmErasure == Double::class) { + table.double(field) + } else { + null + } + } + + override fun toString() = "DoubleAdapter" +} \ No newline at end of file diff --git a/ts-database/src/main/kotlin/cn/tursom/database/typeadapter/EnumAdapter.kt b/ts-database/src/main/kotlin/cn/tursom/database/typeadapter/EnumAdapter.kt new file mode 100644 index 0000000..1b5dbc5 --- /dev/null +++ b/ts-database/src/main/kotlin/cn/tursom/database/typeadapter/EnumAdapter.kt @@ -0,0 +1,28 @@ +package cn.tursom.database.typeadapter + +import cn.tursom.database.TypeAdapter +import com.ddbes.kotlin.jdbc.simpTableField +import com.ddbes.kotlin.uncheckedCast +import me.liuwj.ktorm.schema.BaseTable +import me.liuwj.ktorm.schema.Column +import me.liuwj.ktorm.schema.EnumSqlType +import kotlin.reflect.KProperty1 +import kotlin.reflect.full.isSubclassOf +import kotlin.reflect.jvm.jvmErasure + +object EnumAdapter : TypeAdapter { + enum class EnumType + + override fun register(table: BaseTable, field: KProperty1): Column? { + val kClass = field.returnType.jvmErasure + return if (kClass.isSubclassOf(Enum::class)) { + table.registerColumn(field.simpTableField, EnumSqlType(kClass.java.uncheckedCast())) + .uncheckedCast() + } else { + null + } + } + + override fun toString() = "EnumAdapter" + +} \ No newline at end of file diff --git a/ts-database/src/main/kotlin/cn/tursom/database/typeadapter/FloatAdapter.kt b/ts-database/src/main/kotlin/cn/tursom/database/typeadapter/FloatAdapter.kt new file mode 100644 index 0000000..cbecf76 --- /dev/null +++ b/ts-database/src/main/kotlin/cn/tursom/database/typeadapter/FloatAdapter.kt @@ -0,0 +1,20 @@ +package cn.tursom.database.typeadapter + +import cn.tursom.database.TypeAdapter +import cn.tursom.database.float +import me.liuwj.ktorm.schema.BaseTable +import me.liuwj.ktorm.schema.Column +import kotlin.reflect.KProperty1 +import kotlin.reflect.jvm.jvmErasure + +object FloatAdapter : TypeAdapter { + override fun register(table: BaseTable, field: KProperty1): Column? { + return if (field.returnType.jvmErasure == Float::class) { + table.float(field) + } else { + null + } + } + + override fun toString() = "FloatAdapter" +} \ No newline at end of file diff --git a/ts-database/src/main/kotlin/cn/tursom/database/typeadapter/InstantAdapter.kt b/ts-database/src/main/kotlin/cn/tursom/database/typeadapter/InstantAdapter.kt new file mode 100644 index 0000000..eda69b9 --- /dev/null +++ b/ts-database/src/main/kotlin/cn/tursom/database/typeadapter/InstantAdapter.kt @@ -0,0 +1,21 @@ +package cn.tursom.database.typeadapter + +import cn.tursom.database.TypeAdapter +import cn.tursom.database.timestamp +import me.liuwj.ktorm.schema.BaseTable +import me.liuwj.ktorm.schema.Column +import java.time.Instant +import kotlin.reflect.KProperty1 +import kotlin.reflect.jvm.jvmErasure + +object InstantAdapter : TypeAdapter { + override fun register(table: BaseTable, field: KProperty1): Column? { + return if (field.returnType.jvmErasure == Instant::class) { + table.timestamp(field) + } else { + null + } + } + + override fun toString() = "InstantAdapter" +} \ No newline at end of file diff --git a/ts-database/src/main/kotlin/cn/tursom/database/typeadapter/IntAdapter.kt b/ts-database/src/main/kotlin/cn/tursom/database/typeadapter/IntAdapter.kt new file mode 100644 index 0000000..1a2e2ee --- /dev/null +++ b/ts-database/src/main/kotlin/cn/tursom/database/typeadapter/IntAdapter.kt @@ -0,0 +1,20 @@ +package cn.tursom.database.typeadapter + +import cn.tursom.database.TypeAdapter +import cn.tursom.database.int +import me.liuwj.ktorm.schema.BaseTable +import me.liuwj.ktorm.schema.Column +import kotlin.reflect.KProperty1 +import kotlin.reflect.jvm.jvmErasure + +object IntAdapter : TypeAdapter { + override fun register(table: BaseTable, field: KProperty1): Column? { + return if (field.returnType.jvmErasure == Int::class) { + table.int(field) + } else { + null + } + } + + override fun toString() = "IntAdapter" +} \ No newline at end of file diff --git a/ts-database/src/main/kotlin/cn/tursom/database/typeadapter/IntAdapterAdapter.kt b/ts-database/src/main/kotlin/cn/tursom/database/typeadapter/IntAdapterAdapter.kt new file mode 100644 index 0000000..e9c69be --- /dev/null +++ b/ts-database/src/main/kotlin/cn/tursom/database/typeadapter/IntAdapterAdapter.kt @@ -0,0 +1,21 @@ +package cn.tursom.database.typeadapter + +import cn.tursom.database.TypeAdapter +import cn.tursom.database.decimal +import me.liuwj.ktorm.schema.BaseTable +import me.liuwj.ktorm.schema.Column +import java.math.BigDecimal +import kotlin.reflect.KProperty1 +import kotlin.reflect.jvm.jvmErasure + +object IntAdapterAdapter : TypeAdapter { + override fun register(table: BaseTable, field: KProperty1): Column? { + return if (field.returnType.jvmErasure == BigDecimal::class) { + table.decimal(field) + } else { + null + } + } + + override fun toString() = "IntAdapterAdapter" +} \ No newline at end of file diff --git a/ts-database/src/main/kotlin/cn/tursom/database/typeadapter/JsonAdapter.kt b/ts-database/src/main/kotlin/cn/tursom/database/typeadapter/JsonAdapter.kt new file mode 100644 index 0000000..4122ae4 --- /dev/null +++ b/ts-database/src/main/kotlin/cn/tursom/database/typeadapter/JsonAdapter.kt @@ -0,0 +1,23 @@ +package cn.tursom.database.typeadapter + +import cn.tursom.database.TypeAdapter +import cn.tursom.database.annotations.Json +import cn.tursom.database.json +import me.liuwj.ktorm.schema.BaseTable +import me.liuwj.ktorm.schema.Column +import kotlin.reflect.KProperty1 +import kotlin.reflect.full.findAnnotation + +object JsonAdapter : TypeAdapter { + override val level: Int get() = -16 + + override fun register(table: BaseTable, field: KProperty1): Column? { + return if (field.findAnnotation() != null) { + table.json(field) + } else { + null + } + } + + override fun toString() = "JsonAdapter" +} \ No newline at end of file diff --git a/ts-database/src/main/kotlin/cn/tursom/database/typeadapter/LocalDateAdapter.kt b/ts-database/src/main/kotlin/cn/tursom/database/typeadapter/LocalDateAdapter.kt new file mode 100644 index 0000000..2638b58 --- /dev/null +++ b/ts-database/src/main/kotlin/cn/tursom/database/typeadapter/LocalDateAdapter.kt @@ -0,0 +1,21 @@ +package cn.tursom.database.typeadapter + +import cn.tursom.database.TypeAdapter +import cn.tursom.database.date +import me.liuwj.ktorm.schema.BaseTable +import me.liuwj.ktorm.schema.Column +import java.time.LocalDate +import kotlin.reflect.KProperty1 +import kotlin.reflect.jvm.jvmErasure + +object LocalDateAdapter : TypeAdapter { + override fun register(table: BaseTable, field: KProperty1): Column? { + return if (field.returnType.jvmErasure == LocalDate::class) { + table.date(field) + } else { + null + } + } + + override fun toString() = "LocalDateAdapter" +} \ No newline at end of file diff --git a/ts-database/src/main/kotlin/cn/tursom/database/typeadapter/LocalDateTimeAdapter.kt b/ts-database/src/main/kotlin/cn/tursom/database/typeadapter/LocalDateTimeAdapter.kt new file mode 100644 index 0000000..b490c0e --- /dev/null +++ b/ts-database/src/main/kotlin/cn/tursom/database/typeadapter/LocalDateTimeAdapter.kt @@ -0,0 +1,21 @@ +package cn.tursom.database.typeadapter + +import cn.tursom.database.TypeAdapter +import cn.tursom.database.datetime +import me.liuwj.ktorm.schema.BaseTable +import me.liuwj.ktorm.schema.Column +import java.time.LocalDateTime +import kotlin.reflect.KProperty1 +import kotlin.reflect.jvm.jvmErasure + +object LocalDateTimeAdapter : TypeAdapter { + override fun register(table: BaseTable, field: KProperty1): Column? { + return if (field.returnType.jvmErasure == LocalDateTime::class) { + table.datetime(field) + } else { + null + } + } + + override fun toString() = "LocalDateTimeAdapter" +} \ No newline at end of file diff --git a/ts-database/src/main/kotlin/cn/tursom/database/typeadapter/LocalTimeAdapter.kt b/ts-database/src/main/kotlin/cn/tursom/database/typeadapter/LocalTimeAdapter.kt new file mode 100644 index 0000000..c80e3ab --- /dev/null +++ b/ts-database/src/main/kotlin/cn/tursom/database/typeadapter/LocalTimeAdapter.kt @@ -0,0 +1,21 @@ +package cn.tursom.database.typeadapter + +import cn.tursom.database.TypeAdapter +import cn.tursom.database.time +import me.liuwj.ktorm.schema.BaseTable +import me.liuwj.ktorm.schema.Column +import java.time.LocalTime +import kotlin.reflect.KProperty1 +import kotlin.reflect.jvm.jvmErasure + +object LocalTimeAdapter : TypeAdapter { + override fun register(table: BaseTable, field: KProperty1): Column? { + return if (field.returnType.jvmErasure == LocalTime::class) { + table.time(field) + } else { + null + } + } + + override fun toString() = "LocalTimeAdapter" +} \ No newline at end of file diff --git a/ts-database/src/main/kotlin/cn/tursom/database/typeadapter/LongAdapter.kt b/ts-database/src/main/kotlin/cn/tursom/database/typeadapter/LongAdapter.kt new file mode 100644 index 0000000..6a8ba9a --- /dev/null +++ b/ts-database/src/main/kotlin/cn/tursom/database/typeadapter/LongAdapter.kt @@ -0,0 +1,20 @@ +package cn.tursom.database.typeadapter + +import cn.tursom.database.TypeAdapter +import cn.tursom.database.long +import me.liuwj.ktorm.schema.BaseTable +import me.liuwj.ktorm.schema.Column +import kotlin.reflect.KProperty1 +import kotlin.reflect.jvm.jvmErasure + +object LongAdapter : TypeAdapter { + override fun register(table: BaseTable, field: KProperty1): Column? { + return if (field.returnType.jvmErasure == Long::class) { + table.long(field) + } else { + null + } + } + + override fun toString() = "LongAdapter" +} \ No newline at end of file diff --git a/ts-database/src/main/kotlin/cn/tursom/database/typeadapter/MonthDayAdapter.kt b/ts-database/src/main/kotlin/cn/tursom/database/typeadapter/MonthDayAdapter.kt new file mode 100644 index 0000000..385b71b --- /dev/null +++ b/ts-database/src/main/kotlin/cn/tursom/database/typeadapter/MonthDayAdapter.kt @@ -0,0 +1,21 @@ +package cn.tursom.database.typeadapter + +import cn.tursom.database.TypeAdapter +import cn.tursom.database.monthDay +import me.liuwj.ktorm.schema.BaseTable +import me.liuwj.ktorm.schema.Column +import java.time.MonthDay +import kotlin.reflect.KProperty1 +import kotlin.reflect.jvm.jvmErasure + +object MonthDayAdapter : TypeAdapter { + override fun register(table: BaseTable, field: KProperty1): Column? { + return if (field.returnType.jvmErasure == MonthDay::class) { + table.monthDay(field) + } else { + null + } + } + + override fun toString() = "MonthDayAdapter" +} \ No newline at end of file diff --git a/ts-database/src/main/kotlin/cn/tursom/database/typeadapter/StringAdapter.kt b/ts-database/src/main/kotlin/cn/tursom/database/typeadapter/StringAdapter.kt new file mode 100644 index 0000000..1aeb332 --- /dev/null +++ b/ts-database/src/main/kotlin/cn/tursom/database/typeadapter/StringAdapter.kt @@ -0,0 +1,20 @@ +package cn.tursom.database.typeadapter + +import cn.tursom.database.TypeAdapter +import cn.tursom.database.varchar +import me.liuwj.ktorm.schema.BaseTable +import me.liuwj.ktorm.schema.Column +import kotlin.reflect.KProperty1 +import kotlin.reflect.jvm.jvmErasure + +object StringAdapter : TypeAdapter { + override fun register(table: BaseTable, field: KProperty1): Column? { + return if (field.returnType.jvmErasure == String::class) { + table.varchar(field) + } else { + null + } + } + + override fun toString() = "StringAdapter" +} \ No newline at end of file diff --git a/ts-database/src/main/kotlin/cn/tursom/database/typeadapter/TimeAdapter.kt b/ts-database/src/main/kotlin/cn/tursom/database/typeadapter/TimeAdapter.kt new file mode 100644 index 0000000..7d13a0b --- /dev/null +++ b/ts-database/src/main/kotlin/cn/tursom/database/typeadapter/TimeAdapter.kt @@ -0,0 +1,21 @@ +package cn.tursom.database.typeadapter + +import cn.tursom.database.TypeAdapter +import cn.tursom.database.jdbcTime +import me.liuwj.ktorm.schema.BaseTable +import me.liuwj.ktorm.schema.Column +import java.sql.Time +import kotlin.reflect.KProperty1 +import kotlin.reflect.jvm.jvmErasure + +object TimeAdapter : TypeAdapter