mirror of
https://github.com/BlueMap-Minecraft/BlueMap.git
synced 2024-09-27 14:52:57 +02:00
Lots of tiny tweaks
This commit is contained in:
parent
1dbab7afe3
commit
793948f24f
@ -1,11 +1,13 @@
|
||||
package de.bluecolored.bluemap.core.storage.sql;
|
||||
|
||||
import de.bluecolored.bluemap.core.storage.sql.dialect.MySQLFactory;
|
||||
import de.bluecolored.bluemap.core.storage.sql.dialect.MySQLDialect;
|
||||
|
||||
import java.net.MalformedURLException;
|
||||
|
||||
public class MySQLStorage extends SQLStorage{
|
||||
|
||||
public MySQLStorage(SQLStorageSettings config) throws MalformedURLException, SQLDriverException {
|
||||
super(new MySQLFactory(), config);
|
||||
super(MySQLDialect.INSTANCE, config);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -3,7 +3,7 @@
|
||||
import com.flowpowered.math.vector.Vector2i;
|
||||
import de.bluecolored.bluemap.core.storage.CompressedInputStream;
|
||||
import de.bluecolored.bluemap.core.storage.Compression;
|
||||
import de.bluecolored.bluemap.core.storage.sql.dialect.PostgresFactory;
|
||||
import de.bluecolored.bluemap.core.storage.sql.dialect.PostgresDialect;
|
||||
import de.bluecolored.bluemap.core.util.WrappedOutputStream;
|
||||
|
||||
import java.io.*;
|
||||
@ -14,8 +14,9 @@
|
||||
import java.util.Optional;
|
||||
|
||||
public class PostgreSQLStorage extends SQLStorage {
|
||||
|
||||
public PostgreSQLStorage(SQLStorageSettings config) throws MalformedURLException, SQLDriverException {
|
||||
super(new PostgresFactory(), config);
|
||||
super(PostgresDialect.INSTANCE, config);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -30,8 +30,8 @@
|
||||
import de.bluecolored.bluemap.core.BlueMap;
|
||||
import de.bluecolored.bluemap.core.logger.Logger;
|
||||
import de.bluecolored.bluemap.core.storage.*;
|
||||
import de.bluecolored.bluemap.core.storage.sql.dialect.Dialect;
|
||||
import de.bluecolored.bluemap.core.storage.sql.dialect.SQLQueryFactory;
|
||||
import de.bluecolored.bluemap.core.storage.sql.dialect.DialectType;
|
||||
import de.bluecolored.bluemap.core.storage.sql.dialect.SQLQueryDialect;
|
||||
import de.bluecolored.bluemap.core.util.WrappedOutputStream;
|
||||
import org.apache.commons.dbcp2.*;
|
||||
import org.apache.commons.pool2.ObjectPool;
|
||||
@ -52,8 +52,9 @@
|
||||
|
||||
public abstract class SQLStorage extends Storage {
|
||||
|
||||
protected final SQLQueryFactory dialect;
|
||||
private final DataSource dataSource;
|
||||
|
||||
protected final SQLQueryDialect dialect;
|
||||
protected final Compression hiresCompression;
|
||||
|
||||
private final LoadingCache<String, Integer> mapFKs = Caffeine.newBuilder()
|
||||
@ -65,7 +66,7 @@ public abstract class SQLStorage extends Storage {
|
||||
|
||||
private volatile boolean closed;
|
||||
|
||||
public SQLStorage(SQLQueryFactory dialect, SQLStorageSettings config) throws MalformedURLException, SQLDriverException {
|
||||
public SQLStorage(SQLQueryDialect dialect, SQLStorageSettings config) throws MalformedURLException, SQLDriverException {
|
||||
this.dialect = dialect;
|
||||
this.closed = false;
|
||||
try {
|
||||
@ -601,7 +602,6 @@ private int lookupFK(String table, String idField, String valueField, String val
|
||||
return recoveringConnection(connection -> {
|
||||
int key;
|
||||
ResultSet result = executeQuery(connection,
|
||||
//language=SQL
|
||||
this.dialect.lookupFK(table,idField,valueField),
|
||||
value
|
||||
);
|
||||
@ -675,10 +675,10 @@ private DataSource createDataSource(ConnectionFactory connectionFactory, int max
|
||||
return new PoolingDataSource<>(connectionPool);
|
||||
}
|
||||
|
||||
public static SQLStorage create(SQLStorageSettings settings) {
|
||||
public static SQLStorage create(SQLStorageSettings settings) throws Exception {
|
||||
String dbUrl = settings.getConnectionUrl();
|
||||
String provider = dbUrl.strip().split(":")[1];
|
||||
return Dialect.getStorage(provider,settings);
|
||||
String provider = dbUrl.strip().split(":", 3)[1];
|
||||
return DialectType.getStorage(provider,settings);
|
||||
}
|
||||
|
||||
@FunctionalInterface
|
||||
|
@ -5,33 +5,36 @@
|
||||
import de.bluecolored.bluemap.core.storage.sql.SQLStorage;
|
||||
import de.bluecolored.bluemap.core.storage.sql.SQLStorageSettings;
|
||||
|
||||
public enum Dialect {
|
||||
MySQL( MySQLStorage.class, "mysql" ),
|
||||
MariaDB( MySQLStorage.class, "mariadb" ),
|
||||
PostgreSQL( PostgreSQLStorage.class,"postgresql");
|
||||
public enum DialectType {
|
||||
|
||||
private final Class<? extends SQLStorage> storageClass;
|
||||
MYSQL (MySQLStorage::new, "mysql"),
|
||||
MARIADB (MySQLStorage::new, "mariadb"),
|
||||
POSTGRESQL (PostgreSQLStorage::new,"postgresql");
|
||||
|
||||
private final SQLStorageFactory storageFactory;
|
||||
private final String dialectName;
|
||||
|
||||
|
||||
<C extends SQLStorage> Dialect(Class<C> storageClass, String dialectName) {
|
||||
this.storageClass = storageClass;
|
||||
DialectType(SQLStorageFactory storageFactory, String dialectName) {
|
||||
this.storageFactory = storageFactory;
|
||||
this.dialectName = dialectName;
|
||||
}
|
||||
public String getDialectName() {
|
||||
return dialectName;
|
||||
}
|
||||
|
||||
public static SQLStorage getStorage(String dialectName, SQLStorageSettings settings){
|
||||
for (Dialect dialect : values()) {
|
||||
public static SQLStorage getStorage(String dialectName, SQLStorageSettings settings) throws Exception {
|
||||
for (DialectType dialect : values()) {
|
||||
if (dialect.getDialectName().equals(dialectName)) {
|
||||
try {
|
||||
return dialect.storageClass.getConstructor(SQLStorageSettings.class).newInstance(settings);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return dialect.storageFactory.provide(settings);
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@FunctionalInterface
|
||||
public interface SQLStorageFactory {
|
||||
SQLStorage provide(SQLStorageSettings config) throws Exception;
|
||||
|
||||
}
|
||||
|
||||
}
|
@ -2,17 +2,21 @@
|
||||
|
||||
import org.intellij.lang.annotations.Language;
|
||||
|
||||
public class MySQLFactory implements SQLQueryFactory {
|
||||
public class MySQLDialect implements SQLQueryDialect {
|
||||
|
||||
public static final MySQLDialect INSTANCE = new MySQLDialect();
|
||||
|
||||
private MySQLDialect() {};
|
||||
|
||||
@Override
|
||||
@Language("MariaDB")
|
||||
@Language("MySQL")
|
||||
public String writeMapTile() {
|
||||
return "REPLACE INTO `bluemap_map_tile` (`map`, `lod`, `x`, `z`, `compression`, `data`) " +
|
||||
"VALUES (?, ?, ?, ?, ?, ?)";
|
||||
}
|
||||
|
||||
@Override
|
||||
@Language("MariaDB")
|
||||
@Language("MySQL")
|
||||
public String readMapTile() {
|
||||
return "SELECT t.`data` " +
|
||||
"FROM `bluemap_map_tile` t " +
|
||||
@ -28,7 +32,7 @@ public String readMapTile() {
|
||||
}
|
||||
|
||||
@Override
|
||||
@Language("MariaDB")
|
||||
@Language("MySQL")
|
||||
public String readMapTileInfo() {
|
||||
return "SELECT t.`changed`, LENGTH(t.`data`) as 'size' " +
|
||||
"FROM `bluemap_map_tile` t " +
|
||||
@ -44,7 +48,7 @@ public String readMapTileInfo() {
|
||||
}
|
||||
|
||||
@Override
|
||||
@Language("MariaDB")
|
||||
@Language("MySQL")
|
||||
public String deleteMapTile() {
|
||||
return "DELETE t " +
|
||||
"FROM `bluemap_map_tile` t " +
|
||||
@ -57,14 +61,14 @@ public String deleteMapTile() {
|
||||
}
|
||||
|
||||
@Override
|
||||
@Language("MariaDB")
|
||||
@Language("MySQL")
|
||||
public String writeMeta() {
|
||||
return "REPLACE INTO `bluemap_map_meta` (`map`, `key`, `value`) " +
|
||||
"VALUES (?, ?, ?)";
|
||||
}
|
||||
|
||||
@Override
|
||||
@Language("MariaDB")
|
||||
@Language("MySQL")
|
||||
public String readMeta() {
|
||||
return "SELECT t.`value` " +
|
||||
"FROM `bluemap_map_meta` t " +
|
||||
@ -75,7 +79,7 @@ public String readMeta() {
|
||||
}
|
||||
|
||||
@Override
|
||||
@Language("MariaDB")
|
||||
@Language("MySQL")
|
||||
public String readMetaSize() {
|
||||
return "SELECT LENGTH(t.`value`) as 'size' " +
|
||||
"FROM `bluemap_map_meta` t " +
|
||||
@ -86,7 +90,7 @@ public String readMetaSize() {
|
||||
}
|
||||
|
||||
@Override
|
||||
@Language("MariaDB")
|
||||
@Language("MySQL")
|
||||
public String purgeMeta() {
|
||||
return "DELETE t " +
|
||||
"FROM `bluemap_map_meta` t " +
|
||||
@ -97,7 +101,7 @@ public String purgeMeta() {
|
||||
}
|
||||
|
||||
@Override
|
||||
@Language("MariaDB")
|
||||
@Language("MySQL")
|
||||
public String purgeMapTile() {
|
||||
return "DELETE t " +
|
||||
"FROM `bluemap_map_tile` t " +
|
||||
@ -107,7 +111,7 @@ public String purgeMapTile() {
|
||||
}
|
||||
|
||||
@Override
|
||||
@Language("MariaDB")
|
||||
@Language("MySQL")
|
||||
public String purgeMapMeta() {
|
||||
return "DELETE t " +
|
||||
"FROM `bluemap_map_meta` t " +
|
||||
@ -117,7 +121,7 @@ public String purgeMapMeta() {
|
||||
}
|
||||
|
||||
@Override
|
||||
@Language("MariaDB")
|
||||
@Language("MySQL")
|
||||
public String purgeMap() {
|
||||
return "DELETE " +
|
||||
"FROM `bluemap_map` " +
|
||||
@ -125,13 +129,13 @@ public String purgeMap() {
|
||||
}
|
||||
|
||||
@Override
|
||||
@Language("MariaDB")
|
||||
@Language("MySQL")
|
||||
public String selectMapIds() {
|
||||
return "SELECT `map_id` FROM `bluemap_map`";
|
||||
}
|
||||
|
||||
@Override
|
||||
@Language("MariaDB")
|
||||
@Language("MySQL")
|
||||
public String initializeStorageMeta() {
|
||||
return "CREATE TABLE IF NOT EXISTS `bluemap_storage_meta` (" +
|
||||
"`key` varchar(255) NOT NULL, " +
|
||||
@ -141,21 +145,21 @@ public String initializeStorageMeta() {
|
||||
}
|
||||
|
||||
@Override
|
||||
@Language("MariaDB")
|
||||
@Language("MySQL")
|
||||
public String selectStorageMeta() {
|
||||
return "SELECT `value` FROM `bluemap_storage_meta` " +
|
||||
"WHERE `key` = ?";
|
||||
}
|
||||
|
||||
@Override
|
||||
@Language("MariaDB")
|
||||
@Language("MySQL")
|
||||
public String insertStorageMeta() {
|
||||
return "INSERT INTO `bluemap_storage_meta` (`key`, `value`) " +
|
||||
"VALUES (?, ?)";
|
||||
}
|
||||
|
||||
@Override
|
||||
@Language("MariaDB")
|
||||
@Language("MySQL")
|
||||
public String initializeMap() {
|
||||
return "CREATE TABLE `bluemap_map` (" +
|
||||
"`id` SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT," +
|
||||
@ -166,7 +170,7 @@ public String initializeMap() {
|
||||
}
|
||||
|
||||
@Override
|
||||
@Language("MariaDB")
|
||||
@Language("MySQL")
|
||||
public String initializeMapTileCompression() {
|
||||
return "CREATE TABLE `bluemap_map_tile_compression` (" +
|
||||
"`id` SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT," +
|
||||
@ -177,7 +181,7 @@ public String initializeMapTileCompression() {
|
||||
}
|
||||
|
||||
@Override
|
||||
@Language("MariaDB")
|
||||
@Language("MySQL")
|
||||
public String initializeMapMeta() {
|
||||
return "CREATE TABLE `bluemap_map_meta` (" +
|
||||
"`map` SMALLINT UNSIGNED NOT NULL," +
|
||||
@ -189,7 +193,7 @@ public String initializeMapMeta() {
|
||||
}
|
||||
|
||||
@Override
|
||||
@Language("MariaDB")
|
||||
@Language("MySQL")
|
||||
public String initializeMapTile() {
|
||||
return "CREATE TABLE `bluemap_map_tile` (" +
|
||||
"`map` SMALLINT UNSIGNED NOT NULL," +
|
||||
@ -206,7 +210,7 @@ public String initializeMapTile() {
|
||||
}
|
||||
|
||||
@Override
|
||||
@Language("MariaDB")
|
||||
@Language("MySQL")
|
||||
public String updateStorageMeta() {
|
||||
return "UPDATE `bluemap_storage_meta` " +
|
||||
"SET `value` = ? " +
|
||||
@ -214,14 +218,14 @@ public String updateStorageMeta() {
|
||||
}
|
||||
|
||||
@Override
|
||||
@Language("MariaDB")
|
||||
@Language("MySQL")
|
||||
public String deleteMapMeta() {
|
||||
return "DELETE FROM `bluemap_map_meta`" +
|
||||
"WHERE `key` IN (?, ?, ?)";
|
||||
}
|
||||
|
||||
@Override
|
||||
@Language("MariaDB")
|
||||
@Language("MySQL")
|
||||
public String updateMapMeta() {
|
||||
return "UPDATE `bluemap_map_meta` " +
|
||||
"SET `key` = ? " +
|
||||
@ -229,14 +233,14 @@ public String updateMapMeta() {
|
||||
}
|
||||
|
||||
@Override
|
||||
@Language("MariaDB")
|
||||
@Language("MySQL")
|
||||
public String lookupFK(String table, String idField, String valueField) {
|
||||
return "SELECT `" + idField + "` FROM `" + table + "` " +
|
||||
"WHERE `" + valueField + "` = ?";
|
||||
}
|
||||
|
||||
@Override
|
||||
@Language("MariaDB")
|
||||
@Language("MySQL")
|
||||
public String insertFK(String table, String valueField) {
|
||||
return "INSERT INTO `" + table + "` (`" + valueField + "`) " +
|
||||
"VALUES (?)";
|
@ -2,7 +2,12 @@
|
||||
|
||||
import org.intellij.lang.annotations.Language;
|
||||
|
||||
public class PostgresFactory implements SQLQueryFactory {
|
||||
public class PostgresDialect implements SQLQueryDialect {
|
||||
|
||||
public static final PostgresDialect INSTANCE = new PostgresDialect();
|
||||
|
||||
private PostgresDialect() {};
|
||||
|
||||
@Override
|
||||
@Language("PostgreSQL")
|
||||
public String writeMapTile() {
|
@ -2,7 +2,7 @@
|
||||
|
||||
import org.intellij.lang.annotations.Language;
|
||||
|
||||
public interface SQLQueryFactory {
|
||||
public interface SQLQueryDialect {
|
||||
@Language("sql")
|
||||
String writeMapTile();
|
||||
|
Loading…
Reference in New Issue
Block a user