forked from LogBlock/LogBlock
UUID migrration fixes
Firstly, remove incorrect unique index on playername (and UUID, just in case) columns, and add a non-unique index on the UUID column Secondly, account for setups not logging onlinetime - in that case, try to look up ALL names, and give any not found the log_ prefix rather than the noimport_ prefix
This commit is contained in:
@@ -277,15 +277,21 @@ class Updater
|
|||||||
// Error 1060 is MySQL error "column already exists". We want to continue with import if we get that error
|
// Error 1060 is MySQL error "column already exists". We want to continue with import if we get that error
|
||||||
if (ex.getErrorCode() != 1060) {
|
if (ex.getErrorCode() != 1060) {
|
||||||
Bukkit.getLogger().log(Level.SEVERE, "[Updater] Error: ", ex);
|
Bukkit.getLogger().log(Level.SEVERE, "[Updater] Error: ", ex);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
|
String unimportedPrefix="noimport_";
|
||||||
ResultSet rs;
|
ResultSet rs;
|
||||||
conn.setAutoCommit(true);
|
conn.setAutoCommit(true);
|
||||||
final Statement st = conn.createStatement();
|
final Statement st = conn.createStatement();
|
||||||
// Start by assuming anything with no onlinetime is not a player
|
if (config.getBoolean("logging.logPlayerInfo")) {
|
||||||
st.execute("UPDATE `lb-players` SET UUID = CONCAT ('log_',playername) WHERE onlinetime=0 AND LENGTH(UUID) = 0");
|
// Start by assuming anything with no onlinetime is not a player
|
||||||
|
st.execute("UPDATE `lb-players` SET UUID = CONCAT ('log_',playername) WHERE onlinetime=0 AND LENGTH(UUID) = 0");
|
||||||
|
} else {
|
||||||
|
// If we can't assume that, we must assume anything we can't look up is not a player
|
||||||
|
unimportedPrefix = "log_";
|
||||||
|
}
|
||||||
// Tell people how many are needing converted
|
// Tell people how many are needing converted
|
||||||
rs = st.executeQuery("SELECT COUNT(playername) FROM `lb-players` WHERE LENGTH(UUID)=0");
|
rs = st.executeQuery("SELECT COUNT(playername) FROM `lb-players` WHERE LENGTH(UUID)=0");
|
||||||
rs.next();
|
rs.next();
|
||||||
@@ -308,7 +314,7 @@ class Updater
|
|||||||
response = UUIDFetcher.getUUIDs(names);
|
response = UUIDFetcher.getUUIDs(names);
|
||||||
for (Map.Entry<String,Integer> entry : players.entrySet()) {
|
for (Map.Entry<String,Integer> entry : players.entrySet()) {
|
||||||
if (response.get(entry.getKey()) == null) {
|
if (response.get(entry.getKey()) == null) {
|
||||||
theUUID = "noimport_" + entry.getKey();
|
theUUID = unimportedPrefix + entry.getKey();
|
||||||
getLogger().warning(entry.getKey() + " not found - giving UUID of " + theUUID);
|
getLogger().warning(entry.getKey() + " not found - giving UUID of " + theUUID);
|
||||||
} else {
|
} else {
|
||||||
theUUID = response.get(entry.getKey()).toString();
|
theUUID = response.get(entry.getKey()).toString();
|
||||||
@@ -336,6 +342,39 @@ class Updater
|
|||||||
}
|
}
|
||||||
config.set("version", "1.90");
|
config.set("version", "1.90");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (config.getString("version").compareTo("1.91") < 0) {
|
||||||
|
getLogger().info("Updating tables to 1.91 ...");
|
||||||
|
final Connection conn = logblock.getConnection();
|
||||||
|
try {
|
||||||
|
conn.setAutoCommit(true);
|
||||||
|
final Statement st = conn.createStatement();
|
||||||
|
// Need to wrap both these next two inside individual try/catch statements in case index does not exist
|
||||||
|
try {
|
||||||
|
st.execute("DROP INDEX UUID ON `lb-players`");
|
||||||
|
} catch (final SQLException ex) {
|
||||||
|
if (ex.getErrorCode() != 1091) {
|
||||||
|
Bukkit.getLogger().log(Level.SEVERE, "[Updater] Error: ", ex);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
st.execute("DROP INDEX playername ON `lb-players`");
|
||||||
|
} catch (final SQLException ex) {
|
||||||
|
if (ex.getErrorCode() != 1091) {
|
||||||
|
Bukkit.getLogger().log(Level.SEVERE, "[Updater] Error: ", ex);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
st.execute("CREATE INDEX UUID ON `lb-players` (UUID);");
|
||||||
|
st.close();
|
||||||
|
conn.close();
|
||||||
|
} catch (final SQLException ex) {
|
||||||
|
Bukkit.getLogger().log(Level.SEVERE, "[Updater] Error: ", ex);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
config.set("version", "1.91");
|
||||||
|
}
|
||||||
logblock.saveConfig();
|
logblock.saveConfig();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -347,7 +386,7 @@ class Updater
|
|||||||
final Statement state = conn.createStatement();
|
final Statement state = conn.createStatement();
|
||||||
final DatabaseMetaData dbm = conn.getMetaData();
|
final DatabaseMetaData dbm = conn.getMetaData();
|
||||||
conn.setAutoCommit(true);
|
conn.setAutoCommit(true);
|
||||||
createTable(dbm, state, "lb-players", "(playerid INT UNSIGNED NOT NULL AUTO_INCREMENT, UUID varchar(36) NOT NULL, playername varchar(32) NOT NULL, firstlogin DATETIME NOT NULL, lastlogin DATETIME NOT NULL, onlinetime INT UNSIGNED NOT NULL, ip varchar(255) NOT NULL, PRIMARY KEY (playerid), UNIQUE (UUID))");
|
createTable(dbm, state, "lb-players", "(playerid INT UNSIGNED NOT NULL AUTO_INCREMENT, UUID varchar(36) NOT NULL, playername varchar(32) NOT NULL, firstlogin DATETIME NOT NULL, lastlogin DATETIME NOT NULL, onlinetime INT UNSIGNED NOT NULL, ip varchar(255) NOT NULL, PRIMARY KEY (playerid), INDEX (UUID))");
|
||||||
// Players table must not be empty or inserts won't work - bug #492
|
// Players table must not be empty or inserts won't work - bug #492
|
||||||
final ResultSet rs = state.executeQuery("SELECT NULL FROM `lb-players` LIMIT 1;");
|
final ResultSet rs = state.executeQuery("SELECT NULL FROM `lb-players` LIMIT 1;");
|
||||||
if (!rs.next())
|
if (!rs.next())
|
||||||
|
Reference in New Issue
Block a user