Compare commits

..

4 Commits

Author SHA1 Message Date
a247dbcb02 rollback sqlite update 2025-10-04 14:20:18 +06:00
1dd71175f4 update dependencies 2025-09-30 23:29:04 +06:00
bbe62c0e7b start 0.26.5 2025-09-30 23:06:42 +06:00
9822ff321b Merge pull request #607 from InsanusMokrassar/0.26.4
0.26.4
2025-09-02 01:33:50 +06:00
5 changed files with 91 additions and 10 deletions

View File

@@ -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`:

View File

@@ -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

View File

@@ -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"

View File

@@ -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

View File

@@ -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)