Implemented SQL query for World names of a single server - Relies on Session data. #381

This commit is contained in:
Rsl1122 2017-10-31 10:53:24 +02:00
parent 8f506740d6
commit 7d0554688a
8 changed files with 81 additions and 37 deletions

View File

@ -679,4 +679,8 @@ public class SessionsTable extends UserIDTable {
session.setSessionID(savedSession.getSessionID());
}
}
String getcolumnServerID() {
return columnServerID;
}
}

View File

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

View File

@ -351,4 +351,12 @@ public class WorldTimesTable extends UserIDTable {
}
});
}
String getColumnWorldId() {
return columnWorldId;
}
String getColumnSessionID() {
return columnSessionID;
}
}

View File

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

View File

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

View File

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

View File

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

View File

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