From 793948f24f5a4b8204c2be6c473aa4752c5e6b95 Mon Sep 17 00:00:00 2001 From: "Lukas Rieger (Blue)" Date: Mon, 12 Jun 2023 22:03:10 +0200 Subject: [PATCH] Lots of tiny tweaks --- .../core/storage/sql/MySQLStorage.java | 6 ++- .../core/storage/sql/PostgreSQLStorage.java | 5 +- .../bluemap/core/storage/sql/SQLStorage.java | 16 +++--- .../{Dialect.java => DialectType.java} | 33 ++++++------ .../{MySQLFactory.java => MySQLDialect.java} | 54 ++++++++++--------- ...tgresFactory.java => PostgresDialect.java} | 7 ++- ...QueryFactory.java => SQLQueryDialect.java} | 2 +- 7 files changed, 69 insertions(+), 54 deletions(-) rename BlueMapCore/src/main/java/de/bluecolored/bluemap/core/storage/sql/dialect/{Dialect.java => DialectType.java} (50%) rename BlueMapCore/src/main/java/de/bluecolored/bluemap/core/storage/sql/dialect/{MySQLFactory.java => MySQLDialect.java} (91%) rename BlueMapCore/src/main/java/de/bluecolored/bluemap/core/storage/sql/dialect/{PostgresFactory.java => PostgresDialect.java} (97%) rename BlueMapCore/src/main/java/de/bluecolored/bluemap/core/storage/sql/dialect/{SQLQueryFactory.java => SQLQueryDialect.java} (97%) diff --git a/BlueMapCore/src/main/java/de/bluecolored/bluemap/core/storage/sql/MySQLStorage.java b/BlueMapCore/src/main/java/de/bluecolored/bluemap/core/storage/sql/MySQLStorage.java index 677dc3f7..1f99693e 100644 --- a/BlueMapCore/src/main/java/de/bluecolored/bluemap/core/storage/sql/MySQLStorage.java +++ b/BlueMapCore/src/main/java/de/bluecolored/bluemap/core/storage/sql/MySQLStorage.java @@ -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); } + } diff --git a/BlueMapCore/src/main/java/de/bluecolored/bluemap/core/storage/sql/PostgreSQLStorage.java b/BlueMapCore/src/main/java/de/bluecolored/bluemap/core/storage/sql/PostgreSQLStorage.java index f34d44bd..e6ef360a 100644 --- a/BlueMapCore/src/main/java/de/bluecolored/bluemap/core/storage/sql/PostgreSQLStorage.java +++ b/BlueMapCore/src/main/java/de/bluecolored/bluemap/core/storage/sql/PostgreSQLStorage.java @@ -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 diff --git a/BlueMapCore/src/main/java/de/bluecolored/bluemap/core/storage/sql/SQLStorage.java b/BlueMapCore/src/main/java/de/bluecolored/bluemap/core/storage/sql/SQLStorage.java index b257d2cf..d633d73f 100644 --- a/BlueMapCore/src/main/java/de/bluecolored/bluemap/core/storage/sql/SQLStorage.java +++ b/BlueMapCore/src/main/java/de/bluecolored/bluemap/core/storage/sql/SQLStorage.java @@ -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 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 diff --git a/BlueMapCore/src/main/java/de/bluecolored/bluemap/core/storage/sql/dialect/Dialect.java b/BlueMapCore/src/main/java/de/bluecolored/bluemap/core/storage/sql/dialect/DialectType.java similarity index 50% rename from BlueMapCore/src/main/java/de/bluecolored/bluemap/core/storage/sql/dialect/Dialect.java rename to BlueMapCore/src/main/java/de/bluecolored/bluemap/core/storage/sql/dialect/DialectType.java index 8cf89aed..25fff0df 100644 --- a/BlueMapCore/src/main/java/de/bluecolored/bluemap/core/storage/sql/dialect/Dialect.java +++ b/BlueMapCore/src/main/java/de/bluecolored/bluemap/core/storage/sql/dialect/DialectType.java @@ -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 storageClass; + MYSQL (MySQLStorage::new, "mysql"), + MARIADB (MySQLStorage::new, "mariadb"), + POSTGRESQL (PostgreSQLStorage::new,"postgresql"); + + private final SQLStorageFactory storageFactory; private final String dialectName; - - Dialect(Class 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; + + } + } diff --git a/BlueMapCore/src/main/java/de/bluecolored/bluemap/core/storage/sql/dialect/MySQLFactory.java b/BlueMapCore/src/main/java/de/bluecolored/bluemap/core/storage/sql/dialect/MySQLDialect.java similarity index 91% rename from BlueMapCore/src/main/java/de/bluecolored/bluemap/core/storage/sql/dialect/MySQLFactory.java rename to BlueMapCore/src/main/java/de/bluecolored/bluemap/core/storage/sql/dialect/MySQLDialect.java index 30ebfcdf..c7fd5d5f 100644 --- a/BlueMapCore/src/main/java/de/bluecolored/bluemap/core/storage/sql/dialect/MySQLFactory.java +++ b/BlueMapCore/src/main/java/de/bluecolored/bluemap/core/storage/sql/dialect/MySQLDialect.java @@ -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 (?)"; diff --git a/BlueMapCore/src/main/java/de/bluecolored/bluemap/core/storage/sql/dialect/PostgresFactory.java b/BlueMapCore/src/main/java/de/bluecolored/bluemap/core/storage/sql/dialect/PostgresDialect.java similarity index 97% rename from BlueMapCore/src/main/java/de/bluecolored/bluemap/core/storage/sql/dialect/PostgresFactory.java rename to BlueMapCore/src/main/java/de/bluecolored/bluemap/core/storage/sql/dialect/PostgresDialect.java index 2058747c..6f5a930e 100644 --- a/BlueMapCore/src/main/java/de/bluecolored/bluemap/core/storage/sql/dialect/PostgresFactory.java +++ b/BlueMapCore/src/main/java/de/bluecolored/bluemap/core/storage/sql/dialect/PostgresDialect.java @@ -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() { diff --git a/BlueMapCore/src/main/java/de/bluecolored/bluemap/core/storage/sql/dialect/SQLQueryFactory.java b/BlueMapCore/src/main/java/de/bluecolored/bluemap/core/storage/sql/dialect/SQLQueryDialect.java similarity index 97% rename from BlueMapCore/src/main/java/de/bluecolored/bluemap/core/storage/sql/dialect/SQLQueryFactory.java rename to BlueMapCore/src/main/java/de/bluecolored/bluemap/core/storage/sql/dialect/SQLQueryDialect.java index ea344a0c..da0d3a50 100644 --- a/BlueMapCore/src/main/java/de/bluecolored/bluemap/core/storage/sql/dialect/SQLQueryFactory.java +++ b/BlueMapCore/src/main/java/de/bluecolored/bluemap/core/storage/sql/dialect/SQLQueryDialect.java @@ -2,7 +2,7 @@ import org.intellij.lang.annotations.Language; -public interface SQLQueryFactory { +public interface SQLQueryDialect { @Language("sql") String writeMapTile();