From 25e98ef7b5d407cfcb6abe1731aa6ce9e680458d Mon Sep 17 00:00:00 2001 From: Risto Lahtela <24460436+Rsl1122@users.noreply.github.com> Date: Tue, 2 Feb 2021 07:51:43 +0200 Subject: [PATCH] Reproduced, tested and fixed DbOpException Error was caused by table name alias in the query Affects issues: - Fixed #1731 --- .../queries/objects/SessionQueries.java | 2 +- .../plan/storage/database/MySQLTest.java | 3 ++- .../database/queries/SessionQueriesTest.java | 21 +++++++++++++++++++ .../test/java/utilities/TestConstants.java | 2 ++ 4 files changed, 26 insertions(+), 2 deletions(-) diff --git a/Plan/common/src/main/java/com/djrapitops/plan/storage/database/queries/objects/SessionQueries.java b/Plan/common/src/main/java/com/djrapitops/plan/storage/database/queries/objects/SessionQueries.java index 541ee895f..b14e50b2d 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/storage/database/queries/objects/SessionQueries.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/storage/database/queries/objects/SessionQueries.java @@ -745,7 +745,7 @@ public class SessionQueries { public static Query> playtimePerServer(long after, long before) { String sql = SELECT + "SUM(" + SessionsTable.SESSION_END + '-' + SessionsTable.SESSION_START + ") as playtime," + - ServerTable.TABLE_NAME + '.' + ServerTable.SERVER_ID + ',' + + "s." + ServerTable.SERVER_ID + ',' + ServerTable.NAME + FROM + SessionsTable.TABLE_NAME + INNER_JOIN + ServerTable.TABLE_NAME + " s on s." + ServerTable.SERVER_UUID + '=' + SessionsTable.TABLE_NAME + '.' + SessionsTable.SERVER_UUID + diff --git a/Plan/common/src/test/java/com/djrapitops/plan/storage/database/MySQLTest.java b/Plan/common/src/test/java/com/djrapitops/plan/storage/database/MySQLTest.java index 1cc5aab49..931d39507 100644 --- a/Plan/common/src/test/java/com/djrapitops/plan/storage/database/MySQLTest.java +++ b/Plan/common/src/test/java/com/djrapitops/plan/storage/database/MySQLTest.java @@ -36,6 +36,7 @@ import org.mockito.Mockito; import org.mockito.junit.jupiter.MockitoExtension; import utilities.DBPreparer; import utilities.RandomData; +import utilities.TestConstants; import java.nio.file.Path; import java.util.Optional; @@ -106,7 +107,7 @@ class MySQLTest implements DatabaseTest, db().executeTransaction(new CreateTablesTransaction()); db().executeTransaction(new RemoveEverythingTransaction()); - db().executeTransaction(new StoreServerInformationTransaction(new Server(serverUUID(), "ServerName", ""))); + db().executeTransaction(new StoreServerInformationTransaction(new Server(serverUUID(), TestConstants.SERVER_NAME, ""))); assertEquals(serverUUID(), ((SQLDB) db()).getServerUUIDSupplier().get()); } @AfterAll diff --git a/Plan/common/src/test/java/com/djrapitops/plan/storage/database/queries/SessionQueriesTest.java b/Plan/common/src/test/java/com/djrapitops/plan/storage/database/queries/SessionQueriesTest.java index da207b2a7..1616482f3 100644 --- a/Plan/common/src/test/java/com/djrapitops/plan/storage/database/queries/SessionQueriesTest.java +++ b/Plan/common/src/test/java/com/djrapitops/plan/storage/database/queries/SessionQueriesTest.java @@ -23,16 +23,19 @@ import com.djrapitops.plan.delivery.domain.mutators.SessionsMutator; import com.djrapitops.plan.gathering.domain.PlayerKill; import com.djrapitops.plan.gathering.domain.Session; import com.djrapitops.plan.gathering.domain.WorldTimes; +import com.djrapitops.plan.identification.Server; import com.djrapitops.plan.storage.database.DatabaseTestPreparer; import com.djrapitops.plan.storage.database.queries.containers.PlayerContainerQuery; import com.djrapitops.plan.storage.database.queries.objects.KillQueries; import com.djrapitops.plan.storage.database.queries.objects.SessionQueries; import com.djrapitops.plan.storage.database.queries.objects.WorldTimesQueries; import com.djrapitops.plan.storage.database.queries.objects.playertable.ServerTablePlayersQuery; +import com.djrapitops.plan.storage.database.transactions.StoreServerInformationTransaction; import com.djrapitops.plan.storage.database.transactions.Transaction; import com.djrapitops.plan.storage.database.transactions.commands.RemoveEverythingTransaction; import com.djrapitops.plan.storage.database.transactions.events.PlayerServerRegisterTransaction; import com.djrapitops.plan.storage.database.transactions.events.WorldNameStoreTransaction; +import com.djrapitops.plan.utilities.java.Maps; import com.djrapitops.plugin.api.TimeAmount; import org.junit.jupiter.api.RepeatedTest; import org.junit.jupiter.api.Test; @@ -321,4 +324,22 @@ public interface SessionQueriesTest extends DatabaseTestPreparer { ". Playtime for reference container: " ); } + + @Test + default void serverPreferencePieValuesAreCorrect() { + prepareForSessionSave(); + UUID serverTwoUuid = TestConstants.SERVER_TWO_UUID; + executeTransactions(new StoreServerInformationTransaction(new Server(serverTwoUuid, TestConstants.SERVER_TWO_NAME, ""))); + List server1Sessions = RandomData.randomSessions(serverUUID(), worlds, playerUUID, player2UUID); + List server2Sessions = RandomData.randomSessions(serverTwoUuid, worlds, playerUUID, player2UUID); + server1Sessions.forEach(session -> execute(DataStoreQueries.storeSession(session))); + server2Sessions.forEach(session -> execute(DataStoreQueries.storeSession(session))); + + Map expected = Maps.builder(String.class, Long.class) + .put(TestConstants.SERVER_NAME, new SessionsMutator(server1Sessions).toPlaytime()) + .put(TestConstants.SERVER_TWO_NAME, new SessionsMutator(server2Sessions).toPlaytime()) + .build(); + Map results = db().query(SessionQueries.playtimePerServer(Long.MIN_VALUE, Long.MAX_VALUE)); + assertEquals(expected, results); + } } diff --git a/Plan/common/src/test/java/utilities/TestConstants.java b/Plan/common/src/test/java/utilities/TestConstants.java index 0bac6729c..91e8791a9 100644 --- a/Plan/common/src/test/java/utilities/TestConstants.java +++ b/Plan/common/src/test/java/utilities/TestConstants.java @@ -29,6 +29,8 @@ public class TestConstants { /* Static variable class */ } + public static final String SERVER_NAME = "ServerName"; + public static final String SERVER_TWO_NAME = "ServerName2"; public static final UUID SERVER_UUID = UUID.fromString("e4ec2edd-e0ed-3c58-a87d-8a9021899479"); public static final UUID SERVER_TWO_UUID = UUID.fromString("c4ec2edd-e0ed-3c58-a87d-8a9024791899"); public static final UUID PLAYER_ONE_UUID = UUID.fromString("45b0dfdb-f71d-4cf3-8c21-27c9d4c651db");