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

View File

@ -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

View File

@ -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

View File

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

View File

@ -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 (?)";

View File

@ -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() {

View File

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