From e19111c0fb6a248b7bf3e140235a3ade7850929d Mon Sep 17 00:00:00 2001 From: Rsl1122 Date: Tue, 27 Aug 2019 12:10:26 +0300 Subject: [PATCH] Added groups to /server players table --- .../ExtensionServerPlayerDataTableQuery.java | 60 ++++++++++++++++++- 1 file changed, 59 insertions(+), 1 deletion(-) diff --git a/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/storage/queries/ExtensionServerPlayerDataTableQuery.java b/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/storage/queries/ExtensionServerPlayerDataTableQuery.java index fa7d25b45..72f580c06 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/storage/queries/ExtensionServerPlayerDataTableQuery.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/storage/queries/ExtensionServerPlayerDataTableQuery.java @@ -55,7 +55,22 @@ public class ExtensionServerPlayerDataTableQuery implements Query executeQuery(SQLDB db) { - return db.query(fetchPlayerData()); + return combine(db.query(fetchPlayerData()), db.query(fetchPlayerGroups())); + } + + private Map combine(Map one, Map two) { + for (Map.Entry entry : two.entrySet()) { + UUID playerUUID = entry.getKey(); + ExtensionTabData data = entry.getValue(); + ExtensionTabData existingData = one.get(playerUUID); + if (existingData != null) { + existingData.combine(data); + } else { + existingData = data; + } + one.put(playerUUID, existingData); + } + return one; } private Query> fetchPlayerData() { @@ -73,6 +88,7 @@ public class ExtensionServerPlayerDataTableQuery implements Query> fetchPlayerGroups() { + String selectLimitedNumberOfPlayerUUIDsByLastSeenDate = SELECT + + SessionsTable.TABLE_NAME + '.' + SessionsTable.USER_UUID + + ",MAX(" + SessionsTable.SESSION_END + ") as last_seen" + + FROM + SessionsTable.TABLE_NAME + + GROUP_BY + SessionsTable.TABLE_NAME + '.' + SessionsTable.USER_UUID + ',' + SessionsTable.SESSION_END + + ORDER_BY + SessionsTable.SESSION_END + " DESC LIMIT ?"; + + String sql = SELECT + + "v1." + ExtensionGroupsTable.USER_UUID + " as uuid," + + "v1." + ExtensionGroupsTable.GROUP_NAME + " as group_value," + + "p1." + ExtensionProviderTable.PROVIDER_NAME + " as provider_name," + + "p1." + ExtensionProviderTable.TEXT + " as text," + + "i1." + ExtensionIconTable.ICON_NAME + " as provider_icon_name," + + "i1." + ExtensionIconTable.FAMILY + " as provider_icon_family" + + FROM + ExtensionGroupsTable.TABLE_NAME + " v1" + + INNER_JOIN + '(' + selectLimitedNumberOfPlayerUUIDsByLastSeenDate + ") as last_seen_q on last_seen_q.uuid=v1." + ExtensionGroupsTable.USER_UUID + + INNER_JOIN + ExtensionProviderTable.TABLE_NAME + " p1 on p1." + ExtensionProviderTable.ID + "=v1." + ExtensionGroupsTable.PROVIDER_ID + + INNER_JOIN + ExtensionPluginTable.TABLE_NAME + " e1 on e1." + ExtensionPluginTable.ID + "=p1." + ExtensionProviderTable.PLUGIN_ID + + LEFT_JOIN + ExtensionIconTable.TABLE_NAME + " i1 on i1." + ExtensionIconTable.ID + "=p1." + ExtensionProviderTable.ICON_ID + + WHERE + "e1." + ExtensionPluginTable.SERVER_UUID + "=?"; + + return new QueryStatement>(sql, 1000) { + @Override + public void prepare(PreparedStatement statement) throws SQLException { + statement.setInt(1, xMostRecentPlayers); // Limit to x most recently seen players + statement.setString(2, serverUUID.toString()); + } + + @Override + public Map processResults(ResultSet set) throws SQLException { + return extractDataByPlayer(set); + } + }; + } + private Map extractDataByPlayer(ResultSet set) throws SQLException { Map dataByPlayer = new HashMap<>(); @@ -120,6 +172,12 @@ public class ExtensionServerPlayerDataTableQuery implements Query