From 4eb8c6476a018cc8e854bf0089d741d1dea1c6e4 Mon Sep 17 00:00:00 2001 From: Rsl1122 Date: Thu, 14 Feb 2019 22:27:24 +0200 Subject: [PATCH] Bunch of code smells: - Sorted out SessionQueries ORDER BY usefulness with a TreeMap Level Critical (SonarCloud): - Smell: Duplicated String literals in the Queries: " FROM ", " WHERE ", " AND ", etc - Smell: GeoInfoStoreTransaction static value assignment - Smell: Patch - Duplicate switch case - Smell: DataCache - Empty constructor without comment --- .../importing/importers/BukkitImporter.java | 1 + .../queries/PerServerAggregateQueries.java | 32 ++++--- .../db/access/queries/PlayerFetchQueries.java | 12 ++- .../queries/ServerAggregateQueries.java | 32 ++++--- .../queries/objects/NicknameQueries.java | 37 ++++---- .../queries/objects/SessionQueries.java | 29 ++++-- .../queries/objects/UserInfoQueries.java | 18 ++-- .../queries/objects/WorldTimesQueries.java | 93 +++++++------------ .../events/GeoInfoStoreTransaction.java | 16 ++-- .../plan/db/patches/IPAnonPatch.java | 7 +- .../com/djrapitops/plan/db/patches/Patch.java | 10 +- .../plan/db/patches/Version10Patch.java | 26 +++--- .../plan/db/patches/WorldsServerIDPatch.java | 12 ++- .../djrapitops/plan/db/sql/parsing/Sql.java | 6 ++ .../plan/db/sql/tables/SessionsTable.java | 52 ++++++----- .../plan/system/cache/DataCache.java | 2 +- .../databases/sql/operation/SQLSaveOps.java | 1 + 17 files changed, 201 insertions(+), 185 deletions(-) diff --git a/Plan/bukkit/src/main/java/com/djrapitops/plan/system/importing/importers/BukkitImporter.java b/Plan/bukkit/src/main/java/com/djrapitops/plan/system/importing/importers/BukkitImporter.java index 8692b0191..25e038d2b 100644 --- a/Plan/bukkit/src/main/java/com/djrapitops/plan/system/importing/importers/BukkitImporter.java +++ b/Plan/bukkit/src/main/java/com/djrapitops/plan/system/importing/importers/BukkitImporter.java @@ -167,6 +167,7 @@ public abstract class BukkitImporter implements Importer { SaveOperations save = dbSystem.getDatabase().save(); + // TODO Replace with a transaction save.insertUsers(users); submitTo(service, () -> save.insertSessions(ImmutableMap.of(serverUUID.get(), sessions), true)); submitTo(service, () -> save.kickAmount(timesKicked)); diff --git a/Plan/common/src/main/java/com/djrapitops/plan/db/access/queries/PerServerAggregateQueries.java b/Plan/common/src/main/java/com/djrapitops/plan/db/access/queries/PerServerAggregateQueries.java index c4caa0dc0..185cc67a2 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/db/access/queries/PerServerAggregateQueries.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/db/access/queries/PerServerAggregateQueries.java @@ -28,6 +28,8 @@ import java.util.HashMap; import java.util.Map; import java.util.UUID; +import static com.djrapitops.plan.db.sql.parsing.Sql.*; + /** * Static method class for queries that count together counts for a player on a per server basis. *

@@ -51,9 +53,9 @@ public class PerServerAggregateQueries { public static Query> lastSeenOnServers(UUID playerUUID) { String sql = "SELECT MAX(" + SessionsTable.SESSION_END + ") as last_seen, " + SessionsTable.SERVER_UUID + - " FROM " + SessionsTable.TABLE_NAME + - " WHERE " + SessionsTable.USER_UUID + "=?" + - " GROUP BY " + SessionsTable.SERVER_UUID; + FROM + SessionsTable.TABLE_NAME + + WHERE + SessionsTable.USER_UUID + "=?" + + GROUP_BY + SessionsTable.SERVER_UUID; return new QueryStatement>(sql) { @Override public void prepare(PreparedStatement statement) throws SQLException { @@ -80,9 +82,9 @@ public class PerServerAggregateQueries { * @return Map: Server UUID - Player kill count */ public static Query> playerKillCountOnServers(UUID playerUUID) { - String sql = "SELECT COUNT(1) as kill_count, " + KillsTable.SERVER_UUID + " FROM " + KillsTable.TABLE_NAME + - " WHERE " + KillsTable.KILLER_UUID + "=?" + - " GROUP BY " + KillsTable.SERVER_UUID; + String sql = "SELECT COUNT(1) as kill_count, " + KillsTable.SERVER_UUID + FROM + KillsTable.TABLE_NAME + + WHERE + KillsTable.KILLER_UUID + "=?" + + GROUP_BY + KillsTable.SERVER_UUID; return new QueryStatement>(sql) { @Override public void prepare(PreparedStatement statement) throws SQLException { @@ -110,9 +112,9 @@ public class PerServerAggregateQueries { */ public static Query> mobKillCountOnServers(UUID playerUUID) { String sql = "SELECT SUM(" + SessionsTable.MOB_KILLS + ") as kill_count, " + - SessionsTable.SERVER_UUID + " FROM " + SessionsTable.TABLE_NAME + - " WHERE " + SessionsTable.USER_UUID + "=?" + - " GROUP BY " + SessionsTable.SERVER_UUID; + SessionsTable.SERVER_UUID + FROM + SessionsTable.TABLE_NAME + + WHERE + SessionsTable.USER_UUID + "=?" + + GROUP_BY + SessionsTable.SERVER_UUID; return new QueryStatement>(sql) { @Override public void prepare(PreparedStatement statement) throws SQLException { @@ -139,9 +141,9 @@ public class PerServerAggregateQueries { * @return Map: Server UUID - Mob kill count */ public static Query> playerDeathCountOnServers(UUID playerUUID) { - String sql = "SELECT COUNT(1) as death_count, " + KillsTable.SERVER_UUID + " FROM " + KillsTable.TABLE_NAME + - " WHERE " + KillsTable.VICTIM_UUID + "=?" + - " GROUP BY " + KillsTable.SERVER_UUID; + String sql = "SELECT COUNT(1) as death_count, " + KillsTable.SERVER_UUID + FROM + KillsTable.TABLE_NAME + + WHERE + KillsTable.VICTIM_UUID + "=?" + + GROUP_BY + KillsTable.SERVER_UUID; return new QueryStatement>(sql) { @Override public void prepare(PreparedStatement statement) throws SQLException { @@ -163,9 +165,9 @@ public class PerServerAggregateQueries { public static Query> totalDeathCountOnServers(UUID playerUUID) { String sql = "SELECT SUM(" + SessionsTable.DEATHS + ") as death_count, " + - SessionsTable.SERVER_UUID + " FROM " + SessionsTable.TABLE_NAME + - " WHERE " + SessionsTable.USER_UUID + "=?" + - " GROUP BY " + SessionsTable.SERVER_UUID; + SessionsTable.SERVER_UUID + FROM + SessionsTable.TABLE_NAME + + WHERE + SessionsTable.USER_UUID + "=?" + + GROUP_BY + SessionsTable.SERVER_UUID; return new QueryStatement>(sql) { @Override public void prepare(PreparedStatement statement) throws SQLException { diff --git a/Plan/common/src/main/java/com/djrapitops/plan/db/access/queries/PlayerFetchQueries.java b/Plan/common/src/main/java/com/djrapitops/plan/db/access/queries/PlayerFetchQueries.java index dda3cf81a..95e09b5ab 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/db/access/queries/PlayerFetchQueries.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/db/access/queries/PlayerFetchQueries.java @@ -28,6 +28,8 @@ import java.sql.SQLException; import java.util.Optional; import java.util.UUID; +import static com.djrapitops.plan.db.sql.parsing.Sql.*; + /** * Static method class for queries that return information related to a single player. * @@ -47,8 +49,8 @@ public class PlayerFetchQueries { */ public static Query> playerUserName(UUID playerUUID) { String sql = "SELECT " + UsersTable.USER_NAME + - " FROM " + UsersTable.TABLE_NAME + - " WHERE " + UsersTable.USER_UUID + "=?"; + FROM + UsersTable.TABLE_NAME + + WHERE + UsersTable.USER_UUID + "=?"; return new QueryStatement>(sql) { @Override public void prepare(PreparedStatement statement) throws SQLException { @@ -73,7 +75,7 @@ public class PlayerFetchQueries { */ public static Query isPlayerRegistered(UUID playerUUID) { String sql = "SELECT COUNT(1) as c FROM " + UsersTable.TABLE_NAME + - " WHERE " + UsersTable.USER_UUID + "=?"; + WHERE + UsersTable.USER_UUID + "=?"; return new HasMoreThanZeroQueryStatement(sql) { @Override public void prepare(PreparedStatement statement) throws SQLException { @@ -91,8 +93,8 @@ public class PlayerFetchQueries { */ public static Query isPlayerRegisteredOnServer(UUID playerUUID, UUID serverUUID) { String sql = "SELECT COUNT(1) as c FROM " + UserInfoTable.TABLE_NAME + - " WHERE " + UserInfoTable.USER_UUID + "=?" + - " AND " + UserInfoTable.SERVER_UUID + "=?"; + WHERE + UserInfoTable.USER_UUID + "=?" + + AND + UserInfoTable.SERVER_UUID + "=?"; return new HasMoreThanZeroQueryStatement(sql) { @Override public void prepare(PreparedStatement statement) throws SQLException { diff --git a/Plan/common/src/main/java/com/djrapitops/plan/db/access/queries/ServerAggregateQueries.java b/Plan/common/src/main/java/com/djrapitops/plan/db/access/queries/ServerAggregateQueries.java index 1f5ae5741..b8e5df884 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/db/access/queries/ServerAggregateQueries.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/db/access/queries/ServerAggregateQueries.java @@ -28,6 +28,8 @@ import java.util.HashMap; import java.util.Map; import java.util.UUID; +import static com.djrapitops.plan.db.sql.parsing.Sql.*; + /** * Static method class for queries that count how many entries of particular kinds there are for a server. * @@ -62,7 +64,7 @@ public class ServerAggregateQueries { */ public static Query serverUserCount(UUID serverUUID) { String sql = "SELECT COUNT(1) as c FROM " + UserInfoTable.TABLE_NAME + - " WHERE " + UserInfoTable.SERVER_UUID + "=?"; + WHERE + UserInfoTable.SERVER_UUID + "=?"; return new QueryStatement(sql) { @Override public void prepare(PreparedStatement statement) throws SQLException { @@ -85,9 +87,9 @@ public class ServerAggregateQueries { * @return Map: Server UUID - Count of users registered to that server */ public static Query> serverUserCounts() { - String sql = "SELECT COUNT(1) as c, " + UserInfoTable.SERVER_UUID + " FROM " + UserInfoTable.TABLE_NAME + - " WHERE " + UserInfoTable.SERVER_UUID + "=?" + - " GROUP BY " + UserInfoTable.SERVER_UUID; + String sql = "SELECT COUNT(1) as c, " + UserInfoTable.SERVER_UUID + FROM + UserInfoTable.TABLE_NAME + + WHERE + UserInfoTable.SERVER_UUID + "=?" + + GROUP_BY + UserInfoTable.SERVER_UUID; return new QueryAllStatement>(sql, 100) { @Override public Map processResults(ResultSet set) throws SQLException { @@ -109,8 +111,8 @@ public class ServerAggregateQueries { * @return Map: Lowercase used command - Count of use times. */ public static Query> commandUsageCounts(UUID serverUUID) { - String sql = "SELECT " + CommandUseTable.COMMAND + ", " + CommandUseTable.TIMES_USED + " FROM " + CommandUseTable.TABLE_NAME + - " WHERE " + CommandUseTable.SERVER_ID + "=" + ServerTable.STATEMENT_SELECT_SERVER_ID; + String sql = SELECT + CommandUseTable.COMMAND + ", " + CommandUseTable.TIMES_USED + FROM + CommandUseTable.TABLE_NAME + + WHERE + CommandUseTable.SERVER_ID + "=" + ServerTable.STATEMENT_SELECT_SERVER_ID; return new QueryStatement>(sql, 5000) { @Override @@ -132,21 +134,21 @@ public class ServerAggregateQueries { } public static Query> networkGeolocationCounts() { - String subQuery1 = "SELECT " + + String subQuery1 = SELECT + GeoInfoTable.USER_UUID + ", " + GeoInfoTable.GEOLOCATION + ", " + GeoInfoTable.LAST_USED + - " FROM " + GeoInfoTable.TABLE_NAME; - String subQuery2 = "SELECT " + + FROM + GeoInfoTable.TABLE_NAME; + String subQuery2 = SELECT + GeoInfoTable.USER_UUID + ", " + "MAX(" + GeoInfoTable.LAST_USED + ") as m" + - " FROM " + GeoInfoTable.TABLE_NAME + - " GROUP BY " + GeoInfoTable.USER_UUID; - String sql = "SELECT " + GeoInfoTable.GEOLOCATION + ", COUNT(1) as c FROM (" + + FROM + GeoInfoTable.TABLE_NAME + + GROUP_BY + GeoInfoTable.USER_UUID; + String sql = SELECT + GeoInfoTable.GEOLOCATION + ", COUNT(1) as c FROM (" + "(" + subQuery1 + ") AS q1" + - " INNER JOIN (" + subQuery2 + ") AS q2 ON q1.uuid = q2.uuid)" + - " WHERE " + GeoInfoTable.LAST_USED + "=m" + - " GROUP BY " + GeoInfoTable.GEOLOCATION; + " INNER JOIN (" + subQuery2 + ") AS q2 ON q1.uuid = q2.uuid)" + + WHERE + GeoInfoTable.LAST_USED + "=m" + + GROUP_BY + GeoInfoTable.GEOLOCATION; return new QueryAllStatement>(sql) { @Override diff --git a/Plan/common/src/main/java/com/djrapitops/plan/db/access/queries/objects/NicknameQueries.java b/Plan/common/src/main/java/com/djrapitops/plan/db/access/queries/objects/NicknameQueries.java index a79c066c0..4c635c55e 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/db/access/queries/objects/NicknameQueries.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/db/access/queries/objects/NicknameQueries.java @@ -27,6 +27,8 @@ import java.sql.ResultSet; import java.sql.SQLException; import java.util.*; +import static com.djrapitops.plan.db.sql.parsing.Sql.*; + /** * Queries for {@link com.djrapitops.plan.data.store.objects.Nickname} objects. * @@ -44,12 +46,12 @@ public class NicknameQueries { * @return Multimap: Server UUID - (Player UUID - List of nicknames) */ public static Query>>> fetchAllNicknameData() { - String sql = "SELECT " + + String sql = SELECT + NicknamesTable.NICKNAME + ", " + NicknamesTable.LAST_USED + ", " + NicknamesTable.USER_UUID + ", " + NicknamesTable.SERVER_UUID + - " FROM " + NicknamesTable.TABLE_NAME; + FROM + NicknamesTable.TABLE_NAME; return new QueryAllStatement>>>(sql, 5000) { @Override @@ -78,14 +80,15 @@ public class NicknameQueries { public static Query> fetchLastSeenNicknameOfPlayer(UUID playerUUID, UUID serverUUID) { String subQuery = "SELECT MAX(" + NicknamesTable.LAST_USED + ") FROM " + NicknamesTable.TABLE_NAME + - " WHERE " + NicknamesTable.USER_UUID + "=?" + - " AND " + NicknamesTable.SERVER_UUID + "=?" + - " GROUP BY " + NicknamesTable.USER_UUID; - String sql = "SELECT " + NicknamesTable.LAST_USED + ", " + - NicknamesTable.NICKNAME + " FROM " + NicknamesTable.TABLE_NAME + - " WHERE " + NicknamesTable.USER_UUID + "=?" + - " AND " + NicknamesTable.SERVER_UUID + "=?" + - " AND " + NicknamesTable.LAST_USED + "=(" + subQuery + ")"; + WHERE + NicknamesTable.USER_UUID + "=?" + + AND + NicknamesTable.SERVER_UUID + "=?" + + GROUP_BY + NicknamesTable.USER_UUID; + String sql = SELECT + + NicknamesTable.LAST_USED + ", " + NicknamesTable.NICKNAME + + FROM + NicknamesTable.TABLE_NAME + + WHERE + NicknamesTable.USER_UUID + "=?" + + AND + NicknamesTable.SERVER_UUID + "=?" + + AND + NicknamesTable.LAST_USED + "=(" + subQuery + ")"; return new QueryStatement>(sql) { @Override public void prepare(PreparedStatement statement) throws SQLException { @@ -110,12 +113,12 @@ public class NicknameQueries { } public static Query> fetchNicknameDataOfPlayer(UUID playerUUID) { - String sql = "SELECT " + + String sql = SELECT + NicknamesTable.NICKNAME + ", " + NicknamesTable.LAST_USED + ", " + NicknamesTable.SERVER_UUID + - " FROM " + NicknamesTable.TABLE_NAME + - " WHERE (" + NicknamesTable.USER_UUID + "=?)"; + FROM + NicknamesTable.TABLE_NAME + + WHERE + NicknamesTable.USER_UUID + "=?"; return new QueryStatement>(sql, 5000) { @@ -143,12 +146,12 @@ public class NicknameQueries { * @return Map: Player UUID - List of nicknames. */ public static Query>> fetchAllNicknameDataByPlayerUUIDs() { - String sql = "SELECT " + + String sql = SELECT + NicknamesTable.NICKNAME + ", " + NicknamesTable.LAST_USED + ", " + NicknamesTable.USER_UUID + ", " + NicknamesTable.SERVER_UUID + - " FROM " + NicknamesTable.TABLE_NAME; + FROM + NicknamesTable.TABLE_NAME; return new QueryAllStatement>>(sql, 5000) { @Override public Map> processResults(ResultSet set) throws SQLException { @@ -173,12 +176,12 @@ public class NicknameQueries { * @return Map: Player UUID - List of Nicknames on the server. */ public static Query>> fetchNicknameDataOfServer(UUID serverUUID) { - String sql = "SELECT " + + String sql = SELECT + NicknamesTable.NICKNAME + ", " + NicknamesTable.LAST_USED + ", " + NicknamesTable.USER_UUID + ", " + NicknamesTable.SERVER_UUID + - " FROM " + NicknamesTable.TABLE_NAME; + FROM + NicknamesTable.TABLE_NAME; return new QueryAllStatement>>(sql, 5000) { @Override diff --git a/Plan/common/src/main/java/com/djrapitops/plan/db/access/queries/objects/SessionQueries.java b/Plan/common/src/main/java/com/djrapitops/plan/db/access/queries/objects/SessionQueries.java index 6f3b08d01..9632e4510 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/db/access/queries/objects/SessionQueries.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/db/access/queries/objects/SessionQueries.java @@ -20,6 +20,7 @@ import com.djrapitops.plan.data.container.PlayerKill; import com.djrapitops.plan.data.container.Session; import com.djrapitops.plan.data.store.keys.SessionKeys; import com.djrapitops.plan.data.store.mutators.SessionsMutator; +import com.djrapitops.plan.data.store.objects.DateHolder; import com.djrapitops.plan.data.time.GMTimes; import com.djrapitops.plan.data.time.WorldTimes; import com.djrapitops.plan.db.access.Query; @@ -34,6 +35,8 @@ import java.sql.SQLException; import java.util.*; import java.util.stream.Collectors; +import static com.djrapitops.plan.db.sql.parsing.Sql.WHERE; + /** * Queries for {@link com.djrapitops.plan.data.container.Session} objects. * @@ -69,6 +72,8 @@ public class SessionQueries { " INNER JOIN " + WorldTimesTable.TABLE_NAME + " ON " + SessionsTable.TABLE_NAME + "." + SessionsTable.ID + "=" + WorldTimesTable.TABLE_NAME + "." + WorldTimesTable.SESSION_ID + " INNER JOIN " + WorldTable.TABLE_NAME + " ON " + WorldTimesTable.TABLE_NAME + "." + WorldTimesTable.WORLD_ID + "=" + WorldTable.TABLE_NAME + "." + WorldTable.ID; + private static final String ORDER_BY_SESSION_START_DESC = " ORDER BY " + SessionsTable.SESSION_START + " DESC"; + /** * Query the database for Session data without kill, death or world data. * @@ -122,7 +127,8 @@ public class SessionQueries { * @return List of sessions */ public static Query> fetchAllSessions() { - String sql = SELECT_SESSIONS_STATEMENT + " ORDER BY " + SessionsTable.SESSION_START + " DESC"; + String sql = SELECT_SESSIONS_STATEMENT + + ORDER_BY_SESSION_START_DESC; return new QueryAllStatement>(sql, 50000) { @Override public List processResults(ResultSet set) throws SQLException { @@ -138,8 +144,9 @@ public class SessionQueries { * @return Map: Player UUID - List of sessions on the server. */ public static Query>> fetchSessionsOfServer(UUID serverUUID) { - String sql = SELECT_SESSIONS_STATEMENT + " WHERE " + SessionsTable.TABLE_NAME + "." + SessionsTable.SERVER_UUID + "=?" + - " ORDER BY " + SessionsTable.SESSION_START + " DESC"; + String sql = SELECT_SESSIONS_STATEMENT + + WHERE + SessionsTable.TABLE_NAME + "." + SessionsTable.SERVER_UUID + "=?" + + ORDER_BY_SESSION_START_DESC; return new QueryStatement>>(sql, 50000) { @Override public void prepare(PreparedStatement statement) throws SQLException { @@ -161,8 +168,9 @@ public class SessionQueries { * @return Map: Server UUID - List of sessions on the server. */ public static Query>> fetchSessionsOfPlayer(UUID playerUUID) { - String sql = SELECT_SESSIONS_STATEMENT + " WHERE " + SessionsTable.TABLE_NAME + "." + SessionsTable.USER_UUID + "=?" + - " ORDER BY " + SessionsTable.SESSION_START + " DESC"; + String sql = SELECT_SESSIONS_STATEMENT + + WHERE + SessionsTable.TABLE_NAME + "." + SessionsTable.USER_UUID + "=?" + + ORDER_BY_SESSION_START_DESC; return new QueryStatement>>(sql, 50000) { @Override public void prepare(PreparedStatement statement) throws SQLException { @@ -179,18 +187,19 @@ public class SessionQueries { private static List extractDataFromSessionSelectStatement(ResultSet set) throws SQLException { // Server UUID - Player UUID - Session Start - Session - Map>> tempSessionMap = new HashMap<>(); + Map>> tempSessionMap = new HashMap<>(); // Utilities String[] gms = GMTimes.getGMKeyArray(); - DateHolderRecentComparator dateColderRecentComparator = new DateHolderRecentComparator(); + Comparator dateColderRecentComparator = new DateHolderRecentComparator(); + Comparator longRecentComparator = (one, two) -> Long.compare(two, one); // Descending order, most recent first. while (set.next()) { UUID serverUUID = UUID.fromString(set.getString(SessionsTable.SERVER_UUID)); - Map> serverSessions = tempSessionMap.getOrDefault(serverUUID, new HashMap<>()); + Map> serverSessions = tempSessionMap.getOrDefault(serverUUID, new HashMap<>()); UUID playerUUID = UUID.fromString(set.getString(SessionsTable.USER_UUID)); - Map playerSessions = serverSessions.getOrDefault(playerUUID, new HashMap<>()); + SortedMap playerSessions = serverSessions.getOrDefault(playerUUID, new TreeMap<>(longRecentComparator)); long sessionStart = set.getLong(SessionsTable.SESSION_START); // id, uuid, serverUUID, sessionStart, sessionEnd, mobKills, deaths, afkTime @@ -236,7 +245,7 @@ public class SessionQueries { return tempSessionMap.values().stream() .map(Map::values) .flatMap(Collection::stream) - .map(Map::values) + .map(SortedMap::values) .flatMap(Collection::stream) .collect(Collectors.toList()); } diff --git a/Plan/common/src/main/java/com/djrapitops/plan/db/access/queries/objects/UserInfoQueries.java b/Plan/common/src/main/java/com/djrapitops/plan/db/access/queries/objects/UserInfoQueries.java index ee403a7e1..042ba64d4 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/db/access/queries/objects/UserInfoQueries.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/db/access/queries/objects/UserInfoQueries.java @@ -27,6 +27,8 @@ import java.sql.ResultSet; import java.sql.SQLException; import java.util.*; +import static com.djrapitops.plan.db.sql.parsing.Sql.*; + /** * Queries for {@link com.djrapitops.plan.data.container.UserInfo} objects. * @@ -46,13 +48,13 @@ public class UserInfoQueries { * @return Map: Server UUID - List of user information */ public static Query>> fetchAllUserInformation() { - String sql = "SELECT " + + String sql = SELECT + UserInfoTable.REGISTERED + ", " + UserInfoTable.BANNED + ", " + UserInfoTable.OP + ", " + UserInfoTable.USER_UUID + ", " + UserInfoTable.SERVER_UUID + - " FROM " + UserInfoTable.TABLE_NAME; + FROM + UserInfoTable.TABLE_NAME; return new QueryAllStatement>>(sql, 50000) { @Override @@ -83,13 +85,13 @@ public class UserInfoQueries { * @return List of UserInfo objects, one for each server where the player has played. */ public static Query> fetchUserInformationOfUser(UUID playerUUID) { - String sql = "SELECT " + + String sql = SELECT + UserInfoTable.TABLE_NAME + "." + UserInfoTable.REGISTERED + ", " + UserInfoTable.BANNED + ", " + UserInfoTable.OP + ", " + UserInfoTable.SERVER_UUID + - " FROM " + UserInfoTable.TABLE_NAME + - " WHERE " + UserInfoTable.TABLE_NAME + "." + UserInfoTable.USER_UUID + "=?"; + FROM + UserInfoTable.TABLE_NAME + + WHERE + UserInfoTable.TABLE_NAME + "." + UserInfoTable.USER_UUID + "=?"; return new QueryStatement>(sql) { @Override @@ -113,14 +115,14 @@ public class UserInfoQueries { } public static Query> fetchUserInformationOfServer(UUID serverUUID) { - String sql = "SELECT " + + String sql = SELECT + UserInfoTable.REGISTERED + ", " + UserInfoTable.BANNED + ", " + UserInfoTable.OP + ", " + UserInfoTable.USER_UUID + ", " + UserInfoTable.SERVER_UUID + - " FROM " + UserInfoTable.TABLE_NAME + - " WHERE " + UserInfoTable.SERVER_UUID + "=?"; + FROM + UserInfoTable.TABLE_NAME + + WHERE + UserInfoTable.SERVER_UUID + "=?"; return new QueryStatement>(sql, 1000) { @Override public void prepare(PreparedStatement statement) throws SQLException { diff --git a/Plan/common/src/main/java/com/djrapitops/plan/db/access/queries/objects/WorldTimesQueries.java b/Plan/common/src/main/java/com/djrapitops/plan/db/access/queries/objects/WorldTimesQueries.java index 862829f6e..1a124c5a0 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/db/access/queries/objects/WorldTimesQueries.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/db/access/queries/objects/WorldTimesQueries.java @@ -30,6 +30,8 @@ import java.util.HashMap; import java.util.Map; import java.util.UUID; +import static com.djrapitops.plan.db.sql.parsing.Sql.*; + /** * Queries for {@link com.djrapitops.plan.data.time.WorldTimes} objects. * @@ -37,6 +39,16 @@ import java.util.UUID; */ public class WorldTimesQueries { + private static String worldColumn = "world"; + private static final String SELECT_WORLD_TIMES_STATEMENT_START = "SELECT " + + "SUM(" + WorldTimesTable.SURVIVAL + ") as survival, " + + "SUM(" + WorldTimesTable.CREATIVE + ") as creative, " + + "SUM(" + WorldTimesTable.ADVENTURE + ") as adventure, " + + "SUM(" + WorldTimesTable.SPECTATOR + ") as spectator, " + + WorldTable.TABLE_NAME + "." + WorldTable.NAME + " as " + worldColumn + + FROM + WorldTimesTable.TABLE_NAME + + " INNER JOIN " + WorldTable.TABLE_NAME + " on " + WorldTable.TABLE_NAME + "." + WorldTable.ID + "=" + WorldTimesTable.WORLD_ID; + private WorldTimesQueries() { /* Static method class */ } @@ -48,18 +60,9 @@ public class WorldTimesQueries { * @return WorldTimes with world name - playtime ms information. */ public static Query fetchServerTotalWorldTimes(UUID serverUUID) { - String worldIDColumn = WorldTable.TABLE_NAME + "." + WorldTable.ID; - String worldNameColumn = WorldTable.TABLE_NAME + "." + WorldTable.NAME + " as world"; - String sql = "SELECT " + - "SUM(" + WorldTimesTable.SURVIVAL + ") as survival, " + - "SUM(" + WorldTimesTable.CREATIVE + ") as creative, " + - "SUM(" + WorldTimesTable.ADVENTURE + ") as adventure, " + - "SUM(" + WorldTimesTable.SPECTATOR + ") as spectator, " + - worldNameColumn + - " FROM " + WorldTimesTable.TABLE_NAME + - " INNER JOIN " + WorldTable.TABLE_NAME + " on " + worldIDColumn + "=" + WorldTimesTable.WORLD_ID + - " WHERE " + WorldTimesTable.TABLE_NAME + "." + WorldTimesTable.SERVER_UUID + "=?" + - " GROUP BY world"; + String sql = SELECT_WORLD_TIMES_STATEMENT_START + + WHERE + WorldTimesTable.TABLE_NAME + "." + WorldTimesTable.SERVER_UUID + "=?" + + GROUP_BY + worldColumn; return new QueryStatement(sql, 1000) { @Override @@ -73,14 +76,9 @@ public class WorldTimesQueries { WorldTimes worldTimes = new WorldTimes(new HashMap<>()); while (set.next()) { - String worldName = set.getString("world"); + String worldName = set.getString(worldColumn); - Map gmMap = new HashMap<>(); - gmMap.put(gms[0], set.getLong("survival")); - gmMap.put(gms[1], set.getLong("creative")); - gmMap.put(gms[2], set.getLong("adventure")); - gmMap.put(gms[3], set.getLong("spectator")); - GMTimes gmTimes = new GMTimes(gmMap); + GMTimes gmTimes = extractGMTimes(set, gms); worldTimes.setGMTimesForWorld(worldName, gmTimes); } @@ -96,18 +94,9 @@ public class WorldTimesQueries { * @return WorldTimes with world name - playtime ms information. */ public static Query fetchPlayerTotalWorldTimes(UUID playerUUID) { - String worldIDColumn = WorldTable.TABLE_NAME + "." + WorldTable.ID; - String worldNameColumn = WorldTable.TABLE_NAME + "." + WorldTable.NAME + " as world"; - String sql = "SELECT " + - "SUM(" + WorldTimesTable.SURVIVAL + ") as survival, " + - "SUM(" + WorldTimesTable.CREATIVE + ") as creative, " + - "SUM(" + WorldTimesTable.ADVENTURE + ") as adventure, " + - "SUM(" + WorldTimesTable.SPECTATOR + ") as spectator, " + - worldNameColumn + - " FROM " + WorldTimesTable.TABLE_NAME + - " INNER JOIN " + WorldTable.TABLE_NAME + " on " + worldIDColumn + "=" + WorldTimesTable.WORLD_ID + - " WHERE " + WorldTimesTable.USER_UUID + "=?" + - " GROUP BY world"; + String sql = SELECT_WORLD_TIMES_STATEMENT_START + + WHERE + WorldTimesTable.USER_UUID + "=?" + + GROUP_BY + worldColumn; return new QueryStatement(sql) { @Override @@ -121,14 +110,9 @@ public class WorldTimesQueries { WorldTimes worldTimes = new WorldTimes(new HashMap<>()); while (set.next()) { - String worldName = set.getString("world"); + String worldName = set.getString(worldColumn); - Map gmMap = new HashMap<>(); - gmMap.put(gms[0], set.getLong("survival")); - gmMap.put(gms[1], set.getLong("creative")); - gmMap.put(gms[2], set.getLong("adventure")); - gmMap.put(gms[3], set.getLong("spectator")); - GMTimes gmTimes = new GMTimes(gmMap); + GMTimes gmTimes = extractGMTimes(set, gms); worldTimes.setGMTimesForWorld(worldName, gmTimes); } @@ -144,19 +128,9 @@ public class WorldTimesQueries { * @return Map: Server UUID - WorldTimes total for the server */ public static Query> fetchPlayerWorldTimesOnServers(UUID playerUUID) { - String worldIDColumn = WorldTable.TABLE_NAME + "." + WorldTable.ID; - String worldNameColumn = WorldTable.TABLE_NAME + "." + WorldTable.NAME + " as world"; - String sql = "SELECT " + - "SUM(" + WorldTimesTable.SURVIVAL + ") as survival, " + - "SUM(" + WorldTimesTable.CREATIVE + ") as creative, " + - "SUM(" + WorldTimesTable.ADVENTURE + ") as adventure, " + - "SUM(" + WorldTimesTable.SPECTATOR + ") as spectator, " + - WorldTimesTable.TABLE_NAME + "." + WorldTimesTable.SERVER_UUID + ", " + - worldNameColumn + - " FROM " + WorldTimesTable.TABLE_NAME + - " INNER JOIN " + WorldTable.TABLE_NAME + " on " + worldIDColumn + "=" + WorldTimesTable.WORLD_ID + - " WHERE " + WorldTimesTable.TABLE_NAME + "." + WorldTimesTable.USER_UUID + "=?" + - " GROUP BY world, " + WorldTimesTable.TABLE_NAME + "." + WorldTimesTable.SERVER_UUID; + String sql = SELECT_WORLD_TIMES_STATEMENT_START + + WHERE + WorldTimesTable.TABLE_NAME + "." + WorldTimesTable.USER_UUID + "=?" + + GROUP_BY + worldColumn + ", " + WorldTimesTable.TABLE_NAME + "." + WorldTimesTable.SERVER_UUID; return new QueryStatement>(sql, 1000) { @Override @@ -172,14 +146,9 @@ public class WorldTimesQueries { while (set.next()) { UUID serverUUID = UUID.fromString(set.getString(WorldTimesTable.SERVER_UUID)); WorldTimes worldTimes = worldTimesMap.getOrDefault(serverUUID, new WorldTimes(new HashMap<>())); - String worldName = set.getString("world"); + String worldName = set.getString(worldColumn); - Map gmMap = new HashMap<>(); - gmMap.put(gms[0], set.getLong("survival")); - gmMap.put(gms[1], set.getLong("creative")); - gmMap.put(gms[2], set.getLong("adventure")); - gmMap.put(gms[3], set.getLong("spectator")); - GMTimes gmTimes = new GMTimes(gmMap); + GMTimes gmTimes = extractGMTimes(set, gms); worldTimes.setGMTimesForWorld(worldName, gmTimes); worldTimesMap.put(serverUUID, worldTimes); @@ -188,4 +157,12 @@ public class WorldTimesQueries { } }; } + + private static GMTimes extractGMTimes(ResultSet set, String[] gms) throws SQLException { + Map gmMap = new HashMap<>(); + for (String gameMode : gms) { + gmMap.put(gameMode, set.getLong(gameMode)); + } + return new GMTimes(gmMap); + } } \ No newline at end of file diff --git a/Plan/common/src/main/java/com/djrapitops/plan/db/access/transactions/events/GeoInfoStoreTransaction.java b/Plan/common/src/main/java/com/djrapitops/plan/db/access/transactions/events/GeoInfoStoreTransaction.java index 1b2aa5e89..a5a8148d2 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/db/access/transactions/events/GeoInfoStoreTransaction.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/db/access/transactions/events/GeoInfoStoreTransaction.java @@ -63,6 +63,15 @@ public class GeoInfoStoreTransaction extends Transaction { return !hasFailed; } + public static void setAsFailed() { + hasFailed = true; + } + + private GeoInfo createGeoInfo() throws NoSuchAlgorithmException { + String country = geolocationFunction.apply(ip.getHostAddress()); + return new GeoInfo(ip, country, time); + } + @Override protected void performOperations() { try { @@ -71,12 +80,7 @@ public class GeoInfoStoreTransaction extends Transaction { execute(DataStoreQueries.storeGeoInfo(playerUUID, geoInfo)); } catch (NoSuchAlgorithmException noSHA256Available) { // SHA256 not available. - hasFailed = true; + setAsFailed(); } } - - private GeoInfo createGeoInfo() throws NoSuchAlgorithmException { - String country = geolocationFunction.apply(ip.getHostAddress()); - return new GeoInfo(ip, country, time); - } } \ No newline at end of file diff --git a/Plan/common/src/main/java/com/djrapitops/plan/db/patches/IPAnonPatch.java b/Plan/common/src/main/java/com/djrapitops/plan/db/patches/IPAnonPatch.java index 4b4c007b4..6e874a9d9 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/db/patches/IPAnonPatch.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/db/patches/IPAnonPatch.java @@ -117,14 +117,15 @@ public class IPAnonPatch extends Patch { } execute(GeoInfoTable.createTableSQL(dbType)); - boolean hasUserIdColumn = hasColumn(tempTableName, "user_id"); - String identifiers = hasUserIdColumn ? "user_id" : "id, uuid"; + String userIdColumn = "user_id"; + boolean hasUserIdColumn = hasColumn(tempTableName, userIdColumn); + String identifiers = hasUserIdColumn ? userIdColumn : "id, uuid"; execute("INSERT INTO plan_ips (" + identifiers + ", ip, ip_hash, geolocation, last_used" + ") SELECT " + identifiers + ", ip, ip_hash, geolocation, MAX(last_used) FROM plan_ips_temp GROUP BY ip_hash, " + - (hasUserIdColumn ? "user_id" : "uuid") + + (hasUserIdColumn ? userIdColumn : "uuid") + ", ip, geolocation"); dropTable(tempTableName); } diff --git a/Plan/common/src/main/java/com/djrapitops/plan/db/patches/Patch.java b/Plan/common/src/main/java/com/djrapitops/plan/db/patches/Patch.java index e0142fb28..4e0fe4512 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/db/patches/Patch.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/db/patches/Patch.java @@ -33,6 +33,7 @@ public abstract class Patch extends OperationCriticalTransaction { protected final SQLDB db; protected final DBType dbType; + private static final String ALTER_TABLE = "ALTER TABLE "; public Patch(SQLDB db) { setDb(db); @@ -96,7 +97,7 @@ public abstract class Patch extends OperationCriticalTransaction { } protected void addColumn(String tableName, String columnInfo) { - execute("ALTER TABLE " + tableName + " ADD " + (dbType.supportsMySQLQueries() ? "" : "COLUMN ") + columnInfo); + execute(ALTER_TABLE + tableName + " ADD " + (dbType.supportsMySQLQueries() ? "" : "COLUMN ") + columnInfo); } protected void dropTable(String name) { @@ -110,11 +111,10 @@ public abstract class Patch extends OperationCriticalTransaction { private String getRenameTableSQL(String from, String to) { switch (dbType) { case SQLITE: - return "ALTER TABLE " + from + " RENAME TO " + to; + case H2: + return ALTER_TABLE + from + " RENAME TO " + to; case MYSQL: return "RENAME TABLE " + from + " TO " + to; - case H2: - return "ALTER TABLE " + from + " RENAME TO " + to; default: throw new IllegalArgumentException("DBType: " + dbType.getName() + " does not have rename table sql"); } @@ -129,7 +129,7 @@ public abstract class Patch extends OperationCriticalTransaction { for (MySQLSchemaQueries.ForeignKeyConstraint constraint : constraints) { // Uses information from https://stackoverflow.com/a/34574758 - execute("ALTER TABLE " + constraint.getTable() + + execute(ALTER_TABLE + constraint.getTable() + " DROP FOREIGN KEY " + constraint.getConstraintName()); } } diff --git a/Plan/common/src/main/java/com/djrapitops/plan/db/patches/Version10Patch.java b/Plan/common/src/main/java/com/djrapitops/plan/db/patches/Version10Patch.java index 4d4c56c39..9f64c1ea6 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/db/patches/Version10Patch.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/db/patches/Version10Patch.java @@ -23,6 +23,8 @@ import com.djrapitops.plan.db.sql.tables.*; import java.util.Optional; +import static com.djrapitops.plan.db.sql.parsing.Sql.FROM; + public class Version10Patch extends Patch { private Integer serverID; @@ -55,13 +57,13 @@ public class Version10Patch extends Patch { copyTPS(); - dropTable("plan_user_info"); + dropTable(UserInfoTable.TABLE_NAME); copyUsers(); - dropTable("plan_ips"); + dropTable(GeoInfoTable.TABLE_NAME); execute(GeoInfoTable.createTableSQL(dbType)); - dropTable("plan_world_times"); - dropTable("plan_worlds"); + dropTable(WorldTimesTable.TABLE_NAME); + dropTable(WorldTable.TABLE_NAME); execute(WorldTable.createTableSQL(dbType)); execute(WorldTimesTable.createTableSQL(dbType)); @@ -73,7 +75,7 @@ public class Version10Patch extends Patch { private void copyUsers() throws DBInitException { String tempTableName = "temp_users"; - renameTable("plan_users", tempTableName); + renameTable(UsersTable.TABLE_NAME, tempTableName); String tempNickTableName = "temp_nicks"; renameTable(NicknamesTable.TABLE_NAME, tempNickTableName); @@ -83,7 +85,7 @@ public class Version10Patch extends Patch { execute(UsersTable.createTableSQL(dbType)); execute(NicknamesTable.createTableSQL(dbType)); - dropTable("plan_sessions"); + dropTable(SessionsTable.TABLE_NAME); execute(SessionsTable.createTableSQL(dbType)); execute(KillsTable.createTableSQL(dbType)); @@ -92,22 +94,22 @@ public class Version10Patch extends Patch { String statement = "INSERT INTO plan_users " + "(id, uuid, registered, name)" + " SELECT id, uuid, registered, name" + - " FROM " + tempTableName; + FROM + tempTableName; execute(statement); statement = "INSERT INTO plan_user_info " + "(user_id, registered, opped, banned, server_id)" + " SELECT id, registered, opped, banned, '" + serverID + "'" + - " FROM " + tempTableName; + FROM + tempTableName; execute(statement); statement = "INSERT INTO plan_nicknames " + "(user_id, nickname, server_id)" + " SELECT user_id, nickname, '" + serverID + "'" + - " FROM " + tempNickTableName; + FROM + tempNickTableName; execute(statement); statement = "INSERT INTO plan_kills " + "(killer_id, victim_id, weapon, date, session_id)" + " SELECT killer_id, victim_id, weapon, date, '0'" + - " FROM " + tempKillsTableName; + FROM + tempKillsTableName; execute(statement); } @@ -121,7 +123,7 @@ public class Version10Patch extends Patch { String statement = "INSERT INTO plan_commandusages " + "(command, times_used, server_id)" + " SELECT command, times_used, '" + serverID + "'" + - " FROM " + tempTableName; + FROM + tempTableName; execute(statement); dropTable(tempTableName); @@ -138,7 +140,7 @@ public class Version10Patch extends Patch { String statement = "INSERT INTO plan_tps " + "(date, tps, players_online, cpu_usage, ram_usage, entities, chunks_loaded, server_id)" + " SELECT date, tps, players_online, cpu_usage, ram_usage, entities, chunks_loaded, '" + serverID + "'" + - " FROM " + tempTableName; + FROM + tempTableName; execute(statement); dropTable(tempTableName); diff --git a/Plan/common/src/main/java/com/djrapitops/plan/db/patches/WorldsServerIDPatch.java b/Plan/common/src/main/java/com/djrapitops/plan/db/patches/WorldsServerIDPatch.java index 0b0a35a33..ffce8b735 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/db/patches/WorldsServerIDPatch.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/db/patches/WorldsServerIDPatch.java @@ -33,6 +33,8 @@ import java.util.*; import java.util.function.Function; import java.util.stream.Collectors; +import static com.djrapitops.plan.db.sql.parsing.Sql.*; + public class WorldsServerIDPatch extends Patch { public WorldsServerIDPatch(SQLDB db) { @@ -51,7 +53,7 @@ public class WorldsServerIDPatch extends Patch { } private Boolean allValuesHaveServerID(String tableName, String columnName) { - String sql = "SELECT * FROM " + tableName + " WHERE " + columnName + "=? LIMIT 1"; + String sql = "SELECT *" + FROM + tableName + WHERE + columnName + "=? LIMIT 1"; return query(new QueryStatement(sql) { @Override public void prepare(PreparedStatement statement) throws SQLException { @@ -87,11 +89,11 @@ public class WorldsServerIDPatch extends Patch { String sessionServerUUIDColumn = SessionsTable.TABLE_NAME + "." + SessionsTable.SERVER_UUID; String sql = "SELECT DISTINCT " + - WorldTable.NAME + " FROM " + + WorldTable.NAME + FROM + WorldTable.TABLE_NAME + " INNER JOIN " + WorldTimesTable.TABLE_NAME + " on " + worldIDColumn + "=" + WorldTable.TABLE_NAME + "." + WorldTable.ID + " INNER JOIN " + SessionsTable.TABLE_NAME + " on " + worldSessionIDColumn + "=" + sessionIDColumn + - " WHERE " + sessionServerUUIDColumn + "=?"; + WHERE + sessionServerUUIDColumn + "=?"; return query(new QueryStatement>(sql, 1000) { @Override @@ -125,8 +127,8 @@ public class WorldsServerIDPatch extends Patch { String sql = "UPDATE " + WorldTimesTable.TABLE_NAME + " SET " + WorldTimesTable.WORLD_ID + "=?" + - " WHERE " + WorldTimesTable.WORLD_ID + "=?" + - " AND " + "server_id=?"; + WHERE + WorldTimesTable.WORLD_ID + "=?" + + AND + "server_id=?"; execute(new ExecBatchStatement(sql) { @Override public void prepare(PreparedStatement statement) throws SQLException { diff --git a/Plan/common/src/main/java/com/djrapitops/plan/db/sql/parsing/Sql.java b/Plan/common/src/main/java/com/djrapitops/plan/db/sql/parsing/Sql.java index 4139d7b86..380ecc6db 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/db/sql/parsing/Sql.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/db/sql/parsing/Sql.java @@ -22,6 +22,12 @@ public class Sql { public static final String LONG = "bigint"; public static final String BOOL = "boolean"; + public static final String SELECT = "SELECT "; + public static final String FROM = " FROM "; + public static final String WHERE = " WHERE "; + public static final String GROUP_BY = " GROUP BY "; + public static final String AND = " AND "; + private Sql() { throw new IllegalStateException("Variable Class"); } diff --git a/Plan/common/src/main/java/com/djrapitops/plan/db/sql/tables/SessionsTable.java b/Plan/common/src/main/java/com/djrapitops/plan/db/sql/tables/SessionsTable.java index e309f5711..ba930d520 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/db/sql/tables/SessionsTable.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/db/sql/tables/SessionsTable.java @@ -33,6 +33,8 @@ import java.util.HashMap; import java.util.Map; import java.util.UUID; +import static com.djrapitops.plan.db.sql.parsing.Sql.*; + /** * Table that represents plan_sessions. *

@@ -66,11 +68,11 @@ public class SessionsTable extends Table { + SERVER_UUID + ") VALUES (?, ?, ?, ?, ?, ?, ?)"; - public static final String SELECT_SESSION_ID_STATEMENT = "(SELECT " + TABLE_NAME + "." + ID + " FROM " + TABLE_NAME + - " WHERE " + TABLE_NAME + "." + USER_UUID + "=?" + - " AND " + TABLE_NAME + "." + SERVER_UUID + "=?" + - " AND " + SESSION_START + "=?" + - " AND " + SESSION_END + "=? LIMIT 1)"; + public static final String SELECT_SESSION_ID_STATEMENT = "(SELECT " + TABLE_NAME + "." + ID + FROM + TABLE_NAME + + WHERE + TABLE_NAME + "." + USER_UUID + "=?" + + AND + TABLE_NAME + "." + SERVER_UUID + "=?" + + AND + SESSION_START + "=?" + + AND + SESSION_END + "=? LIMIT 1)"; public SessionsTable(SQLDB db) { super(TABLE_NAME, db); @@ -98,12 +100,12 @@ public class SessionsTable extends Table { * @return Milliseconds played after given epoch ms on the server. 0 if player or server not found. */ public long getPlaytime(UUID uuid, UUID serverUUID, long afterDate) { - String sql = "SELECT" + - " (SUM(" + SESSION_END + ") - SUM(" + SESSION_START + ")) as playtime" + - " FROM " + tableName + - " WHERE " + SESSION_START + ">?" + - " AND " + USER_UUID + "=?" + - " AND " + SERVER_UUID + "=?"; + String sql = SELECT + + "(SUM(" + SESSION_END + ") - SUM(" + SESSION_START + ")) as playtime" + + FROM + tableName + + WHERE + SESSION_START + ">?" + + AND + USER_UUID + "=?" + + AND + SERVER_UUID + "=?"; return query(new QueryStatement(sql) { @Override @@ -131,11 +133,11 @@ public class SessionsTable extends Table { * @return Milliseconds played after given epoch ms on the server. 0 if server not found. */ public long getPlaytimeOfServer(UUID serverUUID, long afterDate) { - String sql = "SELECT" + - " (SUM(" + SESSION_END + ") - SUM(" + SESSION_START + ")) as playtime" + - " FROM " + tableName + - " WHERE " + SESSION_START + ">?" + - " AND " + SERVER_UUID + "=?"; + String sql = SELECT + + "(SUM(" + SESSION_END + ") - SUM(" + SESSION_START + ")) as playtime" + + FROM + tableName + + WHERE + SESSION_START + ">?" + + AND + SERVER_UUID + "=?"; return query(new QueryStatement(sql) { @Override @@ -163,12 +165,12 @@ public class SessionsTable extends Table { * @return How many sessions player has. 0 if player or server not found. */ public int getSessionCount(UUID uuid, UUID serverUUID, long afterDate) { - String sql = "SELECT" + - " COUNT(*) as logintimes" + - " FROM " + tableName + - " WHERE (" + SESSION_START + " >= ?)" + - " AND " + USER_UUID + "=?" + - " AND " + SERVER_UUID + "=?"; + String sql = SELECT + + "COUNT(*) as login_times" + + FROM + tableName + + WHERE + SESSION_START + " >= ?" + + AND + USER_UUID + "=?" + + AND + SERVER_UUID + "=?"; return query(new QueryStatement(sql) { @Override @@ -181,7 +183,7 @@ public class SessionsTable extends Table { @Override public Integer processResults(ResultSet set) throws SQLException { if (set.next()) { - return set.getInt("logintimes"); + return set.getInt("login_times"); } return 0; } @@ -189,10 +191,10 @@ public class SessionsTable extends Table { } public Map getIDServerIDRelation() { - String sql = "SELECT " + + String sql = SELECT + ID + ", " + "(SELECT plan_servers.id FROM plan_servers WHERE plan_servers.uuid=" + SERVER_UUID + ") as server_id" + - " FROM " + tableName; + FROM + tableName; return query(new QueryAllStatement>(sql, 10000) { @Override diff --git a/Plan/common/src/main/java/com/djrapitops/plan/system/cache/DataCache.java b/Plan/common/src/main/java/com/djrapitops/plan/system/cache/DataCache.java index 408f02e87..5f870edc7 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/system/cache/DataCache.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/system/cache/DataCache.java @@ -30,7 +30,7 @@ public class DataCache { @Inject public DataCache() { - + // Dagger requires an Inject constructor. } } \ No newline at end of file diff --git a/Plan/common/src/main/java/com/djrapitops/plan/system/database/databases/sql/operation/SQLSaveOps.java b/Plan/common/src/main/java/com/djrapitops/plan/system/database/databases/sql/operation/SQLSaveOps.java index 0c4b26020..13300d3c7 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/system/database/databases/sql/operation/SQLSaveOps.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/system/database/databases/sql/operation/SQLSaveOps.java @@ -93,6 +93,7 @@ public class SQLSaveOps extends SQLOps implements SaveOperations { @Override public void kickAmount(Map ofUsers) { + // Moved to BaseUser storage methods } @Override