Refactored PingTable#getAllPings to a query

This commit is contained in:
Rsl1122 2019-01-20 11:48:49 +02:00
parent 7c45564fa9
commit ad6cb62e61
5 changed files with 50 additions and 41 deletions

View File

@ -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<Map<UUID, List<Ping>>> 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<Map<UUID, List<Ping>>>(sql, 100000) {
@Override
public Map<UUID, List<Ping>> processResults(ResultSet set) throws SQLException {
Map<UUID, List<Ping>> 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<Ping> pings = userPings.getOrDefault(uuid, new ArrayList<>());
pings.add(new Ping(date, serverUUID,
minPing,
maxPing,
avgPing));
userPings.put(uuid, pings);
}
return userPings;
}
};
}
}

View File

@ -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<UUID, List<Ping>> 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<Map<UUID, List<Ping>>>(sql, 100000) {
@Override
public Map<UUID, List<Ping>> processResults(ResultSet set) throws SQLException {
Map<UUID, List<Ping>> 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<Ping> 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<UUID, List<Ping>> userPings) {
executeBatch(new ExecStatement(insertStatement) {
@Override

View File

@ -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) {

View File

@ -125,7 +125,7 @@ public class SQLFetchOps extends SQLOps implements FetchOperations {
List<UserInfo> serverUserInfo = userInfoTable.getServerUserInfo(serverUUID);
Map<UUID, Integer> timesKicked = usersTable.getAllTimesKicked();
Map<UUID, List<GeoInfo>> geoInfo = db.query(LargeFetchQueries.fetchAllGeoInfoData()); // TODO Optimize
Map<UUID, List<Ping>> allPings = pingTable.getAllPings();
Map<UUID, List<Ping>> allPings = db.query(LargeFetchQueries.fetchAllPingData()); // TODO Optimize
Map<UUID, List<Nickname>> allNicknames = db.query(LargeFetchQueries.fetchAllNicknameDataByPlayerUUIDs()); // TODO Optimize
Map<UUID, List<Session>> sessions = sessionsTable.getSessionInfoOfServer(serverUUID);
@ -190,7 +190,7 @@ public class SQLFetchOps extends SQLOps implements FetchOperations {
Map<UUID, UserInfo> users = usersTable.getUsers();
Map<UUID, Integer> timesKicked = usersTable.getAllTimesKicked();
Map<UUID, List<GeoInfo>> geoInfo = db.query(LargeFetchQueries.fetchAllGeoInfoData());
Map<UUID, List<Ping>> allPings = pingTable.getAllPings();
Map<UUID, List<Ping>> allPings = db.query(LargeFetchQueries.fetchAllPingData());
Map<UUID, List<Nickname>> allNicknames = db.query(LargeFetchQueries.fetchAllNicknameDataByPlayerUUIDs());
Map<UUID, Map<UUID, List<Session>>> sessions = sessionsTable.getAllSessions(false);

View File

@ -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());
}