浏览代码

This is a much better way to delete things.

gmcferrin 12 年之前
父节点
当前提交
d0e2358fab

+ 1 - 25
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);
 
             }

+ 7 - 56
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<Integer, ArrayList<String>> 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);
 

+ 23 - 10
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);