mirror of
https://github.com/xHyroM/lighteco.git
synced 2024-11-24 15:51:06 +01:00
feat: mariadb works
This commit is contained in:
parent
e556356e56
commit
eb62c51541
2 changed files with 22 additions and 20 deletions
|
@ -4,20 +4,24 @@ import dev.xhyrom.lighteco.common.storage.StorageType;
|
|||
|
||||
public enum SqlStatements {
|
||||
SAVE_USER_LOCAL_CURRENCY(
|
||||
"INSERT INTO {prefix}_users (uuid, currency_identifier, balance) VALUES (?1, ?2, ?3) ON CONFLICT (uuid, currency_identifier) DO UPDATE SET balance=?3;",
|
||||
"INSERT INTO {prefix}_users (uuid, currency_identifier, balance) VALUES (?1, ?2, ?3) ON DUPLICATE KEY UPDATE balance=?3;"
|
||||
"INSERT INTO {prefix}_{context}_users (uuid, currency_identifier, balance) VALUES (?1, ?2, ?3) ON CONFLICT (uuid, currency_identifier) DO UPDATE SET balance=?3;",
|
||||
"INSERT INTO {prefix}_{context}_users (uuid, currency_identifier, balance) VALUES (?1, ?2, ?3) ON DUPLICATE KEY UPDATE balance=?3;",
|
||||
"INSERT INTO {prefix}_{context}_users (uuid, currency_identifier, balance) VALUES (?, ?, ?) ON DUPLICATE KEY UPDATE balance=?;"
|
||||
),
|
||||
SAVE_USER_GLOBAL_CURRENCY(
|
||||
"INSERT INTO {prefix}_users (uuid, currency_identifier, balance) VALUES (?1, ?2, ?3) ON CONFLICT (uuid, currency_identifier) DO UPDATE SET balance=?3;",
|
||||
"INSERT INTO {prefix}_users (uuid, currency_identifier, balance) VALUES (?1, ?2, ?3) ON DUPLICATE KEY UPDATE balance=?3;"
|
||||
"INSERT INTO {prefix}_users (uuid, currency_identifier, balance) VALUES (?1, ?2, ?3) ON DUPLICATE KEY UPDATE balance=?3;",
|
||||
"INSERT INTO {prefix}_users (uuid, currency_identifier, balance) VALUES (?, ?, ?) ON DUPLICATE KEY UPDATE balance=?;"
|
||||
);
|
||||
|
||||
public final String sqlite;
|
||||
public final String mysql;
|
||||
public final String mariadb;
|
||||
|
||||
SqlStatements(String sqlite, String mysql) {
|
||||
SqlStatements(String sqlite, String mysql, String mariadb) {
|
||||
this.sqlite = sqlite;
|
||||
this.mysql = mysql;
|
||||
this.mariadb = mariadb;
|
||||
}
|
||||
|
||||
public String get(StorageType implementationName) {
|
||||
|
@ -25,9 +29,12 @@ public enum SqlStatements {
|
|||
case SQLITE -> {
|
||||
return this.sqlite;
|
||||
}
|
||||
case H2, MYSQL, MARIADB -> {
|
||||
case H2, MYSQL -> {
|
||||
return this.mysql;
|
||||
}
|
||||
case MARIADB -> {
|
||||
return this.mariadb;
|
||||
}
|
||||
}
|
||||
|
||||
throw new IllegalArgumentException("Unknown implementation: " + implementationName);
|
||||
|
|
|
@ -20,19 +20,7 @@ import java.util.function.Function;
|
|||
public class SqlStorageProvider implements StorageProvider {
|
||||
private final String SAVE_USER_LOCAL_CURRENCY;
|
||||
private final String SAVE_USER_GLOBAL_CURRENCY;
|
||||
private static final String LOAD_WHOLE_USER = """
|
||||
SELECT currency_identifier, balance
|
||||
FROM
|
||||
(
|
||||
SELECT currency_identifier, balance
|
||||
FROM '{prefix}_users'
|
||||
WHERE uuid=?1
|
||||
UNION ALL
|
||||
SELECT currency_identifier, balance
|
||||
FROM '{prefix}_{context}_users'
|
||||
WHERE uuid=?1
|
||||
) AS combined_currencies;
|
||||
""";
|
||||
private static final String LOAD_WHOLE_USER = "SELECT currency_identifier, balance FROM ( SELECT currency_identifier, balance FROM '{prefix}_users' WHERE uuid = ? UNION ALL SELECT currency_identifier, balance FROM '{prefix}_{context}_users' WHERE uuid = ? ) AS combined_currencies;";
|
||||
|
||||
private final LightEcoPlugin plugin;
|
||||
private final ConnectionFactory connectionFactory;
|
||||
|
@ -86,6 +74,7 @@ FROM
|
|||
try (Connection c = this.connectionFactory.getConnection()) {
|
||||
try (PreparedStatement ps = c.prepareStatement(this.statementProcessor.apply(LOAD_WHOLE_USER))) {
|
||||
ps.setString(1, uniqueIdString);
|
||||
if (this.connectionFactory.getImplementationName() == StorageType.MARIADB)
|
||||
ps.setString(2, uniqueIdString);
|
||||
|
||||
ResultSet rs = ps.executeQuery();
|
||||
|
@ -122,6 +111,8 @@ FROM
|
|||
psGlobal.setString(1, uniqueIdString);
|
||||
psGlobal.setString(2, currency.getIdentifier());
|
||||
psGlobal.setBigDecimal(3, balance);
|
||||
if (this.connectionFactory.getImplementationName() == StorageType.MARIADB)
|
||||
psGlobal.setBigDecimal(4, balance);
|
||||
|
||||
psGlobal.addBatch();
|
||||
}
|
||||
|
@ -129,6 +120,8 @@ FROM
|
|||
psLocal.setString(1, uniqueIdString);
|
||||
psLocal.setString(2, currency.getIdentifier());
|
||||
psLocal.setBigDecimal(3, balance);
|
||||
if (this.connectionFactory.getImplementationName() == StorageType.MARIADB)
|
||||
psLocal.setBigDecimal(4, balance);
|
||||
|
||||
psLocal.addBatch();
|
||||
}
|
||||
|
@ -137,6 +130,8 @@ FROM
|
|||
|
||||
psGlobal.executeBatch();
|
||||
psLocal.executeBatch();
|
||||
} catch (SQLException e) {
|
||||
throw new RuntimeException("Failed to save user " + user.getUniqueId(), e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue