Redo things

This commit is contained in:
Potatoboy9999 2024-04-09 19:32:52 -07:00
parent 8b925fabf9
commit 7bbc2ab8ab
No known key found for this signature in database
GPG Key ID: 59B6B6930BF7F2AB
11 changed files with 88 additions and 114 deletions

View File

@ -19,9 +19,6 @@ repositories {
maven { maven {
url = "https://oss.sonatype.org/content/repositories/snapshots" url = "https://oss.sonatype.org/content/repositories/snapshots"
} }
maven {
url = "https://maven.bymartrixx.me/"
}
} }
dependencies { dependencies {
@ -34,20 +31,20 @@ dependencies {
modImplementation "net.fabricmc.fabric-api:fabric-api:${project.fabric_version}" modImplementation "net.fabricmc.fabric-api:fabric-api:${project.fabric_version}"
// Yes this has to be capitalised // 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" modImplementation "net.fabricmc:fabric-language-kotlin:1.9.4+kotlin.1.8.21"
implementation("com.zaxxer:HikariCP:5.0.1") implementation("com.zaxxer:HikariCP:5.0.1")
// H2 // H2
implementation(include("com.h2database:h2:1.4.200")) implementation(include("com.h2database:h2:2.2.224"))
// MySQL // MySQL
implementation(include('mysql:mysql-connector-java:8.0.19')) implementation(include('mysql:mysql-connector-java:8.3.0'))
// PostgreSQL // PostgreSQL
implementation(include("org.postgresql:postgresql:42.3.0")) implementation(include("org.postgresql:postgresql:42.7.3"))
} }
processResources { processResources {

View File

@ -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<ConfigSpec> = 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)
}
}

View File

@ -1,11 +1,13 @@
package net.quiltservertools.ledger.databases package net.quiltservertools.ledger.databases
import com.github.quiltservertools.libs.com.uchuhimo.konf.ConfigSpec import com.uchuhimo.konf.ConfigSpec
object DatabaseExtensionSpec : ConfigSpec("database_extensions") { object DatabaseExtensionSpec : ConfigSpec("database_extensions") {
val database by optional(Databases.SQLITE, "database") val database by required<Databases>("database")
val userName by optional("root", "username") val userName by optional("root", "username")
val password by optional("", "password") val password by optional("", "password")
val url by optional("localhost", "url") val url by optional("localhost", "url")
val properties by optional(mapOf<String, String>(), "properties")
val maxPoolSize by optional(10, "maxPoolSize") val maxPoolSize by optional(10, "maxPoolSize")
val connectionTimeout by optional(60000L, "connectionTimeout")
} }

View File

@ -1,10 +1,15 @@
package net.quiltservertools.ledger.databases 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) { enum class Databases(val database: LedgerDatabase) {
SQLITE(SQLite),
MYSQL(MySQL), MYSQL(MySQL),
H2(H2Database), H2(H2Database),
POSTGRESQL(PostgreSQL) POSTGRESQL(PostgreSQL),
SQLITE(SQLite)
} }

View File

@ -2,17 +2,18 @@ package net.quiltservertools.ledger.databases
import com.github.quiltservertools.ledger.Ledger import com.github.quiltservertools.ledger.Ledger
import com.github.quiltservertools.ledger.api.DatabaseExtension import com.github.quiltservertools.ledger.api.DatabaseExtension
import com.github.quiltservertools.libs.com.uchuhimo.konf.ConfigSpec import com.uchuhimo.konf.ConfigSpec
import net.minecraft.server.MinecraftServer
import net.minecraft.util.Identifier import net.minecraft.util.Identifier
import org.jetbrains.exposed.sql.Database import java.nio.file.Path
import javax.sql.DataSource
class LedgerDatabaseExtension : DatabaseExtension { class LedgerDatabaseExtension : DatabaseExtension {
override fun getConfigSpecs(): List<ConfigSpec> = listOf(DatabaseExtensionSpec) override fun getConfigSpecs(): List<ConfigSpec> = listOf(DatabaseExtensionSpec)
override fun getDatabase(server: MinecraftServer): Database { override fun getDataSource(savePath: Path): DataSource {
return Ledger.config[DatabaseExtensionSpec.database].database.getDatabase(server) 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()
} }

View File

@ -2,9 +2,15 @@ package net.quiltservertools.ledger.databases
import com.github.quiltservertools.ledger.api.ExtensionManager import com.github.quiltservertools.ledger.api.ExtensionManager
import net.fabricmc.api.DedicatedServerModInitializer 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() { override fun onInitializeServer() {
ExtensionManager.registerExtension(LedgerDatabaseExtension()) ExtensionManager.registerExtension(LedgerDatabaseExtension())
} }
fun identifier(path: String) = Identifier(MOD_ID, path)
} }

View File

@ -1,14 +1,15 @@
package net.quiltservertools.ledger.databases.databases package net.quiltservertools.ledger.databases.databases
import com.github.quiltservertools.ledger.Ledger import net.quiltservertools.ledger.databases.LedgerDatabases
import net.minecraft.server.MinecraftServer import org.h2.jdbcx.JdbcDataSource
import net.minecraft.util.WorldSavePath import java.nio.file.Path
import org.jetbrains.exposed.sql.Database import javax.sql.DataSource
import kotlin.io.path.pathString
object H2Database : LedgerDatabase { object H2Database : LedgerDatabase {
override fun getDatabase(server: MinecraftServer) = Database.connect( override fun getDataSource(savePath: Path): DataSource = JdbcDataSource().apply {
url = "jdbc:h2:${server.getSavePath(WorldSavePath.ROOT).resolve("ledger.h2").toFile()};MODE=MySQL" setURL("jdbc:h2:${savePath.pathString};MODE=MySQL")
) }
override fun getDatabaseIdentifier() = Ledger.identifier("h2") override fun getDatabaseIdentifier() = LedgerDatabases.identifier("h2")
} }

View File

@ -1,10 +1,10 @@
package net.quiltservertools.ledger.databases.databases package net.quiltservertools.ledger.databases.databases
import net.minecraft.server.MinecraftServer
import net.minecraft.util.Identifier import net.minecraft.util.Identifier
import org.jetbrains.exposed.sql.Database import java.nio.file.Path
import javax.sql.DataSource
interface LedgerDatabase { interface LedgerDatabase {
fun getDatabase(server: MinecraftServer): Database fun getDataSource(savePath: Path): DataSource
fun getDatabaseIdentifier(): Identifier fun getDatabaseIdentifier(): Identifier
} }

View File

@ -1,22 +1,35 @@
package net.quiltservertools.ledger.databases.databases package net.quiltservertools.ledger.databases.databases
import com.github.quiltservertools.ledger.Ledger 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 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 { object MySQL : LedgerDatabase {
override fun getDatabase(server: MinecraftServer): Database { override fun getDataSource(savePath: Path): DataSource = HikariDataSource(HikariConfig().apply {
var url = "jdbc:mysql://${Ledger.config[DatabaseExtensionSpec.url]}?rewriteBatchedStatements=true" jdbcUrl = "jdbc:mysql://${Ledger.config[DatabaseExtensionSpec.url]}"
for (arg in Ledger.config[DatabaseExtensionSpec.properties]) { username = Ledger.config[DatabaseExtensionSpec.userName]
url = url.plus("&$arg")
}
return Database.connect(
url = url,
user = Ledger.config[DatabaseExtensionSpec.userName],
password = Ledger.config[DatabaseExtensionSpec.password] 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)
} }
})
override fun getDatabaseIdentifier() = Ledger.identifier("mysql") override fun getDatabaseIdentifier() = LedgerDatabases.identifier("mysql")
} }

View File

@ -1,22 +1,23 @@
package net.quiltservertools.ledger.databases.databases package net.quiltservertools.ledger.databases.databases
import com.github.quiltservertools.ledger.Ledger 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 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 { object PostgreSQL : LedgerDatabase {
override fun getDatabase(server: MinecraftServer): Database { override fun getDataSource(savePath: Path): DataSource = HikariDataSource(HikariConfig().apply {
var url = "jdbc:postgresql://${Ledger.config[DatabaseExtensionSpec.url]}?rewriteBatchedStatements=true" jdbcUrl = "jdbc:postgresql://${Ledger.config[DatabaseExtensionSpec.url]}"
for (arg in Ledger.config[DatabaseExtensionSpec.properties]) { username = Ledger.config[DatabaseExtensionSpec.userName]
url = url.plus("&$arg")
}
return Database.connect(
url = url,
user = Ledger.config[DatabaseExtensionSpec.userName],
password = Ledger.config[DatabaseExtensionSpec.password] password = Ledger.config[DatabaseExtensionSpec.password]
) maximumPoolSize = Ledger.config[DatabaseExtensionSpec.maxPoolSize]
for ((key, value) in Ledger.config[DatabaseExtensionSpec.properties]) {
addDataSourceProperty(key, value)
} }
})
override fun getDatabaseIdentifier() = Ledger.identifier("postgresql") override fun getDatabaseIdentifier() = LedgerDatabases.identifier("postgresql")
} }

View File

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