From 1e993ed0ddfa40e96d4f0f98eea0495c7d9ac412 Mon Sep 17 00:00:00 2001 From: Rsl1122 Date: Sat, 7 Apr 2018 12:32:39 +0300 Subject: [PATCH] Fixed AlterTableV16 placing all worlds under the same server --- .../databases/sql/tables/SessionsTable.java | 4 +- .../databases/sql/tables/WorldTable.java | 16 +++- .../databases/sql/tables/WorldTimesTable.java | 3 +- .../system/database/databases/SQLiteTest.java | 94 ++++++++++++++++++- 4 files changed, 111 insertions(+), 6 deletions(-) diff --git a/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/tables/SessionsTable.java b/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/tables/SessionsTable.java index c5dad7565..83953d274 100644 --- a/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/tables/SessionsTable.java +++ b/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/tables/SessionsTable.java @@ -27,8 +27,10 @@ import java.util.stream.Collectors; */ public class SessionsTable extends UserIDTable { + public static final String TABLE_NAME = "plan_sessions"; + public SessionsTable(SQLDB db) { - super("plan_sessions", db); + super(TABLE_NAME, db); serverTable = db.getServerTable(); insertStatement = "INSERT INTO " + tableName + " (" + Col.USER_ID + ", " diff --git a/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/tables/WorldTable.java b/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/tables/WorldTable.java index 742876af0..39048dfbc 100644 --- a/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/tables/WorldTable.java +++ b/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/tables/WorldTable.java @@ -29,11 +29,12 @@ import java.util.stream.Collectors; */ public class WorldTable extends Table { + public static final String TABLE_NAME = "plan_worlds"; public final String statementSelectID; private final ServerTable serverTable; public WorldTable(SQLDB db) { - super("plan_worlds", db); + super(TABLE_NAME, db); serverTable = db.getServerTable(); statementSelectID = "(SELECT " + Col.ID + " FROM " + tableName + " WHERE (" + Col.NAME + "=?)" + @@ -175,7 +176,7 @@ public class WorldTable extends Table { public void prepare(PreparedStatement statement) throws SQLException { for (String world : worldsToSave) { statement.setString(1, world); - statement.setString(2, ServerInfo.getServerUUID().toString()); + statement.setString(2, serverUUID.toString()); statement.addBatch(); } } @@ -292,6 +293,7 @@ public class WorldTable extends Table { .collect(Collectors.toMap( Function.identity(), oldWorld -> worldObjects.stream() + .filter(worldObj -> worldObj.serverId != 0) .filter(worldObj -> worldObj.equals(oldWorld)) .collect(Collectors.toList() ))); @@ -346,7 +348,6 @@ public class WorldTable extends Table { public List processResults(ResultSet set) throws SQLException { List objects = new ArrayList<>(); while (set.next()) { - int worldID = set.getInt(Col.ID.get()); int serverID = set.getInt(Col.SERVER_ID.get()); String worldName = set.getString(Col.NAME.get()); @@ -403,4 +404,13 @@ class WorldObj { public int hashCode() { return Objects.hashCode(name); } + + @Override + public String toString() { + return "{" + + "id=" + id + + ", serverId=" + serverId + + ", name='" + name + '\'' + + '}'; + } } diff --git a/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/tables/WorldTimesTable.java b/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/tables/WorldTimesTable.java index ed0aca9ea..7367c34a6 100644 --- a/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/tables/WorldTimesTable.java +++ b/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/tables/WorldTimesTable.java @@ -35,13 +35,14 @@ import java.util.stream.Collectors; */ public class WorldTimesTable extends UserIDTable { + public static final String TABLE_NAME = "plan_world_times"; private final ServerTable serverTable; private final WorldTable worldTable; private final SessionsTable sessionsTable; private String insertStatement; public WorldTimesTable(SQLDB db) { - super("plan_world_times", db); + super(TABLE_NAME, db); worldTable = db.getWorldTable(); sessionsTable = db.getSessionsTable(); serverTable = db.getServerTable(); diff --git a/Plan/src/test/java/com/djrapitops/plan/system/database/databases/SQLiteTest.java b/Plan/src/test/java/com/djrapitops/plan/system/database/databases/SQLiteTest.java index fb70fc211..1251439d4 100644 --- a/Plan/src/test/java/com/djrapitops/plan/system/database/databases/SQLiteTest.java +++ b/Plan/src/test/java/com/djrapitops/plan/system/database/databases/SQLiteTest.java @@ -70,7 +70,7 @@ public class SQLiteTest { StaticHolder.saveInstance(SQLiteTest.class, Plan.class); Log.setErrorManager(new TestErrorManager()); -// Log.setDebugMode("console"); + Log.setDebugMode("console"); // Settings.DEV_MODE.setTemporaryValue(true); db.init(); @@ -936,4 +936,96 @@ public class SQLiteTest { assertEquals(3, geolocations.size()); assertTrue(geolocations.contains(secondInfo.getGeolocation())); } + + @Test + public void testWorldTableAlterV16() throws SQLException { + saveUserOne(); + new Table("test", db) { + @Override + public void createTable() { + try { + execute( + "INSERT INTO " + WorldTable.TABLE_NAME + " (" + + WorldTable.Col.NAME + ", " + + WorldTable.Col.SERVER_ID + + ") VALUES ('Test', '0')" + ); + execute( + "INSERT INTO " + SessionsTable.TABLE_NAME + " (" + + SessionsTable.Col.SESSION_START + ", " + + SessionsTable.Col.SESSION_END + ", " + + SessionsTable.Col.AFK_TIME + ", " + + SessionsTable.Col.DEATHS + ", " + + SessionsTable.Col.MOB_KILLS + ", " + + SessionsTable.Col.SERVER_ID + ", " + + SessionsTable.Col.USER_ID + + ") VALUES ('0', '0', '0', '0', '0', '1', '1')" + ); + execute( + "INSERT INTO " + WorldTimesTable.TABLE_NAME + " (" + + WorldTimesTable.Col.SERVER_ID + ", " + + WorldTimesTable.Col.SESSION_ID + ", " + + WorldTimesTable.Col.USER_ID + ", " + + WorldTimesTable.Col.WORLD_ID + ", " + + WorldTimesTable.Col.SURVIVAL + ", " + + WorldTimesTable.Col.CREATIVE + ", " + + WorldTimesTable.Col.SPECTATOR + ", " + + WorldTimesTable.Col.ADVENTURE + + ") VALUES ('1', '1', '1', '1', '0','0','0','0')" + ); + execute( + "INSERT INTO " + ServerTable.TABLE_NAME + " (" + + ServerTable.Col.SERVER_UUID + ", " + + ServerTable.Col.SERVER_ID + ", " + + ServerTable.Col.MAX_PLAYERS + ", " + + ServerTable.Col.WEBSERVER_ADDRESS + ", " + + ServerTable.Col.INSTALLED + ", " + + ServerTable.Col.NAME + + ") VALUES ('" + UUID.randomUUID() + "', '2', '0', '0', '1', '2')" + ); + execute( + "INSERT INTO " + SessionsTable.TABLE_NAME + " (" + + SessionsTable.Col.SESSION_START + ", " + + SessionsTable.Col.SESSION_END + ", " + + SessionsTable.Col.AFK_TIME + ", " + + SessionsTable.Col.DEATHS + ", " + + SessionsTable.Col.MOB_KILLS + ", " + + SessionsTable.Col.SERVER_ID + ", " + + SessionsTable.Col.USER_ID + + ") VALUES ('0', '0', '0', '0', '0', '2', '1')" + ); + execute( + "INSERT INTO " + WorldTimesTable.TABLE_NAME + " (" + + WorldTimesTable.Col.SERVER_ID + ", " + + WorldTimesTable.Col.SESSION_ID + ", " + + WorldTimesTable.Col.USER_ID + ", " + + WorldTimesTable.Col.WORLD_ID + ", " + + WorldTimesTable.Col.SURVIVAL + ", " + + WorldTimesTable.Col.CREATIVE + ", " + + WorldTimesTable.Col.SPECTATOR + ", " + + WorldTimesTable.Col.ADVENTURE + + ") VALUES ('2', '2', '1', '1', '0','0','0','0')" + ); + } catch (SQLException e) { + Log.toLog(this.getClass().getName(), e); + } + } + }.createTable(); + + WorldTable worldTable = db.getWorldTable(); + Map> before = worldTable.getWorldIDsByServerIDs(); + System.out.println("\nBefore: " + before); + System.out.println("Before: " + worldTable.getWorldObjects() + "\n"); + + worldTable.alterTableV16(); + + Map> after = worldTable.getWorldIDsByServerIDs(); + System.out.println("\nAfter: " + after); + System.out.println("After: " + worldTable.getWorldObjects() + "\n"); + assertNull(after.get(0)); + assertNotNull(after.get(1)); + assertEquals(1, after.get(1).size()); + assertNotNull(after.get(2)); + assertEquals(1, after.get(2).size()); + } }