mirror of
https://github.com/plan-player-analytics/Plan.git
synced 2024-10-06 10:27:42 +02:00
Refactored SessionsTable#getAllSessions to queries:
- fetchAllSessionsWithoutKillOrWorldData - fetchAllSessionsWithKillOrWorldData
This commit is contained in:
parent
82ac699ea2
commit
721e811dc5
@ -20,6 +20,7 @@ import com.djrapitops.plan.data.WebUser;
|
||||
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.container.Session;
|
||||
import com.djrapitops.plan.data.store.objects.Nickname;
|
||||
import com.djrapitops.plan.db.access.Query;
|
||||
import com.djrapitops.plan.db.access.QueryAllStatement;
|
||||
@ -314,4 +315,65 @@ public class LargeFetchQueries {
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Query the database for Session data without kill, death or world data.
|
||||
*
|
||||
* @return Multimap: Server UUID - (Player UUID - List of sessions)
|
||||
*/
|
||||
public static Query<Map<UUID, Map<UUID, List<Session>>>> fetchAllSessionsWithoutKillOrWorldData() {
|
||||
String sql = "SELECT " +
|
||||
SessionsTable.Col.ID + ", " +
|
||||
SessionsTable.Col.UUID + ", " +
|
||||
SessionsTable.Col.SERVER_UUID + ", " +
|
||||
SessionsTable.Col.SESSION_START + ", " +
|
||||
SessionsTable.Col.SESSION_END + ", " +
|
||||
SessionsTable.Col.DEATHS + ", " +
|
||||
SessionsTable.Col.MOB_KILLS + ", " +
|
||||
SessionsTable.Col.AFK_TIME +
|
||||
" FROM " + SessionsTable.TABLE_NAME;
|
||||
|
||||
return new QueryAllStatement<Map<UUID, Map<UUID, List<Session>>>>(sql, 20000) {
|
||||
@Override
|
||||
public Map<UUID, Map<UUID, List<Session>>> processResults(ResultSet set) throws SQLException {
|
||||
Map<UUID, Map<UUID, List<Session>>> map = new HashMap<>();
|
||||
while (set.next()) {
|
||||
UUID serverUUID = UUID.fromString(set.getString(SessionsTable.Col.SERVER_UUID.get()));
|
||||
UUID uuid = UUID.fromString(set.getString(SessionsTable.Col.UUID.get()));
|
||||
|
||||
Map<UUID, List<Session>> sessionsByUser = map.getOrDefault(serverUUID, new HashMap<>());
|
||||
List<Session> sessions = sessionsByUser.getOrDefault(uuid, new ArrayList<>());
|
||||
|
||||
long start = set.getLong(SessionsTable.Col.SESSION_START.get());
|
||||
long end = set.getLong(SessionsTable.Col.SESSION_END.get());
|
||||
|
||||
int deaths = set.getInt(SessionsTable.Col.DEATHS.get());
|
||||
int mobKills = set.getInt(SessionsTable.Col.MOB_KILLS.get());
|
||||
int id = set.getInt(SessionsTable.Col.ID.get());
|
||||
|
||||
long timeAFK = set.getLong(SessionsTable.Col.AFK_TIME.get());
|
||||
|
||||
sessions.add(new Session(id, uuid, serverUUID, start, end, mobKills, deaths, timeAFK));
|
||||
|
||||
sessionsByUser.put(uuid, sessions);
|
||||
map.put(serverUUID, sessionsByUser);
|
||||
}
|
||||
return map;
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Query the database for Session data with kill, death or world data.
|
||||
*
|
||||
* @return Multimap: Server UUID - (Player UUID - List of sessions)
|
||||
*/
|
||||
public static Query<Map<UUID, Map<UUID, List<Session>>>> fetchAllSessionsWithKillAndWorldData() {
|
||||
return db -> {
|
||||
Map<UUID, Map<UUID, List<Session>>> sessions = db.query(fetchAllSessionsWithoutKillOrWorldData());
|
||||
db.getKillsTable().addKillsToSessions(sessions);
|
||||
db.getWorldTimesTable().addWorldTimesToSessions(sessions);
|
||||
return sessions;
|
||||
};
|
||||
}
|
||||
}
|
@ -30,6 +30,7 @@ import com.djrapitops.plan.db.sql.parsing.Column;
|
||||
import com.djrapitops.plan.db.sql.parsing.Select;
|
||||
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;
|
||||
@ -439,53 +440,6 @@ public class SessionsTable extends UserUUIDTable {
|
||||
});
|
||||
}
|
||||
|
||||
public Map<UUID, Map<UUID, List<Session>>> getAllSessions(boolean getKillsAndWorldTimes) {
|
||||
String sql = "SELECT " +
|
||||
Col.ID + ", " +
|
||||
Col.UUID + ", " +
|
||||
Col.SERVER_UUID + ", " +
|
||||
Col.SESSION_START + ", " +
|
||||
Col.SESSION_END + ", " +
|
||||
Col.DEATHS + ", " +
|
||||
Col.MOB_KILLS + ", " +
|
||||
Col.AFK_TIME +
|
||||
" FROM " + tableName;
|
||||
|
||||
return query(new QueryAllStatement<Map<UUID, Map<UUID, List<Session>>>>(sql, 20000) {
|
||||
@Override
|
||||
public Map<UUID, Map<UUID, List<Session>>> processResults(ResultSet set) throws SQLException {
|
||||
Map<UUID, Map<UUID, List<Session>>> map = new HashMap<>();
|
||||
while (set.next()) {
|
||||
UUID serverUUID = UUID.fromString(set.getString(Col.SERVER_UUID.get()));
|
||||
UUID uuid = UUID.fromString(set.getString(Col.UUID.get()));
|
||||
|
||||
Map<UUID, List<Session>> sessionsByUser = map.getOrDefault(serverUUID, new HashMap<>());
|
||||
List<Session> sessions = sessionsByUser.getOrDefault(uuid, new ArrayList<>());
|
||||
|
||||
long start = set.getLong(Col.SESSION_START.get());
|
||||
long end = set.getLong(Col.SESSION_END.get());
|
||||
|
||||
int deaths = set.getInt(Col.DEATHS.get());
|
||||
int mobKills = set.getInt(Col.MOB_KILLS.get());
|
||||
int id = set.getInt(Col.ID.get());
|
||||
|
||||
long timeAFK = set.getLong(Col.AFK_TIME.get());
|
||||
|
||||
Session session = new Session(id, uuid, serverUUID, start, end, mobKills, deaths, timeAFK);
|
||||
sessions.add(session);
|
||||
|
||||
sessionsByUser.put(uuid, sessions);
|
||||
map.put(serverUUID, sessionsByUser);
|
||||
}
|
||||
if (getKillsAndWorldTimes) {
|
||||
db.getKillsTable().addKillsToSessions(map);
|
||||
db.getWorldTimesTable().addWorldTimesToSessions(map);
|
||||
}
|
||||
return map;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public void insertSessions(Map<UUID, Map<UUID, List<Session>>> allSessions, boolean saveKillsAndWorldTimes) {
|
||||
if (Verify.isEmpty(allSessions)) {
|
||||
return;
|
||||
@ -514,7 +468,7 @@ public class SessionsTable extends UserUUIDTable {
|
||||
}
|
||||
});
|
||||
if (saveKillsAndWorldTimes) {
|
||||
Map<UUID, Map<UUID, List<Session>>> savedSessions = getAllSessions(false);
|
||||
Map<UUID, Map<UUID, List<Session>>> savedSessions = db.query(LargeFetchQueries.fetchAllSessionsWithoutKillOrWorldData());
|
||||
matchSessionIDs(allSessions, savedSessions);
|
||||
db.getKillsTable().savePlayerKills(allSessions);
|
||||
db.getWorldTimesTable().saveWorldTimes(allSessions);
|
||||
|
@ -171,6 +171,6 @@ public class BatchOperationTable extends Table {
|
||||
if (toDB.equals(this)) {
|
||||
return;
|
||||
}
|
||||
toDB.db.getSessionsTable().insertSessions(db.getSessionsTable().getAllSessions(true), true);
|
||||
toDB.db.getSessionsTable().insertSessions(db.query(LargeFetchQueries.fetchAllSessionsWithKillAndWorldData()), true);
|
||||
}
|
||||
}
|
||||
|
@ -198,7 +198,7 @@ public class SQLFetchOps extends SQLOps implements FetchOperations {
|
||||
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);
|
||||
Map<UUID, Map<UUID, List<Session>>> sessions = db.query(LargeFetchQueries.fetchAllSessionsWithoutKillOrWorldData());
|
||||
Map<UUID, List<UserInfo>> allUserInfo = userInfoTable.getAllUserInfo();
|
||||
Map<UUID, PerServerContainer> perServerInfo = getPerServerData(sessions, allUserInfo, allPings);
|
||||
|
||||
@ -419,7 +419,7 @@ public class SQLFetchOps extends SQLOps implements FetchOperations {
|
||||
|
||||
@Override
|
||||
public Map<UUID, Map<UUID, List<Session>>> getSessionsWithNoExtras() {
|
||||
return sessionsTable.getAllSessions(false);
|
||||
return db.query(LargeFetchQueries.fetchAllSessionsWithoutKillOrWorldData());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -799,7 +799,7 @@ public abstract class CommonDBTest {
|
||||
|
||||
sessionsTable.insertSessions(map, true);
|
||||
|
||||
Map<UUID, Map<UUID, List<Session>>> allSessions = sessionsTable.getAllSessions(true);
|
||||
Map<UUID, Map<UUID, List<Session>>> allSessions = db.query(LargeFetchQueries.fetchAllSessionsWithKillAndWorldData());
|
||||
|
||||
assertEquals(worldTimes, allSessions.get(serverUUID).get(playerUUID).get(0).getUnsafe(SessionKeys.WORLD_TIMES));
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user