blob: c30e5c1bc9735cbdecc9aa1b2c82626018870c1d (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
|
package cat.freya.khs.db
import cat.freya.khs.Khs
import cat.freya.khs.config.DatabaseConfig
import cat.freya.khs.config.DatabaseType
import com.zaxxer.hikari.HikariConfig
import com.zaxxer.hikari.HikariDataSource
import javax.sql.DataSource
abstract class Driver {
abstract val driverClass: String
abstract fun jdbcUrl(): String
abstract fun configure(hikari: HikariConfig)
fun connect(): DataSource {
// load driver for some reason
Class.forName(driverClass)
val cores = Runtime.getRuntime().availableProcessors()
val hikari =
HikariConfig().apply {
jdbcUrl = jdbcUrl()
driverClassName = driverClass
maximumPoolSize = minOf(cores, 8)
configure(this)
}
return HikariDataSource(hikari)
}
}
class SqliteDriver(val path: String) : Driver() {
override val driverClass = "org.sqlite.JDBC"
override fun jdbcUrl(): String {
return "jdbc:sqlite:$path"
}
override fun configure(hikari: HikariConfig) {
// sqlite is single threaded
hikari.maximumPoolSize = 1
}
}
class MysqlDriver(val config: DatabaseConfig) : Driver() {
override val driverClass = "com.mysql.cj.jdbc.Driver"
override fun jdbcUrl(): String {
val port = config.port ?: 3006u
return "jdbc:mysql://${config.host}:${port}/${config.database}"
}
override fun configure(hikari: HikariConfig) {
hikari.username = config.username
hikari.password = config.password
}
}
class PostgresDriver(val config: DatabaseConfig) : Driver() {
override val driverClass = "org.postgresql.Driver"
override fun jdbcUrl(): String {
val port = config.port ?: 5432u
return "jdbc:postgresql://${config.host}:${port}/${config.database}"
}
override fun configure(hikari: HikariConfig) {
hikari.username = config.username
hikari.password = config.password
}
}
fun getDriver(plugin: Khs): Driver =
when (plugin.config.database.type) {
DatabaseType.SQLITE -> SqliteDriver(plugin.shim.sqliteDatabasePath)
DatabaseType.MYSQL -> MysqlDriver(plugin.config.database)
DatabaseType.POSTGRES -> PostgresDriver(plugin.config.database)
}
|