@@ -7,19 +7,16 @@ import org.jetbrains.exposed.sql.*
7
7
import org.jetbrains.exposed.sql.transactions.experimental.newSuspendedTransaction
8
8
import org.jetbrains.exposed.sql.transactions.transaction
9
9
import org.jetbrains.exposed.sql.transactions.transactionManager
10
+ import org.jetbrains.exposed.sql.vendors.H2Dialect
10
11
import java.nio.file.Path
12
+ import java.util.concurrent.atomic.AtomicBoolean
11
13
import kotlin.coroutines.CoroutineContext
12
14
import kotlin.io.path.Path
13
15
import kotlin.io.path.div
14
16
import kotlin.io.path.pathString
15
17
16
- class DatabaseOperator (
17
- val schema : Schema ,
18
- val database : Database ,
19
- private val dataSource : HikariDataSource ,
20
- ) {
18
+ class DatabaseOperator (val database : Database ) {
21
19
fun close () {
22
- dataSource.close()
23
20
}
24
21
25
22
suspend inline fun <T > inSuspendedTransaction (
@@ -50,48 +47,42 @@ private const val DATA_FILE_NAME = "bonus.d"
50
47
51
48
fun connectDatabaseOperator (dataDir : Path = DEFAULT_DATA_DIR , schemaName : String ): DatabaseOperator {
52
49
val schema = Schema (schemaName)
50
+ // val dialect = H2Dialect()
53
51
54
- val jdbcUrl = " jdbc:h2:file: ${(dataDir / DATA_FILE_NAME ).pathString} ;" +
52
+ val jdbcUrl = " jdbc:h2:${(dataDir / DATA_FILE_NAME ).pathString} ;" +
55
53
" DB_CLOSE_DELAY=-1;" +
56
54
" DB_CLOSE_ON_EXIT=FALSE;" +
57
55
" TRACE_LEVEL_FILE=3;" +
58
56
" AUTO_RECONNECT=TRUE;"
59
57
60
- // val database = Database.connect(
61
- // url = jdbcUrl,
62
- // driver = "org.h2.Driver",
63
- // databaseConfig = DatabaseConfig {
64
- // // set other parameters here
65
- // defaultFetchSize = 100
66
- // keepLoadedReferencesOutOfTransaction = true
67
- // defaultMaxRepetitionDelay = 6000
68
- // }
69
- // )
58
+ // val connection
70
59
71
60
val config = hikariConfig {
72
61
this .jdbcUrl = jdbcUrl
73
62
driverClassName = " org.h2.Driver"
74
- poolName = " BonusDBPool"
63
+ // this.threadFactory
64
+ connectionInitSql = " CREATE SCHEMA IF NOT EXISTS $schemaName ; SET SCHEMA $schemaName "
75
65
minimumIdle = 1
76
66
maximumPoolSize = 1
77
-
78
67
}
79
68
80
- val dataSource = HikariDataSource (config)
69
+ val source = HikariDataSource (config)
81
70
82
71
val database = Database .connect(
83
- datasource = dataSource,
72
+ source,
73
+ setupConnection = { println (" Setup: $it " ) },
84
74
databaseConfig = DatabaseConfig {
85
75
// set other parameters here
86
76
defaultFetchSize = 100
87
- keepLoadedReferencesOutOfTransaction = true
77
+ // keepLoadedReferencesOutOfTransaction = true
88
78
defaultMaxRepetitionDelay = 6000
89
79
}
90
80
)
91
81
82
+
92
83
database.init (schema)
93
84
94
- return DatabaseOperator (schema, database, dataSource )
85
+ return DatabaseOperator (database)
95
86
}
96
87
97
88
private inline fun hikariConfig (block : HikariConfig .() -> Unit ): HikariConfig = HikariConfig ().apply {
@@ -105,6 +96,10 @@ fun Database.init(schema: Schema) {
105
96
SchemaUtils .createSchema(schema)
106
97
}
107
98
SchemaUtils .setSchema(schema)
108
- SchemaUtils .createMissingTablesAndColumns(* AllTables )
99
+ SchemaUtils .createMissingTablesAndColumns(
100
+ tables = AllTables ,
101
+ inBatch = true ,
102
+ withLogs = true ,
103
+ )
109
104
}
110
105
}
0 commit comments