mirror of
				https://github.com/InsanusMokrassar/MicroUtils.git
				synced 2025-10-31 12:10:29 +00:00 
			
		
		
		
	Compare commits
	
		
			9 Commits
		
	
	
		
			v0.26.4
			...
			renovate/k
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|  | 5b7f31de22 | ||
| 9dad353957 | |||
| 89e16b7bdb | |||
| c2965da341 | |||
| ffb072dc5f | |||
| a247dbcb02 | |||
| 1dd71175f4 | |||
| bbe62c0e7b | |||
| 9822ff321b | 
							
								
								
									
										15
									
								
								CHANGELOG.md
									
									
									
									
									
								
							
							
						
						
									
										15
									
								
								CHANGELOG.md
									
									
									
									
									
								
							| @@ -1,5 +1,20 @@ | |||||||
| # Changelog | # 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 | ## 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.6 | ||||||
| android_code_version=303 | android_code_version=305 | ||||||
|   | |||||||
| @@ -1,31 +1,32 @@ | |||||||
| [versions] | [versions] | ||||||
|  |  | ||||||
| kt = "2.2.10" | kt = "2.2.21" | ||||||
| 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.1.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.1" | ||||||
|  |  | ||||||
| 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.2" | ||||||
|  |  | ||||||
| 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