diff --git a/Plan/common/src/main/java/com/djrapitops/plan/db/access/queries/objects/NewerConfigQuery.java b/Plan/common/src/main/java/com/djrapitops/plan/db/access/queries/objects/NewerConfigQuery.java new file mode 100644 index 000000000..2f1022d88 --- /dev/null +++ b/Plan/common/src/main/java/com/djrapitops/plan/db/access/queries/objects/NewerConfigQuery.java @@ -0,0 +1,74 @@ +/* + * This file is part of Player Analytics (Plan). + * + * Plan is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License v3 as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Plan is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Plan. If not, see . + */ +package com.djrapitops.plan.db.access.queries.objects; + +import com.djrapitops.plan.db.access.QueryStatement; +import com.djrapitops.plan.system.settings.config.Config; +import com.djrapitops.plan.system.settings.config.ConfigReader; + +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.Optional; +import java.util.Scanner; +import java.util.UUID; + +import static com.djrapitops.plan.db.sql.tables.SettingsTable.*; + +/** + * Query to fetch a newer config from the database. + * + * @author Rsl1122 + */ +public class NewerConfigQuery extends QueryStatement> { + + private static final String SELECT_STATEMENT = "SELECT " + CONFIG_CONTENT + " FROM " + TABLE_NAME + + " WHERE " + UPDATED + ">? AND " + + SERVER_UUID + "=? LIMIT 1"; + + private final UUID serverUUID; + private final long updatedAfter; + + /** + * Create a new Query. + * + * @param serverUUID UUID of the server + * @param updatedAfter Epoch ms. + */ + public NewerConfigQuery(UUID serverUUID, long updatedAfter) { + super(SELECT_STATEMENT); + this.serverUUID = serverUUID; + this.updatedAfter = updatedAfter; + } + + @Override + public void prepare(PreparedStatement statement) throws SQLException { + statement.setLong(1, updatedAfter); + statement.setString(2, serverUUID.toString()); + } + + @Override + public Optional processResults(ResultSet set) throws SQLException { + if (set.next()) { + try (ConfigReader reader = new ConfigReader(new Scanner(set.getString(CONFIG_CONTENT)))) { + return Optional.of(reader.read()); + } + } else { + return Optional.empty(); + } + } +} \ No newline at end of file diff --git a/Plan/common/src/main/java/com/djrapitops/plan/db/sql/tables/SettingsTable.java b/Plan/common/src/main/java/com/djrapitops/plan/db/sql/tables/SettingsTable.java index bbbce1596..5d9978d02 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/db/sql/tables/SettingsTable.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/db/sql/tables/SettingsTable.java @@ -18,18 +18,8 @@ package com.djrapitops.plan.db.sql.tables; import com.djrapitops.plan.db.DBType; import com.djrapitops.plan.db.SQLDB; -import com.djrapitops.plan.db.access.QueryStatement; import com.djrapitops.plan.db.sql.parsing.CreateTableParser; import com.djrapitops.plan.db.sql.parsing.Sql; -import com.djrapitops.plan.system.settings.config.Config; -import com.djrapitops.plan.system.settings.config.ConfigReader; - -import java.sql.PreparedStatement; -import java.sql.ResultSet; -import java.sql.SQLException; -import java.util.Optional; -import java.util.Scanner; -import java.util.UUID; /** * Table that represents plan_settings. @@ -67,36 +57,4 @@ public class SettingsTable extends Table { .column(CONFIG_CONTENT, "TEXT").notNull() .toString(); } - - /** - * Fetch a config that was placed into the database after a certain epoch ms. - * - * @param updatedAfter Epoch ms. - * @param serverUUID UUID of the server - * @return Optional Config if a new config is found, empty if not. - */ - public Optional fetchNewerConfig(long updatedAfter, UUID serverUUID) { - String sql = "SELECT " + CONFIG_CONTENT + " FROM " + tableName + - " WHERE " + UPDATED + ">? AND " + - SERVER_UUID + "=? LIMIT 1"; - - return Optional.ofNullable(query(new QueryStatement(sql, 10) { - @Override - public void prepare(PreparedStatement statement) throws SQLException { - statement.setLong(1, updatedAfter); - statement.setString(2, serverUUID.toString()); - } - - @Override - public Config processResults(ResultSet set) throws SQLException { - if (set.next()) { - try (ConfigReader reader = new ConfigReader(new Scanner(set.getString(CONFIG_CONTENT)))) { - return reader.read(); - } - } else { - return null; - } - } - })); - } } diff --git a/Plan/common/src/main/java/com/djrapitops/plan/system/database/databases/sql/operation/SQLFetchOps.java b/Plan/common/src/main/java/com/djrapitops/plan/system/database/databases/sql/operation/SQLFetchOps.java index a7a0cd4ad..5185e8b79 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/system/database/databases/sql/operation/SQLFetchOps.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/system/database/databases/sql/operation/SQLFetchOps.java @@ -185,6 +185,6 @@ public class SQLFetchOps extends SQLOps implements FetchOperations { @Override public Optional getNewConfig(long updatedAfter, UUID serverUUID) { - return settingsTable.fetchNewerConfig(updatedAfter, serverUUID); + return db.query(new NewerConfigQuery(serverUUID, updatedAfter)); } } diff --git a/Plan/common/src/main/java/com/djrapitops/plan/system/settings/network/NetworkSettingManager.java b/Plan/common/src/main/java/com/djrapitops/plan/system/settings/network/NetworkSettingManager.java index 7af3a1915..84b5a5c9e 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/system/settings/network/NetworkSettingManager.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/system/settings/network/NetworkSettingManager.java @@ -18,6 +18,7 @@ package com.djrapitops.plan.system.settings.network; import com.djrapitops.plan.api.exceptions.EnableException; import com.djrapitops.plan.db.Database; +import com.djrapitops.plan.db.access.queries.objects.NewerConfigQuery; import com.djrapitops.plan.db.access.queries.objects.ServerQueries; import com.djrapitops.plan.db.access.transactions.StoreConfigTransaction; import com.djrapitops.plan.system.SubSystem; @@ -181,7 +182,7 @@ public class NetworkSettingManager implements SubSystem { File configFile = getServerConfigFile(serverUUID); long lastModified = configFile.exists() ? configFile.lastModified() : -1; - Optional foundConfig = database.fetch().getNewConfig(lastModified, serverUUID); + Optional foundConfig = database.query(new NewerConfigQuery(serverUUID, lastModified)); if (foundConfig.isPresent()) { try { Config writing = foundConfig.get(); diff --git a/Plan/common/src/main/java/com/djrapitops/plan/system/settings/network/ServerSettingsManager.java b/Plan/common/src/main/java/com/djrapitops/plan/system/settings/network/ServerSettingsManager.java index f944957a9..c509a2bd3 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/system/settings/network/ServerSettingsManager.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/system/settings/network/ServerSettingsManager.java @@ -17,6 +17,7 @@ package com.djrapitops.plan.system.settings.network; import com.djrapitops.plan.db.Database; +import com.djrapitops.plan.db.access.queries.objects.NewerConfigQuery; import com.djrapitops.plan.db.access.transactions.StoreConfigTransaction; import com.djrapitops.plan.system.SubSystem; import com.djrapitops.plan.system.database.DBSystem; @@ -131,7 +132,7 @@ public class ServerSettingsManager implements SubSystem { File configFile = files.getConfigFile(); long lastModified = configFile.exists() ? configFile.lastModified() : -1; - Optional foundConfig = database.fetch().getNewConfig(lastModified, serverInfo.getServerUUID()); + Optional foundConfig = database.query(new NewerConfigQuery(serverInfo.getServerUUID(), lastModified)); if (foundConfig.isPresent()) { try { new ConfigWriter(configFile.toPath()).write(foundConfig.get()); diff --git a/Plan/common/src/test/java/com/djrapitops/plan/db/CommonDBTest.java b/Plan/common/src/test/java/com/djrapitops/plan/db/CommonDBTest.java index 903265707..e5f067fca 100644 --- a/Plan/common/src/test/java/com/djrapitops/plan/db/CommonDBTest.java +++ b/Plan/common/src/test/java/com/djrapitops/plan/db/CommonDBTest.java @@ -956,7 +956,7 @@ public abstract class CommonDBTest { db.executeTransaction(new StoreConfigTransaction(serverUUID, config, System.currentTimeMillis())); - Optional foundConfig = db.getSettingsTable().fetchNewerConfig(0, serverUUID); + Optional foundConfig = db.query(new NewerConfigQuery(serverUUID, 0)); assertTrue(foundConfig.isPresent()); assertEquals(config, foundConfig.get()); } @@ -970,7 +970,7 @@ public abstract class CommonDBTest { db.executeTransaction(new StoreConfigTransaction(serverUUID, config, System.currentTimeMillis())); - assertFalse(db.getSettingsTable().fetchNewerConfig(savedMs, serverUUID).isPresent()); + assertFalse(db.query(new NewerConfigQuery(serverUUID, savedMs)).isPresent()); } @Test