mirror of
				https://github.com/InsanusMokrassar/MicroUtils.git
				synced 2025-11-04 06:00:22 +00:00 
			
		
		
		
	Compare commits
	
		
			9 Commits
		
	
	
		
			v0.26.4
			...
			renovate/s
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					08752c70d8 | ||
| 9dad353957 | |||
| 89e16b7bdb | |||
| c2965da341 | |||
| ffb072dc5f | |||
| a247dbcb02 | |||
| 1dd71175f4 | |||
| bbe62c0e7b | |||
| 9822ff321b | 
							
								
								
									
										15
									
								
								CHANGELOG.md
									
									
									
									
									
								
							
							
						
						
									
										15
									
								
								CHANGELOG.md
									
									
									
									
									
								
							@@ -1,5 +1,20 @@
 | 
			
		||||
# Changelog
 | 
			
		||||
 | 
			
		||||
## 0.26.6
 | 
			
		||||
 | 
			
		||||
* `Versions`:
 | 
			
		||||
    * `Ktor`: `3.3.0` -> `3.3.1`
 | 
			
		||||
    * `Okio`: `3.16.0` -> `3.16.2`
 | 
			
		||||
 | 
			
		||||
## 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.6
 | 
			
		||||
android_code_version=305
 | 
			
		||||
 
 | 
			
		||||
@@ -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"
 | 
			
		||||
jb-dokka = "2.1.0"
 | 
			
		||||
 | 
			
		||||
sqlite = "3.50.1.0"
 | 
			
		||||
# 3.50.3.0 contains bug https://github.com/InsanusMokrassar/MicroUtils/actions/runs/18138301958/job/51629588088
 | 
			
		||||
sqlite = "3.50.3.0"
 | 
			
		||||
 | 
			
		||||
korlibs = "5.4.0"
 | 
			
		||||
uuid = "0.8.4"
 | 
			
		||||
 | 
			
		||||
ktor = "3.2.3"
 | 
			
		||||
ktor = "3.3.1"
 | 
			
		||||
 | 
			
		||||
gh-release = "2.5.2"
 | 
			
		||||
 | 
			
		||||
koin = "4.1.0"
 | 
			
		||||
koin = "4.1.1"
 | 
			
		||||
 | 
			
		||||
okio = "3.16.0"
 | 
			
		||||
okio = "3.16.2"
 | 
			
		||||
 | 
			
		||||
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