diff --git a/src/main/java/com/gmail/nossr50/commands/mc/McremoveCommand.java b/src/main/java/com/gmail/nossr50/commands/mc/McremoveCommand.java index c4aecb02b..1b3911849 100644 --- a/src/main/java/com/gmail/nossr50/commands/mc/McremoveCommand.java +++ b/src/main/java/com/gmail/nossr50/commands/mc/McremoveCommand.java @@ -60,31 +60,7 @@ public class McremoveCommand implements CommandExecutor { userId = database.getInt("SELECT id FROM " + tablePrefix + "users WHERE user = '" + playerName + "'"); if (userId > 0) { - database.write("DELETE FROM " - + databaseName + "." - + tablePrefix + "users WHERE " - + tablePrefix + "users.id=" + userId); - - database.write("DELETE FROM " - + databaseName + "." - + tablePrefix + "cooldowns WHERE " - + tablePrefix + "cooldowns.user_id=" + userId); - - database.write("DELETE FROM " - + databaseName + "." - + tablePrefix + "huds WHERE " - + tablePrefix + "huds.user_id=" + userId); - - database.write("DELETE FROM " - + databaseName + "." - + tablePrefix + "skills WHERE " - + tablePrefix + "skills.user_id=" + userId); - - database.write("DELETE FROM " - + databaseName + "." - + tablePrefix + "experience WHERE " - + tablePrefix + "experience.user_id=" + userId); - + database.write("DELETE FROM " + databaseName + "." + tablePrefix + "users WHERE " + tablePrefix + "users.id IN " + userId); sender.sendMessage(success); } diff --git a/src/main/java/com/gmail/nossr50/runnables/UserPurgeTask.java b/src/main/java/com/gmail/nossr50/runnables/UserPurgeTask.java index 3fc00a546..9f9d42203 100644 --- a/src/main/java/com/gmail/nossr50/runnables/UserPurgeTask.java +++ b/src/main/java/com/gmail/nossr50/runnables/UserPurgeTask.java @@ -57,7 +57,9 @@ public class UserPurgeTask implements Runnable { continue; } - deleteFromSQL(userId, playerName); + database.write("DELETE FROM " + databaseName + "." + tablePrefix + "users WHERE " + tablePrefix + "users.id IN " + userId); + profileCleanup(playerName); + purgedUsers++; } @@ -84,31 +86,7 @@ public class UserPurgeTask implements Runnable { } HashMap> usernames = database.read("SELECT user FROM " + tablePrefix + "users WHERE id IN " + userIdString); - - database.write("DELETE FROM " - + databaseName + "." - + tablePrefix + "users WHERE " - + tablePrefix + "users.id IN " + userIdString); - - database.write("DELETE FROM " - + databaseName + "." - + tablePrefix + "cooldowns WHERE " - + tablePrefix + "cooldowns.user_id IN " + userIdString); - - database.write("DELETE FROM " - + databaseName + "." - + tablePrefix + "huds WHERE " - + tablePrefix + "huds.user_id IN " + userIdString); - - database.write("DELETE FROM " - + databaseName + "." - + tablePrefix + "skills WHERE " - + tablePrefix + "skills.user_id IN " + userIdString); - - database.write("DELETE FROM " - + databaseName + "." - + tablePrefix + "experience WHERE " - + tablePrefix + "experience.user_id IN " + userIdString); + database.write("DELETE FROM " + databaseName + "." + tablePrefix + "users WHERE " + tablePrefix + "users.id IN " + userIdString); for (int i = 1; i <= usernames.size(); i++) { String playerName = usernames.get(i).get(0); @@ -141,7 +119,9 @@ public class UserPurgeTask implements Runnable { long loginDifference = currentTime - lastLoginTime; if (loginDifference > 2630000000L) { - deleteFromSQL(userId, playerName); + database.write("DELETE FROM " + databaseName + "." + tablePrefix + "users WHERE " + tablePrefix + "users.id IN " + userId); + profileCleanup(playerName); + purgedUsers++; } } @@ -149,35 +129,6 @@ public class UserPurgeTask implements Runnable { plugin.getLogger().info("Purged " + purgedUsers + " users from the database."); } - private void deleteFromSQL(int userId, String playerName) { - database.write("DELETE FROM " - + databaseName + "." - + tablePrefix + "users WHERE " - + tablePrefix + "users.id=" + userId); - - database.write("DELETE FROM " - + databaseName + "." - + tablePrefix + "cooldowns WHERE " - + tablePrefix + "cooldowns.user_id=" + userId); - - database.write("DELETE FROM " - + databaseName + "." - + tablePrefix + "huds WHERE " - + tablePrefix + "huds.user_id=" + userId); - - database.write("DELETE FROM " - + databaseName + "." - + tablePrefix + "skills WHERE " - + tablePrefix + "skills.user_id=" + userId); - - database.write("DELETE FROM " - + databaseName + "." - + tablePrefix + "experience WHERE " - + tablePrefix + "experience.user_id=" + userId); - - profileCleanup(playerName); - } - private void profileCleanup(String playerName) { McMMOPlayer mcmmoPlayer = Users.getPlayer(playerName); diff --git a/src/main/java/com/gmail/nossr50/util/Database.java b/src/main/java/com/gmail/nossr50/util/Database.java index 7ebc2e799..9fb8993d2 100644 --- a/src/main/java/com/gmail/nossr50/util/Database.java +++ b/src/main/java/com/gmail/nossr50/util/Database.java @@ -77,15 +77,20 @@ public class Database { * Attempt to create the database structure. */ public void createStructure() { - write("CREATE TABLE IF NOT EXISTS `" + tablePrefix + "huds` (`user_id` int(10) unsigned NOT NULL," - + "`hudtype` varchar(50) NOT NULL DEFAULT 'STANDARD'," - + "PRIMARY KEY (`user_id`)) ENGINE=MyISAM DEFAULT CHARSET=latin1;"); - write("CREATE TABLE IF NOT EXISTS `" + tablePrefix + "users` (`id` int(10) unsigned NOT NULL AUTO_INCREMENT," + write("CREATE TABLE IF NOT EXISTS `" + tablePrefix + "users` (" + + "`id` int(10) unsigned NOT NULL AUTO_INCREMENT," + "`user` varchar(40) NOT NULL," + "`lastlogin` int(32) unsigned NOT NULL," + "PRIMARY KEY (`id`)," + "UNIQUE KEY `user` (`user`)) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1;"); - write("CREATE TABLE IF NOT EXISTS `" + tablePrefix + "cooldowns` (`user_id` int(10) unsigned NOT NULL," + write("CREATE TABLE IF NOT EXISTS `" + tablePrefix + "huds` (" + + "`user_id` int(10) unsigned NOT NULL," + + "`hudtype` varchar(50) NOT NULL DEFAULT 'STANDARD'," + + "PRIMARY KEY (`user_id`)" + + "FOREIGN KEY (`user_id`) REFERENCES `" + tablePrefix + "users`)" + + "ON DELETE CASCADE) ENGINE=MyISAM DEFAULT CHARSET=latin1;"); + write("CREATE TABLE IF NOT EXISTS `" + tablePrefix + "cooldowns` (" + + "`user_id` int(10) unsigned NOT NULL," + "`taming` int(32) unsigned NOT NULL DEFAULT '0'," + "`mining` int(32) unsigned NOT NULL DEFAULT '0'," + "`woodcutting` int(32) unsigned NOT NULL DEFAULT '0'," @@ -98,8 +103,11 @@ public class Database { + "`axes` int(32) unsigned NOT NULL DEFAULT '0'," + "`acrobatics` int(32) unsigned NOT NULL DEFAULT '0'," + "`blast_mining` int(32) unsigned NOT NULL DEFAULT '0'," - + "PRIMARY KEY (`user_id`)) ENGINE=MyISAM DEFAULT CHARSET=latin1;"); - write("CREATE TABLE IF NOT EXISTS `" + tablePrefix + "skills` (`user_id` int(10) unsigned NOT NULL," + + "PRIMARY KEY (`user_id`)" + + "FOREIGN KEY (`user_id`) REFERENCES `" + tablePrefix + "users`)" + + "ON DELETE CASCADE) ENGINE=MyISAM DEFAULT CHARSET=latin1;"); + write("CREATE TABLE IF NOT EXISTS `" + tablePrefix + "skills` (" + + "`user_id` int(10) unsigned NOT NULL," + "`taming` int(10) unsigned NOT NULL DEFAULT '0'," + "`mining` int(10) unsigned NOT NULL DEFAULT '0'," + "`woodcutting` int(10) unsigned NOT NULL DEFAULT '0'," @@ -111,8 +119,11 @@ public class Database { + "`swords` int(10) unsigned NOT NULL DEFAULT '0'," + "`axes` int(10) unsigned NOT NULL DEFAULT '0'," + "`acrobatics` int(10) unsigned NOT NULL DEFAULT '0'," - + "PRIMARY KEY (`user_id`)) ENGINE=MyISAM DEFAULT CHARSET=latin1;"); - write("CREATE TABLE IF NOT EXISTS `" + tablePrefix + "experience` (`user_id` int(10) unsigned NOT NULL," + + "PRIMARY KEY (`user_id`)" + + "FOREIGN KEY (`user_id`) REFERENCES `" + tablePrefix + "users`)" + + "ON DELETE CASCADE) ENGINE=MyISAM DEFAULT CHARSET=latin1;"); + write("CREATE TABLE IF NOT EXISTS `" + tablePrefix + "experience` (" + + "`user_id` int(10) unsigned NOT NULL," + "`taming` int(10) unsigned NOT NULL DEFAULT '0'," + "`mining` int(10) unsigned NOT NULL DEFAULT '0'," + "`woodcutting` int(10) unsigned NOT NULL DEFAULT '0'," @@ -124,7 +135,9 @@ public class Database { + "`swords` int(10) unsigned NOT NULL DEFAULT '0'," + "`axes` int(10) unsigned NOT NULL DEFAULT '0'," + "`acrobatics` int(10) unsigned NOT NULL DEFAULT '0'," - + "PRIMARY KEY (`user_id`)) ENGINE=MyISAM DEFAULT CHARSET=latin1;"); + + "PRIMARY KEY (`user_id`)" + + "FOREIGN KEY (`user_id`) REFERENCES `" + tablePrefix + "users`)" + + "ON DELETE CASCADE) ENGINE=MyISAM DEFAULT CHARSET=latin1;"); checkDatabaseStructure(DatabaseUpdate.FISHING); checkDatabaseStructure(DatabaseUpdate.BLAST_MINING);