Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Added MariaDB support #13

Merged
merged 2 commits into from
Jun 27, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 19 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
@@ -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

Expand Down Expand Up @@ -34,6 +34,23 @@ connectionTimeout = 60000

`url`: Must be URL of database with `/<database_name>` 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 `/<database_name>` appended. An example URL would be `localhost/ledger`. You can optionally add port information such as `localhost:3000/ledger`

## PostgreSQL

```toml
Expand Down
5 changes: 4 additions & 1 deletion build.gradle
Original file line number Diff line number Diff line change
@@ -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"
}
Expand Down Expand Up @@ -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"))
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand All @@ -11,5 +12,6 @@ enum class Databases(val database: LedgerDatabase) {
MYSQL(MySQL),
H2(H2Database),
POSTGRESQL(PostgreSQL),
SQLITE(SQLite)
}
SQLITE(SQLite),
MARIADB(MariaDB)
}
Original file line number Diff line number Diff line change
@@ -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")
}