Lots of tiny tweaks

This commit is contained in:
Lukas Rieger (Blue) 2023-06-12 22:03:10 +02:00
parent 1dbab7afe3
commit 793948f24f
No known key found for this signature in database
GPG Key ID: 2D09EC5ED2687FF2
7 changed files with 69 additions and 54 deletions

View File

@ -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);
}
}

View File

@ -3,7 +3,7 @@ package de.bluecolored.bluemap.core.storage.sql;
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.sql.SQLException;
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

View File

@ -30,8 +30,8 @@ import com.github.benmanes.caffeine.cache.LoadingCache;
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 @@ import java.util.function.Function;
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 @@ public abstract class SQLStorage extends Storage {
return recoveringConnection(connection -> {
int key;
ResultSet result = executeQuery(connection,
//language=SQL
this.dialect.lookupFK(table,idField,valueField),
value
);
@ -675,10 +675,10 @@ public abstract class SQLStorage extends Storage {
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

View File

@ -5,33 +5,36 @@ import de.bluecolored.bluemap.core.storage.sql.PostgreSQLStorage;
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;
}
}

View File

@ -2,17 +2,21 @@ package de.bluecolored.bluemap.core.storage.sql.dialect;
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 class MySQLFactory implements SQLQueryFactory {
}
@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 class MySQLFactory implements SQLQueryFactory {
}
@Override
@Language("MariaDB")
@Language("MySQL")
public String deleteMapTile() {
return "DELETE t " +
"FROM `bluemap_map_tile` t " +
@ -57,14 +61,14 @@ public class MySQLFactory implements SQLQueryFactory {
}
@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 class MySQLFactory implements SQLQueryFactory {
}
@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 class MySQLFactory implements SQLQueryFactory {
}
@Override
@Language("MariaDB")
@Language("MySQL")
public String purgeMeta() {
return "DELETE t " +
"FROM `bluemap_map_meta` t " +
@ -97,7 +101,7 @@ public class MySQLFactory implements SQLQueryFactory {
}
@Override
@Language("MariaDB")
@Language("MySQL")
public String purgeMapTile() {
return "DELETE t " +
"FROM `bluemap_map_tile` t " +
@ -107,7 +111,7 @@ public class MySQLFactory implements SQLQueryFactory {
}
@Override
@Language("MariaDB")
@Language("MySQL")
public String purgeMapMeta() {
return "DELETE t " +
"FROM `bluemap_map_meta` t " +
@ -117,7 +121,7 @@ public class MySQLFactory implements SQLQueryFactory {
}
@Override
@Language("MariaDB")
@Language("MySQL")
public String purgeMap() {
return "DELETE " +
"FROM `bluemap_map` " +
@ -125,13 +129,13 @@ public class MySQLFactory implements SQLQueryFactory {
}
@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 class MySQLFactory implements SQLQueryFactory {
}
@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 class MySQLFactory implements SQLQueryFactory {
}
@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 class MySQLFactory implements SQLQueryFactory {
}
@Override
@Language("MariaDB")
@Language("MySQL")
public String initializeMapMeta() {
return "CREATE TABLE `bluemap_map_meta` (" +
"`map` SMALLINT UNSIGNED NOT NULL," +
@ -189,7 +193,7 @@ public class MySQLFactory implements SQLQueryFactory {
}
@Override
@Language("MariaDB")
@Language("MySQL")
public String initializeMapTile() {
return "CREATE TABLE `bluemap_map_tile` (" +
"`map` SMALLINT UNSIGNED NOT NULL," +
@ -206,7 +210,7 @@ public class MySQLFactory implements SQLQueryFactory {
}
@Override
@Language("MariaDB")
@Language("MySQL")
public String updateStorageMeta() {
return "UPDATE `bluemap_storage_meta` " +
"SET `value` = ? " +
@ -214,14 +218,14 @@ public class MySQLFactory implements SQLQueryFactory {
}
@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 class MySQLFactory implements SQLQueryFactory {
}
@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 (?)";

View File

@ -2,7 +2,12 @@ package de.bluecolored.bluemap.core.storage.sql.dialect;
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() {

View File

@ -2,7 +2,7 @@ package de.bluecolored.bluemap.core.storage.sql.dialect;
import org.intellij.lang.annotations.Language;
public interface SQLQueryFactory {
public interface SQLQueryDialect {
@Language("sql")
String writeMapTile();