diff --git a/README.md b/README.md index 8bf46d4..a0aade1 100644 --- a/README.md +++ b/README.md @@ -1,12 +1,12 @@ # Ledger Databases -Adds support for MySQL, H2, and PostgreSQL databases in Ledger +Adds support for MySQL, MariaDB, H2, and PostgreSQL databases in Ledger ## Use ## Common -For both MySQL, H2, and PostgreSQL, you will need to place Ledger Databases in your mods folder along with Ledger 1.1.0 or newer +For both MySQL, MariaDB, H2, and PostgreSQL, you will need to place Ledger Databases in your mods folder along with Ledger 1.1.0 or newer ## H2 @@ -34,6 +34,23 @@ connectionTimeout = 60000 `url`: Must be URL of database with `/` appended. An example URL would be `localhost/ledger`. You can optionally add port information such as `localhost:3000/ledger` +## MariaDB + +Add the following to the bottom of your Ledger config file: + +```toml +[database_extensions] +database = "MARIADB" +url = "" +username = "" +password = "" +properties = [] +maxPoolSize = 10 +connectionTimeout = 60000 +``` + +`url`: Must be URL of database with `/` appended. An example URL would be `localhost/ledger`. You can optionally add port information such as `localhost:3000/ledger` + ## PostgreSQL ```toml diff --git a/build.gradle b/build.gradle index 6671a78..1bff2db 100644 --- a/build.gradle +++ b/build.gradle @@ -1,5 +1,5 @@ plugins { - id 'fabric-loom' version '1.2.+' + id 'fabric-loom' version '1.6.+' id 'maven-publish' id 'org.jetbrains.kotlin.jvm' version "1.8.22" } @@ -40,6 +40,9 @@ dependencies { // MySQL implementation(include('com.mysql:mysql-connector-j:8.3.0')) + // MariaDB + implementation(include('org.mariadb.jdbc:mariadb-java-client:3.3.3')) + // PostgreSQL implementation(include("org.postgresql:postgresql:42.7.3")) } diff --git a/src/main/kotlin/net/quiltservertools/ledger/databases/Databases.kt b/src/main/kotlin/net/quiltservertools/ledger/databases/Databases.kt index ee83d2f..14f2f1b 100644 --- a/src/main/kotlin/net/quiltservertools/ledger/databases/Databases.kt +++ b/src/main/kotlin/net/quiltservertools/ledger/databases/Databases.kt @@ -3,6 +3,7 @@ package net.quiltservertools.ledger.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.MariaDB import net.quiltservertools.ledger.databases.databases.PostgreSQL import net.quiltservertools.ledger.databases.databases.SQLite @@ -11,5 +12,6 @@ enum class Databases(val database: LedgerDatabase) { MYSQL(MySQL), H2(H2Database), POSTGRESQL(PostgreSQL), - SQLITE(SQLite) -} \ No newline at end of file + SQLITE(SQLite), + MARIADB(MariaDB) +} diff --git a/src/main/kotlin/net/quiltservertools/ledger/databases/databases/MariaDB.kt b/src/main/kotlin/net/quiltservertools/ledger/databases/databases/MariaDB.kt new file mode 100644 index 0000000..dd84a5c --- /dev/null +++ b/src/main/kotlin/net/quiltservertools/ledger/databases/databases/MariaDB.kt @@ -0,0 +1,38 @@ +package net.quiltservertools.ledger.databases.databases + +import com.github.quiltservertools.ledger.Ledger +import com.zaxxer.hikari.HikariConfig +import com.zaxxer.hikari.HikariDataSource +import net.quiltservertools.ledger.databases.DatabaseExtensionSpec +import net.quiltservertools.ledger.databases.LedgerDatabases +import java.nio.file.Path +import javax.sql.DataSource + +object MariaDB : LedgerDatabase { + override fun getDataSource(savePath: Path): DataSource = HikariDataSource(HikariConfig().apply { + jdbcUrl = "jdbc:mariadb://${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) + addDataSourceProperty("useJDBCCompliantTimezoneShift", true) + addDataSourceProperty("useLegacyDatetimeCode", false) + addDataSourceProperty("serverTimezone", "UTC") + for ((key, value) in Ledger.config[DatabaseExtensionSpec.properties]) { + addDataSourceProperty(key, value) + } + }) + + override fun getDatabaseIdentifier() = LedgerDatabases.identifier("mariadb") +}