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