mirror of
https://github.com/xHyroM/lighteco.git
synced 2024-11-25 08:11:04 +01:00
feat: sql impl working
must do dependency downloading
This commit is contained in:
parent
39b2211131
commit
5c0867c348
6 changed files with 55 additions and 25 deletions
|
@ -0,0 +1,7 @@
|
||||||
|
package dev.xhyrom.lighteco.common.storage.provider.sql;
|
||||||
|
|
||||||
|
public enum SqlImplementation {
|
||||||
|
H2,
|
||||||
|
SQLITE,
|
||||||
|
MYSQL;
|
||||||
|
}
|
|
@ -0,0 +1,33 @@
|
||||||
|
package dev.xhyrom.lighteco.common.storage.provider.sql;
|
||||||
|
|
||||||
|
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}_{context}_users (uuid, currency_identifier, balance) VALUES (?1, ?2, ?3) ON DUPLICATE KEY UPDATE balance=?3;"
|
||||||
|
),
|
||||||
|
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;"
|
||||||
|
);
|
||||||
|
|
||||||
|
public final String sqlite;
|
||||||
|
public final String mysql;
|
||||||
|
|
||||||
|
SqlStatements(String sqlite, String mysql) {
|
||||||
|
this.sqlite = sqlite;
|
||||||
|
this.mysql = mysql;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String get(SqlImplementation implementationName) {
|
||||||
|
switch (implementationName) {
|
||||||
|
case SQLITE -> {
|
||||||
|
return this.sqlite;
|
||||||
|
}
|
||||||
|
case MYSQL -> {
|
||||||
|
return this.mysql;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
throw new IllegalArgumentException("Unknown implementation: " + implementationName);
|
||||||
|
}
|
||||||
|
}
|
|
@ -17,11 +17,8 @@ import java.util.UUID;
|
||||||
import java.util.function.Function;
|
import java.util.function.Function;
|
||||||
|
|
||||||
public class SqlStorageProvider implements StorageProvider {
|
public class SqlStorageProvider implements StorageProvider {
|
||||||
private static final String SAVE_USER_LOCAL_CURRENCY_MYSQL = "INSERT INTO {prefix}_{context}_users (uuid, currency_identifier, balance) VALUES (?1, ?2, ?3) ON DUPLICATE KEY UPDATE balance=?3;";
|
private final String SAVE_USER_LOCAL_CURRENCY;
|
||||||
private static final String SAVE_USER_GLOBAL_CURRENCY_MYSQL = "INSERT INTO {prefix}_users (uuid, currency_identifier, balance) VALUES (?1, ?2, ?3) ON DUPLICATE KEY UPDATE balance=?3;";
|
private final String SAVE_USER_GLOBAL_CURRENCY;
|
||||||
private static final String 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;";
|
|
||||||
private static final String 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;";
|
|
||||||
|
|
||||||
private static final String LOAD_WHOLE_USER = """
|
private static final String LOAD_WHOLE_USER = """
|
||||||
SELECT currency_identifier, balance
|
SELECT currency_identifier, balance
|
||||||
FROM
|
FROM
|
||||||
|
@ -48,6 +45,10 @@ public class SqlStorageProvider implements StorageProvider {
|
||||||
.replace("{prefix}", plugin.getConfig().storage.tablePrefix)
|
.replace("{prefix}", plugin.getConfig().storage.tablePrefix)
|
||||||
.replace("{context}", plugin.getConfig().server)
|
.replace("{context}", plugin.getConfig().server)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
final SqlImplementation implementationName = this.connectionFactory.getImplementationName();
|
||||||
|
this.SAVE_USER_LOCAL_CURRENCY = SqlStatements.SAVE_USER_LOCAL_CURRENCY.get(implementationName);
|
||||||
|
this.SAVE_USER_GLOBAL_CURRENCY = SqlStatements.SAVE_USER_GLOBAL_CURRENCY.get(implementationName);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -55,7 +56,7 @@ public class SqlStorageProvider implements StorageProvider {
|
||||||
this.connectionFactory.init(this.plugin);
|
this.connectionFactory.init(this.plugin);
|
||||||
|
|
||||||
List<String> statements;
|
List<String> statements;
|
||||||
String schemaFileName = "schema/" + this.connectionFactory.getImplementationName().toLowerCase() + ".sql";
|
String schemaFileName = "schema/" + this.connectionFactory.getImplementationName().name().toLowerCase() + ".sql";
|
||||||
try (InputStream is = this.plugin.getBootstrap().getResourceStream(schemaFileName)) {
|
try (InputStream is = this.plugin.getBootstrap().getResourceStream(schemaFileName)) {
|
||||||
if (is == null)
|
if (is == null)
|
||||||
throw new IOException("Failed to load schema file: " + schemaFileName);
|
throw new IOException("Failed to load schema file: " + schemaFileName);
|
||||||
|
@ -132,23 +133,9 @@ public class SqlStorageProvider implements StorageProvider {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
System.out.println(psGlobal.toString());
|
|
||||||
System.out.println(psLocal.toString());
|
|
||||||
psGlobal.executeBatch();
|
psGlobal.executeBatch();
|
||||||
psLocal.executeBatch();
|
psLocal.executeBatch();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static boolean doesTableExists(Connection c, String table) throws SQLException {
|
|
||||||
try (ResultSet rs = c.getMetaData().getTables(c.getCatalog(), null, "%s", null)) {
|
|
||||||
while (rs.next()) {
|
|
||||||
if (rs.getString(3).equalsIgnoreCase(table)) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,12 +1,13 @@
|
||||||
package dev.xhyrom.lighteco.common.storage.provider.sql.connection;
|
package dev.xhyrom.lighteco.common.storage.provider.sql.connection;
|
||||||
|
|
||||||
import dev.xhyrom.lighteco.common.plugin.LightEcoPlugin;
|
import dev.xhyrom.lighteco.common.plugin.LightEcoPlugin;
|
||||||
|
import dev.xhyrom.lighteco.common.storage.provider.sql.SqlImplementation;
|
||||||
|
|
||||||
import java.sql.Connection;
|
import java.sql.Connection;
|
||||||
import java.util.function.Function;
|
import java.util.function.Function;
|
||||||
|
|
||||||
public interface ConnectionFactory {
|
public interface ConnectionFactory {
|
||||||
String getImplementationName();
|
SqlImplementation getImplementationName();
|
||||||
|
|
||||||
void init(LightEcoPlugin plugin);
|
void init(LightEcoPlugin plugin);
|
||||||
void shutdown() throws Exception;
|
void shutdown() throws Exception;
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
package dev.xhyrom.lighteco.common.storage.provider.sql.connection.file;
|
package dev.xhyrom.lighteco.common.storage.provider.sql.connection.file;
|
||||||
|
|
||||||
import dev.xhyrom.lighteco.common.plugin.LightEcoPlugin;
|
import dev.xhyrom.lighteco.common.plugin.LightEcoPlugin;
|
||||||
|
import dev.xhyrom.lighteco.common.storage.provider.sql.SqlImplementation;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.lang.reflect.Constructor;
|
import java.lang.reflect.Constructor;
|
||||||
|
@ -18,8 +19,8 @@ public class H2ConnectionFactory extends FileConnectionFactory {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getImplementationName() {
|
public SqlImplementation getImplementationName() {
|
||||||
return "h2";
|
return SqlImplementation.H2;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
package dev.xhyrom.lighteco.common.storage.provider.sql.connection.file;
|
package dev.xhyrom.lighteco.common.storage.provider.sql.connection.file;
|
||||||
|
|
||||||
import dev.xhyrom.lighteco.common.plugin.LightEcoPlugin;
|
import dev.xhyrom.lighteco.common.plugin.LightEcoPlugin;
|
||||||
|
import dev.xhyrom.lighteco.common.storage.provider.sql.SqlImplementation;
|
||||||
|
|
||||||
import java.lang.reflect.Constructor;
|
import java.lang.reflect.Constructor;
|
||||||
import java.nio.file.Path;
|
import java.nio.file.Path;
|
||||||
|
@ -16,8 +17,8 @@ public class SqliteConnectionFactory extends FileConnectionFactory {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getImplementationName() {
|
public SqlImplementation getImplementationName() {
|
||||||
return "sqlite";
|
return SqlImplementation.SQLITE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
Loading…
Reference in a new issue