Restore support for fully qualified storage drivers

Related #1100
This commit is contained in:
games647
2023-10-12 10:46:46 +02:00
parent 70960661b4
commit e15ea9ce85
2 changed files with 35 additions and 6 deletions

View File

@ -57,7 +57,6 @@ import java.nio.file.Files;
import java.nio.file.Path;
import java.util.Collection;
import java.util.HashSet;
import java.util.Locale;
import java.util.Map;
import java.util.Objects;
import java.util.Set;
@ -221,7 +220,7 @@ public class FastLoginCore<P extends C, C, T extends PlatformPlugin<C>> {
}
public boolean setupDatabase() {
String type = config.getString("driver").toLowerCase(Locale.ENGLISH);
String type = config.getString("driver");
HikariConfig databaseConfig = new HikariConfig();
String database = config.getString("database");

View File

@ -28,6 +28,8 @@ package com.github.games647.fastlogin.core.storage;
import com.github.games647.fastlogin.core.shared.PlatformPlugin;
import com.zaxxer.hikari.HikariConfig;
import java.util.Locale;
public class MySQLStorage extends SQLStorage {
private static final String JDBC_PROTOCOL = "jdbc:";
@ -68,12 +70,12 @@ public class MySQLStorage extends SQLStorage {
}
private static String buildJDBCUrl(String driver, String host, int port, String database) {
String protocol = "mysql";
if (driver.contains("mariadb")) {
protocol = "mariadb";
MySQLVariant variant = MySQLVariant.fromDriver(driver);
if (variant == null) {
throw new IllegalArgumentException("Unknown storage driver");
}
return protocol + "://" + host + ':' + port + '/' + database;
return variant.getJdbcPrefix() + "://" + host + ':' + port + '/' + database;
}
private static void addPerformanceProperties(HikariConfig config) {
@ -106,4 +108,32 @@ public class MySQLStorage extends SQLStorage {
// In our case it can be useful to see the time in error messages
// config.addDataSourceProperty("maintainTimeStats", false);
}
enum MySQLVariant {
MYSQL("mysql"),
MARIADB("mariadb");
private final String jdbcPrefix;
public static MySQLVariant fromDriver(String driver) {
String normalizedDriver = driver.toLowerCase(Locale.ENGLISH);
if (normalizedDriver.contains("mysql")) {
return MYSQL;
} else if (normalizedDriver.contains("mariadb")) {
return MARIADB;
}
return null;
}
MySQLVariant(String jdbcPrefix) {
this.jdbcPrefix = jdbcPrefix;
}
public String getJdbcPrefix() {
return jdbcPrefix;
}
}
}