diff --git a/build.gradle b/build.gradle index 941953e..a6388ab 100644 --- a/build.gradle +++ b/build.gradle @@ -19,9 +19,6 @@ repositories { maven { url = "https://oss.sonatype.org/content/repositories/snapshots" } - maven { - url = "https://maven.bymartrixx.me/" - } } dependencies { @@ -34,20 +31,20 @@ dependencies { modImplementation "net.fabricmc.fabric-api:fabric-api:${project.fabric_version}" // Yes this has to be capitalised - modImplementation "com.github.quiltservertools:Ledger:1.3.0" + modImplementation "com.github.quiltservertools:Ledger:1.3.0+local" modImplementation "net.fabricmc:fabric-language-kotlin:1.9.4+kotlin.1.8.21" implementation("com.zaxxer:HikariCP:5.0.1") // H2 - implementation(include("com.h2database:h2:1.4.200")) + implementation(include("com.h2database:h2:2.2.224")) // MySQL - implementation(include('mysql:mysql-connector-java:8.0.19')) + implementation(include('mysql:mysql-connector-java:8.3.0')) // PostgreSQL - implementation(include("org.postgresql:postgresql:42.3.0")) + implementation(include("org.postgresql:postgresql:42.7.3")) } processResources { diff --git a/src/main/kotlin/net.quiltservertools.ledger.databases/LedgerDatabaseExtension.kt b/src/main/kotlin/net.quiltservertools.ledger.databases/LedgerDatabaseExtension.kt deleted file mode 100644 index b6dc1f5..0000000 --- a/src/main/kotlin/net.quiltservertools.ledger.databases/LedgerDatabaseExtension.kt +++ /dev/null @@ -1,50 +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 com.zaxxer.hikari.HikariConfig -import com.zaxxer.hikari.HikariDataSource -import net.minecraft.util.Identifier -import org.h2.jdbcx.JdbcDataSource -import org.sqlite.SQLiteDataSource -import java.nio.file.Path -import javax.sql.DataSource -import kotlin.io.path.pathString - -class LedgerDatabaseExtension : DatabaseExtension { - override fun getConfigSpecs(): List = listOf(DatabaseExtensionSpec) - - override fun getDataSource(fileLocation: Path): DataSource { - return when (Ledger.config[DatabaseExtensionSpec.database]) { - Databases.SQLITE -> SQLiteDataSource().apply { - url = "jdbc:sqlite:${fileLocation.resolve("ledger.sqlite").pathString}" - } - - Databases.H2 -> JdbcDataSource().apply { - setURL("jdbc:h2:${fileLocation.resolve("ledger.h2").pathString};MODE=MySQL") - } - - Databases.MYSQL -> HikariDataSource(HikariConfig().apply { - jdbcUrl = "jdbc:mysql://${Ledger.config[DatabaseExtensionSpec.url]}?rewriteBatchedStatements=true" - username = Ledger.config[DatabaseExtensionSpec.userName] - password = Ledger.config[DatabaseExtensionSpec.password] - maximumPoolSize = Ledger.config[DatabaseExtensionSpec.maxPoolSize] - }) - - Databases.POSTGRESQL -> HikariDataSource(HikariConfig().apply { - jdbcUrl = "jdbc:postgresql://${Ledger.config[DatabaseExtensionSpec.url]}?rewriteBatchedStatements=true" - username = Ledger.config[DatabaseExtensionSpec.userName] - password = Ledger.config[DatabaseExtensionSpec.password] - maximumPoolSize = Ledger.config[DatabaseExtensionSpec.maxPoolSize] - }) - } - } - - 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) - } -} diff --git a/src/main/kotlin/net/quiltservertools/ledger/databases/DatabaseExtensionSpec.kt b/src/main/kotlin/net/quiltservertools/ledger/databases/DatabaseExtensionSpec.kt index ead27c0..e38365b 100644 --- a/src/main/kotlin/net/quiltservertools/ledger/databases/DatabaseExtensionSpec.kt +++ b/src/main/kotlin/net/quiltservertools/ledger/databases/DatabaseExtensionSpec.kt @@ -1,11 +1,13 @@ package net.quiltservertools.ledger.databases -import com.github.quiltservertools.libs.com.uchuhimo.konf.ConfigSpec +import com.uchuhimo.konf.ConfigSpec object DatabaseExtensionSpec : ConfigSpec("database_extensions") { - val database by optional(Databases.SQLITE, "database") + val database by required("database") val userName by optional("root", "username") val password by optional("", "password") val url by optional("localhost", "url") + val properties by optional(mapOf(), "properties") val maxPoolSize by optional(10, "maxPoolSize") -} \ No newline at end of file + val connectionTimeout by optional(60000L, "connectionTimeout") +} diff --git a/src/main/kotlin/net/quiltservertools/ledger/databases/Databases.kt b/src/main/kotlin/net/quiltservertools/ledger/databases/Databases.kt index ee7fc19..ee83d2f 100644 --- a/src/main/kotlin/net/quiltservertools/ledger/databases/Databases.kt +++ b/src/main/kotlin/net/quiltservertools/ledger/databases/Databases.kt @@ -1,10 +1,15 @@ package net.quiltservertools.ledger.databases -import net.quiltservertools.ledger.databases.databases.* +import net.quiltservertools.ledger.databases.databases.H2Database +import net.quiltservertools.ledger.databases.databases.LedgerDatabase +import net.quiltservertools.ledger.databases.databases.MySQL +import net.quiltservertools.ledger.databases.databases.PostgreSQL +import net.quiltservertools.ledger.databases.databases.SQLite + enum class Databases(val database: LedgerDatabase) { - SQLITE(SQLite), MYSQL(MySQL), H2(H2Database), - POSTGRESQL(PostgreSQL) + POSTGRESQL(PostgreSQL), + SQLITE(SQLite) } \ No newline at end of file diff --git a/src/main/kotlin/net/quiltservertools/ledger/databases/LedgerDatabaseExtension.kt b/src/main/kotlin/net/quiltservertools/ledger/databases/LedgerDatabaseExtension.kt index 5994d73..0dce3d5 100644 --- a/src/main/kotlin/net/quiltservertools/ledger/databases/LedgerDatabaseExtension.kt +++ b/src/main/kotlin/net/quiltservertools/ledger/databases/LedgerDatabaseExtension.kt @@ -2,17 +2,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 com.uchuhimo.konf.ConfigSpec import net.minecraft.util.Identifier -import org.jetbrains.exposed.sql.Database +import java.nio.file.Path +import javax.sql.DataSource class LedgerDatabaseExtension : DatabaseExtension { override fun getConfigSpecs(): List = listOf(DatabaseExtensionSpec) - override fun getDatabase(server: MinecraftServer): Database { - return Ledger.config[DatabaseExtensionSpec.database].database.getDatabase(server) + override fun getDataSource(savePath: Path): DataSource { + return Ledger.config[DatabaseExtensionSpec.database].database.getDataSource(savePath) } - override fun getIdentifier(): Identifier = Ledger.config[DatabaseExtensionSpec.database].database.getDatabaseIdentifier() + override fun getIdentifier(): Identifier = + Ledger.config[DatabaseExtensionSpec.database].database.getDatabaseIdentifier() } diff --git a/src/main/kotlin/net/quiltservertools/ledger/databases/LedgerDatabases.kt b/src/main/kotlin/net/quiltservertools/ledger/databases/LedgerDatabases.kt index 088431d..1129d58 100644 --- a/src/main/kotlin/net/quiltservertools/ledger/databases/LedgerDatabases.kt +++ b/src/main/kotlin/net/quiltservertools/ledger/databases/LedgerDatabases.kt @@ -2,9 +2,15 @@ package net.quiltservertools.ledger.databases import com.github.quiltservertools.ledger.api.ExtensionManager import net.fabricmc.api.DedicatedServerModInitializer +import net.minecraft.util.Identifier + +const val MOD_ID = "ledger-databases" + +object LedgerDatabases : DedicatedServerModInitializer { -class LedgerDatabases : DedicatedServerModInitializer { override fun onInitializeServer() { ExtensionManager.registerExtension(LedgerDatabaseExtension()) } + + fun identifier(path: String) = Identifier(MOD_ID, path) } \ No newline at end of file diff --git a/src/main/kotlin/net/quiltservertools/ledger/databases/databases/H2Database.kt b/src/main/kotlin/net/quiltservertools/ledger/databases/databases/H2Database.kt index cdc6dce..b8a06d3 100644 --- a/src/main/kotlin/net/quiltservertools/ledger/databases/databases/H2Database.kt +++ b/src/main/kotlin/net/quiltservertools/ledger/databases/databases/H2Database.kt @@ -1,14 +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 net.quiltservertools.ledger.databases.LedgerDatabases +import org.h2.jdbcx.JdbcDataSource +import java.nio.file.Path +import javax.sql.DataSource +import kotlin.io.path.pathString 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 getDataSource(savePath: Path): DataSource = JdbcDataSource().apply { + setURL("jdbc:h2:${savePath.pathString};MODE=MySQL") + } - override fun getDatabaseIdentifier() = Ledger.identifier("h2") + override fun getDatabaseIdentifier() = LedgerDatabases.identifier("h2") } diff --git a/src/main/kotlin/net/quiltservertools/ledger/databases/databases/LedgerDatabase.kt b/src/main/kotlin/net/quiltservertools/ledger/databases/databases/LedgerDatabase.kt index 54983ca..bfe6224 100644 --- a/src/main/kotlin/net/quiltservertools/ledger/databases/databases/LedgerDatabase.kt +++ b/src/main/kotlin/net/quiltservertools/ledger/databases/databases/LedgerDatabase.kt @@ -1,10 +1,10 @@ package net.quiltservertools.ledger.databases.databases -import net.minecraft.server.MinecraftServer import net.minecraft.util.Identifier -import org.jetbrains.exposed.sql.Database +import java.nio.file.Path +import javax.sql.DataSource interface LedgerDatabase { - fun getDatabase(server: MinecraftServer): Database + fun getDataSource(savePath: Path): DataSource fun getDatabaseIdentifier(): Identifier } \ No newline at end of file diff --git a/src/main/kotlin/net/quiltservertools/ledger/databases/databases/MySQL.kt b/src/main/kotlin/net/quiltservertools/ledger/databases/databases/MySQL.kt index 8604f6f..f362422 100644 --- a/src/main/kotlin/net/quiltservertools/ledger/databases/databases/MySQL.kt +++ b/src/main/kotlin/net/quiltservertools/ledger/databases/databases/MySQL.kt @@ -1,22 +1,35 @@ package net.quiltservertools.ledger.databases.databases import com.github.quiltservertools.ledger.Ledger -import net.minecraft.server.MinecraftServer +import com.zaxxer.hikari.HikariConfig +import com.zaxxer.hikari.HikariDataSource import net.quiltservertools.ledger.databases.DatabaseExtensionSpec -import org.jetbrains.exposed.sql.Database +import net.quiltservertools.ledger.databases.LedgerDatabases +import java.nio.file.Path +import javax.sql.DataSource 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") + override fun getDataSource(savePath: Path): DataSource = HikariDataSource(HikariConfig().apply { + jdbcUrl = "jdbc:mysql://${Ledger.config[DatabaseExtensionSpec.url]}" + username = Ledger.config[DatabaseExtensionSpec.userName] + password = Ledger.config[DatabaseExtensionSpec.password] + maximumPoolSize = Ledger.config[DatabaseExtensionSpec.maxPoolSize] + connectionTimeout = Ledger.config[DatabaseExtensionSpec.connectionTimeout] + addDataSourceProperty("rewriteBatchedStatements", "true") + addDataSourceProperty("cachePrepStmts", true) + addDataSourceProperty("prepStmtCacheSize", 250) + addDataSourceProperty("prepStmtCacheSqlLimit", 2048) + addDataSourceProperty("useServerPrepStmts", true) + addDataSourceProperty("cacheCallableStmts", true) + addDataSourceProperty("cacheResultSetMetadata", true) + addDataSourceProperty("cacheServerConfiguration", true) + addDataSourceProperty("useLocalSessionState", true) + addDataSourceProperty("elideSetAutoCommits", true) + addDataSourceProperty("alwaysSendSetIsolation", false) + for ((key, value) in Ledger.config[DatabaseExtensionSpec.properties]) { + addDataSourceProperty(key, value) } - return Database.connect( - url = url, - user = Ledger.config[DatabaseExtensionSpec.userName], - password = Ledger.config[DatabaseExtensionSpec.password] - ) - } + }) - override fun getDatabaseIdentifier() = Ledger.identifier("mysql") + override fun getDatabaseIdentifier() = LedgerDatabases.identifier("mysql") } diff --git a/src/main/kotlin/net/quiltservertools/ledger/databases/databases/PostgreSQL.kt b/src/main/kotlin/net/quiltservertools/ledger/databases/databases/PostgreSQL.kt index 7da024c..9628fe7 100644 --- a/src/main/kotlin/net/quiltservertools/ledger/databases/databases/PostgreSQL.kt +++ b/src/main/kotlin/net/quiltservertools/ledger/databases/databases/PostgreSQL.kt @@ -1,22 +1,23 @@ package net.quiltservertools.ledger.databases.databases import com.github.quiltservertools.ledger.Ledger -import net.minecraft.server.MinecraftServer +import com.zaxxer.hikari.HikariConfig +import com.zaxxer.hikari.HikariDataSource import net.quiltservertools.ledger.databases.DatabaseExtensionSpec -import org.jetbrains.exposed.sql.Database +import net.quiltservertools.ledger.databases.LedgerDatabases +import java.nio.file.Path +import javax.sql.DataSource 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") + override fun getDataSource(savePath: Path): DataSource = HikariDataSource(HikariConfig().apply { + jdbcUrl = "jdbc:postgresql://${Ledger.config[DatabaseExtensionSpec.url]}" + username = Ledger.config[DatabaseExtensionSpec.userName] + password = Ledger.config[DatabaseExtensionSpec.password] + maximumPoolSize = Ledger.config[DatabaseExtensionSpec.maxPoolSize] + for ((key, value) in Ledger.config[DatabaseExtensionSpec.properties]) { + addDataSourceProperty(key, value) } - return Database.connect( - url = url, - user = Ledger.config[DatabaseExtensionSpec.userName], - password = Ledger.config[DatabaseExtensionSpec.password] - ) - } + }) - override fun getDatabaseIdentifier() = Ledger.identifier("postgresql") + override fun getDatabaseIdentifier() = LedgerDatabases.identifier("postgresql") } diff --git a/src/main/kotlin/net/quiltservertools/ledger/databases/databases/SQLite.kt b/src/main/kotlin/net/quiltservertools/ledger/databases/databases/SQLite.kt index aa6fe9b..c740291 100644 --- a/src/main/kotlin/net/quiltservertools/ledger/databases/databases/SQLite.kt +++ b/src/main/kotlin/net/quiltservertools/ledger/databases/databases/SQLite.kt @@ -1,15 +1,13 @@ 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 +import org.sqlite.SQLiteDataSource +import java.nio.file.Path object SQLite : LedgerDatabase { - override fun getDatabase(server: MinecraftServer) = Database.connect( - url = "jdbc:sqlite:${server.getSavePath(WorldSavePath.ROOT).resolve("ledger.sqlite").pathString}" - ) + override fun getDataSource(savePath: Path) = SQLiteDataSource().apply { + url = "jdbc:sqlite:$savePath" + } override fun getDatabaseIdentifier() = Ledger.identifier(Ledger.DEFAULT_DATABASE) }