mirror of
https://github.com/plan-player-analytics/Plan.git
synced 2025-02-17 17:00:45 +08:00
Implemented SQL query for World names of a single server - Relies on Session data. #381
This commit is contained in:
parent
8f506740d6
commit
7d0554688a
@ -679,4 +679,8 @@ public class SessionsTable extends UserIDTable {
|
||||
session.setSessionID(savedSession.getSessionID());
|
||||
}
|
||||
}
|
||||
|
||||
String getcolumnServerID() {
|
||||
return columnServerID;
|
||||
}
|
||||
}
|
@ -5,8 +5,10 @@ import main.java.com.djrapitops.plan.api.exceptions.DBCreateTableException;
|
||||
import main.java.com.djrapitops.plan.database.databases.SQLDB;
|
||||
import main.java.com.djrapitops.plan.database.processing.ExecStatement;
|
||||
import main.java.com.djrapitops.plan.database.processing.QueryAllStatement;
|
||||
import main.java.com.djrapitops.plan.database.processing.QueryStatement;
|
||||
import main.java.com.djrapitops.plan.database.sql.Sql;
|
||||
import main.java.com.djrapitops.plan.database.sql.TableSqlParser;
|
||||
import main.java.com.djrapitops.plan.utilities.MiscUtils;
|
||||
|
||||
import java.sql.PreparedStatement;
|
||||
import java.sql.ResultSet;
|
||||
@ -111,5 +113,43 @@ public class WorldTable extends Table {
|
||||
return columnWorldName;
|
||||
}
|
||||
|
||||
public Set<String> getWorldNames() throws SQLException {
|
||||
return getWorldNames(MiscUtils.getIPlan().getServerUuid());
|
||||
}
|
||||
|
||||
public Set<String> getWorldNames(UUID serverUUID) throws SQLException {
|
||||
WorldTimesTable worldTimesTable = db.getWorldTimesTable();
|
||||
SessionsTable sessionsTable = db.getSessionsTable();
|
||||
ServerTable serverTable = db.getServerTable();
|
||||
|
||||
String statementSelectServerID = serverTable.statementSelectServerID;
|
||||
|
||||
String worldIDColumn = worldTimesTable + "." + worldTimesTable.getColumnWorldId();
|
||||
String worldSessionIDColumn = worldTimesTable + "." + worldTimesTable.getColumnSessionID();
|
||||
String sessionIDColumn = sessionsTable + "." + sessionsTable.getColumnID();
|
||||
String sessionServerIDColumn = sessionsTable + "." + sessionsTable.getcolumnServerID();
|
||||
|
||||
String sql = "SELECT DISTINCT " +
|
||||
columnWorldName + " FROM " +
|
||||
tableName +
|
||||
" JOIN " + worldTimesTable + " on " + worldIDColumn + "=" + tableName + "." + columnWorldId +
|
||||
" JOIN " + sessionsTable + " on " + worldSessionIDColumn + "=" + sessionIDColumn +
|
||||
" WHERE " + statementSelectServerID + "=" + sessionServerIDColumn;
|
||||
|
||||
return query(new QueryStatement<Set<String>>(sql, 1000) {
|
||||
@Override
|
||||
public void prepare(PreparedStatement statement) throws SQLException {
|
||||
statement.setString(1, serverUUID.toString());
|
||||
}
|
||||
|
||||
@Override
|
||||
public Set<String> processResults(ResultSet set) throws SQLException {
|
||||
Set<String> worldNames = new HashSet<>();
|
||||
while (set.next()) {
|
||||
worldNames.add(set.getString(columnWorldName));
|
||||
}
|
||||
return worldNames;
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
@ -351,4 +351,12 @@ public class WorldTimesTable extends UserIDTable {
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
String getColumnWorldId() {
|
||||
return columnWorldId;
|
||||
}
|
||||
|
||||
String getColumnSessionID() {
|
||||
return columnSessionID;
|
||||
}
|
||||
}
|
||||
|
@ -13,7 +13,6 @@ import main.java.com.djrapitops.plan.data.Action;
|
||||
import main.java.com.djrapitops.plan.data.PlayerKill;
|
||||
import main.java.com.djrapitops.plan.data.Session;
|
||||
import main.java.com.djrapitops.plan.data.UserInfo;
|
||||
import main.java.com.djrapitops.plan.data.time.GMTimes;
|
||||
import main.java.com.djrapitops.plan.data.time.WorldTimes;
|
||||
import main.java.com.djrapitops.plan.database.Database;
|
||||
import main.java.com.djrapitops.plan.database.tables.SessionsTable;
|
||||
@ -157,15 +156,7 @@ public class InspectPageParser extends PageParser {
|
||||
|
||||
String punchCardData = PunchCardGraphCreator.createDataSeries(allSessions);
|
||||
WorldTimes worldTimes = db.getWorldTimesTable().getWorldTimesOfUser(uuid);
|
||||
|
||||
// Add 0 time for worlds not present.
|
||||
Set<String> nonZeroWorlds = worldTimes.getWorldTimes().keySet();
|
||||
for (String world : db.getWorldTable().getWorlds()) {
|
||||
if (nonZeroWorlds.contains(world)) {
|
||||
continue;
|
||||
}
|
||||
worldTimes.setGMTimesForWorld(world, new GMTimes());
|
||||
}
|
||||
AnalysisUtils.addMissingWorlds(worldTimes);
|
||||
|
||||
String[] worldPieData = WorldPieCreator.createSeriesData(worldTimes);
|
||||
|
||||
|
@ -11,7 +11,6 @@ import main.java.com.djrapitops.plan.data.additional.AnalysisType;
|
||||
import main.java.com.djrapitops.plan.data.additional.HookHandler;
|
||||
import main.java.com.djrapitops.plan.data.additional.PluginData;
|
||||
import main.java.com.djrapitops.plan.data.analysis.*;
|
||||
import main.java.com.djrapitops.plan.data.time.GMTimes;
|
||||
import main.java.com.djrapitops.plan.data.time.WorldTimes;
|
||||
import main.java.com.djrapitops.plan.database.Database;
|
||||
import main.java.com.djrapitops.plan.database.tables.TPSTable;
|
||||
@ -296,15 +295,7 @@ public class Analysis {
|
||||
killPart.addKills(playerKills);
|
||||
|
||||
WorldTimes worldTimes = db.getWorldTimesTable().getWorldTimesOfServer();
|
||||
|
||||
// Add 0 time for worlds not present.
|
||||
Set<String> nonZeroWorlds = worldTimes.getWorldTimes().keySet();
|
||||
for (String world : db.getWorldTable().getWorlds()) {
|
||||
if (nonZeroWorlds.contains(world)) {
|
||||
continue;
|
||||
}
|
||||
worldTimes.setGMTimesForWorld(world, new GMTimes());
|
||||
}
|
||||
AnalysisUtils.addMissingWorlds(worldTimes);
|
||||
|
||||
worldPart.setWorldTimes(worldTimes);
|
||||
|
||||
|
@ -1,15 +1,19 @@
|
||||
package main.java.com.djrapitops.plan.utilities.analysis;
|
||||
|
||||
import main.java.com.djrapitops.plan.Log;
|
||||
import main.java.com.djrapitops.plan.api.IPlan;
|
||||
import main.java.com.djrapitops.plan.data.Session;
|
||||
import main.java.com.djrapitops.plan.data.additional.AnalysisType;
|
||||
import main.java.com.djrapitops.plan.data.additional.PluginData;
|
||||
import main.java.com.djrapitops.plan.data.time.GMTimes;
|
||||
import main.java.com.djrapitops.plan.data.time.WorldTimes;
|
||||
import main.java.com.djrapitops.plan.utilities.FormatUtils;
|
||||
import main.java.com.djrapitops.plan.utilities.MiscUtils;
|
||||
import main.java.com.djrapitops.plan.utilities.comparators.SessionLengthComparator;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.sql.SQLException;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.stream.Stream;
|
||||
@ -292,4 +296,20 @@ public class AnalysisUtils {
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
public static void addMissingWorlds(WorldTimes worldTimes) {
|
||||
try {
|
||||
// Add 0 time for worlds not present.
|
||||
Set<String> nonZeroWorlds = worldTimes.getWorldTimes().keySet();
|
||||
IPlan plugin = MiscUtils.getIPlan();
|
||||
for (String world : plugin.getDB().getWorldTable().getWorldNames(plugin.getServerUuid())) {
|
||||
if (nonZeroWorlds.contains(world)) {
|
||||
continue;
|
||||
}
|
||||
worldTimes.setGMTimesForWorld(world, new GMTimes());
|
||||
}
|
||||
} catch (SQLException e) {
|
||||
Log.toLog("AnalysisUtils.addMissingWorlds", e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -5,15 +5,13 @@
|
||||
package main.java.com.djrapitops.plan.utilities.html.structure;
|
||||
|
||||
import com.djrapitops.plugin.utilities.Verify;
|
||||
import main.java.com.djrapitops.plan.Log;
|
||||
import main.java.com.djrapitops.plan.Plan;
|
||||
import main.java.com.djrapitops.plan.Settings;
|
||||
import main.java.com.djrapitops.plan.data.Session;
|
||||
import main.java.com.djrapitops.plan.data.analysis.JoinInfoPart;
|
||||
import main.java.com.djrapitops.plan.data.time.GMTimes;
|
||||
import main.java.com.djrapitops.plan.data.time.WorldTimes;
|
||||
import main.java.com.djrapitops.plan.utilities.FormatUtils;
|
||||
import main.java.com.djrapitops.plan.utilities.MiscUtils;
|
||||
import main.java.com.djrapitops.plan.utilities.analysis.AnalysisUtils;
|
||||
import main.java.com.djrapitops.plan.utilities.comparators.SessionStartComparator;
|
||||
import main.java.com.djrapitops.plan.utilities.html.Html;
|
||||
import main.java.com.djrapitops.plan.utilities.html.HtmlStructure;
|
||||
@ -21,7 +19,6 @@ import main.java.com.djrapitops.plan.utilities.html.graphs.WorldPieCreator;
|
||||
import main.java.com.djrapitops.plan.utilities.html.tables.KillsTableCreator;
|
||||
import main.java.com.djrapitops.plan.utilities.html.tables.SessionsTableCreator;
|
||||
|
||||
import java.sql.SQLException;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@ -113,19 +110,7 @@ public class SessionTabStructureCreator {
|
||||
html.append("<div id=\"").append(id).append("\" style=\"width: 100%; height: 400px;\"></div>");
|
||||
|
||||
WorldTimes worldTimes = session.getWorldTimes();
|
||||
|
||||
try {
|
||||
// Add 0 time for worlds not present.
|
||||
Set<String> nonZeroWorlds = worldTimes.getWorldTimes().keySet();
|
||||
for (String world : MiscUtils.getIPlan().getDB().getWorldTable().getWorlds()) {
|
||||
if (nonZeroWorlds.contains(world)) {
|
||||
continue;
|
||||
}
|
||||
worldTimes.setGMTimesForWorld(world, new GMTimes());
|
||||
}
|
||||
} catch (SQLException e) {
|
||||
Log.toLog("SessionTabStructureCreator", e);
|
||||
}
|
||||
AnalysisUtils.addMissingWorlds(worldTimes);
|
||||
|
||||
String[] worldData = WorldPieCreator.createSeriesData(worldTimes);
|
||||
|
||||
|
@ -876,4 +876,9 @@ public class DatabaseTest {
|
||||
assertTrue(db.getUsersTable().isRegistered(uuid));
|
||||
assertTrue(db.getUserInfoTable().isRegistered(uuid));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testWorldTableGetWorldNamesNoException() throws SQLException {
|
||||
Set<String> worldNames = db.getWorldTable().getWorldNames();
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user