From c6fbb12d2d012b3a7d37e82817be7f78db08729b Mon Sep 17 00:00:00 2001 From: Rsl1122 Date: Wed, 23 Aug 2017 10:51:46 +0300 Subject: [PATCH 01/11] SessionTable --- .../com/djrapitops/plan/data/Session.java | 4 + .../java/com/djrapitops/plan/data/TPS.java | 49 ++-- .../plan/database/databases/SQLDB.java | 4 +- .../plan/database/tables/KillsTable.java | 5 + .../plan/database/tables/SessionsTable.java | 263 +++++++++++++++++- .../plan/database/tables/WorldTimesTable.java | 6 + .../plan/utilities/analysis/Analysis.java | 2 +- 7 files changed, 290 insertions(+), 43 deletions(-) diff --git a/Plan/src/main/java/com/djrapitops/plan/data/Session.java b/Plan/src/main/java/com/djrapitops/plan/data/Session.java index 3f91337b0..fcf6b59ca 100644 --- a/Plan/src/main/java/com/djrapitops/plan/data/Session.java +++ b/Plan/src/main/java/com/djrapitops/plan/data/Session.java @@ -197,4 +197,8 @@ public class Session { public long getSessionID() { return sessionID; } + + public void setSessionID(long sessionID) { + this.sessionID = sessionID; + } } diff --git a/Plan/src/main/java/com/djrapitops/plan/data/TPS.java b/Plan/src/main/java/com/djrapitops/plan/data/TPS.java index 88c2839c3..f19de2090 100644 --- a/Plan/src/main/java/com/djrapitops/plan/data/TPS.java +++ b/Plan/src/main/java/com/djrapitops/plan/data/TPS.java @@ -5,6 +5,8 @@ */ package main.java.com.djrapitops.plan.data; +import com.google.common.base.Objects; + /** * Class containing single datapoint of TPS / Players online / CPU Usage / Used Memory / Entity Count / Chunks loaded. * @@ -106,37 +108,34 @@ public class TPS { } @Override - public int hashCode() { - int hash = 3; - hash = 97 * hash + (int) (this.date ^ (this.date >>> 32)); - hash = 97 * hash + (int) (Double.doubleToLongBits(this.ticksPerSecond) ^ (Double.doubleToLongBits(this.ticksPerSecond) >>> 32)); - hash = 97 * hash + this.players; - return hash; + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + TPS tps = (TPS) o; + return date == tps.date && + Double.compare(tps.ticksPerSecond, ticksPerSecond) == 0 && + players == tps.players && + Double.compare(tps.cpuUsage, cpuUsage) == 0 && + usedMemory == tps.usedMemory && + entityCount == tps.entityCount && + chunksLoaded == tps.chunksLoaded; } @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - - if (obj == null) { - return false; - } - - if (getClass() != obj.getClass()) { - return false; - } - - final TPS other = (TPS) obj; - return date == other.date - && Double.compare(this.ticksPerSecond, other.ticksPerSecond) == 0 - && this.players == other.players - && Double.compare(cpuUsage, other.cpuUsage) == 0; + public int hashCode() { + return Objects.hashCode(date, ticksPerSecond, players, cpuUsage, usedMemory, entityCount, chunksLoaded); } @Override public String toString() { - return "TPS{" + date + "|" + ticksPerSecond + "|" + players + "|" + cpuUsage + "}"; + return "TPS{" + + "date=" + date + + ", ticksPerSecond=" + ticksPerSecond + + ", players=" + players + + ", cpuUsage=" + cpuUsage + + ", usedMemory=" + usedMemory + + ", entityCount=" + entityCount + + ", chunksLoaded=" + chunksLoaded + + '}'; } } diff --git a/Plan/src/main/java/com/djrapitops/plan/database/databases/SQLDB.java b/Plan/src/main/java/com/djrapitops/plan/database/databases/SQLDB.java index d28ef4dbb..9d6c03dbd 100644 --- a/Plan/src/main/java/com/djrapitops/plan/database/databases/SQLDB.java +++ b/Plan/src/main/java/com/djrapitops/plan/database/databases/SQLDB.java @@ -195,8 +195,8 @@ public abstract class SQLDB extends Database { public Table[] getAllTablesInRemoveOrder() { return new Table[]{ ipsTable, - nicknamesTable, sessionsTable, killsTable, - worldTimesTable, worldTable, usersTable, + nicknamesTable, killsTable, worldTimesTable, + sessionsTable, worldTable, usersTable, commandUseTable, tpsTable, serverTable}; } diff --git a/Plan/src/main/java/com/djrapitops/plan/database/tables/KillsTable.java b/Plan/src/main/java/com/djrapitops/plan/database/tables/KillsTable.java index 34e57c3b3..96b3fd710 100644 --- a/Plan/src/main/java/com/djrapitops/plan/database/tables/KillsTable.java +++ b/Plan/src/main/java/com/djrapitops/plan/database/tables/KillsTable.java @@ -3,6 +3,7 @@ package main.java.com.djrapitops.plan.database.tables; import com.djrapitops.plugin.utilities.Verify; import main.java.com.djrapitops.plan.Log; import main.java.com.djrapitops.plan.data.KillData; +import main.java.com.djrapitops.plan.data.Session; import main.java.com.djrapitops.plan.database.databases.SQLDB; import main.java.com.djrapitops.plan.database.sql.Sql; import main.java.com.djrapitops.plan.database.sql.TableSqlParser; @@ -232,4 +233,8 @@ public class KillsTable extends Table { public void savePlayerKills(UUID uuid, List playerKills) { // TODO savePlayerKills } + + public void addKillsToSessions(List allSessions) { + // TODO addKillsToSessions + } } diff --git a/Plan/src/main/java/com/djrapitops/plan/database/tables/SessionsTable.java b/Plan/src/main/java/com/djrapitops/plan/database/tables/SessionsTable.java index cc5c01536..8472cc3ff 100644 --- a/Plan/src/main/java/com/djrapitops/plan/database/tables/SessionsTable.java +++ b/Plan/src/main/java/com/djrapitops/plan/database/tables/SessionsTable.java @@ -12,6 +12,7 @@ import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.*; +import java.util.stream.Collectors; /** * @author Rsl1122 @@ -68,7 +69,6 @@ public class SessionsTable extends UserIDTable { /** * Removes User's Sessions from the Database. *

- * // TODO KILLS SHOULD BE REMOVED FIRST. * * @param userId * @return @@ -77,7 +77,36 @@ public class SessionsTable extends UserIDTable { return super.removeDataOf(userId); } - public void saveSessionInformation(UUID uuid, Session session) throws SQLException { + /** + * Used to save a session, with all it's information into the database. + *

+ * Also saves WorldTimes and Kills. + * + * @param uuid UUID of the player. + * @param session Session of the player that has ended ({@code endSession} has been called) + * @throws SQLException + */ + public void saveSession(UUID uuid, Session session) throws SQLException { + saveSessionInformation(uuid, session); + long sessionID = getSessionID(uuid, session); + if (sessionID == -1) { + throw new IllegalStateException("Session was not Saved!"); + } + session.setSessionID(sessionID); + db.getWorldTimesTable().saveWorldTimes(session.getWorldTimes()); + db.getKillsTable().savePlayerKills(uuid, session.getPlayerKills()); + } + + /** + * Saves Session's Information to the Session Table. + *

+ * Does not save Kills or WorldTimes. + * + * @param uuid UUID of the player. + * @param session Session of the player that has ended ({@code endSession} has been called) + * @throws SQLException + */ + private void saveSessionInformation(UUID uuid, Session session) throws SQLException { PreparedStatement statement = null; try { statement = prepareStatement("INSERT INTO " + tableName + " (" @@ -103,12 +132,47 @@ public class SessionsTable extends UserIDTable { } finally { close(statement); } - - db.getWorldTimesTable().saveWorldTimes(session.getWorldTimes()); - db.getKillsTable().savePlayerKills(uuid, session.getPlayerKills()); } - public Map> getSessions(UUID uuid) throws SQLException { + /** + * Used to get the sessionID of a newly inserted row. + * + * @param uuid UUID of the player + * @param session session inserted. + * @return ID of the inserted session or -1 if session has not been inserted. + */ + private long getSessionID(UUID uuid, Session session) throws SQLException { + PreparedStatement statement = null; + ResultSet set = null; + try { + statement = prepareStatement("SELECT " + columnSessionID + " FROM " + tableName + + " WHERE " + columnUserID + "=" + usersTable.statementSelectID + + " AND " + columnSessionStart + "=?" + + " AND " + columnSessionEnd + "=?"); + statement.setString(1, uuid.toString()); + statement.setLong(2, session.getSessionStart()); + statement.setLong(3, session.getSessionEnd()); + set = statement.executeQuery(); + if (set.next()) { + return set.getLong(columnSessionID); + } + return -1L; + } finally { + close(set, statement); + } + } + + /** + * Returns a Map containing Lists of sessions, key as ServerName. + *

+ * Does not include Kills or WorldTimes. + * Use {@code getSessions} to get full Sessions. + * + * @param uuid UUID of the player + * @return Map with Sessions that don't contain Kills or WorldTimes. + * @throws SQLException + */ + private Map> getSessionInformation(UUID uuid) throws SQLException { Map serverNames = serverTable.getServerNames(); Map> sessionsByServer = new HashMap<>(); PreparedStatement statement = null; @@ -136,23 +200,56 @@ public class SessionsTable extends UserIDTable { } } + public Map> getSessions(UUID uuid) throws SQLException { + Map> sessions = getSessionInformation(uuid); + List allSessions = sessions.values().stream().flatMap(Collection::stream).collect(Collectors.toList()); + db.getKillsTable().addKillsToSessions(allSessions); + db.getWorldTimesTable().addWorldTimesToSessions(allSessions); + return sessions; + } + + /** + * Get Total Playtime of a Player on THIS server. + * + * @param uuid UUID of the player. + * @return Milliseconds played on THIS server. 0 if player or server not found. + * @throws SQLException + */ public long getPlaytime(UUID uuid) throws SQLException { return getPlaytime(uuid, Plan.getServerUUID()); } + /** + * Get Total Playtime of a Player on a server. + * + * @param uuid UUID of the player. + * @param serverUUID UUID of the server. @see ServerTable + * @return Milliseconds played on the server. 0 if player or server not found. + * @throws SQLException + */ public long getPlaytime(UUID uuid, UUID serverUUID) throws SQLException { return getPlaytime(uuid, serverUUID, 0L); } + /** + * Used to get Playtime after Epoch ms on a server. + * + * @param uuid UUID of the player. + * @param serverUUID UUID of the server. @see ServerTable + * @param afterDate Epoch ms (Playtime after this date is calculated) + * @return Milliseconds played after given epoch ms on the server. 0 if player or server not found. + * @throws SQLException + */ public long getPlaytime(UUID uuid, UUID serverUUID, long afterDate) throws SQLException { PreparedStatement statement = null; ResultSet set = null; try { - statement = prepareStatement("SELECT FROM " + tableName + " " - + "(SUM(" + columnSessionEnd + ") - SUM(" + columnSessionStart + ")) as playtime " - + "WHERE " + columnSessionStart + ">? AND " - + columnUserID + "=" + usersTable.statementSelectID + " AND " - + columnServerID + "=" + serverTable.statementSelectServerID); + statement = prepareStatement("SELECT" + + " (SUM(" + columnSessionEnd + ") - SUM(" + columnSessionStart + ")) as playtime" + + " FROM " + tableName + + " WHERE " + columnSessionStart + ">?" + + " AND " + columnUserID + "=" + usersTable.statementSelectID + + " AND " + columnServerID + "=" + serverTable.statementSelectServerID); statement.setLong(1, afterDate); statement.setString(2, uuid.toString()); statement.setString(3, serverUUID.toString()); @@ -166,19 +263,155 @@ public class SessionsTable extends UserIDTable { } } + /** + * Used to get Totals of Playtime in a Map, sorted by ServerNames. + * + * @param uuid UUID of the Player. + * @return key - ServerName, value ms played + * @throws SQLException + */ public Map getPlaytimeByServer(UUID uuid) throws SQLException { + return getPlaytimeByServer(uuid, 0L); + } + + /** + * Used to get Playtimes after a date in a Map, sorted by ServerNames. + * + * @param uuid UUID of the Player. + * @param afterDate Epoch ms (Playtime after this date is calculated) + * @return key - ServerName, value ms played + * @throws SQLException + */ + public Map getPlaytimeByServer(UUID uuid, long afterDate) throws SQLException { Map serverNames = serverTable.getServerNames(); Map playtimes = new HashMap<>(); PreparedStatement statement = null; ResultSet set = null; try { - statement = prepareStatement("SELECT FROM " + tableName + " " - + "(SUM(" + columnSessionEnd + ") - SUM(" + columnSessionStart + ")) as playtime " - + "WHERE " + columnSessionStart + ">? AND " - + columnUserID + "=" + usersTable.statementSelectID); // TODO CONTINUE + statement = prepareStatement("SELECT " + + "(SUM(" + columnSessionEnd + ") - SUM(" + columnSessionStart + ")) as playtime, " + + columnServerID + "," + + " FROM " + tableName + + " WHERE " + columnSessionStart + ">?" + + " AND " + columnUserID + "=" + usersTable.statementSelectID); + statement.setLong(1, afterDate); + statement.setString(2, uuid.toString()); + set = statement.executeQuery(); + while (set.next()) { + String serverName = serverNames.get(set.getInt(columnServerID)); + long playtime = set.getLong("playtime"); + playtimes.put(serverName, playtime); + } return playtimes; } finally { close(set, statement); } } + + /** + * Used to get the Total Playtime of a Server. + * + * @param serverUUID UUID of the server. + * @return Milliseconds played on the server. 0 if server not found. + * @throws SQLException + */ + public long getPlaytimeOfServer(UUID serverUUID) throws SQLException { + return getPlaytimeOfServer(serverUUID, 0L); + } + + /** + * Used to get Playtime after a date of a Server. + * + * @param serverUUID UUID of the server. + * @param afterDate Epoch ms (Playtime after this date is calculated) + * @return Milliseconds played after given epoch ms on the server. 0 if server not found. + * @throws SQLException + */ + public long getPlaytimeOfServer(UUID serverUUID, long afterDate) throws SQLException { + PreparedStatement statement = null; + ResultSet set = null; + try { + statement = prepareStatement("SELECT" + + " (SUM(" + columnSessionEnd + ") - SUM(" + columnSessionStart + ")) as playtime" + + " FROM " + tableName + + " WHERE " + columnSessionStart + ">?" + + " AND " + columnServerID + "=" + serverTable.statementSelectServerID); + statement.setLong(1, afterDate); + statement.setString(2, serverUUID.toString()); + set = statement.executeQuery(); + if (set.next()) { + return set.getLong("playtime"); + } + return 0; + } finally { + close(set, statement); + } + } + + /** + * Used to get total Session count of a Player on THIS server. + * + * @param uuid UUID of the player. + * @return How many sessions player has. 0 if player or server not found. + * @throws SQLException + */ + public int getSessionCount(UUID uuid) throws SQLException { + return getSessionCount(uuid, 0L); + } + + /** + * Used to get total Session count of a Player on THIS server after a given epoch ms. + * + * @param uuid UUID of the player. + * @param afterDate Epoch ms (Session count after this date is calculated) + * @return How many sessions player has. 0 if player or server not found. + * @throws SQLException + */ + public int getSessionCount(UUID uuid, long afterDate) throws SQLException { + return getSessionCount(uuid, Plan.getServerUUID(), afterDate); + } + + /** + * Used to get total Session count of a Player on a server. + * + * @param uuid UUID of the player. + * @param serverUUID UUID of the server. + * @return How many sessions player has. 0 if player or server not found. + * @throws SQLException + */ + public int getSessionCount(UUID uuid, UUID serverUUID) throws SQLException { + return getSessionCount(uuid, serverUUID, 0L); + } + + /** + * Used to get total Session count of a Player on a server after a given epoch ms. + * + * @param uuid UUID of the player. + * @param serverUUID UUID of the server. + * @param afterDate Epoch ms (Session count after this date is calculated) + * @return How many sessions player has. 0 if player or server not found. + * @throws SQLException + */ + public int getSessionCount(UUID uuid, UUID serverUUID, long afterDate) throws SQLException { + PreparedStatement statement = null; + ResultSet set = null; + try { + statement = prepareStatement("SELECT" + + " (COUNT(" + columnSessionID + ") - SUM(" + columnSessionStart + ")) as logintimes" + + " FROM " + tableName + + " WHERE " + columnSessionStart + ">?" + + " AND " + columnUserID + "=" + usersTable.statementSelectID + + " AND " + columnServerID + "=" + serverTable.statementSelectServerID); + statement.setLong(1, afterDate); + statement.setString(2, uuid.toString()); + statement.setString(3, serverUUID.toString()); + set = statement.executeQuery(); + if (set.next()) { + return set.getInt("logintimes"); + } + return 0; + } finally { + close(set, statement); + } + } } diff --git a/Plan/src/main/java/com/djrapitops/plan/database/tables/WorldTimesTable.java b/Plan/src/main/java/com/djrapitops/plan/database/tables/WorldTimesTable.java index 205856b20..ca09b7a06 100644 --- a/Plan/src/main/java/com/djrapitops/plan/database/tables/WorldTimesTable.java +++ b/Plan/src/main/java/com/djrapitops/plan/database/tables/WorldTimesTable.java @@ -2,6 +2,7 @@ package main.java.com.djrapitops.plan.database.tables; import com.djrapitops.plugin.utilities.Verify; import main.java.com.djrapitops.plan.Log; +import main.java.com.djrapitops.plan.data.Session; import main.java.com.djrapitops.plan.data.time.WorldTimes; import main.java.com.djrapitops.plan.database.databases.SQLDB; import main.java.com.djrapitops.plan.database.sql.Sql; @@ -12,6 +13,7 @@ import java.sql.ResultSet; import java.sql.SQLException; import java.util.Collection; import java.util.HashMap; +import java.util.List; import java.util.Map; /** @@ -317,4 +319,8 @@ public class WorldTimesTable extends UserIDTable { public void saveWorldTimes(WorldTimes worldTimes) { // TODO saveWorldTimes (INSERT) } + + public void addWorldTimesToSessions(List allSessions) { + // TODO saveWorldTimes + } } diff --git a/Plan/src/main/java/com/djrapitops/plan/utilities/analysis/Analysis.java b/Plan/src/main/java/com/djrapitops/plan/utilities/analysis/Analysis.java index f3a08c9b3..3dac3b572 100644 --- a/Plan/src/main/java/com/djrapitops/plan/utilities/analysis/Analysis.java +++ b/Plan/src/main/java/com/djrapitops/plan/utilities/analysis/Analysis.java @@ -298,7 +298,7 @@ public class Analysis { activity.addBan(uuid); } else if (uData.getLoginTimes() == 1) { activity.addJoinedOnce(uuid); -// TODO } else if (AnalysisUtils.isActive(now, uData.getLastPlayed(), playTime, uData.getLoginTimes())) { +// TODO } else if (AnalysisUtils.isActive(now, uData.getLastPlayed(), playTime, uData.getSessionCount())) { // activity.addActive(uuid); } else { activity.addInActive(uuid); From 1c49dfbdfd99227e241f24bf65022a12e508e9c6 Mon Sep 17 00:00:00 2001 From: Rsl1122 Date: Wed, 23 Aug 2017 11:29:33 +0300 Subject: [PATCH 02/11] KillsTable --- .../plan/database/databases/SQLDB.java | 2 +- .../plan/database/tables/KillsTable.java | 192 +++++------------- .../plan/database/tables/SessionsTable.java | 29 +-- .../plan/database/tables/UsersTable.java | 4 + .../plan/database/tables/WorldTimesTable.java | 9 +- 5 files changed, 76 insertions(+), 160 deletions(-) diff --git a/Plan/src/main/java/com/djrapitops/plan/database/databases/SQLDB.java b/Plan/src/main/java/com/djrapitops/plan/database/databases/SQLDB.java index 9d6c03dbd..30ffa0f67 100644 --- a/Plan/src/main/java/com/djrapitops/plan/database/databases/SQLDB.java +++ b/Plan/src/main/java/com/djrapitops/plan/database/databases/SQLDB.java @@ -277,9 +277,9 @@ public abstract class SQLDB extends Database { boolean success = userId != -1 && ipsTable.removeUserIPs(userId) && nicknamesTable.removeUserNicknames(userId) - && sessionsTable.removeUserSessions(userId) && killsTable.removeUserKillsAndVictims(userId) && worldTimesTable.removeUserWorldTimes(userId) + && sessionsTable.removeUserSessions(userId) && usersTable.removeUser(uuid); if (success) { commit(); diff --git a/Plan/src/main/java/com/djrapitops/plan/database/tables/KillsTable.java b/Plan/src/main/java/com/djrapitops/plan/database/tables/KillsTable.java index 96b3fd710..501679155 100644 --- a/Plan/src/main/java/com/djrapitops/plan/database/tables/KillsTable.java +++ b/Plan/src/main/java/com/djrapitops/plan/database/tables/KillsTable.java @@ -7,31 +7,36 @@ import main.java.com.djrapitops.plan.data.Session; import main.java.com.djrapitops.plan.database.databases.SQLDB; 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.Benchmark; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; -import java.util.*; +import java.util.List; +import java.util.Map; +import java.util.UUID; +import java.util.function.Function; +import java.util.stream.Collectors; /** * @author Rsl1122 */ -public class KillsTable extends Table { +public class KillsTable extends UserIDTable { private final String columnKillerUserID = "killer_id"; private final String columnVictimUserID = "victim_id"; private final String columnWeapon = "weapon"; private final String columnDate = "date"; - private final String columnServerID = "server_id"; //TODO private final String columnSessionID = "session_id"; //TODO + private final SessionsTable sessionsTable; + /** * @param db * @param usingMySQL */ public KillsTable(SQLDB db, boolean usingMySQL) { super("plan_kills", db, usingMySQL); + sessionsTable = db.getSessionsTable(); } /** @@ -39,15 +44,16 @@ public class KillsTable extends Table { */ @Override public boolean createTable() { - UsersTable usersTable = db.getUsersTable(); try { execute(TableSqlParser.createTable(tableName) .column(columnKillerUserID, Sql.INT).notNull() .column(columnVictimUserID, Sql.INT).notNull() .column(columnWeapon, Sql.varchar(30)).notNull() .column(columnDate, Sql.LONG).notNull() + .column(columnSessionID, Sql.LONG).notNull() .foreignKey(columnKillerUserID, usersTable.getTableName(), usersTable.getColumnID()) .foreignKey(columnVictimUserID, usersTable.getTableName(), usersTable.getColumnID()) + .foreignKey(columnSessionID, sessionsTable.getTableName(), sessionsTable.getColumnID()) .toString() ); return true; @@ -77,164 +83,70 @@ public class KillsTable extends Table { } } - /** - * @param userId - * @return - * @throws SQLException - */ - public List getPlayerKills(int userId) throws SQLException { - UsersTable usersTable = db.getUsersTable(); - PreparedStatement statement = null; - ResultSet set = null; - try { - statement = prepareStatement("SELECT * FROM " + tableName + " WHERE (" + columnKillerUserID + "=?)"); - statement.setInt(1, userId); - set = statement.executeQuery(); - List killData = new ArrayList<>(); - while (set.next()) { - UUID victimUUID = null; // TODO Victim UUID Retrieval - killData.add(new KillData(victimUUID, set.getString(columnWeapon), set.getLong(columnDate))); - } - return killData; - } finally { - close(set); - close(statement); - } - } - - /** - * @param userId - * @param kills - * @throws SQLException - */ - public void savePlayerKills(int userId, List kills) throws SQLException { - if (Verify.isEmpty(kills)) { + public void savePlayerKills(UUID uuid, long sessionID, List playerKills) throws SQLException { + if (Verify.isEmpty(playerKills)) { return; } - Benchmark.start("Save Kills"); - kills.removeAll(getPlayerKills(userId)); PreparedStatement statement = null; try { statement = prepareStatement("INSERT INTO " + tableName + " (" + columnKillerUserID + ", " + columnVictimUserID + ", " - + columnWeapon + ", " - + columnDate - + ") VALUES (?, ?, ?, ?)"); - boolean commitRequired = false; - for (KillData kill : kills) { - if (kill == null) { - continue; - } - statement.setInt(1, userId); - statement.setInt(2, -1); // TODO Victim ID Retrieval - statement.setString(3, kill.getWeapon()); - statement.setLong(4, kill.getTime()); + + columnSessionID + ", " + + columnDate + ", " + + columnWeapon + + ") VALUES (" + + usersTable.statementSelectID + ", " + + usersTable.statementSelectID + ", " + + "?, ?, ?)"); + for (KillData kill : playerKills) { + UUID victim = kill.getVictim(); + long date = kill.getTime(); + String weapon = kill.getWeapon(); + statement.setString(1, uuid.toString()); + statement.setString(2, victim.toString()); + statement.setLong(3, sessionID); + statement.setLong(4, date); + statement.setString(5, weapon); statement.addBatch(); - commitRequired = true; - } - - if (commitRequired) { - statement.executeBatch(); } + statement.executeBatch(); } finally { close(statement); - Benchmark.stop("Database", "Save Kills"); } } - /** - * @param ids - * @param uuids - * @return - * @throws SQLException - */ - public Map> getPlayerKills(Collection ids, Map uuids) throws SQLException { - if (ids == null || ids.isEmpty()) { - return new HashMap<>(); - } - Benchmark.start("Get Kills multiple"); + public void addKillsToSessions(UUID uuid, List allSessions) throws SQLException { PreparedStatement statement = null; ResultSet set = null; + Map sessions = allSessions.stream().collect(Collectors.toMap(Session::getSessionID, Function.identity())); try { - Map> kills = new HashMap<>(); - statement = prepareStatement("SELECT * FROM " + tableName); + String usersTableID = usersTable + "." + usersTable.getColumnID(); + String usersTableUUID = usersTable + "." + usersTable.getColumnUUID() + " as victim_uuid"; + statement = prepareStatement("SELECT " + + columnSessionID + ", " + + columnDate + ", " + + columnWeapon + ", " + + usersTableUUID + ", " + + " FROM " + tableName + + " WHERE " + columnKillerUserID + "=" + usersTable.statementSelectID + + " JOIN " + usersTable + " on " + usersTableID + "=" + columnVictimUserID); // Might not work TODO TEST + statement.setString(1, uuid.toString()); set = statement.executeQuery(); - for (Integer id : ids) { - kills.put(id, new ArrayList<>()); - } while (set.next()) { - int killerID = set.getInt(columnKillerUserID); - if (!ids.contains(killerID)) { + long sessionID = set.getLong(columnSessionID); + Session session = sessions.get(sessionID); + if (session == null) { continue; } - UUID victimUUID = null; // TODO Victim UUID Retrieval - kills.get(killerID).add(new KillData(victimUUID, set.getString(columnWeapon), set.getLong(columnDate))); - } - return kills; - } finally { - close(set); - close(statement); - Benchmark.stop("Database", "Get Kills multiple"); - } - } - - /** - * @param kills - * @param uuids - * @throws SQLException - */ - public void savePlayerKills(Map> kills, Map uuids) throws SQLException { - if (Verify.isEmpty(kills)) { - return; - } - - Benchmark.start("Save Kills multiple"); - Map> saved = getPlayerKills(kills.keySet(), uuids); - - PreparedStatement statement = null; - try { - statement = prepareStatement("INSERT INTO " + tableName + " (" - + columnKillerUserID + ", " - + columnVictimUserID + ", " - + columnWeapon + ", " - + columnDate - + ") VALUES (?, ?, ?, ?)"); - boolean commitRequired = false; - for (Map.Entry> entrySet : kills.entrySet()) { - Integer id = entrySet.getKey(); - List playerKills = entrySet.getValue(); - playerKills.removeIf(Objects::isNull); - List s = saved.get(id); - - if (s != null) { - playerKills.removeAll(s); - } - - for (KillData kill : playerKills) { - statement.setInt(1, id); - statement.setInt(2, -1); // TODO Victim ID Retrieval - statement.setString(3, kill.getWeapon()); - statement.setLong(4, kill.getTime()); - statement.addBatch(); - commitRequired = true; - } - - if (commitRequired) { - statement.executeBatch(); - } + String uuidS = set.getString("victim_uuid"); + UUID victim = UUID.fromString(uuidS); + long date = set.getLong(columnDate); + String weapon = set.getString(columnWeapon); + session.getPlayerKills().add(new KillData(victim, weapon, date)); } } finally { - close(statement); - Benchmark.stop("Database", "Save Kills multiple"); + close(set, statement); } } - - public void savePlayerKills(UUID uuid, List playerKills) { - // TODO savePlayerKills - } - - public void addKillsToSessions(List allSessions) { - // TODO addKillsToSessions - } } diff --git a/Plan/src/main/java/com/djrapitops/plan/database/tables/SessionsTable.java b/Plan/src/main/java/com/djrapitops/plan/database/tables/SessionsTable.java index 8472cc3ff..854071e53 100644 --- a/Plan/src/main/java/com/djrapitops/plan/database/tables/SessionsTable.java +++ b/Plan/src/main/java/com/djrapitops/plan/database/tables/SessionsTable.java @@ -19,7 +19,7 @@ import java.util.stream.Collectors; */ public class SessionsTable extends UserIDTable { - private final String columnSessionID = "id"; + private final String columnID = "id"; private final String columnSessionStart = "session_start"; private final String columnSessionEnd = "session_end"; private final String columnServerID = "server_id"; @@ -46,7 +46,7 @@ public class SessionsTable extends UserIDTable { String serverTableName = serverTable.getTableName(); String serverTableID = serverTable.getColumnID(); String sql = TableSqlParser.createTable(this.tableName) - .primaryKeyIDColumn(usingMySQL, columnSessionID, Sql.LONG) + .primaryKeyIDColumn(usingMySQL, columnID, Sql.LONG) .column(columnUserID, Sql.INT).notNull() .column(columnServerID, Sql.INT).notNull() .column(columnSessionStart, Sql.LONG).notNull() @@ -55,7 +55,7 @@ public class SessionsTable extends UserIDTable { .column(columnDeaths, Sql.INT).notNull() .foreignKey(columnUserID, usersTable.getTableName(), usersTable.getColumnID()) .foreignKey(columnServerID, serverTableName, serverTableID) - .primaryKey(usingMySQL, columnSessionID) + .primaryKey(usingMySQL, columnID) .toString(); System.out.println(sql); execute(sql); @@ -92,9 +92,8 @@ public class SessionsTable extends UserIDTable { if (sessionID == -1) { throw new IllegalStateException("Session was not Saved!"); } - session.setSessionID(sessionID); - db.getWorldTimesTable().saveWorldTimes(session.getWorldTimes()); - db.getKillsTable().savePlayerKills(uuid, session.getPlayerKills()); + db.getWorldTimesTable().saveWorldTimes(sessionID, session.getWorldTimes()); + db.getKillsTable().savePlayerKills(uuid, sessionID, session.getPlayerKills()); } /** @@ -117,7 +116,7 @@ public class SessionsTable extends UserIDTable { + columnMobKills + ", " + columnServerID + ") VALUES (" - + columnUserID + "=" + usersTable.statementSelectID + ", " + + usersTable.statementSelectID + ", " + "?, ?, ?, ?, " + serverTable.statementSelectServerID + ")"); statement.setString(1, uuid.toString()); @@ -145,7 +144,7 @@ public class SessionsTable extends UserIDTable { PreparedStatement statement = null; ResultSet set = null; try { - statement = prepareStatement("SELECT " + columnSessionID + " FROM " + tableName + + statement = prepareStatement("SELECT " + columnID + " FROM " + tableName + " WHERE " + columnUserID + "=" + usersTable.statementSelectID + " AND " + columnSessionStart + "=?" + " AND " + columnSessionEnd + "=?"); @@ -154,7 +153,7 @@ public class SessionsTable extends UserIDTable { statement.setLong(3, session.getSessionEnd()); set = statement.executeQuery(); if (set.next()) { - return set.getLong(columnSessionID); + return set.getLong(columnID); } return -1L; } finally { @@ -184,7 +183,7 @@ public class SessionsTable extends UserIDTable { statement.setString(1, uuid.toString()); set = statement.executeQuery(); while (set.next()) { - long id = set.getLong(columnSessionID); + long id = set.getLong(columnID); long start = set.getLong(columnSessionStart); long end = set.getLong(columnSessionEnd); String serverName = serverNames.get(set.getInt(columnServerID)); @@ -203,8 +202,8 @@ public class SessionsTable extends UserIDTable { public Map> getSessions(UUID uuid) throws SQLException { Map> sessions = getSessionInformation(uuid); List allSessions = sessions.values().stream().flatMap(Collection::stream).collect(Collectors.toList()); - db.getKillsTable().addKillsToSessions(allSessions); - db.getWorldTimesTable().addWorldTimesToSessions(allSessions); + db.getKillsTable().addKillsToSessions(uuid, allSessions); + db.getWorldTimesTable().addWorldTimesToSessions(uuid, allSessions); return sessions; } @@ -397,7 +396,7 @@ public class SessionsTable extends UserIDTable { ResultSet set = null; try { statement = prepareStatement("SELECT" + - " (COUNT(" + columnSessionID + ") - SUM(" + columnSessionStart + ")) as logintimes" + + " (COUNT(" + columnID + ") - SUM(" + columnSessionStart + ")) as logintimes" + " FROM " + tableName + " WHERE " + columnSessionStart + ">?" + " AND " + columnUserID + "=" + usersTable.statementSelectID + @@ -414,4 +413,8 @@ public class SessionsTable extends UserIDTable { close(set, statement); } } + + public String getColumnID() { + return columnID; + } } diff --git a/Plan/src/main/java/com/djrapitops/plan/database/tables/UsersTable.java b/Plan/src/main/java/com/djrapitops/plan/database/tables/UsersTable.java index 9219773e9..e8140395b 100644 --- a/Plan/src/main/java/com/djrapitops/plan/database/tables/UsersTable.java +++ b/Plan/src/main/java/com/djrapitops/plan/database/tables/UsersTable.java @@ -377,4 +377,8 @@ public class UsersTable extends Table { // TODO Rewrite method for new UserData objects. return new ArrayList<>(); } + + public String getColumnUUID() { + return columnUUID; + } } diff --git a/Plan/src/main/java/com/djrapitops/plan/database/tables/WorldTimesTable.java b/Plan/src/main/java/com/djrapitops/plan/database/tables/WorldTimesTable.java index ca09b7a06..1b37d3615 100644 --- a/Plan/src/main/java/com/djrapitops/plan/database/tables/WorldTimesTable.java +++ b/Plan/src/main/java/com/djrapitops/plan/database/tables/WorldTimesTable.java @@ -11,10 +11,7 @@ import main.java.com.djrapitops.plan.database.sql.TableSqlParser; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; -import java.util.Collection; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; /** * Table class representing database table plan_world_times. @@ -316,11 +313,11 @@ public class WorldTimesTable extends UserIDTable { } } - public void saveWorldTimes(WorldTimes worldTimes) { + public void saveWorldTimes(long sessionID, WorldTimes worldTimes) { // TODO saveWorldTimes (INSERT) } - public void addWorldTimesToSessions(List allSessions) { + public void addWorldTimesToSessions(UUID uuid, List allSessions) { // TODO saveWorldTimes } } From 3c8d8bc8a8d5c34ea8d849cd9b85cbf6facecace Mon Sep 17 00:00:00 2001 From: Rsl1122 Date: Wed, 23 Aug 2017 12:11:18 +0300 Subject: [PATCH 03/11] WorldTimesTable --- .../com/djrapitops/plan/data/Session.java | 5 +- .../djrapitops/plan/data/time/GMTimes.java | 1 - .../djrapitops/plan/data/time/WorldTimes.java | 4 + .../plan/database/tables/KillsTable.java | 17 +- .../plan/database/tables/SessionsTable.java | 6 +- .../plan/database/tables/WorldTable.java | 12 +- .../plan/database/tables/WorldTimesTable.java | 322 +++++------------- 7 files changed, 101 insertions(+), 266 deletions(-) diff --git a/Plan/src/main/java/com/djrapitops/plan/data/Session.java b/Plan/src/main/java/com/djrapitops/plan/data/Session.java index fcf6b59ca..bdd683613 100644 --- a/Plan/src/main/java/com/djrapitops/plan/data/Session.java +++ b/Plan/src/main/java/com/djrapitops/plan/data/Session.java @@ -3,6 +3,7 @@ package main.java.com.djrapitops.plan.data; import main.java.com.djrapitops.plan.data.time.WorldTimes; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; /** @@ -57,8 +58,8 @@ public class Session { this.sessionID = id; this.sessionStart = sessionStart; this.sessionEnd = sessionEnd; - this.worldTimes = worldTimes; - this.playerKills = playerKills; + this.worldTimes = new WorldTimes(new HashMap<>()); + this.playerKills = new ArrayList<>(); this.mobKills = mobKills; this.deaths = deaths; } diff --git a/Plan/src/main/java/com/djrapitops/plan/data/time/GMTimes.java b/Plan/src/main/java/com/djrapitops/plan/data/time/GMTimes.java index 76d393887..92d992e8d 100644 --- a/Plan/src/main/java/com/djrapitops/plan/data/time/GMTimes.java +++ b/Plan/src/main/java/com/djrapitops/plan/data/time/GMTimes.java @@ -32,7 +32,6 @@ public class GMTimes extends TimeKeeper { public GMTimes(Map times) { super(times); } - public GMTimes() { super(); } diff --git a/Plan/src/main/java/com/djrapitops/plan/data/time/WorldTimes.java b/Plan/src/main/java/com/djrapitops/plan/data/time/WorldTimes.java index 1413ab780..67eaf7ce1 100644 --- a/Plan/src/main/java/com/djrapitops/plan/data/time/WorldTimes.java +++ b/Plan/src/main/java/com/djrapitops/plan/data/time/WorldTimes.java @@ -132,4 +132,8 @@ public class WorldTimes { public Map getWorldTimes() { return worldTimes; } + + public void setGMTimesForWorld(String world, GMTimes gmTimes) { + worldTimes.put(world, gmTimes); + } } diff --git a/Plan/src/main/java/com/djrapitops/plan/database/tables/KillsTable.java b/Plan/src/main/java/com/djrapitops/plan/database/tables/KillsTable.java index 501679155..da86e6fc4 100644 --- a/Plan/src/main/java/com/djrapitops/plan/database/tables/KillsTable.java +++ b/Plan/src/main/java/com/djrapitops/plan/database/tables/KillsTable.java @@ -14,8 +14,6 @@ import java.sql.SQLException; import java.util.List; import java.util.Map; import java.util.UUID; -import java.util.function.Function; -import java.util.stream.Collectors; /** * @author Rsl1122 @@ -26,7 +24,7 @@ public class KillsTable extends UserIDTable { private final String columnVictimUserID = "victim_id"; private final String columnWeapon = "weapon"; private final String columnDate = "date"; - private final String columnSessionID = "session_id"; //TODO + private final String columnSessionID = "session_id"; private final SessionsTable sessionsTable; @@ -116,21 +114,20 @@ public class KillsTable extends UserIDTable { } } - public void addKillsToSessions(UUID uuid, List allSessions) throws SQLException { + public void addKillsToSessions(UUID uuid, Map sessions) throws SQLException { PreparedStatement statement = null; ResultSet set = null; - Map sessions = allSessions.stream().collect(Collectors.toMap(Session::getSessionID, Function.identity())); try { - String usersTableID = usersTable + "." + usersTable.getColumnID(); - String usersTableUUID = usersTable + "." + usersTable.getColumnUUID() + " as victim_uuid"; + String usersIDColumn = usersTable + "." + usersTable.getColumnID(); + String usersUUIDColumn = usersTable + "." + usersTable.getColumnUUID() + " as victim_uuid"; statement = prepareStatement("SELECT " + columnSessionID + ", " + columnDate + ", " + columnWeapon + ", " + - usersTableUUID + ", " + + usersUUIDColumn + " FROM " + tableName + " WHERE " + columnKillerUserID + "=" + usersTable.statementSelectID + - " JOIN " + usersTable + " on " + usersTableID + "=" + columnVictimUserID); // Might not work TODO TEST + " JOIN " + usersTable + " on " + usersIDColumn + "=" + columnVictimUserID); // Might not work TODO TEST statement.setString(1, uuid.toString()); set = statement.executeQuery(); while (set.next()) { @@ -149,4 +146,6 @@ public class KillsTable extends UserIDTable { close(set, statement); } } + + // TODO getPlayerKills (UUID) } diff --git a/Plan/src/main/java/com/djrapitops/plan/database/tables/SessionsTable.java b/Plan/src/main/java/com/djrapitops/plan/database/tables/SessionsTable.java index 854071e53..316229e55 100644 --- a/Plan/src/main/java/com/djrapitops/plan/database/tables/SessionsTable.java +++ b/Plan/src/main/java/com/djrapitops/plan/database/tables/SessionsTable.java @@ -12,6 +12,7 @@ import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.*; +import java.util.function.Function; import java.util.stream.Collectors; /** @@ -92,7 +93,7 @@ public class SessionsTable extends UserIDTable { if (sessionID == -1) { throw new IllegalStateException("Session was not Saved!"); } - db.getWorldTimesTable().saveWorldTimes(sessionID, session.getWorldTimes()); + db.getWorldTimesTable().saveWorldTimes(uuid, sessionID, session.getWorldTimes()); db.getKillsTable().savePlayerKills(uuid, sessionID, session.getPlayerKills()); } @@ -201,7 +202,8 @@ public class SessionsTable extends UserIDTable { public Map> getSessions(UUID uuid) throws SQLException { Map> sessions = getSessionInformation(uuid); - List allSessions = sessions.values().stream().flatMap(Collection::stream).collect(Collectors.toList()); + Map allSessions = sessions.values().stream().flatMap(Collection::stream).collect(Collectors.toMap(Session::getSessionID, Function.identity())); + db.getKillsTable().addKillsToSessions(uuid, allSessions); db.getWorldTimesTable().addWorldTimesToSessions(uuid, allSessions); return sessions; diff --git a/Plan/src/main/java/com/djrapitops/plan/database/tables/WorldTable.java b/Plan/src/main/java/com/djrapitops/plan/database/tables/WorldTable.java index b96ec2623..11bcf44ba 100644 --- a/Plan/src/main/java/com/djrapitops/plan/database/tables/WorldTable.java +++ b/Plan/src/main/java/com/djrapitops/plan/database/tables/WorldTable.java @@ -23,9 +23,11 @@ import java.util.List; */ public class WorldTable extends Table { - private final String columnWorldId; - private final String columnWorldName; - private final String columnServerID; //TODO + private final String columnWorldId = "id"; + private final String columnWorldName = "world_name"; + private final String columnServerID = "server_id"; + + public final String statementSelectID; /** * Constructor. @@ -35,9 +37,7 @@ public class WorldTable extends Table { */ public WorldTable(SQLDB db, boolean usingMySQL) { super("plan_worlds", db, usingMySQL); - columnWorldId = "world_id"; - columnWorldName = "world_name"; - columnServerID = "server_id"; + statementSelectID = "(SELECT " + columnWorldId + " FROM " + tableName + " WHERE (" + columnWorldName + "=?))"; } @Override diff --git a/Plan/src/main/java/com/djrapitops/plan/database/tables/WorldTimesTable.java b/Plan/src/main/java/com/djrapitops/plan/database/tables/WorldTimesTable.java index 1b37d3615..6f63ff1f4 100644 --- a/Plan/src/main/java/com/djrapitops/plan/database/tables/WorldTimesTable.java +++ b/Plan/src/main/java/com/djrapitops/plan/database/tables/WorldTimesTable.java @@ -3,6 +3,7 @@ package main.java.com.djrapitops.plan.database.tables; import com.djrapitops.plugin.utilities.Verify; import main.java.com.djrapitops.plan.Log; import main.java.com.djrapitops.plan.data.Session; +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.databases.SQLDB; import main.java.com.djrapitops.plan.database.sql.Sql; @@ -11,7 +12,9 @@ import main.java.com.djrapitops.plan.database.sql.TableSqlParser; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; -import java.util.*; +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; /** * Table class representing database table plan_world_times. @@ -21,17 +24,15 @@ import java.util.*; */ public class WorldTimesTable extends UserIDTable { - private final String columnServerID = "server_id"; //TODO - private final WorldTable worldTable; - private final String worldIDColumn; - private final String worldNameColumn; - + private final String columnSessionID = "session_id"; private final String columnWorldId = "world_id"; - @Deprecated - private final String columnPlaytime = "playtime"; - //TODO GM Times to World table + private final String columnSurvival = "survival_time"; + private final String columnCreative = "creative_time"; + private final String columnAdventure = "adventure_time"; + private final String columnSpectator = "spectator_time"; - private final String selectWorldIDsql; + private final WorldTable worldTable; + private final SessionsTable sessionsTable; /** * Constructor. @@ -42,22 +43,23 @@ public class WorldTimesTable extends UserIDTable { public WorldTimesTable(SQLDB db, boolean usingMySQL) { super("plan_world_times", db, usingMySQL); worldTable = db.getWorldTable(); - worldIDColumn = worldTable + "." + worldTable.getColumnID(); - worldNameColumn = worldTable.getColumnWorldName(); - - selectWorldIDsql = "(SELECT " + worldIDColumn + " FROM " + worldTable + " WHERE (" + worldNameColumn + "=?))"; + sessionsTable = db.getSessionsTable(); } @Override public boolean createTable() { - UsersTable usersTable = db.getUsersTable(); try { execute(TableSqlParser.createTable(tableName) .column(columnUserID, Sql.INT).notNull() .column(columnWorldId, Sql.INT).notNull() - .column(columnPlaytime, Sql.LONG).notNull() + .column(columnSessionID, Sql.LONG).notNull() + .column(columnSurvival, Sql.LONG).notNull().defaultValue("0") + .column(columnCreative, Sql.LONG).notNull().defaultValue("0") + .column(columnAdventure, Sql.LONG).notNull().defaultValue("0") + .column(columnSpectator, Sql.LONG).notNull().defaultValue("0") .foreignKey(columnUserID, usersTable.getTableName(), usersTable.getColumnID()) .foreignKey(columnWorldId, worldTable.getTableName(), worldTable.getColumnID()) + .foreignKey(columnSessionID, sessionsTable.getTableName(), sessionsTable.getColumnID()) .toString() ); return true; @@ -71,253 +73,81 @@ public class WorldTimesTable extends UserIDTable { return super.removeDataOf(userId); } - /** - * @param userId - * @return - * @throws SQLException - */ - public Map getWorldTimes(int userId) throws SQLException { + public void saveWorldTimes(UUID uuid, long sessionID, WorldTimes worldTimes) throws SQLException { + if (Verify.isEmpty(worldTimes.getWorldTimes())) { + return; + } PreparedStatement statement = null; - ResultSet set = null; try { - statement = prepareStatement("SELECT " - + columnPlaytime + ", " - + worldNameColumn - + " FROM " + tableName + ", " + worldTable - + " WHERE (" + columnUserID + "=?)" - + " AND (" + worldIDColumn + "=" + tableName + "." + columnWorldId + ")"); - statement.setInt(1, userId); - set = statement.executeQuery(); - HashMap times = new HashMap<>(); - while (set.next()) { - times.put(set.getString(worldNameColumn), set.getLong(columnPlaytime)); + statement = prepareStatement("INSERT INTO " + tableName + " (" + + columnUserID + ", " + + columnWorldId + ", " + + columnSessionID + ", " + + columnSurvival + ", " + + columnCreative + ", " + + columnAdventure + ", " + + columnSpectator + + ") VALUES (" + + usersTable.statementSelectID + ", " + + worldTable.statementSelectID + ", " + + "?, ?, ?, ?, ?)"); + for (Map.Entry entry : worldTimes.getWorldTimes().entrySet()) { + String worldName = entry.getKey(); + GMTimes gmTimes = entry.getValue(); + statement.setString(1, uuid.toString()); + statement.setString(2, worldName); + statement.setLong(3, sessionID); + + String[] gms = GMTimes.getGMKeyArray(); + statement.setLong(4, gmTimes.getTime(gms[0])); + statement.setLong(5, gmTimes.getTime(gms[1])); + statement.setLong(6, gmTimes.getTime(gms[2])); + statement.setLong(7, gmTimes.getTime(gms[3])); + statement.addBatch(); } - return times; + statement.executeBatch(); } finally { - close(set); close(statement); } } - public Map> getWorldTimes(Collection userIds) throws SQLException { + public void addWorldTimesToSessions(UUID uuid, Map sessions) throws SQLException { PreparedStatement statement = null; ResultSet set = null; - Map> times = new HashMap<>(); - for (Integer id : userIds) { - times.put(id, new HashMap<>()); - } try { - statement = prepareStatement("SELECT " - + columnUserID + ", " - + columnPlaytime + ", " - + worldNameColumn - + " FROM " + tableName + ", " + worldTable - + " WHERE (" + worldIDColumn + "=" + tableName + "." + columnWorldId + ")"); + String worldIDColumn = worldTable + "." + worldTable.getColumnID(); + String worldNameColumn = worldTable + "." + worldTable.getColumnWorldName() + " as world_name"; + statement = prepareStatement("SELECT " + + columnSessionID + ", " + + columnSurvival + ", " + + columnCreative + ", " + + columnAdventure + ", " + + columnSpectator + ", " + + worldNameColumn + + " FROM " + tableName + + " WHERE " + columnUserID + "=" + usersTable.statementSelectID + + " JOIN " + worldTable + " on " + worldIDColumn + "=" + columnWorldId // TODO TEST + ); + statement.setString(1, uuid.toString()); set = statement.executeQuery(); + String[] gms = GMTimes.getGMKeyArray(); while (set.next()) { - int id = set.getInt(columnUserID); - if (!userIds.contains(id)) { + long sessionID = set.getLong(columnSessionID); + Session session = sessions.get(sessionID); + if (session == null) { continue; } - Map worldTimes = times.get(id); - worldTimes.put(set.getString(worldNameColumn), set.getLong(columnPlaytime)); - } - return times; - } finally { - close(set); - close(statement); - } - } - - public void saveWorldTimes(int userId, Map worldTimes) throws SQLException { - if (Verify.isEmpty(worldTimes)) { - return; - } - Map saved = getWorldTimes(userId); - - Map newData = new HashMap<>(); - Map updateData = new HashMap<>(); - - for (Map.Entry entry : worldTimes.entrySet()) { - String world = entry.getKey(); - long time = entry.getValue(); - Long savedTime = saved.get(world); - - if (savedTime == null) { - newData.put(world, time); - } else { - if (savedTime < time) { - updateData.put(world, time); - } - } - } - insertWorlds(userId, newData); - updateWorlds(userId, updateData); - } - - private void updateWorlds(int userId, Map updateData) throws SQLException { - if (Verify.isEmpty(updateData)) { - return; - } - PreparedStatement statement = null; - try { - statement = prepareStatement( - "UPDATE " + tableName + " SET " + columnPlaytime + "=?" + - " WHERE (" + selectWorldIDsql + "=" + columnWorldId + ")" + - " AND (" + columnUserID + "=?)" - ); - boolean commitRequired = false; - for (Map.Entry entry : updateData.entrySet()) { - String worldName = entry.getKey(); - long time = entry.getValue(); - statement.setLong(1, time); - statement.setString(2, worldName); - statement.setInt(3, userId); - statement.addBatch(); - commitRequired = true; - } - if (commitRequired) { - statement.executeBatch(); + String worldName = set.getString("world_name"); + Map gmMap = new HashMap<>(); + gmMap.put(gms[0], set.getLong(columnSurvival)); + gmMap.put(gms[1], set.getLong(columnCreative)); + gmMap.put(gms[2], set.getLong(columnAdventure)); + gmMap.put(gms[3], set.getLong(columnSpectator)); + GMTimes gmTimes = new GMTimes(gmMap); + session.getWorldTimes().setGMTimesForWorld(worldName, gmTimes); } } finally { - close(statement); + close(set, statement); } } - - private void insertWorlds(int userId, Map newData) throws SQLException { - if (Verify.isEmpty(newData)) { - return; - } - PreparedStatement statement = null; - try { - statement = prepareStatement( - "INSERT INTO " + tableName + " (" - + columnUserID + ", " - + columnWorldId + ", " - + columnPlaytime - + ") VALUES (?, " + selectWorldIDsql + ", ?)" - ); - boolean commitRequired = false; - for (Map.Entry entry : newData.entrySet()) { - String worldName = entry.getKey(); - long time = entry.getValue(); - statement.setInt(1, userId); - statement.setString(2, worldName); - statement.setLong(3, time); - statement.addBatch(); - commitRequired = true; - } - if (commitRequired) { - statement.executeBatch(); - } - } finally { - close(statement); - } - } - - public void saveWorldTimes(Map> worldTimesMultiple) throws SQLException { - if (Verify.isEmpty(worldTimesMultiple)) { - return; - } - Map> saved = getWorldTimes(worldTimesMultiple.keySet()); - - Map> newData = new HashMap<>(); - Map> updateData = new HashMap<>(); - - for (Map.Entry> entry : worldTimesMultiple.entrySet()) { - int userId = entry.getKey(); - Map savedTimes = saved.get(userId); - Map worldTimes = entry.getValue(); - Map newTimes = new HashMap<>(worldTimes); - newTimes.keySet().removeAll(savedTimes.keySet()); - - newData.put(userId, newTimes); - - for (Map.Entry times : savedTimes.entrySet()) { - String world = times.getKey(); - long savedTime = times.getValue(); - Long toSave = worldTimes.get(world); - if (toSave != null && toSave <= savedTime) { - worldTimes.remove(world); - } - } - updateData.put(userId, worldTimes); - } - insertWorlds(newData); - updateWorlds(updateData); - } - - private void updateWorlds(Map> updateData) throws SQLException { - if (Verify.isEmpty(updateData)) { - return; - } - PreparedStatement statement = null; - try { - statement = prepareStatement( - "UPDATE " + tableName + " SET " + columnPlaytime + "=?" + - " WHERE (" + selectWorldIDsql + "=" + columnWorldId + ")" + - " AND (" + columnUserID + "=?)" - ); - boolean commitRequired = false; - for (Map.Entry> entry : updateData.entrySet()) { - int userId = entry.getKey(); - for (Map.Entry times : entry.getValue().entrySet()) { - String worldName = times.getKey(); - long time = times.getValue(); - statement.setLong(1, time); - statement.setString(2, worldName); - statement.setInt(3, userId); - statement.addBatch(); - commitRequired = true; - } - } - if (commitRequired) { - statement.executeBatch(); - } - } finally { - close(statement); - } - } - - private void insertWorlds(Map> newData) throws SQLException { - if (Verify.isEmpty(newData)) { - return; - } - PreparedStatement statement = null; - try { - statement = prepareStatement( - "INSERT INTO " + tableName + " (" - + columnUserID + ", " - + columnWorldId + ", " - + columnPlaytime - + ") VALUES (?, " + selectWorldIDsql + ", ?)" - ); - boolean commitRequired = false; - for (Map.Entry> entry : newData.entrySet()) { - int userId = entry.getKey(); - for (Map.Entry times : entry.getValue().entrySet()) { - String worldName = times.getKey(); - long time = times.getValue(); - statement.setInt(1, userId); - statement.setString(2, worldName); - statement.setLong(3, time); - statement.addBatch(); - commitRequired = true; - } - } - if (commitRequired) { - statement.executeBatch(); - } - } finally { - close(statement); - } - } - - public void saveWorldTimes(long sessionID, WorldTimes worldTimes) { - // TODO saveWorldTimes (INSERT) - } - - public void addWorldTimesToSessions(UUID uuid, List allSessions) { - // TODO saveWorldTimes - } } From 75d1a3e88c587b9f7ca8cf2b85187bc48953d133 Mon Sep 17 00:00:00 2001 From: Rsl1122 Date: Wed, 23 Aug 2017 12:31:34 +0300 Subject: [PATCH 04/11] DB Formatting --- .../djrapitops/plan/database/Database.java | 5 +++ .../plan/database/databases/SQLDB.java | 33 +++++++++++-------- .../plan/database/tables/ActionsTable.java | 4 +-- .../plan/database/tables/WorldTimesTable.java | 10 +++++- 4 files changed, 36 insertions(+), 16 deletions(-) diff --git a/Plan/src/main/java/com/djrapitops/plan/database/Database.java b/Plan/src/main/java/com/djrapitops/plan/database/Database.java index 1ef398c23..1fb81f82a 100644 --- a/Plan/src/main/java/com/djrapitops/plan/database/Database.java +++ b/Plan/src/main/java/com/djrapitops/plan/database/Database.java @@ -27,6 +27,11 @@ public abstract class Database { */ protected UsersTable usersTable; + /** + * Table representing plan_actions in the database. + */ + protected ActionsTable actionsTable; + /** * Table representing plan_kills in the database. */ diff --git a/Plan/src/main/java/com/djrapitops/plan/database/databases/SQLDB.java b/Plan/src/main/java/com/djrapitops/plan/database/databases/SQLDB.java index 30ffa0f67..5c35c5111 100644 --- a/Plan/src/main/java/com/djrapitops/plan/database/databases/SQLDB.java +++ b/Plan/src/main/java/com/djrapitops/plan/database/databases/SQLDB.java @@ -37,16 +37,19 @@ public abstract class SQLDB extends Database { this.supportsModification = supportsModification; usingMySQL = getName().equals("MySQL"); + versionTable = new VersionTable(this, usingMySQL); serverTable = new ServerTable(this, usingMySQL); + securityTable = new SecurityTable(this, usingMySQL); + + commandUseTable = new CommandUseTable(this, usingMySQL); + tpsTable = new TPSTable(this, usingMySQL); + usersTable = new UsersTable(this, usingMySQL); - sessionsTable = new SessionsTable(this, usingMySQL); - killsTable = new KillsTable(this, usingMySQL); + actionsTable = new ActionsTable(this, usingMySQL); ipsTable = new IPsTable(this, usingMySQL); nicknamesTable = new NicknamesTable(this, usingMySQL); - commandUseTable = new CommandUseTable(this, usingMySQL); - versionTable = new VersionTable(this, usingMySQL); - tpsTable = new TPSTable(this, usingMySQL); - securityTable = new SecurityTable(this, usingMySQL); + sessionsTable = new SessionsTable(this, usingMySQL); + killsTable = new KillsTable(this, usingMySQL); worldTable = new WorldTable(this, usingMySQL); worldTimesTable = new WorldTimesTable(this, usingMySQL); @@ -185,19 +188,23 @@ public abstract class SQLDB extends Database { return new Table[]{ serverTable, usersTable, ipsTable, nicknamesTable, sessionsTable, killsTable, - commandUseTable, tpsTable, worldTable, - worldTimesTable, securityTable}; + commandUseTable, actionsTable, tpsTable, + worldTable, worldTimesTable, securityTable + }; } /** - * @return + * Get all tables except securityTable for removal of user data. + * + * @return Tables in the order the data should be removed in. */ public Table[] getAllTablesInRemoveOrder() { return new Table[]{ - ipsTable, - nicknamesTable, killsTable, worldTimesTable, - sessionsTable, worldTable, usersTable, - commandUseTable, tpsTable, serverTable}; + ipsTable, nicknamesTable, killsTable, + worldTimesTable, sessionsTable, actionsTable, + worldTable, usersTable, commandUseTable, + tpsTable, serverTable + }; } /** diff --git a/Plan/src/main/java/com/djrapitops/plan/database/tables/ActionsTable.java b/Plan/src/main/java/com/djrapitops/plan/database/tables/ActionsTable.java index dfeed963c..95b973581 100644 --- a/Plan/src/main/java/com/djrapitops/plan/database/tables/ActionsTable.java +++ b/Plan/src/main/java/com/djrapitops/plan/database/tables/ActionsTable.java @@ -40,8 +40,8 @@ public class ActionsTable extends UserIDTable { private final String columnActionID = "action_id"; private final String columnAdditionalInfo = "additional_info"; - public ActionsTable(String name, SQLDB db, boolean usingMySQL) { - super(name, db, usingMySQL); + public ActionsTable(SQLDB db, boolean usingMySQL) { + super("plan_actions", db, usingMySQL); } @Override diff --git a/Plan/src/main/java/com/djrapitops/plan/database/tables/WorldTimesTable.java b/Plan/src/main/java/com/djrapitops/plan/database/tables/WorldTimesTable.java index 6f63ff1f4..7a431c945 100644 --- a/Plan/src/main/java/com/djrapitops/plan/database/tables/WorldTimesTable.java +++ b/Plan/src/main/java/com/djrapitops/plan/database/tables/WorldTimesTable.java @@ -20,7 +20,7 @@ import java.util.UUID; * Table class representing database table plan_world_times. * * @author Rsl1122 - * @since 3.6.0 / Database version 7 + * @since 4.0.0 */ public class WorldTimesTable extends UserIDTable { @@ -77,6 +77,7 @@ public class WorldTimesTable extends UserIDTable { if (Verify.isEmpty(worldTimes.getWorldTimes())) { return; } + PreparedStatement statement = null; try { statement = prepareStatement("INSERT INTO " + tableName + " (" + @@ -91,6 +92,7 @@ public class WorldTimesTable extends UserIDTable { usersTable.statementSelectID + ", " + worldTable.statementSelectID + ", " + "?, ?, ?, ?, ?)"); + for (Map.Entry entry : worldTimes.getWorldTimes().entrySet()) { String worldName = entry.getKey(); GMTimes gmTimes = entry.getValue(); @@ -105,6 +107,7 @@ public class WorldTimesTable extends UserIDTable { statement.setLong(7, gmTimes.getTime(gms[3])); statement.addBatch(); } + statement.executeBatch(); } finally { close(statement); @@ -131,19 +134,24 @@ public class WorldTimesTable extends UserIDTable { statement.setString(1, uuid.toString()); set = statement.executeQuery(); String[] gms = GMTimes.getGMKeyArray(); + while (set.next()) { long sessionID = set.getLong(columnSessionID); Session session = sessions.get(sessionID); + if (session == null) { continue; } + String worldName = set.getString("world_name"); + Map gmMap = new HashMap<>(); gmMap.put(gms[0], set.getLong(columnSurvival)); gmMap.put(gms[1], set.getLong(columnCreative)); gmMap.put(gms[2], set.getLong(columnAdventure)); gmMap.put(gms[3], set.getLong(columnSpectator)); GMTimes gmTimes = new GMTimes(gmMap); + session.getWorldTimes().setGMTimesForWorld(worldName, gmTimes); } } finally { From 4516ab81bf30d68de4603bff8d4bcbb846706342 Mon Sep 17 00:00:00 2001 From: Rsl1122 Date: Wed, 23 Aug 2017 12:48:24 +0300 Subject: [PATCH 05/11] NicknamesTable --- .../plan/database/tables/NicknamesTable.java | 214 ++++++------------ .../plan/database/tables/TPSTable.java | 19 -- .../plan/database/tables/UserIDTable.java | 18 ++ 3 files changed, 85 insertions(+), 166 deletions(-) diff --git a/Plan/src/main/java/com/djrapitops/plan/database/tables/NicknamesTable.java b/Plan/src/main/java/com/djrapitops/plan/database/tables/NicknamesTable.java index 3b5b230f9..92df823e3 100644 --- a/Plan/src/main/java/com/djrapitops/plan/database/tables/NicknamesTable.java +++ b/Plan/src/main/java/com/djrapitops/plan/database/tables/NicknamesTable.java @@ -1,16 +1,17 @@ package main.java.com.djrapitops.plan.database.tables; -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.database.databases.SQLDB; 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.Benchmark; 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.UUID; /** * @author Rsl1122 @@ -18,8 +19,9 @@ import java.util.*; public class NicknamesTable extends UserIDTable { private final String columnNick = "nickname"; - private final String columnCurrent = "current_nick"; - private final String columnServerID = "server_id"; //TODO + private final String columnServerID = "server_id"; + + private ServerTable serverTable; /** * @param db The database @@ -27,6 +29,7 @@ public class NicknamesTable extends UserIDTable { */ public NicknamesTable(SQLDB db, boolean usingMySQL) { super("plan_nicknames", db, usingMySQL); + serverTable = db.getServerTable(); } /** @@ -39,14 +42,11 @@ public class NicknamesTable extends UserIDTable { execute(TableSqlParser.createTable(tableName) .column(columnUserID, Sql.INT).notNull() .column(columnNick, Sql.varchar(75)).notNull() - .column(columnCurrent, Sql.BOOL).notNull().defaultValue(false) + .column(columnServerID, Sql.INT).notNull() .foreignKey(columnUserID, usersTable.getTableName(), usersTable.getColumnID()) + .foreignKey(columnServerID, serverTable.getTableName(), serverTable.getColumnID()) .toString() ); - - if (getVersion() < 3) { - alterTablesV3(); - } return true; } catch (SQLException ex) { Log.toLog(this.getClass().getName(), ex); @@ -54,12 +54,8 @@ public class NicknamesTable extends UserIDTable { } } - private void alterTablesV3() { - addColumns(columnCurrent + " boolean NOT NULL DEFAULT 0"); - } - /** - * @param userId The User ID from which the nicknames should be removed from + * @param userId The User ID whose the nicknames should be removed * @return if the removal was successful */ public boolean removeUserNicknames(int userId) { @@ -67,36 +63,33 @@ public class NicknamesTable extends UserIDTable { } /** - * @param userId The User ID from which the nicknames should be retrieved from + * Get ALL nicknames of the user. + *

+ * Get's nicknames from other servers as well. + * + * @param uuid UUID of the Player * @return The nicknames of the User * @throws SQLException when an error at retrieval happens */ - public List getNicknames(int userId) throws SQLException { + public List getAllNicknames(UUID uuid) throws SQLException { PreparedStatement statement = null; ResultSet set = null; try { - statement = prepareStatement("SELECT * FROM " + tableName + " WHERE (" + columnUserID + "=?)"); - statement.setInt(1, userId); + statement = prepareStatement("SELECT " + columnNick + " FROM " + tableName + + " WHERE (" + columnUserID + "=" + usersTable.statementSelectID + ")"); + statement.setString(1, uuid.toString()); set = statement.executeQuery(); List nicknames = new ArrayList<>(); - String lastNick = ""; while (set.next()) { String nickname = set.getString(columnNick); if (nickname.isEmpty()) { continue; } - - nicknames.add(nickname); - if (set.getBoolean(columnCurrent)) { - lastNick = nickname; + if (!nicknames.contains(nickname)) { + nicknames.add(nickname); } } - - if (!lastNick.isEmpty()) { - nicknames.set(nicknames.size() - 1, lastNick); - } - return nicknames; } finally { close(set, statement); @@ -104,151 +97,78 @@ public class NicknamesTable extends UserIDTable { } /** - * @param userId The User ID for which the nicknames should be saved for - * @param names The nicknames - * @param lastNick The latest nickname - * @throws SQLException when an error at saving happens + * Get nicknames of the user on THIS server. + *

+ * Get's nicknames from other servers as well. + * + * @param uuid UUID of the Player + * @return The nicknames of the User + * @throws SQLException when an error at retrieval happens */ - public void saveNickList(int userId, Set names, String lastNick) throws SQLException { - if (Verify.isEmpty(names)) { - return; - } - - names.removeAll(getNicknames(userId)); - if (names.isEmpty()) { - return; - } - - PreparedStatement statement = null; - try { - statement = prepareStatement("INSERT INTO " + tableName + " (" - + columnUserID + ", " - + columnCurrent + ", " - + columnNick - + ") VALUES (?, ?, ?)"); - - for (String name : names) { - statement.setInt(1, userId); - statement.setInt(2, name.equals(lastNick) ? 1 : 0); - statement.setString(3, name); - statement.addBatch(); - } - - statement.executeBatch(); - } finally { - close(statement); - } + public List getNicknames(UUID uuid) throws SQLException { + return getNicknames(uuid, Plan.getServerUUID()); } /** - * @param ids The User IDs for which the nicknames should be retrieved for - * @return The User ID corresponding with the nicknames + * Get nicknames of the user on a server. + *

+ * Get's nicknames from other servers as well. + * + * @param uuid UUID of the Player + * @param serverUUID UUID of the server + * @return The nicknames of the User * @throws SQLException when an error at retrieval happens */ - public Map> getNicknames(Collection ids) throws SQLException { - if (Verify.isEmpty(ids)) { - return new HashMap<>(); - } - - Benchmark.start("Get Nicknames Multiple"); - + public List getNicknames(UUID uuid, UUID serverUUID) throws SQLException { PreparedStatement statement = null; ResultSet set = null; try { - Map> nicks = new HashMap<>(); - Map lastNicks = new HashMap<>(); - - for (Integer id : ids) { - nicks.put(id, new ArrayList<>()); - } - - statement = prepareStatement("SELECT * FROM " + tableName); + statement = prepareStatement("SELECT " + columnNick + " FROM " + tableName + + " WHERE (" + columnUserID + "=" + usersTable.statementSelectID + ")" + + " AND " + columnServerID + "=" + serverTable.statementSelectServerID + ); + statement.setString(1, uuid.toString()); + statement.setString(2, serverUUID.toString()); set = statement.executeQuery(); - while (set.next()) { - Integer id = set.getInt(columnUserID); - String nickname = set.getString(columnNick); - if (!ids.contains(id) || nickname.isEmpty()) { + List nicknames = new ArrayList<>(); + while (set.next()) { + String nickname = set.getString(columnNick); + if (nickname.isEmpty()) { continue; } - - nicks.get(id).add(nickname); - if (set.getBoolean(columnCurrent)) { - lastNicks.put(id, nickname); + if (!nicknames.contains(nickname)) { + nicknames.add(nickname); } } - - for (Map.Entry entry : lastNicks.entrySet()) { - Integer id = entry.getKey(); - String lastNick = entry.getValue(); - - List list = nicks.get(id); - - // Moves the last known nickname to the end of the List. - // This is due to the way nicknames are added to UserData, - // Nicknames are stored as a Set and last Nickname is a separate String. - list.set(list.size() - 1, lastNick); - } - - return nicks; + return nicknames; } finally { close(set, statement); - Benchmark.stop("Database", "Get Nicknames Multiple"); } } - /** - * @param nicknames The User ID corresponding to the nicknames - * @param lastNicks The User ID corresponding with the last nick they inherited - * @throws SQLException when an error at saving happens - */ - public void saveNickLists(Map> nicknames, Map lastNicks) throws SQLException { - if (Verify.isEmpty(nicknames)) { + public void saveUserName(UUID uuid, String displayName) throws SQLException { + List saved = getNicknames(uuid); + if (saved.contains(displayName)) { return; } - Benchmark.start("Save Nicknames Multiple"); - - Map> saved = getNicknames(nicknames.keySet()); PreparedStatement statement = null; try { - boolean commitRequired = false; - statement = prepareStatement("INSERT INTO " + tableName + " (" - + columnUserID + ", " - + columnCurrent + ", " - + columnNick - + ") VALUES (?, ?, ?)"); - - for (Map.Entry> entrySet : nicknames.entrySet()) { - Integer id = entrySet.getKey(); - Set newNicks = entrySet.getValue(); - - String lastNick = lastNicks.get(id); - List s = saved.get(id); - - if (s != null) { - newNicks.removeAll(s); - } - - if (newNicks.isEmpty()) { - continue; - } - - for (String name : newNicks) { - statement.setInt(1, id); - statement.setInt(2, (name.equals(lastNick)) ? 1 : 0); - statement.setString(3, name); - statement.addBatch(); - commitRequired = true; - } - } - - if (commitRequired) { - statement.executeBatch(); - } + statement = prepareStatement("INSERT INTO " + tableName + " (" + + columnUserID + ", " + + columnServerID + ", " + + columnNick + + ") VALUES (" + + usersTable.statementSelectID + ", " + + serverTable.statementSelectServerID + ", " + + "?)"); + statement.setString(1, uuid.toString()); + statement.setString(2, Plan.getServerUUID().toString()); + statement.setString(3, displayName); + statement.execute(); } finally { close(statement); - Benchmark.stop("Database", "Save Nicknames Multiple"); } } } diff --git a/Plan/src/main/java/com/djrapitops/plan/database/tables/TPSTable.java b/Plan/src/main/java/com/djrapitops/plan/database/tables/TPSTable.java index 47647ef12..23a9757e4 100644 --- a/Plan/src/main/java/com/djrapitops/plan/database/tables/TPSTable.java +++ b/Plan/src/main/java/com/djrapitops/plan/database/tables/TPSTable.java @@ -62,13 +62,6 @@ public class TPSTable extends Table { .column(columnChunksLoaded, Sql.INT).notNull() .toString() ); - int version = getVersion(); - if (version < 6) { - alterTablesV6(); - } - if (version < 7) { - alterTablesV7(); - } return true; } catch (SQLException ex) { Log.toLog(this.getClass().getName(), ex); @@ -76,18 +69,6 @@ public class TPSTable extends Table { } } - private void alterTablesV6() { - addColumns(columnCPUUsage + " double NOT NULL DEFAULT 0"); - } - - private void alterTablesV7() { - addColumns( - columnRAMUsage + " bigint NOT NULL DEFAULT 0", - columnEntities + " integer NOT NULL DEFAULT 0", - columnChunksLoaded + " integer NOT NULL DEFAULT 0" - ); - } - /** * @return @throws SQLException */ diff --git a/Plan/src/main/java/com/djrapitops/plan/database/tables/UserIDTable.java b/Plan/src/main/java/com/djrapitops/plan/database/tables/UserIDTable.java index ef432747c..3bbe28d40 100644 --- a/Plan/src/main/java/com/djrapitops/plan/database/tables/UserIDTable.java +++ b/Plan/src/main/java/com/djrapitops/plan/database/tables/UserIDTable.java @@ -5,6 +5,7 @@ import main.java.com.djrapitops.plan.database.databases.SQLDB; import java.sql.PreparedStatement; import java.sql.SQLException; +import java.util.UUID; /** * Represents a Table that uses UsersTable IDs to get their data. @@ -22,6 +23,7 @@ public abstract class UserIDTable extends Table { usersTable = db.getUsersTable(); } + @Deprecated protected boolean removeDataOf(int userID) { PreparedStatement statement = null; try { @@ -36,4 +38,20 @@ public abstract class UserIDTable extends Table { close(statement); } } + + protected boolean removeDataOf(UUID uuid) { + PreparedStatement statement = null; + try { + statement = prepareStatement("DELETE FROM " + tableName + + " WHERE (" + columnUserID + "=" + usersTable.statementSelectID + ")"); + statement.setString(1, uuid.toString()); + statement.execute(); + return true; + } catch (SQLException ex) { + Log.toLog(this.getClass().getName(), ex); + return false; + } finally { + close(statement); + } + } } From a4ae93390c6ff98966764f91754e63cf81327c04 Mon Sep 17 00:00:00 2001 From: Rsl1122 Date: Wed, 23 Aug 2017 12:53:17 +0300 Subject: [PATCH 06/11] Formatted SecurityTable --- .../djrapitops/plan/database/sql/Select.java | 4 ++++ .../plan/database/tables/SecurityTable.java | 24 +++++++++---------- 2 files changed, 15 insertions(+), 13 deletions(-) diff --git a/Plan/src/main/java/com/djrapitops/plan/database/sql/Select.java b/Plan/src/main/java/com/djrapitops/plan/database/sql/Select.java index 229c329b0..571f955ab 100644 --- a/Plan/src/main/java/com/djrapitops/plan/database/sql/Select.java +++ b/Plan/src/main/java/com/djrapitops/plan/database/sql/Select.java @@ -22,4 +22,8 @@ public class Select extends WhereParser { Log.debug(parser.toString()); return parser; } + + public static Select all(String table) { + return new Select("SELECT * FROM " + table); + } } diff --git a/Plan/src/main/java/com/djrapitops/plan/database/tables/SecurityTable.java b/Plan/src/main/java/com/djrapitops/plan/database/tables/SecurityTable.java index ee3acf084..5215aaa84 100644 --- a/Plan/src/main/java/com/djrapitops/plan/database/tables/SecurityTable.java +++ b/Plan/src/main/java/com/djrapitops/plan/database/tables/SecurityTable.java @@ -8,6 +8,8 @@ package main.java.com.djrapitops.plan.database.tables; import main.java.com.djrapitops.plan.Log; import main.java.com.djrapitops.plan.data.WebUser; import main.java.com.djrapitops.plan.database.databases.SQLDB; +import main.java.com.djrapitops.plan.database.sql.Insert; +import main.java.com.djrapitops.plan.database.sql.Select; import main.java.com.djrapitops.plan.database.sql.Sql; import main.java.com.djrapitops.plan.database.sql.TableSqlParser; @@ -22,15 +24,12 @@ import java.util.List; */ public class SecurityTable extends Table { - private final String columnUser; - private final String columnSaltedHash; - private final String columnPermLevel; + private final String columnUser = "username"; + private final String columnSaltedHash = "salted_pass_hash"; + private final String columnPermLevel = "permission_level"; public SecurityTable(SQLDB db, boolean usingMySQL) { super("plan_security", db, usingMySQL); - columnUser = "username"; - columnSaltedHash = "salted_pass_hash"; - columnPermLevel = "permission_level"; } @Override @@ -71,11 +70,10 @@ public class SecurityTable extends Table { public void addNewUser(String user, String saltPassHash, int permLevel) throws SQLException { PreparedStatement statement = null; try { - statement = prepareStatement("INSERT INTO " + tableName + " (" - + columnUser + ", " - + columnSaltedHash + ", " - + columnPermLevel - + ") VALUES (?, ?, ?)"); + statement = prepareStatement(Insert.values(tableName, + columnUser, + columnSaltedHash, + columnPermLevel)); statement.setString(1, user); statement.setString(2, saltPassHash); statement.setInt(3, permLevel); @@ -94,7 +92,7 @@ public class SecurityTable extends Table { PreparedStatement statement = null; ResultSet set = null; try { - statement = prepareStatement("SELECT * FROM " + tableName + " WHERE (" + columnUser + "=?)"); + statement = prepareStatement(Select.all(tableName).where(columnUser + "=?").toString()); statement.setString(1, user); set = statement.executeQuery(); if (set.next()) { @@ -113,7 +111,7 @@ public class SecurityTable extends Table { PreparedStatement statement = null; ResultSet set = null; try { - statement = prepareStatement("SELECT * FROM " + tableName); + statement = prepareStatement(Select.all(tableName).toString()); set = statement.executeQuery(); List list = new ArrayList<>(); while (set.next()) { From f635ccbf0aa7b4bfb562701ef7cfcd102905ceec Mon Sep 17 00:00:00 2001 From: Rsl1122 Date: Wed, 23 Aug 2017 13:39:14 +0300 Subject: [PATCH 07/11] UsersTable, processing --- .../plan/data/cache/SessionCache.java | 31 +- .../handling/player/FirstLeaveProcessor.java | 38 ++ .../handling/player/IPUpdateProcessor.java | 9 +- .../data/handling/player/KickProcessor.java | 10 +- .../data/handling/player/NameProcessor.java | 13 +- .../data/handling/player/OPProcessor.java | 28 ++ .../handling/player/RegisterProcessor.java | 24 +- .../plan/data/listeners/PlanChatListener.java | 1 + .../data/listeners/PlanPlayerListener.java | 20 +- .../djrapitops/plan/database/Database.java | 4 + .../plan/database/tables/SessionsTable.java | 2 + .../plan/database/tables/UserInfoTable.java | 34 ++ .../plan/database/tables/UsersTable.java | 383 ++++++------------ .../queue/processing/ProcessingQueue.java | 7 +- 14 files changed, 308 insertions(+), 296 deletions(-) create mode 100644 Plan/src/main/java/com/djrapitops/plan/data/handling/player/FirstLeaveProcessor.java create mode 100644 Plan/src/main/java/com/djrapitops/plan/data/handling/player/OPProcessor.java create mode 100644 Plan/src/main/java/com/djrapitops/plan/database/tables/UserInfoTable.java diff --git a/Plan/src/main/java/com/djrapitops/plan/data/cache/SessionCache.java b/Plan/src/main/java/com/djrapitops/plan/data/cache/SessionCache.java index 7c6cc7630..78ce31b8d 100644 --- a/Plan/src/main/java/com/djrapitops/plan/data/cache/SessionCache.java +++ b/Plan/src/main/java/com/djrapitops/plan/data/cache/SessionCache.java @@ -1,7 +1,10 @@ package main.java.com.djrapitops.plan.data.cache; +import main.java.com.djrapitops.plan.Log; +import main.java.com.djrapitops.plan.Plan; import main.java.com.djrapitops.plan.data.Session; +import java.sql.SQLException; import java.util.HashMap; import java.util.Map; import java.util.Optional; @@ -16,11 +19,13 @@ import java.util.UUID; public class SessionCache { private static final Map activeSessions = new HashMap<>(); + protected final Plan plugin; /** * Class Constructor. */ - public SessionCache() { + public SessionCache(Plan plugin) { + this.plugin = plugin; } public void cacheSession(UUID uuid, Session session) { @@ -33,25 +38,11 @@ public class SessionCache { return; } session.endSession(time); - // TODO DB Save the session. - } - - /** - * Starts a session for a player at the current moment. - * - * @param uuid UUID of the player. - */ - @Deprecated - public void startSession(UUID uuid) { - } - - /** - * Ends a session for a player at the current moment. - * - * @param uuid UUID of the player. - */ - @Deprecated - public void endSession(UUID uuid) { + try { + plugin.getDB().getSessionsTable().saveSession(uuid, session); + } catch (SQLException e) { + Log.toLog(this.getClass().getName(), e); + } } /** diff --git a/Plan/src/main/java/com/djrapitops/plan/data/handling/player/FirstLeaveProcessor.java b/Plan/src/main/java/com/djrapitops/plan/data/handling/player/FirstLeaveProcessor.java new file mode 100644 index 000000000..fbcf458ac --- /dev/null +++ b/Plan/src/main/java/com/djrapitops/plan/data/handling/player/FirstLeaveProcessor.java @@ -0,0 +1,38 @@ +/* + * Licence is provided in the jar as license.yml also here: + * https://github.com/Rsl1122/Plan-PlayerAnalytics/blob/master/Plan/src/main/resources/license.yml + */ +package main.java.com.djrapitops.plan.data.handling.player; + +import main.java.com.djrapitops.plan.Log; +import main.java.com.djrapitops.plan.Plan; +import main.java.com.djrapitops.plan.data.Action; +import main.java.com.djrapitops.plan.database.tables.Actions; + +import java.sql.SQLException; +import java.util.UUID; + +/** + * Processor for inserting a FIRST_LOGOUT Action. + * + * @author Rsl1122 + * @since 4.0.0 + */ +public class FirstLeaveProcessor extends PlayerProcessor { + + private final Action leaveAction; + + public FirstLeaveProcessor(UUID uuid, long time, int messagesSent) { + super(uuid); + leaveAction = new Action(time, Actions.FIRST_LOGOUT, "Messages sent: " + messagesSent); + } + + @Override + public void process() { + try { + Plan.getInstance().getDB().getActionsTable().insertAction(getUUID(), leaveAction); + } catch (SQLException e) { + Log.toLog(this.getClass().getName(), e); + } + } +} \ No newline at end of file diff --git a/Plan/src/main/java/com/djrapitops/plan/data/handling/player/IPUpdateProcessor.java b/Plan/src/main/java/com/djrapitops/plan/data/handling/player/IPUpdateProcessor.java index 997a21e87..0ff2b7f77 100644 --- a/Plan/src/main/java/com/djrapitops/plan/data/handling/player/IPUpdateProcessor.java +++ b/Plan/src/main/java/com/djrapitops/plan/data/handling/player/IPUpdateProcessor.java @@ -4,8 +4,11 @@ */ package main.java.com.djrapitops.plan.data.handling.player; +import main.java.com.djrapitops.plan.Log; +import main.java.com.djrapitops.plan.Plan; import main.java.com.djrapitops.plan.data.cache.GeolocationCacheHandler; +import java.sql.SQLException; import java.util.UUID; /** @@ -26,6 +29,10 @@ public class IPUpdateProcessor extends PlayerProcessor { public void process() { UUID uuid = getUUID(); String country = GeolocationCacheHandler.getCountry(ip); - // TODO DB Update IP & Geolocation + try { + Plan.getInstance().getDB().getIpsTable().updateIP(uuid, ip, country); + } catch (SQLException e) { + Log.toLog(this.getClass().getName(), e); + } } } \ No newline at end of file diff --git a/Plan/src/main/java/com/djrapitops/plan/data/handling/player/KickProcessor.java b/Plan/src/main/java/com/djrapitops/plan/data/handling/player/KickProcessor.java index 85bb0c16b..77b6d2740 100644 --- a/Plan/src/main/java/com/djrapitops/plan/data/handling/player/KickProcessor.java +++ b/Plan/src/main/java/com/djrapitops/plan/data/handling/player/KickProcessor.java @@ -4,6 +4,10 @@ */ package main.java.com.djrapitops.plan.data.handling.player; +import main.java.com.djrapitops.plan.Log; +import main.java.com.djrapitops.plan.Plan; + +import java.sql.SQLException; import java.util.UUID; /** @@ -19,6 +23,10 @@ public class KickProcessor extends PlayerProcessor { @Override public void process() { UUID uuid = getUUID(); - // TODO Update DB Kick +1 + try { + Plan.getInstance().getDB().getUsersTable().kicked(uuid); + } catch (SQLException e) { + Log.toLog(this.getClass().getName(), e); + } } } \ No newline at end of file diff --git a/Plan/src/main/java/com/djrapitops/plan/data/handling/player/NameProcessor.java b/Plan/src/main/java/com/djrapitops/plan/data/handling/player/NameProcessor.java index acb3286c4..368a23420 100644 --- a/Plan/src/main/java/com/djrapitops/plan/data/handling/player/NameProcessor.java +++ b/Plan/src/main/java/com/djrapitops/plan/data/handling/player/NameProcessor.java @@ -4,6 +4,11 @@ */ package main.java.com.djrapitops.plan.data.handling.player; +import main.java.com.djrapitops.plan.Log; +import main.java.com.djrapitops.plan.Plan; +import main.java.com.djrapitops.plan.database.Database; + +import java.sql.SQLException; import java.util.UUID; /** @@ -25,6 +30,12 @@ public class NameProcessor extends PlayerProcessor { @Override public void process() { UUID uuid = getUUID(); - // TODO DB Update Name & Nicknames. + Database db = Plan.getInstance().getDB(); + try { + db.getUsersTable().updateName(uuid, playerName); + db.getNicknamesTable().saveUserName(uuid, displayName); + } catch (SQLException e) { + Log.toLog(this.getClass().getName(), e); + } } } \ No newline at end of file diff --git a/Plan/src/main/java/com/djrapitops/plan/data/handling/player/OPProcessor.java b/Plan/src/main/java/com/djrapitops/plan/data/handling/player/OPProcessor.java new file mode 100644 index 000000000..65b5e3f88 --- /dev/null +++ b/Plan/src/main/java/com/djrapitops/plan/data/handling/player/OPProcessor.java @@ -0,0 +1,28 @@ +/* + * Licence is provided in the jar as license.yml also here: + * https://github.com/Rsl1122/Plan-PlayerAnalytics/blob/master/Plan/src/main/resources/license.yml + */ +package main.java.com.djrapitops.plan.data.handling.player; + +import java.util.UUID; + +/** + * //TODO Class Javadoc Comment + * + * @author Rsl1122 + */ +public class OPProcessor extends PlayerProcessor { + + private final boolean banned; + + public OPProcessor(UUID uuid, boolean banned) { + super(uuid); + this.banned = banned; + } + + @Override + public void process() { + UUID uuid = getUUID(); + // TODO DB Update Ban status + } +} \ No newline at end of file diff --git a/Plan/src/main/java/com/djrapitops/plan/data/handling/player/RegisterProcessor.java b/Plan/src/main/java/com/djrapitops/plan/data/handling/player/RegisterProcessor.java index 14a39e612..e89fc6692 100644 --- a/Plan/src/main/java/com/djrapitops/plan/data/handling/player/RegisterProcessor.java +++ b/Plan/src/main/java/com/djrapitops/plan/data/handling/player/RegisterProcessor.java @@ -4,8 +4,14 @@ */ package main.java.com.djrapitops.plan.data.handling.player; +import main.java.com.djrapitops.plan.Log; import main.java.com.djrapitops.plan.Plan; +import main.java.com.djrapitops.plan.data.Action; +import main.java.com.djrapitops.plan.data.listeners.PlanPlayerListener; +import main.java.com.djrapitops.plan.database.Database; +import main.java.com.djrapitops.plan.database.tables.Actions; +import java.sql.SQLException; import java.util.UUID; /** @@ -17,19 +23,31 @@ public class RegisterProcessor extends PlayerProcessor { private final long time; private final int playersOnline; + private final String name; - public RegisterProcessor(UUID uuid, long time, int playersOnline) { + private final PlanPlayerListener listener; + + public RegisterProcessor(PlanPlayerListener listener, UUID uuid, long time, String name, int playersOnline) { super(uuid); + this.listener = listener; this.time = time; this.playersOnline = playersOnline; + this.name = name; } @Override public void process() { UUID uuid = getUUID(); - if (Plan.getInstance().getDB().wasSeenBefore(uuid)) { + Database db = Plan.getInstance().getDB(); + if (db.wasSeenBefore(uuid)) { return; } - // TODO DB Register + listener.addFirstLeaveCheck(uuid); + try { + db.getUsersTable().registerUser(uuid, time, name); + db.getActionsTable().insertAction(uuid, new Action(time, Actions.REGISTERED, "Online: " + playersOnline + " Players")); + } catch (SQLException e) { + Log.toLog(this.getClass().getName(), e); + } } } \ No newline at end of file diff --git a/Plan/src/main/java/com/djrapitops/plan/data/listeners/PlanChatListener.java b/Plan/src/main/java/com/djrapitops/plan/data/listeners/PlanChatListener.java index dd2c42b90..8ae8cdb66 100644 --- a/Plan/src/main/java/com/djrapitops/plan/data/listeners/PlanChatListener.java +++ b/Plan/src/main/java/com/djrapitops/plan/data/listeners/PlanChatListener.java @@ -38,6 +38,7 @@ public class PlanChatListener implements Listener { } Player p = event.getPlayer(); + // TODO NameCache to DataCache plugin.addToProcessQueue(new NameProcessor(p.getUniqueId(), p.getName(), p.getDisplayName())); } } diff --git a/Plan/src/main/java/com/djrapitops/plan/data/listeners/PlanPlayerListener.java b/Plan/src/main/java/com/djrapitops/plan/data/listeners/PlanPlayerListener.java index 6f22c8f6b..ce57b68c9 100644 --- a/Plan/src/main/java/com/djrapitops/plan/data/listeners/PlanPlayerListener.java +++ b/Plan/src/main/java/com/djrapitops/plan/data/listeners/PlanPlayerListener.java @@ -16,6 +16,8 @@ import org.bukkit.event.player.PlayerKickEvent; import org.bukkit.event.player.PlayerLoginEvent; import org.bukkit.event.player.PlayerQuitEvent; +import java.util.HashSet; +import java.util.Set; import java.util.UUID; /** @@ -29,6 +31,8 @@ public class PlanPlayerListener implements Listener { private final Plan plugin; private final DataCache cache; + private final Set playersWithFirstSession; + /** * Class Constructor. * @@ -37,6 +41,7 @@ public class PlanPlayerListener implements Listener { public PlanPlayerListener(Plan plugin) { this.plugin = plugin; cache = plugin.getDataCache(); + playersWithFirstSession = new HashSet<>(); } @EventHandler(priority = EventPriority.MONITOR) @@ -95,9 +100,9 @@ public class PlanPlayerListener implements Listener { cache.cacheSession(uuid, Session.start(time, world, gm)); plugin.addToProcessQueue( - new RegisterProcessor(uuid, time, playersOnline), //TODO Add required variables after UsersTable is done. + new RegisterProcessor(this, uuid, time, playerName, playersOnline), new IPUpdateProcessor(uuid, ip), - new NameProcessor(uuid, playerName, displayName), + new NameProcessor(uuid, playerName, displayName), // TODO NameCache to DataCache new DBCommitProcessor(plugin.getDB()) ); } @@ -120,5 +125,16 @@ public class PlanPlayerListener implements Listener { new BanProcessor(uuid, player.isBanned()), new EndSessionProcessor(uuid, time) ); + + int messagesSent = 0; // TODO messages Sent on first session + + if (playersWithFirstSession.contains(uuid)) { + plugin.addToProcessQueue(new FirstLeaveProcessor(uuid, time, messagesSent)); + } + } + + // TODO MOVE TO DATACACHE + public void addFirstLeaveCheck(UUID uuid) { + playersWithFirstSession.add(uuid); } } diff --git a/Plan/src/main/java/com/djrapitops/plan/database/Database.java b/Plan/src/main/java/com/djrapitops/plan/database/Database.java index 1fb81f82a..f0da49cf7 100644 --- a/Plan/src/main/java/com/djrapitops/plan/database/Database.java +++ b/Plan/src/main/java/com/djrapitops/plan/database/Database.java @@ -328,4 +328,8 @@ public abstract class Database { } public abstract void commit() throws SQLException; + + public ActionsTable getActionsTable() { + return actionsTable; + } } diff --git a/Plan/src/main/java/com/djrapitops/plan/database/tables/SessionsTable.java b/Plan/src/main/java/com/djrapitops/plan/database/tables/SessionsTable.java index 316229e55..220b79925 100644 --- a/Plan/src/main/java/com/djrapitops/plan/database/tables/SessionsTable.java +++ b/Plan/src/main/java/com/djrapitops/plan/database/tables/SessionsTable.java @@ -20,6 +20,8 @@ import java.util.stream.Collectors; */ public class SessionsTable extends UserIDTable { + // TODO getLastPlayed(UUID, UUID) + private final String columnID = "id"; private final String columnSessionStart = "session_start"; private final String columnSessionEnd = "session_end"; diff --git a/Plan/src/main/java/com/djrapitops/plan/database/tables/UserInfoTable.java b/Plan/src/main/java/com/djrapitops/plan/database/tables/UserInfoTable.java new file mode 100644 index 000000000..4a2360a27 --- /dev/null +++ b/Plan/src/main/java/com/djrapitops/plan/database/tables/UserInfoTable.java @@ -0,0 +1,34 @@ +/* + * Licence is provided in the jar as license.yml also here: + * https://github.com/Rsl1122/Plan-PlayerAnalytics/blob/master/Plan/src/main/resources/license.yml + */ +package main.java.com.djrapitops.plan.database.tables; + +import main.java.com.djrapitops.plan.database.databases.SQLDB; + +/** + * //TODO Class Javadoc Comment + * + * @author Rsl1122 + */ +public class UserInfoTable extends UserIDTable { + + //TODO Server Specific Table + private final String columnUserID = "user_ id"; + private final String columnRegistered = "registered"; + private final String columnOP = "opped"; + private final String columnBanned = "banned"; + private final String columnServerID = "server_id"; + + private final ServerTable serverTable; + + public UserInfoTable(SQLDB db, boolean usingMySQL) { + super("plan_user_info", db, usingMySQL); + serverTable = db.getServerTable(); + } + + @Override + public boolean createTable() { + return false; + } +} \ No newline at end of file diff --git a/Plan/src/main/java/com/djrapitops/plan/database/tables/UsersTable.java b/Plan/src/main/java/com/djrapitops/plan/database/tables/UsersTable.java index e8140395b..3a16e608f 100644 --- a/Plan/src/main/java/com/djrapitops/plan/database/tables/UsersTable.java +++ b/Plan/src/main/java/com/djrapitops/plan/database/tables/UsersTable.java @@ -1,12 +1,9 @@ package main.java.com.djrapitops.plan.database.tables; +import com.djrapitops.plugin.utilities.Verify; import main.java.com.djrapitops.plan.Log; -import main.java.com.djrapitops.plan.data.UserData; import main.java.com.djrapitops.plan.database.databases.SQLDB; -import main.java.com.djrapitops.plan.database.sql.Select; -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.Benchmark; +import main.java.com.djrapitops.plan.database.sql.*; import java.sql.PreparedStatement; import java.sql.ResultSet; @@ -20,36 +17,9 @@ public class UsersTable extends Table { private final String columnID = "id"; private final String columnUUID = "uuid"; - @Deprecated - private final String columnGeolocation; - @Deprecated - private final String columnLastGM; - @Deprecated - private final String columnLastGMSwapTime; - @Deprecated - private final String columnPlayTime; - @Deprecated - private final String columnLoginTimes; - @Deprecated - private final String columnLastPlayed; - @Deprecated - private final String columnDeaths; - @Deprecated - private final String columnMobKills; - private final String columnRegistered; - private final String columnName; - //TODO Server Specific Table (Also has registered on it) - @Deprecated - private final String columnOP; - @Deprecated - private final String columnBanned; - // - @Deprecated - private final String columnContainsBukkitData; - @Deprecated - private final String columnLastWorldSwapTime; - @Deprecated - private final String columnLastWorld; + private final String columnRegistered = "registered"; + private final String columnName = "name"; + private final String columnTimesKicked = "times_kicked"; public final String statementSelectID; @@ -60,24 +30,6 @@ public class UsersTable extends Table { public UsersTable(SQLDB db, boolean usingMySQL) { super("plan_users", db, usingMySQL); statementSelectID = "(" + Select.from(tableName, tableName + "." + columnID).where(columnUUID + "=?").toString() + ")"; - - columnGeolocation = "geolocation"; - columnLastGM = "last_gamemode"; - columnLastGMSwapTime = "last_gamemode_swap"; - columnPlayTime = "play_time"; - columnLoginTimes = "login_times"; - columnLastPlayed = "last_played"; - columnMobKills = "mob_kills"; - - columnDeaths = "deaths"; - columnRegistered = "registered"; - columnOP = "opped"; - columnName = "name"; - columnBanned = "banned"; - columnContainsBukkitData = "contains_bukkit_data"; - - columnLastWorldSwapTime = "last_world_swap"; - columnLastWorld = "last_world"; } /** @@ -89,37 +41,12 @@ public class UsersTable extends Table { execute(TableSqlParser.createTable(tableName) .primaryKeyIDColumn(usingMySQL, columnID, Sql.INT) .column(columnUUID, Sql.varchar(36)).notNull().unique() - .column(columnGeolocation, Sql.varchar(50)).notNull() - .column(columnLastGM, Sql.varchar(15)).notNull() - .column(columnLastGMSwapTime, Sql.LONG).notNull() - .column(columnPlayTime, Sql.LONG).notNull() - .column(columnLoginTimes, Sql.INT).notNull() - .column(columnLastPlayed, Sql.LONG).notNull() - .column(columnDeaths, Sql.INT).notNull() - .column(columnMobKills, Sql.INT).notNull() .column(columnRegistered, Sql.LONG).notNull() - .column(columnOP, Sql.BOOL).notNull().defaultValue(false) .column(columnName, Sql.varchar(16)).notNull() - .column(columnBanned, Sql.BOOL).notNull().defaultValue(false) - .column(columnContainsBukkitData, Sql.BOOL).notNull().defaultValue(false) - .column(columnLastWorld, Sql.varchar(255)).notNull() - .column(columnLastWorldSwapTime, Sql.LONG).notNull() + .column(columnTimesKicked, Sql.INT).notNull().defaultValue("0") .primaryKey(usingMySQL, columnID) .toString() ); - int version = getVersion(); - if (version < 3) { - alterTablesV3(); - } - if (version < 4) { - alterTablesV4(); - } - if (version < 5) { - alterTablesV5(); - } - if (version < 8) { - alterTablesV8(); - } return true; } catch (SQLException ex) { Log.toLog(this.getClass().getName(), ex); @@ -127,100 +54,15 @@ public class UsersTable extends Table { } } - private void alterTablesV8() { - addColumns( - columnLastWorldSwapTime + " bigint NOT NULL DEFAULT 0", - columnLastWorld + " varchar(255) NOT NULL DEFAULT 'Unknown'" - ); - } - - private void alterTablesV5() { - removeColumns("age", "gender"); - } - - private void alterTablesV4() { - addColumns( - columnContainsBukkitData + " boolean NOT NULL DEFAULT 0", - columnOP + " boolean NOT NULL DEFAULT 0", - columnBanned + " boolean NOT NULL DEFAULT 0", - columnName + " varchar(16) NOT NULL DEFAULT 'Unknown'", - columnRegistered + " bigint NOT NULL DEFAULT 0" - ); - } - - private void alterTablesV3() { - addColumns( - columnDeaths + " integer NOT NULL DEFAULT 0", - columnMobKills + " integer NOT NULL DEFAULT 0" - ); - removeColumns("player_kills"); - } - - /** - * @param uuid - * @return - * @throws SQLException - */ - public int getUserId(UUID uuid) throws SQLException { - return getUserId(uuid.toString()); - } - - /** - * @param uuid - * @return - * @throws SQLException - */ - public int getUserId(String uuid) throws SQLException { - PreparedStatement statement = null; - ResultSet set = null; - try { - int userId = -1; - statement = prepareStatement("SELECT " + columnID + " FROM " + tableName + " WHERE (" + columnUUID + "=?)"); - statement.setString(1, uuid); - set = statement.executeQuery(); - while (set.next()) { - userId = set.getInt(columnID); - } - return userId; - } finally { - close(set); - close(statement); - } - } - - /** - * @param userID - * @return - * @throws SQLException - */ - public UUID getUserUUID(String userID) throws SQLException { - PreparedStatement statement = null; - ResultSet set = null; - try { - UUID uuid = null; - statement = prepareStatement("SELECT " + columnUUID + " FROM " + tableName + " WHERE (" + columnID + "=?)"); - statement.setString(1, userID); - set = statement.executeQuery(); - while (set.next()) { - uuid = UUID.fromString(set.getString(columnUUID)); - } - return uuid; - } finally { - close(set); - close(statement); - } - } - /** * @return @throws SQLException */ public Set getSavedUUIDs() throws SQLException { - Benchmark.start("Get Saved UUIDS"); PreparedStatement statement = null; ResultSet set = null; try { Set uuids = new HashSet<>(); - statement = prepareStatement("SELECT " + columnUUID + " FROM " + tableName); + statement = prepareStatement(Select.from(tableName, columnUUID).toString()); set = statement.executeQuery(); while (set.next()) { UUID uuid = UUID.fromString(set.getString(columnUUID)); @@ -228,9 +70,7 @@ public class UsersTable extends Table { } return uuids; } finally { - close(set); - close(statement); - Benchmark.stop("Database", "Get Saved UUIDS"); + close(set, statement); } } @@ -239,18 +79,10 @@ public class UsersTable extends Table { * @return */ public boolean removeUser(UUID uuid) { - return removeUser(uuid.toString()); - } - - /** - * @param uuid - * @return - */ - public boolean removeUser(String uuid) { PreparedStatement statement = null; try { statement = prepareStatement("DELETE FROM " + tableName + " WHERE (" + columnUUID + "=?)"); - statement.setString(1, uuid); + statement.setString(1, uuid.toString()); statement.execute(); return true; } catch (SQLException ex) { @@ -260,89 +92,6 @@ public class UsersTable extends Table { } } - /** - * @param uuids - * @return - * @throws SQLException - */ - public List getContainsBukkitData(Collection uuids) throws SQLException { - PreparedStatement statement = null; - ResultSet set = null; - List containsBukkitData = new ArrayList<>(); - try { - statement = prepareStatement("SELECT " + columnContainsBukkitData + ", " + columnUUID + " FROM " + tableName); - set = statement.executeQuery(); - while (set.next()) { - String uuidS = set.getString(columnUUID); - UUID uuid = UUID.fromString(uuidS); - if (!uuids.contains(uuid)) { - continue; - } - boolean contains = set.getBoolean(columnContainsBukkitData); - if (contains) { - containsBukkitData.add(uuid); - } - } - } finally { - close(statement); - close(set); - } - return containsBukkitData; - } - - /** - * @param uuids - * @return - * @throws SQLException - */ - public Map getUserIds(Collection uuids) throws SQLException { - Benchmark.start("Get User IDS Multiple"); - PreparedStatement statement = null; - ResultSet set = null; - try { - Map ids = new HashMap<>(); - statement = prepareStatement("SELECT " + columnUUID + ", " + columnID + " FROM " + tableName); - set = statement.executeQuery(); - while (set.next()) { - String uuidS = set.getString(columnUUID); - UUID uuid = UUID.fromString(uuidS); - if (!uuids.contains(uuid)) { - continue; - } - ids.put(uuid, set.getInt(columnID)); - } - return ids; - } finally { - close(set); - close(statement); - Benchmark.stop("Database", "Get User IDS Multiple"); - } - } - - /** - * @return @throws SQLException - */ - public Map getAllUserIds() throws SQLException { - Benchmark.start("Get User IDS ALL"); - PreparedStatement statement = null; - ResultSet set = null; - try { - Map ids = new HashMap<>(); - statement = prepareStatement("SELECT " + columnUUID + ", " + columnID + " FROM " + tableName); - set = statement.executeQuery(); - while (set.next()) { - String uuidS = set.getString(columnUUID); - UUID uuid = UUID.fromString(uuidS); - ids.put(uuid, set.getInt(columnID)); - } - return ids; - } finally { - close(set); - close(statement); - Benchmark.stop("Database", "Get User IDS ALL"); - } - } - /** * @return */ @@ -350,6 +99,10 @@ public class UsersTable extends Table { return columnID; } + public String getColumnUUID() { + return columnUUID; + } + /** * @param playername * @return @@ -359,7 +112,9 @@ public class UsersTable extends Table { PreparedStatement statement = null; ResultSet set = null; try { - statement = prepareStatement("SELECT " + columnUUID + " FROM " + tableName + " WHERE (UPPER(" + columnName + ")=UPPER(?))"); + statement = prepareStatement(Select.from(tableName, columnUUID) + .where("UPPER(" + columnName + ")=UPPER(?)") + .toString()); statement.setString(1, playername); set = statement.executeQuery(); if (set.next()) { @@ -368,17 +123,111 @@ public class UsersTable extends Table { } return null; } finally { - close(set); + close(set, statement); + } + } + + public List getRegisterDates() throws SQLException { + PreparedStatement statement = null; + ResultSet set = null; + try { + statement = prepareStatement(Select.from(tableName, columnRegistered).toString()); + set = statement.executeQuery(); + List registerDates = new ArrayList<>(); + while (set.next()) { + registerDates.add(set.getLong(columnRegistered)); + } + return registerDates; + } finally { + close(set, statement); + } + } + + /** + * Register a new user (UUID) to the database. + * + * @param uuid UUID of the player. + * @param registered Register date. + * @param name Name of the player. + * @throws SQLException + * @throws IllegalArgumentException If uuid or name are null. + */ + public void registerUser(UUID uuid, long registered, String name) throws SQLException { + Verify.nullCheck(uuid, name); + + PreparedStatement statement = null; + try { + statement = prepareStatement(Insert.values(tableName, + columnUUID, + columnRegistered, + columnName)); + statement.setString(1, uuid.toString()); + statement.setLong(2, registered); + statement.setString(3, name); + statement.execute(); + } finally { close(statement); } } - public List getUserData(List uuids) { - // TODO Rewrite method for new UserData objects. - return new ArrayList<>(); + public boolean isRegistered(UUID uuid) throws SQLException { + PreparedStatement statement = null; + ResultSet set = null; + try { + statement = prepareStatement(Select.from(tableName, columnID) + .where(columnUUID + "=?") + .toString()); + statement.setString(1, uuid.toString()); + set = statement.executeQuery(); + return set.next(); + } finally { + close(set, statement); + } } - public String getColumnUUID() { - return columnUUID; + public void updateName(UUID uuid, String name) throws SQLException { + PreparedStatement statement = null; + try { + statement = prepareStatement(Update.values(tableName, columnName) + .where(columnUUID + "=?") + .toString()); + statement.setString(1, name); + statement.setString(2, uuid.toString()); + statement.execute(); + } finally { + close(statement); + } + } + + public int getTimesKicked(UUID uuid) throws SQLException { + PreparedStatement statement = null; + ResultSet set = null; + try { + statement = prepareStatement(Select.from(tableName, columnTimesKicked) + .where(columnUUID + "=?") + .toString()); + statement.setString(1, uuid.toString()); + set = statement.executeQuery(); + if (set.next()) { + return set.getInt(columnTimesKicked); + } + return 0; + } finally { + close(set, statement); + } + } + + public void kicked(UUID uuid) throws SQLException { + PreparedStatement statement = null; + try { + statement = prepareStatement(Update.values(tableName, columnTimesKicked) + .where(columnUUID + "=?") + .toString()); + statement.setInt(1, getTimesKicked(uuid) + 1); + statement.setString(2, uuid.toString()); + statement.execute(); + } finally { + close(statement); + } } } diff --git a/Plan/src/main/java/com/djrapitops/plan/queue/processing/ProcessingQueue.java b/Plan/src/main/java/com/djrapitops/plan/queue/processing/ProcessingQueue.java index ddc00eb91..bb44f6262 100644 --- a/Plan/src/main/java/com/djrapitops/plan/queue/processing/ProcessingQueue.java +++ b/Plan/src/main/java/com/djrapitops/plan/queue/processing/ProcessingQueue.java @@ -1,5 +1,6 @@ package main.java.com.djrapitops.plan.queue.processing; +import main.java.com.djrapitops.plan.Log; import main.java.com.djrapitops.plan.queue.Consumer; import main.java.com.djrapitops.plan.queue.Queue; import main.java.com.djrapitops.plan.queue.Setup; @@ -47,7 +48,11 @@ class ProcessConsumer extends Consumer { if (process == null) { return; } - process.process(); + try { + process.process(); + } catch (Exception | NoClassDefFoundError | NoSuchFieldError | NoSuchMethodError e) { + Log.toLog(this.getTaskName() + ":" + process.getClass().getSimpleName(), e); + } } @Override From c205a85a6a1931aed9388c64534f8aa19d8d9465 Mon Sep 17 00:00:00 2001 From: Rsl1122 Date: Wed, 23 Aug 2017 13:56:44 +0300 Subject: [PATCH 08/11] Deleted KillHandling, Cleaned Database RemoveUser methods --- .../main/java/com/djrapitops/plan/Plan.java | 13 +-- .../djrapitops/plan/data/cache/DataCache.java | 57 ++----------- .../plan/data/handling/KillHandling.java | 57 ------------- .../djrapitops/plan/database/Database.java | 2 +- .../plan/database/databases/MySQLDB.java | 2 +- .../plan/database/databases/SQLDB.java | 83 ++++++------------- .../plan/database/databases/SQLiteDB.java | 2 +- .../plan/database/tables/IPsTable.java | 8 -- .../plan/database/tables/KillsTable.java | 15 ++-- .../plan/database/tables/NicknamesTable.java | 8 -- .../plan/database/tables/SessionsTable.java | 11 --- .../plan/database/tables/UserIDTable.java | 2 +- .../plan/database/tables/UsersTable.java | 3 +- .../plan/database/tables/WorldTimesTable.java | 4 - 14 files changed, 46 insertions(+), 221 deletions(-) delete mode 100644 Plan/src/main/java/com/djrapitops/plan/data/handling/KillHandling.java diff --git a/Plan/src/main/java/com/djrapitops/plan/Plan.java b/Plan/src/main/java/com/djrapitops/plan/Plan.java index cc60e2e81..cc04e5bda 100644 --- a/Plan/src/main/java/com/djrapitops/plan/Plan.java +++ b/Plan/src/main/java/com/djrapitops/plan/Plan.java @@ -54,8 +54,6 @@ import org.bukkit.ChatColor; import java.util.HashSet; import java.util.Set; import java.util.UUID; -import java.util.concurrent.Executors; -import java.util.concurrent.ScheduledExecutorService; /** * Main class for Bukkit that manages the plugin. @@ -263,18 +261,11 @@ public class Plan extends BukkitPlugin { getServer().getScheduler().cancelTasks(this); if (Verify.notNull(dataCache, db)) { - Benchmark.start("Disable: DataCache Save"); // Saves the DataCache to the database without Bukkit's Schedulers. Log.info(Locale.get(Msg.DISABLE_CACHE_SAVE).toString()); - ScheduledExecutorService scheduler = Executors.newSingleThreadScheduledExecutor(); - scheduler.execute(() -> { - dataCache.saveCacheOnDisable(); - taskStatus().cancelAllKnownTasks(); - Benchmark.stop("Disable: DataCache Save"); - }); - - scheduler.shutdown(); // Schedules the save to shutdown after it has ran the execute method. + // TODO Process all leftover Processors. + taskStatus().cancelAllKnownTasks(); } getPluginLogger().endAllDebugs(); diff --git a/Plan/src/main/java/com/djrapitops/plan/data/cache/DataCache.java b/Plan/src/main/java/com/djrapitops/plan/data/cache/DataCache.java index 0acfb2ceb..f6e443bc9 100644 --- a/Plan/src/main/java/com/djrapitops/plan/data/cache/DataCache.java +++ b/Plan/src/main/java/com/djrapitops/plan/data/cache/DataCache.java @@ -1,21 +1,19 @@ package main.java.com.djrapitops.plan.data.cache; import com.djrapitops.plugin.task.AbsRunnable; -import com.djrapitops.plugin.utilities.player.IPlayer; import main.java.com.djrapitops.plan.Log; import main.java.com.djrapitops.plan.Plan; import main.java.com.djrapitops.plan.data.TPS; import main.java.com.djrapitops.plan.database.Database; import main.java.com.djrapitops.plan.locale.Locale; import main.java.com.djrapitops.plan.locale.Msg; -import main.java.com.djrapitops.plan.queue.processing.Processor; -import main.java.com.djrapitops.plan.utilities.Benchmark; -import main.java.com.djrapitops.plan.utilities.MiscUtils; import main.java.com.djrapitops.plan.utilities.analysis.MathUtils; -import org.bukkit.entity.Player; import java.sql.SQLException; -import java.util.*; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; /** * This Class contains the Cache. @@ -30,8 +28,6 @@ import java.util.*; */ public class DataCache extends SessionCache { - // Plan - private final Plan plugin; private final Database db; //Cache @@ -53,9 +49,7 @@ public class DataCache extends SessionCache { * @param plugin Current instance of Plan */ public DataCache(Plan plugin) { - super(); // Initializes Session & Location cache. - - this.plugin = plugin; + super(plugin); // Initializes Session & Location cache. db = plugin.getDB(); commandUse = new HashMap<>(); @@ -115,47 +109,6 @@ public class DataCache extends SessionCache { }).runTaskTimerAsynchronously(60L * 20L * 5, 60L * 20L * 5); } - /** - * Saves all data in the cache to Database and closes the database down. - *

- * Stops all tasks. - *

- * If processingQueue has unprocessed information, it will be processed. - */ - @Deprecated - public void saveCacheOnDisable() { // TODO Rewrite - long time = MiscUtils.getTime(); - Benchmark.start("Cache: SaveOnDisable"); - Benchmark.start("Cache: ProcessOnlineHandlingInfo"); - List onlinePlayers = plugin.fetch().getOnlinePlayers(); - Log.debug("Online: " + onlinePlayers.size()); - for (IPlayer p : onlinePlayers) { - UUID uuid = p.getUuid(); - endSession(uuid); - String worldName = ((Player) p.getWrappedPlayerClass()).getWorld().getName(); - } - Benchmark.stop("Cache: ProcessOnlineHandlingInfo"); - try { - db.saveCommandUse(commandUse); - } catch (SQLException e) { - Log.toLog(this.getClass().getName(), e); - } - saveUnsavedTPSHistory(); - try { - db.close(); - } catch (SQLException e) { - Log.toLog(this.getClass().getName(), e); - } - Benchmark.stop("Cache: SaveOnDisable"); - } - - private void processUnprocessedHandlingInfo(List toProcess) { - Log.debug("PROCESS: " + toProcess.size()); - for (Processor i : toProcess) { - i.process(); - } - } - /** * Saves the cached CommandUse. *

diff --git a/Plan/src/main/java/com/djrapitops/plan/data/handling/KillHandling.java b/Plan/src/main/java/com/djrapitops/plan/data/handling/KillHandling.java deleted file mode 100644 index 7f4c6ce99..000000000 --- a/Plan/src/main/java/com/djrapitops/plan/data/handling/KillHandling.java +++ /dev/null @@ -1,57 +0,0 @@ -package main.java.com.djrapitops.plan.data.handling; - -import main.java.com.djrapitops.plan.Log; -import main.java.com.djrapitops.plan.Plan; -import main.java.com.djrapitops.plan.data.UserData; -import org.bukkit.entity.LivingEntity; -import org.bukkit.entity.Player; - -import java.sql.SQLException; -import java.util.UUID; - -/** - * Class containing static methods for processing information contained in a - * DeathEvent when the killer is a player. - * - * @author Rsl1122 - * @since 3.0.0 - */ -public class KillHandling { - - /** - * Utility Class, hides constructor. - */ - private KillHandling() { - throw new IllegalStateException("Utility Class."); - } - - /** - * Processes the information of the Event and changes UserData object - * accordingly. - * - * @param data UserData of the player. - * @param time Epoch ms the event occurred. - * @param dead Mob or a Player the player killed. - * @param weaponName The name of the Weapon used. - */ - public static void processKillInfo(UserData data, long time, LivingEntity dead, String weaponName) { - Plan plugin = Plan.getInstance(); - if (dead instanceof Player) { - Player deadPlayer = (Player) dead; - int victimID; - try { - UUID victimUUID = deadPlayer.getUniqueId(); - victimID = plugin.getDB().getUsersTable().getUserId(victimUUID); - if (victimID == -1) { - return; - } - //TODO Move to Session data.addPlayerKill(new KillData(victimUUID, victimID, weaponName, time)); - } catch (SQLException e) { - Log.toLog("main.java.com.djrapitops.plan.KillHandling", e); - } - } else { - //TODO Move to Session data.setMobKills(data.getMobKills() + 1); - } - } - -} diff --git a/Plan/src/main/java/com/djrapitops/plan/database/Database.java b/Plan/src/main/java/com/djrapitops/plan/database/Database.java index f0da49cf7..6a5c20258 100644 --- a/Plan/src/main/java/com/djrapitops/plan/database/Database.java +++ b/Plan/src/main/java/com/djrapitops/plan/database/Database.java @@ -191,7 +191,7 @@ public abstract class Database { * @return Success of the removal. * @throws SQLException If a database error occurs. */ - public abstract boolean removeAccount(String uuid) throws SQLException; + public abstract boolean removeAccount(UUID uuid) throws SQLException; /** * Used to clear all data from the database. diff --git a/Plan/src/main/java/com/djrapitops/plan/database/databases/MySQLDB.java b/Plan/src/main/java/com/djrapitops/plan/database/databases/MySQLDB.java index a5c36c687..1945bab5d 100644 --- a/Plan/src/main/java/com/djrapitops/plan/database/databases/MySQLDB.java +++ b/Plan/src/main/java/com/djrapitops/plan/database/databases/MySQLDB.java @@ -21,7 +21,7 @@ public class MySQLDB extends SQLDB { * @param plugin Current instance of Plan */ public MySQLDB(Plan plugin) { - super(plugin, true); + super(plugin); } /** diff --git a/Plan/src/main/java/com/djrapitops/plan/database/databases/SQLDB.java b/Plan/src/main/java/com/djrapitops/plan/database/databases/SQLDB.java index 5c35c5111..ff9852e7c 100644 --- a/Plan/src/main/java/com/djrapitops/plan/database/databases/SQLDB.java +++ b/Plan/src/main/java/com/djrapitops/plan/database/databases/SQLDB.java @@ -12,8 +12,10 @@ import main.java.com.djrapitops.plan.utilities.MiscUtils; import java.sql.Connection; import java.sql.SQLException; import java.sql.Statement; -import java.util.*; -import java.util.stream.Collectors; +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; +import java.util.UUID; /** * Class containing main logic for different data related save & load functionality. @@ -23,18 +25,15 @@ import java.util.stream.Collectors; */ public abstract class SQLDB extends Database { - private final boolean supportsModification; private final boolean usingMySQL; private Connection connection; /** * @param plugin - * @param supportsModification */ - public SQLDB(Plan plugin, boolean supportsModification) { + public SQLDB(Plan plugin) { super(plugin); - this.supportsModification = supportsModification; usingMySQL = getName().equals("MySQL"); versionTable = new VersionTable(this, usingMySQL); @@ -252,7 +251,7 @@ public abstract class SQLDB extends Database { return false; } try { - return usersTable.getUserId(uuid.toString()) != -1; + return usersTable.isRegistered(uuid); } catch (SQLException e) { Log.toLog(this.getClass().getName(), e); return false; @@ -261,39 +260,34 @@ public abstract class SQLDB extends Database { } } - /** - * @param uuid - * @return - * @throws SQLException - */ - @Override - public boolean removeAccount(String uuid) throws SQLException { - if (uuid == null || uuid.isEmpty()) { + public boolean removeAccount(UUID uuid) throws SQLException { + if (uuid == null) { return false; } try { Benchmark.start("Remove Account"); Log.debug("Database", "Removing Account: " + uuid); - try { - checkConnection(); - } catch (Exception e) { - Log.toLog(this.getClass().getName(), e); - return false; + checkConnection(); + + boolean success = true; + for (Table t : getAllTablesInRemoveOrder()) { + if (!success) { + continue; + } + if (t instanceof UserIDTable) { + UserIDTable table = (UserIDTable) t; + success = table.removeUser(uuid); + } } - int userId = usersTable.getUserId(uuid); - boolean success = userId != -1 - && ipsTable.removeUserIPs(userId) - && nicknamesTable.removeUserNicknames(userId) - && killsTable.removeUserKillsAndVictims(userId) - && worldTimesTable.removeUserWorldTimes(userId) - && sessionsTable.removeUserSessions(userId) - && usersTable.removeUser(uuid); if (success) { commit(); - } else { - rollback(); + return true; } - return success; + throw new IllegalStateException("Removal Failed"); + } catch (Exception e) { + Log.toLog(this.getClass().getName(), e); + rollback(); // TODO Test case + return false; } finally { Benchmark.stop("Database", "Remove Account"); setAvailable(); @@ -346,33 +340,8 @@ public abstract class SQLDB extends Database { if (uuidsCol == null || uuidsCol.isEmpty()) { return new ArrayList<>(); } - setStatus("Get userdata (multiple) for: " + uuidsCol.size()); - Benchmark.start("Get UserData for " + uuidsCol.size()); - Map userIds = usersTable.getAllUserIds(); - Set remove = uuidsCol.stream() - .filter(uuid -> !userIds.containsKey(uuid)) - .collect(Collectors.toSet()); - List uuids = new ArrayList<>(uuidsCol); - Log.debug("Database", "Data not found for: " + remove.size()); - uuids.removeAll(remove); - Benchmark.start("Create UserData objects for " + userIds.size()); - List data = usersTable.getUserData(uuids); - Benchmark.stop("Database", "Create UserData objects for " + userIds.size()); - if (data.isEmpty()) { - return data; - } // TODO REWRITE - - Benchmark.stop("Database", "Get UserData for " + uuidsCol.size()); - setAvailable(); - return data; - } - - /** - * @return - */ - public boolean supportsModification() { - return supportsModification; + return new ArrayList<>(); } /** diff --git a/Plan/src/main/java/com/djrapitops/plan/database/databases/SQLiteDB.java b/Plan/src/main/java/com/djrapitops/plan/database/databases/SQLiteDB.java index 0c5e41490..49db2e4f2 100644 --- a/Plan/src/main/java/com/djrapitops/plan/database/databases/SQLiteDB.java +++ b/Plan/src/main/java/com/djrapitops/plan/database/databases/SQLiteDB.java @@ -28,7 +28,7 @@ public class SQLiteDB extends SQLDB { * @param dbName */ public SQLiteDB(Plan plugin, String dbName) { - super(plugin, false); + super(plugin); this.dbName = dbName; } diff --git a/Plan/src/main/java/com/djrapitops/plan/database/tables/IPsTable.java b/Plan/src/main/java/com/djrapitops/plan/database/tables/IPsTable.java index e80519d09..34985fe09 100644 --- a/Plan/src/main/java/com/djrapitops/plan/database/tables/IPsTable.java +++ b/Plan/src/main/java/com/djrapitops/plan/database/tables/IPsTable.java @@ -53,14 +53,6 @@ public class IPsTable extends UserIDTable { } } - /** - * @param userId The User ID from which the IPs should be removed from - * @return if the IPs were removed successfully - */ - public boolean removeUserIPs(int userId) { - return super.removeDataOf(userId); - } - /** * @param uuid UUID of the user. * @return Users's Login Geolocations. diff --git a/Plan/src/main/java/com/djrapitops/plan/database/tables/KillsTable.java b/Plan/src/main/java/com/djrapitops/plan/database/tables/KillsTable.java index da86e6fc4..844782ae7 100644 --- a/Plan/src/main/java/com/djrapitops/plan/database/tables/KillsTable.java +++ b/Plan/src/main/java/com/djrapitops/plan/database/tables/KillsTable.java @@ -61,16 +61,15 @@ public class KillsTable extends UserIDTable { } } - /** - * @param userId - * @return - */ - public boolean removeUserKillsAndVictims(int userId) { + @Override + public boolean removeUser(UUID uuid) { PreparedStatement statement = null; try { - statement = prepareStatement("DELETE FROM " + tableName + " WHERE " + columnKillerUserID + " = ? OR " + columnVictimUserID + " = ?"); - statement.setInt(1, userId); - statement.setInt(2, userId); + statement = prepareStatement("DELETE FROM " + tableName + + " WHERE " + columnKillerUserID + " = " + usersTable.statementSelectID + + " OR " + columnVictimUserID + " = " + usersTable.statementSelectID); + statement.setString(1, uuid.toString()); + statement.setString(2, uuid.toString()); statement.execute(); return true; } catch (SQLException ex) { diff --git a/Plan/src/main/java/com/djrapitops/plan/database/tables/NicknamesTable.java b/Plan/src/main/java/com/djrapitops/plan/database/tables/NicknamesTable.java index 92df823e3..e463a2b5b 100644 --- a/Plan/src/main/java/com/djrapitops/plan/database/tables/NicknamesTable.java +++ b/Plan/src/main/java/com/djrapitops/plan/database/tables/NicknamesTable.java @@ -54,14 +54,6 @@ public class NicknamesTable extends UserIDTable { } } - /** - * @param userId The User ID whose the nicknames should be removed - * @return if the removal was successful - */ - public boolean removeUserNicknames(int userId) { - return super.removeDataOf(userId); - } - /** * Get ALL nicknames of the user. *

diff --git a/Plan/src/main/java/com/djrapitops/plan/database/tables/SessionsTable.java b/Plan/src/main/java/com/djrapitops/plan/database/tables/SessionsTable.java index 220b79925..c6737df8a 100644 --- a/Plan/src/main/java/com/djrapitops/plan/database/tables/SessionsTable.java +++ b/Plan/src/main/java/com/djrapitops/plan/database/tables/SessionsTable.java @@ -69,17 +69,6 @@ public class SessionsTable extends UserIDTable { } } - /** - * Removes User's Sessions from the Database. - *

- * - * @param userId - * @return - */ - public boolean removeUserSessions(int userId) { - return super.removeDataOf(userId); - } - /** * Used to save a session, with all it's information into the database. *

diff --git a/Plan/src/main/java/com/djrapitops/plan/database/tables/UserIDTable.java b/Plan/src/main/java/com/djrapitops/plan/database/tables/UserIDTable.java index 3bbe28d40..fbf07ccc9 100644 --- a/Plan/src/main/java/com/djrapitops/plan/database/tables/UserIDTable.java +++ b/Plan/src/main/java/com/djrapitops/plan/database/tables/UserIDTable.java @@ -39,7 +39,7 @@ public abstract class UserIDTable extends Table { } } - protected boolean removeDataOf(UUID uuid) { + public boolean removeUser(UUID uuid) { PreparedStatement statement = null; try { statement = prepareStatement("DELETE FROM " + tableName + diff --git a/Plan/src/main/java/com/djrapitops/plan/database/tables/UsersTable.java b/Plan/src/main/java/com/djrapitops/plan/database/tables/UsersTable.java index 3a16e608f..111a0c162 100644 --- a/Plan/src/main/java/com/djrapitops/plan/database/tables/UsersTable.java +++ b/Plan/src/main/java/com/djrapitops/plan/database/tables/UsersTable.java @@ -13,7 +13,7 @@ import java.util.*; /** * @author Rsl1122 */ -public class UsersTable extends Table { +public class UsersTable extends UserIDTable { private final String columnID = "id"; private final String columnUUID = "uuid"; @@ -78,6 +78,7 @@ public class UsersTable extends Table { * @param uuid * @return */ + @Override public boolean removeUser(UUID uuid) { PreparedStatement statement = null; try { diff --git a/Plan/src/main/java/com/djrapitops/plan/database/tables/WorldTimesTable.java b/Plan/src/main/java/com/djrapitops/plan/database/tables/WorldTimesTable.java index 7a431c945..d603a5692 100644 --- a/Plan/src/main/java/com/djrapitops/plan/database/tables/WorldTimesTable.java +++ b/Plan/src/main/java/com/djrapitops/plan/database/tables/WorldTimesTable.java @@ -69,10 +69,6 @@ public class WorldTimesTable extends UserIDTable { } } - public boolean removeUserWorldTimes(int userId) { - return super.removeDataOf(userId); - } - public void saveWorldTimes(UUID uuid, long sessionID, WorldTimes worldTimes) throws SQLException { if (Verify.isEmpty(worldTimes.getWorldTimes())) { return; From 3ea691f4d03c34c0b4fe03fd9186faa5103070e1 Mon Sep 17 00:00:00 2001 From: Rsl1122 Date: Wed, 23 Aug 2017 14:02:39 +0300 Subject: [PATCH 09/11] Cleaned up createTable methods --- .../plan/database/tables/ActionsTable.java | 26 +++++--------- .../plan/database/tables/CommandUseTable.java | 25 +++++-------- .../plan/database/tables/IPsTable.java | 22 ++++-------- .../plan/database/tables/KillsTable.java | 28 ++++++--------- .../plan/database/tables/NicknamesTable.java | 24 +++++-------- .../plan/database/tables/SecurityTable.java | 18 ++++------ .../plan/database/tables/ServerTable.java | 24 +++++-------- .../plan/database/tables/SessionsTable.java | 36 +++++++------------ .../plan/database/tables/TPSTable.java | 26 ++++++-------- .../plan/database/tables/Table.java | 11 ++++++ .../plan/database/tables/UsersTable.java | 25 +++++-------- .../plan/database/tables/VersionTable.java | 14 +++----- .../plan/database/tables/WorldTable.java | 19 ++++------ .../plan/database/tables/WorldTimesTable.java | 33 +++++++---------- 14 files changed, 125 insertions(+), 206 deletions(-) diff --git a/Plan/src/main/java/com/djrapitops/plan/database/tables/ActionsTable.java b/Plan/src/main/java/com/djrapitops/plan/database/tables/ActionsTable.java index 95b973581..04c039107 100644 --- a/Plan/src/main/java/com/djrapitops/plan/database/tables/ActionsTable.java +++ b/Plan/src/main/java/com/djrapitops/plan/database/tables/ActionsTable.java @@ -4,7 +4,6 @@ */ package main.java.com.djrapitops.plan.database.tables; -import main.java.com.djrapitops.plan.Log; import main.java.com.djrapitops.plan.Plan; import main.java.com.djrapitops.plan.data.Action; import main.java.com.djrapitops.plan.database.databases.SQLDB; @@ -46,23 +45,16 @@ public class ActionsTable extends UserIDTable { @Override public boolean createTable() { - ServerTable serverTable = db.getServerTable(); - try { - execute(TableSqlParser.createTable(tableName) - .column(columnUserID, Sql.INT).notNull() - .column(columnServerID, Sql.INT).notNull() - .column(columnDate, Sql.LONG).notNull() - .column(columnActionID, Sql.INT).notNull() - .column(columnAdditionalInfo, Sql.varchar(100)) - .foreignKey(columnUserID, usersTable.toString(), usersTable.getColumnID()) - .foreignKey(columnServerID, serverTable.toString(), serverTable.getColumnID()) - .toString()); - return true; - } catch (SQLException ex) { - Log.toLog(this.getClass().getName(), ex); - return false; - } + return createTable(TableSqlParser.createTable(tableName) + .column(columnUserID, Sql.INT).notNull() + .column(columnServerID, Sql.INT).notNull() + .column(columnDate, Sql.LONG).notNull() + .column(columnActionID, Sql.INT).notNull() + .column(columnAdditionalInfo, Sql.varchar(100)) + .foreignKey(columnUserID, usersTable.toString(), usersTable.getColumnID()) + .foreignKey(columnServerID, serverTable.toString(), serverTable.getColumnID()) + .toString()); } public void insertAction(UUID uuid, Action action) throws SQLException { diff --git a/Plan/src/main/java/com/djrapitops/plan/database/tables/CommandUseTable.java b/Plan/src/main/java/com/djrapitops/plan/database/tables/CommandUseTable.java index 6d615fe26..8c3d274eb 100644 --- a/Plan/src/main/java/com/djrapitops/plan/database/tables/CommandUseTable.java +++ b/Plan/src/main/java/com/djrapitops/plan/database/tables/CommandUseTable.java @@ -1,7 +1,6 @@ package main.java.com.djrapitops.plan.database.tables; 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.database.databases.SQLDB; import main.java.com.djrapitops.plan.database.sql.Select; @@ -43,21 +42,15 @@ public class CommandUseTable extends Table { @Override public boolean createTable() { ServerTable serverTable = db.getServerTable(); - try { - execute(TableSqlParser.createTable(tableName) - .primaryKeyIDColumn(usingMySQL, columnCommandId, Sql.INT) - .column(columnCommand, Sql.varchar(20)).notNull() - .column(columnTimesUsed, Sql.INT).notNull() - .column(columnServerID, Sql.INT).notNull() - .primaryKey(usingMySQL, columnCommandId) - .foreignKey(columnServerID, serverTable.toString(), serverTable.getColumnID()) - .toString() - ); - return true; - } catch (SQLException ex) { - Log.toLog(this.getClass().getName(), ex); - return false; - } + return createTable(TableSqlParser.createTable(tableName) + .primaryKeyIDColumn(usingMySQL, columnCommandId, Sql.INT) + .column(columnCommand, Sql.varchar(20)).notNull() + .column(columnTimesUsed, Sql.INT).notNull() + .column(columnServerID, Sql.INT).notNull() + .primaryKey(usingMySQL, columnCommandId) + .foreignKey(columnServerID, serverTable.toString(), serverTable.getColumnID()) + .toString() + ); } /** diff --git a/Plan/src/main/java/com/djrapitops/plan/database/tables/IPsTable.java b/Plan/src/main/java/com/djrapitops/plan/database/tables/IPsTable.java index 34985fe09..cf6b5f6c4 100644 --- a/Plan/src/main/java/com/djrapitops/plan/database/tables/IPsTable.java +++ b/Plan/src/main/java/com/djrapitops/plan/database/tables/IPsTable.java @@ -1,6 +1,5 @@ package main.java.com.djrapitops.plan.database.tables; -import main.java.com.djrapitops.plan.Log; import main.java.com.djrapitops.plan.database.databases.SQLDB; import main.java.com.djrapitops.plan.database.sql.Select; import main.java.com.djrapitops.plan.database.sql.Sql; @@ -37,20 +36,13 @@ public class IPsTable extends UserIDTable { */ @Override public boolean createTable() { - UsersTable usersTable = db.getUsersTable(); - try { - execute(TableSqlParser.createTable(tableName) - .column(columnUserID, Sql.INT).notNull() - .column(columnIP, Sql.varchar(20)).notNull() - .column(columnGeolocation, Sql.varchar(50)).notNull() - .foreignKey(columnUserID, usersTable.getTableName(), usersTable.getColumnID()) - .toString() - ); - return true; - } catch (SQLException ex) { - Log.toLog(this.getClass().getName(), ex); - return false; - } + return createTable(TableSqlParser.createTable(tableName) + .column(columnUserID, Sql.INT).notNull() + .column(columnIP, Sql.varchar(20)).notNull() + .column(columnGeolocation, Sql.varchar(50)).notNull() + .foreignKey(columnUserID, usersTable.getTableName(), usersTable.getColumnID()) + .toString() + ); } /** diff --git a/Plan/src/main/java/com/djrapitops/plan/database/tables/KillsTable.java b/Plan/src/main/java/com/djrapitops/plan/database/tables/KillsTable.java index 844782ae7..56c5ef32a 100644 --- a/Plan/src/main/java/com/djrapitops/plan/database/tables/KillsTable.java +++ b/Plan/src/main/java/com/djrapitops/plan/database/tables/KillsTable.java @@ -42,23 +42,17 @@ public class KillsTable extends UserIDTable { */ @Override public boolean createTable() { - try { - execute(TableSqlParser.createTable(tableName) - .column(columnKillerUserID, Sql.INT).notNull() - .column(columnVictimUserID, Sql.INT).notNull() - .column(columnWeapon, Sql.varchar(30)).notNull() - .column(columnDate, Sql.LONG).notNull() - .column(columnSessionID, Sql.LONG).notNull() - .foreignKey(columnKillerUserID, usersTable.getTableName(), usersTable.getColumnID()) - .foreignKey(columnVictimUserID, usersTable.getTableName(), usersTable.getColumnID()) - .foreignKey(columnSessionID, sessionsTable.getTableName(), sessionsTable.getColumnID()) - .toString() - ); - return true; - } catch (SQLException ex) { - Log.toLog(this.getClass().getName(), ex); - return false; - } + return createTable(TableSqlParser.createTable(tableName) + .column(columnKillerUserID, Sql.INT).notNull() + .column(columnVictimUserID, Sql.INT).notNull() + .column(columnWeapon, Sql.varchar(30)).notNull() + .column(columnDate, Sql.LONG).notNull() + .column(columnSessionID, Sql.LONG).notNull() + .foreignKey(columnKillerUserID, usersTable.getTableName(), usersTable.getColumnID()) + .foreignKey(columnVictimUserID, usersTable.getTableName(), usersTable.getColumnID()) + .foreignKey(columnSessionID, sessionsTable.getTableName(), sessionsTable.getColumnID()) + .toString() + ); } @Override diff --git a/Plan/src/main/java/com/djrapitops/plan/database/tables/NicknamesTable.java b/Plan/src/main/java/com/djrapitops/plan/database/tables/NicknamesTable.java index e463a2b5b..24f74ed92 100644 --- a/Plan/src/main/java/com/djrapitops/plan/database/tables/NicknamesTable.java +++ b/Plan/src/main/java/com/djrapitops/plan/database/tables/NicknamesTable.java @@ -1,6 +1,5 @@ package main.java.com.djrapitops.plan.database.tables; -import main.java.com.djrapitops.plan.Log; import main.java.com.djrapitops.plan.Plan; import main.java.com.djrapitops.plan.database.databases.SQLDB; import main.java.com.djrapitops.plan.database.sql.Sql; @@ -37,21 +36,14 @@ public class NicknamesTable extends UserIDTable { */ @Override public boolean createTable() { - UsersTable usersTable = db.getUsersTable(); - try { - execute(TableSqlParser.createTable(tableName) - .column(columnUserID, Sql.INT).notNull() - .column(columnNick, Sql.varchar(75)).notNull() - .column(columnServerID, Sql.INT).notNull() - .foreignKey(columnUserID, usersTable.getTableName(), usersTable.getColumnID()) - .foreignKey(columnServerID, serverTable.getTableName(), serverTable.getColumnID()) - .toString() - ); - return true; - } catch (SQLException ex) { - Log.toLog(this.getClass().getName(), ex); - return false; - } + return createTable(TableSqlParser.createTable(tableName) + .column(columnUserID, Sql.INT).notNull() + .column(columnNick, Sql.varchar(75)).notNull() + .column(columnServerID, Sql.INT).notNull() + .foreignKey(columnUserID, usersTable.getTableName(), usersTable.getColumnID()) + .foreignKey(columnServerID, serverTable.getTableName(), serverTable.getColumnID()) + .toString() + ); } /** diff --git a/Plan/src/main/java/com/djrapitops/plan/database/tables/SecurityTable.java b/Plan/src/main/java/com/djrapitops/plan/database/tables/SecurityTable.java index 5215aaa84..b3b879a55 100644 --- a/Plan/src/main/java/com/djrapitops/plan/database/tables/SecurityTable.java +++ b/Plan/src/main/java/com/djrapitops/plan/database/tables/SecurityTable.java @@ -34,18 +34,12 @@ public class SecurityTable extends Table { @Override public boolean createTable() { - try { - execute(TableSqlParser.createTable(tableName) - .column(columnUser, Sql.varchar(100)).notNull().unique() - .column(columnSaltedHash, Sql.varchar(100)).notNull().unique() - .column(columnPermLevel, Sql.INT).notNull() - .toString() - ); - return true; - } catch (SQLException ex) { - Log.toLog(this.getClass().getName(), ex); - return false; - } + return createTable(TableSqlParser.createTable(tableName) + .column(columnUser, Sql.varchar(100)).notNull().unique() + .column(columnSaltedHash, Sql.varchar(100)).notNull().unique() + .column(columnPermLevel, Sql.INT).notNull() + .toString() + ); } public boolean removeUser(String user) { diff --git a/Plan/src/main/java/com/djrapitops/plan/database/tables/ServerTable.java b/Plan/src/main/java/com/djrapitops/plan/database/tables/ServerTable.java index f27652f63..608b9f597 100644 --- a/Plan/src/main/java/com/djrapitops/plan/database/tables/ServerTable.java +++ b/Plan/src/main/java/com/djrapitops/plan/database/tables/ServerTable.java @@ -5,7 +5,6 @@ package main.java.com.djrapitops.plan.database.tables; import com.djrapitops.plugin.utilities.Verify; -import main.java.com.djrapitops.plan.Log; import main.java.com.djrapitops.plan.data.server.ServerInfo; import main.java.com.djrapitops.plan.database.databases.SQLDB; import main.java.com.djrapitops.plan.database.sql.*; @@ -49,20 +48,15 @@ public class ServerTable extends Table { @Override public boolean createTable() { - try { - execute(TableSqlParser.createTable(tableName) - .primaryKeyIDColumn(usingMySQL, columnServerID, Sql.INT) - .column(columnServerUUID, Sql.varchar(36)).notNull().unique() - .column(columnServerName, Sql.varchar(100)) - .column(columnWebserverAddress, Sql.varchar(100)) - .column(columnInstalled, Sql.BOOL).notNull().defaultValue(false) - .primaryKey(usingMySQL, columnServerID) - .toString()); - return true; - } catch (SQLException ex) { - Log.toLog(this.getClass().getName(), ex); - return false; - } + return createTable(TableSqlParser.createTable(tableName) + .primaryKeyIDColumn(usingMySQL, columnServerID, Sql.INT) + .column(columnServerUUID, Sql.varchar(36)).notNull().unique() + .column(columnServerName, Sql.varchar(100)) + .column(columnWebserverAddress, Sql.varchar(100)) + .column(columnInstalled, Sql.BOOL).notNull().defaultValue(false) + .primaryKey(usingMySQL, columnServerID) + .toString() + ); } public void saveCurrentServerInfo(ServerInfo info) throws SQLException { diff --git a/Plan/src/main/java/com/djrapitops/plan/database/tables/SessionsTable.java b/Plan/src/main/java/com/djrapitops/plan/database/tables/SessionsTable.java index c6737df8a..1b92e59ad 100644 --- a/Plan/src/main/java/com/djrapitops/plan/database/tables/SessionsTable.java +++ b/Plan/src/main/java/com/djrapitops/plan/database/tables/SessionsTable.java @@ -1,6 +1,5 @@ package main.java.com.djrapitops.plan.database.tables; -import main.java.com.djrapitops.plan.Log; import main.java.com.djrapitops.plan.Plan; import main.java.com.djrapitops.plan.data.Session; import main.java.com.djrapitops.plan.database.databases.SQLDB; @@ -45,28 +44,19 @@ public class SessionsTable extends UserIDTable { */ @Override public boolean createTable() { - try { - String serverTableName = serverTable.getTableName(); - String serverTableID = serverTable.getColumnID(); - String sql = TableSqlParser.createTable(this.tableName) - .primaryKeyIDColumn(usingMySQL, columnID, Sql.LONG) - .column(columnUserID, Sql.INT).notNull() - .column(columnServerID, Sql.INT).notNull() - .column(columnSessionStart, Sql.LONG).notNull() - .column(columnSessionEnd, Sql.LONG).notNull() - .column(columnMobKills, Sql.INT).notNull() - .column(columnDeaths, Sql.INT).notNull() - .foreignKey(columnUserID, usersTable.getTableName(), usersTable.getColumnID()) - .foreignKey(columnServerID, serverTableName, serverTableID) - .primaryKey(usingMySQL, columnID) - .toString(); - System.out.println(sql); - execute(sql); - return true; - } catch (SQLException ex) { - Log.toLog(this.getClass().getName(), ex); - return false; - } + return createTable(TableSqlParser.createTable(this.tableName) + .primaryKeyIDColumn(usingMySQL, columnID, Sql.LONG) + .column(columnUserID, Sql.INT).notNull() + .column(columnServerID, Sql.INT).notNull() + .column(columnSessionStart, Sql.LONG).notNull() + .column(columnSessionEnd, Sql.LONG).notNull() + .column(columnMobKills, Sql.INT).notNull() + .column(columnDeaths, Sql.INT).notNull() + .foreignKey(columnUserID, usersTable.getTableName(), usersTable.getColumnID()) + .foreignKey(columnServerID, serverTable.getTableName(), serverTable.getColumnID()) + .primaryKey(usingMySQL, columnID) + .toString() + ); } /** diff --git a/Plan/src/main/java/com/djrapitops/plan/database/tables/TPSTable.java b/Plan/src/main/java/com/djrapitops/plan/database/tables/TPSTable.java index 23a9757e4..b8fb4c8ab 100644 --- a/Plan/src/main/java/com/djrapitops/plan/database/tables/TPSTable.java +++ b/Plan/src/main/java/com/djrapitops/plan/database/tables/TPSTable.java @@ -51,22 +51,16 @@ public class TPSTable extends Table { @Override public boolean createTable() { - try { - execute(TableSqlParser.createTable(tableName) - .column(columnDate, Sql.LONG).notNull() - .column(columnTPS, Sql.DOUBLE).notNull() - .column(columnPlayers, Sql.INT).notNull() - .column(columnCPUUsage, Sql.DOUBLE).notNull() - .column(columnRAMUsage, Sql.LONG).notNull() - .column(columnEntities, Sql.INT).notNull() - .column(columnChunksLoaded, Sql.INT).notNull() - .toString() - ); - return true; - } catch (SQLException ex) { - Log.toLog(this.getClass().getName(), ex); - return false; - } + return createTable(TableSqlParser.createTable(tableName) + .column(columnDate, Sql.LONG).notNull() + .column(columnTPS, Sql.DOUBLE).notNull() + .column(columnPlayers, Sql.INT).notNull() + .column(columnCPUUsage, Sql.DOUBLE).notNull() + .column(columnRAMUsage, Sql.LONG).notNull() + .column(columnEntities, Sql.INT).notNull() + .column(columnChunksLoaded, Sql.INT).notNull() + .toString() + ); } /** diff --git a/Plan/src/main/java/com/djrapitops/plan/database/tables/Table.java b/Plan/src/main/java/com/djrapitops/plan/database/tables/Table.java index 15c185760..277378501 100644 --- a/Plan/src/main/java/com/djrapitops/plan/database/tables/Table.java +++ b/Plan/src/main/java/com/djrapitops/plan/database/tables/Table.java @@ -50,6 +50,17 @@ public abstract class Table { */ public abstract boolean createTable(); + protected boolean createTable(String sql) { + try { + execute(sql); + return true; + } catch (SQLException ex) { + Log.toLog(this.getClass().getName(), ex); + return false; + } + } + + /** * @return @throws SQLException */ diff --git a/Plan/src/main/java/com/djrapitops/plan/database/tables/UsersTable.java b/Plan/src/main/java/com/djrapitops/plan/database/tables/UsersTable.java index 111a0c162..3d94ed732 100644 --- a/Plan/src/main/java/com/djrapitops/plan/database/tables/UsersTable.java +++ b/Plan/src/main/java/com/djrapitops/plan/database/tables/UsersTable.java @@ -1,7 +1,6 @@ package main.java.com.djrapitops.plan.database.tables; import com.djrapitops.plugin.utilities.Verify; -import main.java.com.djrapitops.plan.Log; import main.java.com.djrapitops.plan.database.databases.SQLDB; import main.java.com.djrapitops.plan.database.sql.*; @@ -37,21 +36,15 @@ public class UsersTable extends UserIDTable { */ @Override public boolean createTable() { - try { - execute(TableSqlParser.createTable(tableName) - .primaryKeyIDColumn(usingMySQL, columnID, Sql.INT) - .column(columnUUID, Sql.varchar(36)).notNull().unique() - .column(columnRegistered, Sql.LONG).notNull() - .column(columnName, Sql.varchar(16)).notNull() - .column(columnTimesKicked, Sql.INT).notNull().defaultValue("0") - .primaryKey(usingMySQL, columnID) - .toString() - ); - return true; - } catch (SQLException ex) { - Log.toLog(this.getClass().getName(), ex); - return false; - } + return createTable(TableSqlParser.createTable(tableName) + .primaryKeyIDColumn(usingMySQL, columnID, Sql.INT) + .column(columnUUID, Sql.varchar(36)).notNull().unique() + .column(columnRegistered, Sql.LONG).notNull() + .column(columnName, Sql.varchar(16)).notNull() + .column(columnTimesKicked, Sql.INT).notNull().defaultValue("0") + .primaryKey(usingMySQL, columnID) + .toString() + ); } /** diff --git a/Plan/src/main/java/com/djrapitops/plan/database/tables/VersionTable.java b/Plan/src/main/java/com/djrapitops/plan/database/tables/VersionTable.java index c726a5781..1e478c2a3 100644 --- a/Plan/src/main/java/com/djrapitops/plan/database/tables/VersionTable.java +++ b/Plan/src/main/java/com/djrapitops/plan/database/tables/VersionTable.java @@ -27,16 +27,10 @@ public class VersionTable extends Table { */ @Override public boolean createTable() { - try { - execute(TableSqlParser.createTable(tableName) - .column("version", Sql.INT).notNull() - .toString() - ); - return true; - } catch (SQLException ex) { - Log.toLog(this.getClass().getName(), ex); - return false; - } + return createTable(TableSqlParser.createTable(tableName) + .column("version", Sql.INT).notNull() + .toString() + ); } /** diff --git a/Plan/src/main/java/com/djrapitops/plan/database/tables/WorldTable.java b/Plan/src/main/java/com/djrapitops/plan/database/tables/WorldTable.java index 11bcf44ba..04ff93e06 100644 --- a/Plan/src/main/java/com/djrapitops/plan/database/tables/WorldTable.java +++ b/Plan/src/main/java/com/djrapitops/plan/database/tables/WorldTable.java @@ -1,7 +1,6 @@ package main.java.com.djrapitops.plan.database.tables; import com.djrapitops.plugin.utilities.Verify; -import main.java.com.djrapitops.plan.Log; import main.java.com.djrapitops.plan.database.databases.SQLDB; import main.java.com.djrapitops.plan.database.sql.Sql; import main.java.com.djrapitops.plan.database.sql.TableSqlParser; @@ -42,18 +41,12 @@ public class WorldTable extends Table { @Override public boolean createTable() { - try { - execute(TableSqlParser.createTable(tableName) - .primaryKeyIDColumn(usingMySQL, columnWorldId, Sql.INT) - .column(columnWorldName, Sql.varchar(100)).notNull() - .primaryKey(usingMySQL, columnWorldId) - .toString() - ); - return true; - } catch (SQLException ex) { - Log.toLog(this.getClass().getName(), ex); - return false; - } + return createTable(TableSqlParser.createTable(tableName) + .primaryKeyIDColumn(usingMySQL, columnWorldId, Sql.INT) + .column(columnWorldName, Sql.varchar(100)).notNull() + .primaryKey(usingMySQL, columnWorldId) + .toString() + ); } /** diff --git a/Plan/src/main/java/com/djrapitops/plan/database/tables/WorldTimesTable.java b/Plan/src/main/java/com/djrapitops/plan/database/tables/WorldTimesTable.java index d603a5692..f4337e425 100644 --- a/Plan/src/main/java/com/djrapitops/plan/database/tables/WorldTimesTable.java +++ b/Plan/src/main/java/com/djrapitops/plan/database/tables/WorldTimesTable.java @@ -1,7 +1,6 @@ package main.java.com.djrapitops.plan.database.tables; import com.djrapitops.plugin.utilities.Verify; -import main.java.com.djrapitops.plan.Log; import main.java.com.djrapitops.plan.data.Session; import main.java.com.djrapitops.plan.data.time.GMTimes; import main.java.com.djrapitops.plan.data.time.WorldTimes; @@ -48,25 +47,19 @@ public class WorldTimesTable extends UserIDTable { @Override public boolean createTable() { - try { - execute(TableSqlParser.createTable(tableName) - .column(columnUserID, Sql.INT).notNull() - .column(columnWorldId, Sql.INT).notNull() - .column(columnSessionID, Sql.LONG).notNull() - .column(columnSurvival, Sql.LONG).notNull().defaultValue("0") - .column(columnCreative, Sql.LONG).notNull().defaultValue("0") - .column(columnAdventure, Sql.LONG).notNull().defaultValue("0") - .column(columnSpectator, Sql.LONG).notNull().defaultValue("0") - .foreignKey(columnUserID, usersTable.getTableName(), usersTable.getColumnID()) - .foreignKey(columnWorldId, worldTable.getTableName(), worldTable.getColumnID()) - .foreignKey(columnSessionID, sessionsTable.getTableName(), sessionsTable.getColumnID()) - .toString() - ); - return true; - } catch (SQLException ex) { - Log.toLog(this.getClass().getName(), ex); - return false; - } + return createTable(TableSqlParser.createTable(tableName) + .column(columnUserID, Sql.INT).notNull() + .column(columnWorldId, Sql.INT).notNull() + .column(columnSessionID, Sql.LONG).notNull() + .column(columnSurvival, Sql.LONG).notNull().defaultValue("0") + .column(columnCreative, Sql.LONG).notNull().defaultValue("0") + .column(columnAdventure, Sql.LONG).notNull().defaultValue("0") + .column(columnSpectator, Sql.LONG).notNull().defaultValue("0") + .foreignKey(columnUserID, usersTable.getTableName(), usersTable.getColumnID()) + .foreignKey(columnWorldId, worldTable.getTableName(), worldTable.getColumnID()) + .foreignKey(columnSessionID, sessionsTable.getTableName(), sessionsTable.getColumnID()) + .toString() + ); } public void saveWorldTimes(UUID uuid, long sessionID, WorldTimes worldTimes) throws SQLException { From 5ee7b9de35399b02aa3854c1e97255f9e77486f0 Mon Sep 17 00:00:00 2001 From: Rsl1122 Date: Wed, 23 Aug 2017 14:09:58 +0300 Subject: [PATCH 10/11] Cleaned up TPSTable column variables --- .../plan/database/tables/TPSTable.java | 27 +++++++------------ .../plan/database/tables/UserInfoTable.java | 12 ++++++++- 2 files changed, 21 insertions(+), 18 deletions(-) diff --git a/Plan/src/main/java/com/djrapitops/plan/database/tables/TPSTable.java b/Plan/src/main/java/com/djrapitops/plan/database/tables/TPSTable.java index b8fb4c8ab..9a0e49bc9 100644 --- a/Plan/src/main/java/com/djrapitops/plan/database/tables/TPSTable.java +++ b/Plan/src/main/java/com/djrapitops/plan/database/tables/TPSTable.java @@ -5,6 +5,7 @@ import main.java.com.djrapitops.plan.Log; import main.java.com.djrapitops.plan.data.TPS; import main.java.com.djrapitops.plan.database.DBUtils; import main.java.com.djrapitops.plan.database.databases.SQLDB; +import main.java.com.djrapitops.plan.database.sql.Select; 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.Benchmark; @@ -24,14 +25,14 @@ import java.util.List; */ public class TPSTable extends Table { - private final String columnServerID; //TODO - private final String columnDate; - private final String columnTPS; - private final String columnPlayers; - private final String columnCPUUsage; - private final String columnRAMUsage; - private final String columnEntities; - private final String columnChunksLoaded; + private final String columnServerID = "server_id"; //TODO + private final String columnDate = "date"; + private final String columnTPS = "tps"; + private final String columnPlayers = "players_online"; + private final String columnCPUUsage = "cpu_usage"; + private final String columnRAMUsage = "ram_usage"; + private final String columnEntities = "entities"; + private final String columnChunksLoaded = "chunks_loaded"; /** * @param db @@ -39,14 +40,6 @@ public class TPSTable extends Table { */ public TPSTable(SQLDB db, boolean usingMySQL) { super("plan_tps", db, usingMySQL); - columnServerID = "server_id"; - columnDate = "date"; - columnTPS = "tps"; - columnPlayers = "players_online"; - columnCPUUsage = "cpu_usage"; - columnRAMUsage = "ram_usage"; - columnEntities = "entities"; - columnChunksLoaded = "chunks_loaded"; } @Override @@ -72,7 +65,7 @@ public class TPSTable extends Table { PreparedStatement statement = null; ResultSet set = null; try { - statement = prepareStatement("SELECT * FROM " + tableName); + statement = prepareStatement(Select.all(tableName).toString()); set = statement.executeQuery(); while (set.next()) { long date = set.getLong(columnDate); diff --git a/Plan/src/main/java/com/djrapitops/plan/database/tables/UserInfoTable.java b/Plan/src/main/java/com/djrapitops/plan/database/tables/UserInfoTable.java index 4a2360a27..9dbe3b808 100644 --- a/Plan/src/main/java/com/djrapitops/plan/database/tables/UserInfoTable.java +++ b/Plan/src/main/java/com/djrapitops/plan/database/tables/UserInfoTable.java @@ -5,6 +5,8 @@ package main.java.com.djrapitops.plan.database.tables; import main.java.com.djrapitops.plan.database.databases.SQLDB; +import main.java.com.djrapitops.plan.database.sql.Sql; +import main.java.com.djrapitops.plan.database.sql.TableSqlParser; /** * //TODO Class Javadoc Comment @@ -29,6 +31,14 @@ public class UserInfoTable extends UserIDTable { @Override public boolean createTable() { - return false; + return createTable(TableSqlParser.createTable(tableName) + .column(columnUserID, Sql.INT).notNull() + .column(columnRegistered, Sql.LONG).notNull() + .column(columnOP, Sql.BOOL).notNull().defaultValue(false) + .column(columnBanned, Sql.BOOL).notNull().defaultValue(false) + .column(columnServerID, Sql.INT).notNull() + .foreignKey(columnUserID, usersTable.getTableName(), usersTable.getColumnID()) + .foreignKey(columnServerID, serverTable.getTableName(), serverTable.getColumnID()) + .toString()); } } \ No newline at end of file From fe3a4fdbf1b1a31e091c051398cdee90e432c542 Mon Sep 17 00:00:00 2001 From: Rsl1122 Date: Wed, 23 Aug 2017 14:25:54 +0300 Subject: [PATCH 11/11] Fix Compile issues --- .../plan/command/commands/manage/ManageRemoveCommand.java | 2 +- .../java/com/djrapitops/plan/data/cache/SessionCacheTest.java | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/Plan/src/main/java/com/djrapitops/plan/command/commands/manage/ManageRemoveCommand.java b/Plan/src/main/java/com/djrapitops/plan/command/commands/manage/ManageRemoveCommand.java index 9b2e08060..2d645f47d 100644 --- a/Plan/src/main/java/com/djrapitops/plan/command/commands/manage/ManageRemoveCommand.java +++ b/Plan/src/main/java/com/djrapitops/plan/command/commands/manage/ManageRemoveCommand.java @@ -85,7 +85,7 @@ public class ManageRemoveCommand extends SubCommand { sender.sendMessage(Locale.get(Msg.MANAGE_INFO_START).parse()); try { // TODO Clear active session of user & start new one - if (plugin.getDB().removeAccount(uuid.toString())) { + if (plugin.getDB().removeAccount(uuid)) { sender.sendMessage(Locale.get(Msg.MANAGE_INFO_REMOVE_SUCCESS).parse(playerName, plugin.getDB().getConfigName())); } else { sender.sendMessage(Locale.get(Msg.MANAGE_INFO_FAIL).toString()); diff --git a/Plan/test/test/java/main/java/com/djrapitops/plan/data/cache/SessionCacheTest.java b/Plan/test/test/java/main/java/com/djrapitops/plan/data/cache/SessionCacheTest.java index 318408561..b39781682 100644 --- a/Plan/test/test/java/main/java/com/djrapitops/plan/data/cache/SessionCacheTest.java +++ b/Plan/test/test/java/main/java/com/djrapitops/plan/data/cache/SessionCacheTest.java @@ -32,7 +32,6 @@ public class SessionCacheTest { @Before public void setUp() throws Exception { TestInit.init(); - test = new SessionCache(); } @Test