mirror of
https://github.com/InsanusMokrassar/MicroUtils.git
synced 2025-10-13 03:10:34 +00:00
rollback sqlite update
This commit is contained in:
@@ -6,7 +6,6 @@
|
||||
* `Kotlin`: `2.2.10` -> `2.2.20`
|
||||
* `KSLog`: `1.5.0` -> `1.5.1`
|
||||
* `Ktor`: `3.2.3` -> `3.3.0`
|
||||
* `SQLite`: `3.50.1.0` -> `3.50.3.0`
|
||||
* `KotlinX Browser`: `0.3` -> `0.5.0`
|
||||
* `Koin`: `4.1.0` -> `4.1.1`
|
||||
|
||||
|
@@ -12,7 +12,8 @@ jb-compose = "1.8.2"
|
||||
jb-exposed = "0.61.0"
|
||||
jb-dokka = "2.0.0"
|
||||
|
||||
sqlite = "3.50.3.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"
|
||||
|
@@ -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