mirror of
https://github.com/InsanusMokrassar/MicroUtils.git
synced 2025-10-04 14:49:30 +00:00
Compare commits
4 Commits
Author | SHA1 | Date | |
---|---|---|---|
a247dbcb02 | |||
1dd71175f4 | |||
bbe62c0e7b | |||
9822ff321b |
@@ -1,5 +1,14 @@
|
||||
# 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
|
||||
|
||||
* `Common`:
|
||||
|
@@ -18,5 +18,5 @@ crypto_js_version=4.1.1
|
||||
# Project data
|
||||
|
||||
group=dev.inmo
|
||||
version=0.26.4
|
||||
android_code_version=303
|
||||
version=0.26.5
|
||||
android_code_version=304
|
||||
|
@@ -1,31 +1,32 @@
|
||||
[versions]
|
||||
|
||||
kt = "2.2.10"
|
||||
kt = "2.2.20"
|
||||
kt-serialization = "1.9.0"
|
||||
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-exposed = "0.61.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"
|
||||
|
||||
korlibs = "5.4.0"
|
||||
uuid = "0.8.4"
|
||||
|
||||
ktor = "3.2.3"
|
||||
ktor = "3.3.0"
|
||||
|
||||
gh-release = "2.5.2"
|
||||
|
||||
koin = "4.1.0"
|
||||
koin = "4.1.1"
|
||||
|
||||
okio = "3.16.0"
|
||||
|
||||
ksp = "2.2.10-2.0.2"
|
||||
ksp = "2.2.20-2.0.3"
|
||||
kotlin-poet = "2.2.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
|
||||
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
|
||||
zipStorePath=wrapper/dists
|
||||
|
@@ -1,10 +1,81 @@
|
||||
package dev.inmo.micro_utils.repos.exposed
|
||||
|
||||
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
|
||||
|
||||
/**
|
||||
* 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) {
|
||||
transaction(database) { SchemaUtils.createMissingTablesAndColumns(this@initTable) }
|
||||
initTable(database = database, inBatch = false, withLogs = true)
|
||||
}
|
||||
|
||||
fun <T> T.initTable() where T: ExposedRepo, T: Table = initTable(database)
|
||||
|
Reference in New Issue
Block a user