From ad6cb62e61fde1770b41958d6d962248d6b6414b Mon Sep 17 00:00:00 2001 From: Rsl1122 Date: Sun, 20 Jan 2019 11:48:49 +0200 Subject: [PATCH] Refactored PingTable#getAllPings to a query --- .../sql/queries/batch/LargeFetchQueries.java | 41 +++++++++++++++++++ .../plan/db/sql/tables/PingTable.java | 41 ++----------------- .../sql/tables/move/BatchOperationTable.java | 2 +- .../databases/sql/operation/SQLFetchOps.java | 4 +- .../com/djrapitops/plan/db/CommonDBTest.java | 3 +- 5 files changed, 50 insertions(+), 41 deletions(-) diff --git a/Plan/common/src/main/java/com/djrapitops/plan/db/sql/queries/batch/LargeFetchQueries.java b/Plan/common/src/main/java/com/djrapitops/plan/db/sql/queries/batch/LargeFetchQueries.java index dc92ee9ed..ad531470a 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/db/sql/queries/batch/LargeFetchQueries.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/db/sql/queries/batch/LargeFetchQueries.java @@ -17,6 +17,7 @@ package com.djrapitops.plan.db.sql.queries.batch; import com.djrapitops.plan.data.container.GeoInfo; +import com.djrapitops.plan.data.container.Ping; import com.djrapitops.plan.data.container.PlayerKill; import com.djrapitops.plan.data.store.objects.Nickname; import com.djrapitops.plan.db.access.Query; @@ -215,4 +216,44 @@ public class LargeFetchQueries { }; } + /** + * Query database for all Ping data. + * + * @return Map: Player UUID - List of ping data. + */ + public static Query>> fetchAllPingData() { + String sql = "SELECT " + + PingTable.Col.DATE + ", " + + PingTable.Col.MAX_PING + ", " + + PingTable.Col.MIN_PING + ", " + + PingTable.Col.AVG_PING + ", " + + PingTable.Col.UUID + ", " + + PingTable.Col.SERVER_UUID + + " FROM " + PingTable.TABLE_NAME; + return new QueryAllStatement>>(sql, 100000) { + @Override + public Map> processResults(ResultSet set) throws SQLException { + Map> userPings = new HashMap<>(); + + while (set.next()) { + UUID uuid = UUID.fromString(set.getString(PingTable.Col.UUID.get())); + UUID serverUUID = UUID.fromString(set.getString(PingTable.Col.SERVER_UUID.get())); + long date = set.getLong(PingTable.Col.DATE.get()); + double avgPing = set.getDouble(PingTable.Col.AVG_PING.get()); + int minPing = set.getInt(PingTable.Col.MIN_PING.get()); + int maxPing = set.getInt(PingTable.Col.MAX_PING.get()); + + List pings = userPings.getOrDefault(uuid, new ArrayList<>()); + pings.add(new Ping(date, serverUUID, + minPing, + maxPing, + avgPing)); + userPings.put(uuid, pings); + } + + return userPings; + } + }; + } + } \ No newline at end of file diff --git a/Plan/common/src/main/java/com/djrapitops/plan/db/sql/tables/PingTable.java b/Plan/common/src/main/java/com/djrapitops/plan/db/sql/tables/PingTable.java index caf3cea41..f7623041a 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/db/sql/tables/PingTable.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/db/sql/tables/PingTable.java @@ -20,7 +20,6 @@ import com.djrapitops.plan.api.exceptions.database.DBInitException; import com.djrapitops.plan.data.container.Ping; import com.djrapitops.plan.db.SQLDB; import com.djrapitops.plan.db.access.ExecStatement; -import com.djrapitops.plan.db.access.QueryAllStatement; import com.djrapitops.plan.db.access.QueryStatement; import com.djrapitops.plan.db.patches.PingOptimizationPatch; import com.djrapitops.plan.db.sql.parsing.Column; @@ -31,7 +30,10 @@ import com.djrapitops.plugin.api.TimeAmount; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; -import java.util.*; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.UUID; /** * Table that represents plan_ping in the database. @@ -130,41 +132,6 @@ public class PingTable extends UserUUIDTable { }); } - public Map> getAllPings() { - String sql = "SELECT " + - Col.DATE + ", " + - Col.MAX_PING + ", " + - Col.MIN_PING + ", " + - Col.AVG_PING + ", " + - Col.UUID + ", " + - Col.SERVER_UUID + - " FROM " + tableName; - return query(new QueryAllStatement>>(sql, 100000) { - @Override - public Map> processResults(ResultSet set) throws SQLException { - Map> userPings = new HashMap<>(); - - while (set.next()) { - UUID uuid = UUID.fromString(set.getString(Col.UUID.get())); - UUID serverUUID = UUID.fromString(set.getString(Col.SERVER_UUID.get())); - long date = set.getLong(Col.DATE.get()); - double avgPing = set.getDouble(Col.AVG_PING.get()); - int minPing = set.getInt(Col.MIN_PING.get()); - int maxPing = set.getInt(Col.MAX_PING.get()); - - List pings = userPings.getOrDefault(uuid, new ArrayList<>()); - pings.add(new Ping(date, serverUUID, - minPing, - maxPing, - avgPing)); - userPings.put(uuid, pings); - } - - return userPings; - } - }); - } - public void insertAllPings(Map> userPings) { executeBatch(new ExecStatement(insertStatement) { @Override diff --git a/Plan/common/src/main/java/com/djrapitops/plan/db/sql/tables/move/BatchOperationTable.java b/Plan/common/src/main/java/com/djrapitops/plan/db/sql/tables/move/BatchOperationTable.java index de84055a0..9fc68d8ab 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/db/sql/tables/move/BatchOperationTable.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/db/sql/tables/move/BatchOperationTable.java @@ -101,7 +101,7 @@ public class BatchOperationTable extends Table { if (toDB.equals(this)) { return; } - toDB.db.getPingTable().insertAllPings(db.getPingTable().getAllPings()); + toDB.db.getPingTable().insertAllPings(db.query(LargeFetchQueries.fetchAllPingData())); } public void copyCommandUse(BatchOperationTable toDB) { 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 95f457989..829a02d9e 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 @@ -125,7 +125,7 @@ public class SQLFetchOps extends SQLOps implements FetchOperations { List serverUserInfo = userInfoTable.getServerUserInfo(serverUUID); Map timesKicked = usersTable.getAllTimesKicked(); Map> geoInfo = db.query(LargeFetchQueries.fetchAllGeoInfoData()); // TODO Optimize - Map> allPings = pingTable.getAllPings(); + Map> allPings = db.query(LargeFetchQueries.fetchAllPingData()); // TODO Optimize Map> allNicknames = db.query(LargeFetchQueries.fetchAllNicknameDataByPlayerUUIDs()); // TODO Optimize Map> sessions = sessionsTable.getSessionInfoOfServer(serverUUID); @@ -190,7 +190,7 @@ public class SQLFetchOps extends SQLOps implements FetchOperations { Map users = usersTable.getUsers(); Map timesKicked = usersTable.getAllTimesKicked(); Map> geoInfo = db.query(LargeFetchQueries.fetchAllGeoInfoData()); - Map> allPings = pingTable.getAllPings(); + Map> allPings = db.query(LargeFetchQueries.fetchAllPingData()); Map> allNicknames = db.query(LargeFetchQueries.fetchAllNicknameDataByPlayerUUIDs()); Map>> sessions = sessionsTable.getAllSessions(false); 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 59301e7c1..55c20bd9c 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 @@ -29,6 +29,7 @@ import com.djrapitops.plan.data.store.objects.Nickname; import com.djrapitops.plan.data.time.GMTimes; import com.djrapitops.plan.data.time.WorldTimes; import com.djrapitops.plan.db.patches.Patch; +import com.djrapitops.plan.db.sql.queries.batch.LargeFetchQueries; import com.djrapitops.plan.db.sql.tables.*; import com.djrapitops.plan.db.tasks.CreateIndexTask; import com.djrapitops.plan.system.PlanSystem; @@ -572,7 +573,7 @@ public abstract class CommonDBTest { assertTrue(db.getWorldTable().getAllWorlds().isEmpty()); assertTrue(tpsTable.getTPSData().isEmpty()); assertTrue(db.getServerTable().getBukkitServers().isEmpty()); - assertTrue(db.getPingTable().getAllPings().isEmpty()); + assertTrue(db.query(LargeFetchQueries.fetchAllPingData()).isEmpty()); assertTrue(securityTable.getUsers().isEmpty()); }