mirror of
https://github.com/BlockWorldGroup/Ledger-Databases.git
synced 2025-10-14 12:50:02 +08:00
Add support for database properties in config file
This commit is contained in:
@@ -1,8 +0,0 @@
|
||||
package net.quiltservertools.ledger.databases
|
||||
|
||||
enum class Databases {
|
||||
SQLITE,
|
||||
MYSQL,
|
||||
H2,
|
||||
POSTGRESQL
|
||||
}
|
@@ -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)
|
||||
}
|
||||
}
|
@@ -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")
|
||||
}
|
@@ -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)
|
||||
}
|
@@ -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()
|
||||
}
|
@@ -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")
|
||||
}
|
@@ -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
|
||||
}
|
@@ -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")
|
||||
}
|
@@ -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")
|
||||
}
|
@@ -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)
|
||||
}
|
@@ -8,10 +8,6 @@
|
||||
"authors": [
|
||||
"yitzy299"
|
||||
],
|
||||
"contact": {
|
||||
"homepage": "https://fabricmc.net/",
|
||||
"sources": "https://github.com/FabricMC/fabric-example-mod"
|
||||
},
|
||||
|
||||
"license": "LGPL-3.0",
|
||||
|
||||
|
Reference in New Issue
Block a user