From 7e3950e5fc5ca45ad4517eb7613439f922f3b39b Mon Sep 17 00:00:00 2001 From: Rsl1122 Date: Sun, 20 Jan 2019 11:32:32 +0200 Subject: [PATCH] Refactored KillsTable#getAllPlayerKillsBySessionID to a query --- .../sql/queries/batch/LargeFetchQueries.java | 49 +++++++++++++++++-- .../plan/db/sql/tables/KillsTable.java | 37 +------------- 2 files changed, 48 insertions(+), 38 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 f01d99d7b..b8bb56d5a 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,11 +17,10 @@ package com.djrapitops.plan.db.sql.queries.batch; import com.djrapitops.plan.data.container.GeoInfo; +import com.djrapitops.plan.data.container.PlayerKill; import com.djrapitops.plan.db.access.Query; import com.djrapitops.plan.db.access.QueryAllStatement; -import com.djrapitops.plan.db.sql.tables.CommandUseTable; -import com.djrapitops.plan.db.sql.tables.GeoInfoTable; -import com.djrapitops.plan.db.sql.tables.ServerTable; +import com.djrapitops.plan.db.sql.tables.*; import java.sql.ResultSet; import java.sql.SQLException; @@ -73,6 +72,11 @@ public class LargeFetchQueries { }; } + /** + * Query database for all GeoInfo data. + * + * @return Map: Server UUID - List of GeoInfo + */ public static Query>> fetchAllGeoInfoData() { String sql = "SELECT " + GeoInfoTable.Col.IP + ", " + @@ -104,4 +108,43 @@ public class LargeFetchQueries { }; } + /** + * Query database for all Kill data. + * + * @return Map: Session ID - List of PlayerKills + */ + public static Query>> fetchAllPlayerKillsBySessionID() { + String usersUUIDColumn = UsersTable.TABLE_NAME + "." + UsersTable.Col.UUID; + String usersNameColumn = UsersTable.TABLE_NAME + "." + UsersTable.Col.USER_NAME + " as victim_name"; + String sql = "SELECT " + + KillsTable.Col.SESSION_ID + ", " + + KillsTable.Col.DATE + ", " + + KillsTable.Col.WEAPON + ", " + + KillsTable.Col.VICTIM_UUID + ", " + + usersNameColumn + + " FROM " + KillsTable.TABLE_NAME + + " INNER JOIN " + UsersTable.TABLE_NAME + " on " + usersUUIDColumn + "=" + KillsTable.Col.VICTIM_UUID; + + return new QueryAllStatement>>(sql, 50000) { + @Override + public Map> processResults(ResultSet set) throws SQLException { + Map> allPlayerKills = new HashMap<>(); + while (set.next()) { + int sessionID = set.getInt(KillsTable.Col.SESSION_ID.get()); + + List playerKills = allPlayerKills.getOrDefault(sessionID, new ArrayList<>()); + + UUID victim = UUID.fromString(set.getString(KillsTable.Col.VICTIM_UUID.get())); + String victimName = set.getString("victim_name"); + long date = set.getLong(KillsTable.Col.DATE.get()); + String weapon = set.getString(KillsTable.Col.WEAPON.get()); + playerKills.add(new PlayerKill(victim, weapon, date, victimName)); + + allPlayerKills.put(sessionID, playerKills); + } + return allPlayerKills; + } + }; + } + } \ No newline at end of file diff --git a/Plan/common/src/main/java/com/djrapitops/plan/db/sql/tables/KillsTable.java b/Plan/common/src/main/java/com/djrapitops/plan/db/sql/tables/KillsTable.java index 20dce4cbb..4cbfc0bbc 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/db/sql/tables/KillsTable.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/db/sql/tables/KillsTable.java @@ -31,6 +31,7 @@ import com.djrapitops.plan.db.patches.Version10Patch; import com.djrapitops.plan.db.sql.parsing.Column; import com.djrapitops.plan.db.sql.parsing.Sql; import com.djrapitops.plan.db.sql.parsing.TableSqlParser; +import com.djrapitops.plan.db.sql.queries.batch.LargeFetchQueries; import com.djrapitops.plugin.utilities.Verify; import java.sql.PreparedStatement; @@ -240,42 +241,8 @@ public class KillsTable extends UserUUIDTable { }); } - public Map> getAllPlayerKillsBySessionID() { - String usersUUIDColumn = usersTable + "." + UsersTable.Col.UUID; - String usersNameColumn = usersTable + "." + UsersTable.Col.USER_NAME + " as victim_name"; - String sql = "SELECT " + - Col.SESSION_ID + ", " + - Col.DATE + ", " + - Col.WEAPON + ", " + - Col.VICTIM_UUID + ", " + - usersNameColumn + - " FROM " + tableName + - " INNER JOIN " + usersTable + " on " + usersUUIDColumn + "=" + Col.VICTIM_UUID; - - return query(new QueryAllStatement>>(sql, 50000) { - @Override - public Map> processResults(ResultSet set) throws SQLException { - Map> allPlayerKills = new HashMap<>(); - while (set.next()) { - int sessionID = set.getInt(Col.SESSION_ID.get()); - - List playerKills = allPlayerKills.getOrDefault(sessionID, new ArrayList<>()); - - UUID victim = UUID.fromString(set.getString(Col.VICTIM_UUID.get())); - String victimName = set.getString("victim_name"); - long date = set.getLong(Col.DATE.get()); - String weapon = set.getString(Col.WEAPON.get()); - playerKills.add(new PlayerKill(victim, weapon, date, victimName)); - - allPlayerKills.put(sessionID, playerKills); - } - return allPlayerKills; - } - }); - } - public void addKillsToSessions(Map>> map) { - Map> playerKillsBySessionID = getAllPlayerKillsBySessionID(); + Map> playerKillsBySessionID = db.query(LargeFetchQueries.fetchAllPlayerKillsBySessionID()); for (UUID serverUUID : map.keySet()) { for (List sessions : map.get(serverUUID).values()) { for (Session session : sessions) {