Add support for database properties in config file

This commit is contained in:
yitzy299
2021-12-26 22:57:09 +00:00
parent 0690358848
commit 236ea2e26b
16 changed files with 139 additions and 114 deletions

View File

@@ -1,8 +0,0 @@
package net.quiltservertools.ledger.databases
enum class Databases {
SQLITE,
MYSQL,
H2,
POSTGRESQL
}

View File

@@ -1,42 +0,0 @@
package net.quiltservertools.ledger.databases
import com.github.quiltservertools.ledger.Ledger
import com.github.quiltservertools.ledger.api.DatabaseExtension
import com.github.quiltservertools.libs.com.uchuhimo.konf.ConfigSpec
import net.minecraft.server.MinecraftServer
import net.minecraft.util.Identifier
import net.minecraft.util.WorldSavePath
import org.jetbrains.exposed.sql.Database
import kotlin.io.path.pathString
class LedgerDatabaseExtension : DatabaseExtension {
override fun getConfigSpecs(): List<ConfigSpec> = listOf(DatabaseExtensionSpec)
override fun getDatabase(server: MinecraftServer): Database {
return when (Ledger.config[DatabaseExtensionSpec.database]) {
Databases.SQLITE -> Database.connect(
url = "jdbc:sqlite:${server.getSavePath(WorldSavePath.ROOT).resolve("ledger.sqlite").pathString}",
)
Databases.H2 -> Database.connect(
url = "jdbc:h2:${server.getSavePath(WorldSavePath.ROOT).resolve("ledger.h2").toFile()};MODE=MySQL"
)
Databases.MYSQL -> Database.connect(
url = "jdbc:mysql://${Ledger.config[DatabaseExtensionSpec.url]}?rewriteBatchedStatements=true",
user = Ledger.config[DatabaseExtensionSpec.userName],
password = Ledger.config[DatabaseExtensionSpec.password]
)
Databases.POSTGRESQL -> Database.connect(
url = "jdbc:postgresql://${Ledger.config[DatabaseExtensionSpec.url]}?rewriteBatchedStatements=true",
user = Ledger.config[DatabaseExtensionSpec.userName],
password = Ledger.config[DatabaseExtensionSpec.password]
)
}
}
override fun getIdentifier(): Identifier = when (Ledger.config[DatabaseExtensionSpec.database]) {
Databases.MYSQL -> Ledger.identifier("mysql_extension")
Databases.H2 -> Ledger.identifier("h2_extension")
Databases.POSTGRESQL -> Ledger.identifier("postgresql_extension")
else -> Ledger.identifier(Ledger.DEFAULT_DATABASE)
}
}

View File

@@ -7,4 +7,5 @@ object DatabaseExtensionSpec : ConfigSpec("database_extensions") {
val userName by optional("root", "username")
val password by optional("", "password")
val url by optional("localhost", "url")
}
val properties by optional(listOf<String>(), "properties")
}

View File

@@ -0,0 +1,10 @@
package net.quiltservertools.ledger.databases
import net.quiltservertools.ledger.databases.databases.*
enum class Databases(val database: LedgerDatabase) {
SQLITE(SQLite),
MYSQL(MySQL),
H2(H2Database),
POSTGRESQL(PostgreSQL)
}

View File

@@ -0,0 +1,18 @@
package net.quiltservertools.ledger.databases
import com.github.quiltservertools.ledger.Ledger
import com.github.quiltservertools.ledger.api.DatabaseExtension
import com.github.quiltservertools.libs.com.uchuhimo.konf.ConfigSpec
import net.minecraft.server.MinecraftServer
import net.minecraft.util.Identifier
import org.jetbrains.exposed.sql.Database
class LedgerDatabaseExtension : DatabaseExtension {
override fun getConfigSpecs(): List<ConfigSpec> = listOf(DatabaseExtensionSpec)
override fun getDatabase(server: MinecraftServer): Database {
return Ledger.config[DatabaseExtensionSpec.database].database.getDatabase(server)
}
override fun getIdentifier(): Identifier = Ledger.config[DatabaseExtensionSpec.database].database.getDatabaseIdentifier()
}

View File

@@ -0,0 +1,14 @@
package net.quiltservertools.ledger.databases.databases
import com.github.quiltservertools.ledger.Ledger
import net.minecraft.server.MinecraftServer
import net.minecraft.util.WorldSavePath
import org.jetbrains.exposed.sql.Database
object H2Database : LedgerDatabase {
override fun getDatabase(server: MinecraftServer) = Database.connect(
url = "jdbc:h2:${server.getSavePath(WorldSavePath.ROOT).resolve("ledger.h2").toFile()};MODE=MySQL"
)
override fun getDatabaseIdentifier() = Ledger.identifier("h2")
}

View File

@@ -0,0 +1,10 @@
package net.quiltservertools.ledger.databases.databases
import net.minecraft.server.MinecraftServer
import net.minecraft.util.Identifier
import org.jetbrains.exposed.sql.Database
interface LedgerDatabase {
fun getDatabase(server: MinecraftServer): Database
fun getDatabaseIdentifier(): Identifier
}

View File

@@ -0,0 +1,22 @@
package net.quiltservertools.ledger.databases.databases
import com.github.quiltservertools.ledger.Ledger
import net.minecraft.server.MinecraftServer
import net.quiltservertools.ledger.databases.DatabaseExtensionSpec
import org.jetbrains.exposed.sql.Database
object MySQL : LedgerDatabase {
override fun getDatabase(server: MinecraftServer): Database {
var url = "jdbc:mysql://${Ledger.config[DatabaseExtensionSpec.url]}?rewriteBatchedStatements=true"
for (arg in Ledger.config[DatabaseExtensionSpec.properties]) {
url = url.plus("&$arg")
}
return Database.connect(
url = url,
user = Ledger.config[DatabaseExtensionSpec.userName],
password = Ledger.config[DatabaseExtensionSpec.password]
)
}
override fun getDatabaseIdentifier() = Ledger.identifier("mysql")
}

View File

@@ -0,0 +1,22 @@
package net.quiltservertools.ledger.databases.databases
import com.github.quiltservertools.ledger.Ledger
import net.minecraft.server.MinecraftServer
import net.quiltservertools.ledger.databases.DatabaseExtensionSpec
import org.jetbrains.exposed.sql.Database
object PostgreSQL : LedgerDatabase {
override fun getDatabase(server: MinecraftServer): Database {
var url = "jdbc:postgresql://${Ledger.config[DatabaseExtensionSpec.url]}?rewriteBatchedStatements=true"
for (arg in Ledger.config[DatabaseExtensionSpec.properties]) {
url = url.plus("&$arg")
}
return Database.connect(
url = url,
user = Ledger.config[DatabaseExtensionSpec.userName],
password = Ledger.config[DatabaseExtensionSpec.password]
)
}
override fun getDatabaseIdentifier() = Ledger.identifier("postgresql")
}

View File

@@ -0,0 +1,15 @@
package net.quiltservertools.ledger.databases.databases
import com.github.quiltservertools.ledger.Ledger
import net.minecraft.server.MinecraftServer
import net.minecraft.util.WorldSavePath
import org.jetbrains.exposed.sql.Database
import kotlin.io.path.pathString
object SQLite : LedgerDatabase {
override fun getDatabase(server: MinecraftServer) = Database.connect(
url = "jdbc:sqlite:${server.getSavePath(WorldSavePath.ROOT).resolve("ledger.sqlite").pathString}"
)
override fun getDatabaseIdentifier() = Ledger.identifier(Ledger.DEFAULT_DATABASE)
}

View File

@@ -8,10 +8,6 @@
"authors": [
"yitzy299"
],
"contact": {
"homepage": "https://fabricmc.net/",
"sources": "https://github.com/FabricMC/fabric-example-mod"
},
"license": "LGPL-3.0",