mirror of
				https://github.com/InsanusMokrassar/MicroUtils.git
				synced 2025-10-31 12:10:29 +00:00 
			
		
		
		
	Compare commits
	
		
			7 Commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 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" | ||||
|  | ||||
| # 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.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