mirror of
https://github.com/InsanusMokrassar/MicroUtils.git
synced 2025-10-05 15:19:27 +00:00
Compare commits
4 Commits
Author | SHA1 | Date | |
---|---|---|---|
a247dbcb02 | |||
1dd71175f4 | |||
bbe62c0e7b | |||
9822ff321b |
@@ -1,5 +1,14 @@
|
|||||||
# Changelog
|
# Changelog
|
||||||
|
|
||||||
|
## 0.26.5
|
||||||
|
|
||||||
|
* `Versions`:
|
||||||
|
* `Kotlin`: `2.2.10` -> `2.2.20`
|
||||||
|
* `KSLog`: `1.5.0` -> `1.5.1`
|
||||||
|
* `Ktor`: `3.2.3` -> `3.3.0`
|
||||||
|
* `KotlinX Browser`: `0.3` -> `0.5.0`
|
||||||
|
* `Koin`: `4.1.0` -> `4.1.1`
|
||||||
|
|
||||||
## 0.26.4
|
## 0.26.4
|
||||||
|
|
||||||
* `Common`:
|
* `Common`:
|
||||||
|
@@ -18,5 +18,5 @@ crypto_js_version=4.1.1
|
|||||||
# Project data
|
# Project data
|
||||||
|
|
||||||
group=dev.inmo
|
group=dev.inmo
|
||||||
version=0.26.4
|
version=0.26.5
|
||||||
android_code_version=303
|
android_code_version=304
|
||||||
|
@@ -1,31 +1,32 @@
|
|||||||
[versions]
|
[versions]
|
||||||
|
|
||||||
kt = "2.2.10"
|
kt = "2.2.20"
|
||||||
kt-serialization = "1.9.0"
|
kt-serialization = "1.9.0"
|
||||||
kt-coroutines = "1.10.2"
|
kt-coroutines = "1.10.2"
|
||||||
|
|
||||||
kotlinx-browser = "0.3"
|
kotlinx-browser = "0.5.0"
|
||||||
|
|
||||||
kslog = "1.5.0"
|
kslog = "1.5.1"
|
||||||
|
|
||||||
jb-compose = "1.8.2"
|
jb-compose = "1.8.2"
|
||||||
jb-exposed = "0.61.0"
|
jb-exposed = "0.61.0"
|
||||||
jb-dokka = "2.0.0"
|
jb-dokka = "2.0.0"
|
||||||
|
|
||||||
|
# 3.50.3.0 contains bug https://github.com/InsanusMokrassar/MicroUtils/actions/runs/18138301958/job/51629588088
|
||||||
sqlite = "3.50.1.0"
|
sqlite = "3.50.1.0"
|
||||||
|
|
||||||
korlibs = "5.4.0"
|
korlibs = "5.4.0"
|
||||||
uuid = "0.8.4"
|
uuid = "0.8.4"
|
||||||
|
|
||||||
ktor = "3.2.3"
|
ktor = "3.3.0"
|
||||||
|
|
||||||
gh-release = "2.5.2"
|
gh-release = "2.5.2"
|
||||||
|
|
||||||
koin = "4.1.0"
|
koin = "4.1.1"
|
||||||
|
|
||||||
okio = "3.16.0"
|
okio = "3.16.0"
|
||||||
|
|
||||||
ksp = "2.2.10-2.0.2"
|
ksp = "2.2.20-2.0.3"
|
||||||
kotlin-poet = "2.2.0"
|
kotlin-poet = "2.2.0"
|
||||||
|
|
||||||
versions = "0.52.0"
|
versions = "0.52.0"
|
||||||
|
2
gradle/wrapper/gradle-wrapper.properties
vendored
2
gradle/wrapper/gradle-wrapper.properties
vendored
@@ -1,5 +1,5 @@
|
|||||||
distributionBase=GRADLE_USER_HOME
|
distributionBase=GRADLE_USER_HOME
|
||||||
distributionPath=wrapper/dists
|
distributionPath=wrapper/dists
|
||||||
distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-bin.zip
|
distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.3-bin.zip
|
||||||
zipStoreBase=GRADLE_USER_HOME
|
zipStoreBase=GRADLE_USER_HOME
|
||||||
zipStorePath=wrapper/dists
|
zipStorePath=wrapper/dists
|
||||||
|
@@ -1,10 +1,81 @@
|
|||||||
package dev.inmo.micro_utils.repos.exposed
|
package dev.inmo.micro_utils.repos.exposed
|
||||||
|
|
||||||
import org.jetbrains.exposed.sql.*
|
import org.jetbrains.exposed.sql.*
|
||||||
|
import org.jetbrains.exposed.sql.SchemaUtils.addMissingColumnsStatements
|
||||||
|
import org.jetbrains.exposed.sql.SchemaUtils.checkMappingConsistence
|
||||||
|
import org.jetbrains.exposed.sql.SchemaUtils.createStatements
|
||||||
|
import org.jetbrains.exposed.sql.transactions.TransactionManager
|
||||||
import org.jetbrains.exposed.sql.transactions.transaction
|
import org.jetbrains.exposed.sql.transactions.transaction
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Code in this function mostly duplicates Exposed [SchemaUtils.createMissingTablesAndColumns]. It made due to deprecation
|
||||||
|
* status of the last one and potential lost of it in future updates.
|
||||||
|
*
|
||||||
|
* Code doing:
|
||||||
|
*
|
||||||
|
* * Creating missed tables
|
||||||
|
* * Altering missed tables (where possible)
|
||||||
|
* * Calculate problems with [checkMappingConsistence] and add them in execution too
|
||||||
|
*
|
||||||
|
* All changes made in [transaction] with [database] as its `db` argument
|
||||||
|
*/
|
||||||
|
fun initTablesInTransaction(vararg tables: Table, database: Database, inBatch: Boolean = false, withLogs: Boolean = true) {
|
||||||
|
transaction(database) {
|
||||||
|
fun <R> logTimeSpent(message: String, withLogs: Boolean, block: () -> R): R {
|
||||||
|
return if (withLogs) {
|
||||||
|
val start = System.currentTimeMillis()
|
||||||
|
val answer = block()
|
||||||
|
exposedLogger.info(message + " took " + (System.currentTimeMillis() - start) + "ms")
|
||||||
|
answer
|
||||||
|
} else {
|
||||||
|
block()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
fun Transaction.execStatements(inBatch: Boolean, statements: List<String>) {
|
||||||
|
if (inBatch) {
|
||||||
|
execInBatch(statements)
|
||||||
|
} else {
|
||||||
|
for (statement in statements) {
|
||||||
|
exec(statement)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
with(TransactionManager.current()) {
|
||||||
|
db.dialect.resetCaches()
|
||||||
|
val createStatements = logTimeSpent("Preparing create tables statements", withLogs) {
|
||||||
|
createStatements(*tables)
|
||||||
|
}
|
||||||
|
logTimeSpent("Executing create tables statements", withLogs) {
|
||||||
|
execStatements(inBatch, createStatements)
|
||||||
|
commit()
|
||||||
|
}
|
||||||
|
|
||||||
|
val alterStatements = logTimeSpent("Preparing alter table statements", withLogs) {
|
||||||
|
addMissingColumnsStatements(tables = tables, withLogs)
|
||||||
|
}
|
||||||
|
logTimeSpent("Executing alter table statements", withLogs) {
|
||||||
|
execStatements(inBatch, alterStatements)
|
||||||
|
commit()
|
||||||
|
}
|
||||||
|
val executedStatements = createStatements + alterStatements
|
||||||
|
logTimeSpent("Checking mapping consistence", withLogs) {
|
||||||
|
val modifyTablesStatements = checkMappingConsistence(
|
||||||
|
tables = tables,
|
||||||
|
withLogs
|
||||||
|
).filter { it !in executedStatements }
|
||||||
|
execStatements(inBatch, modifyTablesStatements)
|
||||||
|
commit()
|
||||||
|
}
|
||||||
|
db.dialect.resetCaches()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fun Table.initTable(database: Database, inBatch: Boolean, withLogs: Boolean) {
|
||||||
|
initTablesInTransaction(this, database = database, inBatch = inBatch, withLogs = withLogs)
|
||||||
|
}
|
||||||
fun Table.initTable(database: Database) {
|
fun Table.initTable(database: Database) {
|
||||||
transaction(database) { SchemaUtils.createMissingTablesAndColumns(this@initTable) }
|
initTable(database = database, inBatch = false, withLogs = true)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun <T> T.initTable() where T: ExposedRepo, T: Table = initTable(database)
|
fun <T> T.initTable() where T: ExposedRepo, T: Table = initTable(database)
|
||||||
|
Reference in New Issue
Block a user