From 0faa04e332c45098e22b4ef1e5d1e7aaabb4a175 Mon Sep 17 00:00:00 2001 From: Robin Kupper Date: Fri, 10 Jun 2011 01:54:18 +0200 Subject: [PATCH] Fixed rollback with type parameter --- src/de/diddiz/LogBlock/CommandsHandler.java | 8 ++----- src/de/diddiz/LogBlock/QueryParams.java | 26 ++++++++++----------- 2 files changed, 14 insertions(+), 20 deletions(-) diff --git a/src/de/diddiz/LogBlock/CommandsHandler.java b/src/de/diddiz/LogBlock/CommandsHandler.java index 72f4228..e361fe6 100644 --- a/src/de/diddiz/LogBlock/CommandsHandler.java +++ b/src/de/diddiz/LogBlock/CommandsHandler.java @@ -220,7 +220,6 @@ public class CommandsHandler implements CommandExecutor params.order = Order.DESC; params.sum = SummarizationMode.NONE; params.bct = BlockChangeType.ALL; - params.selectFullBlockData = true; new CommandRollback(sender, params); } catch (final Exception ex) { sender.sendMessage(ChatColor.RED + ex.getMessage()); @@ -237,7 +236,6 @@ public class CommandsHandler implements CommandExecutor params.order = Order.ASC; params.sum = SummarizationMode.NONE; params.bct = BlockChangeType.ALL; - params.selectFullBlockData = true; new CommandRedo(sender, params); } catch (final Exception ex) { sender.sendMessage(ChatColor.RED + ex.getMessage()); @@ -473,7 +471,7 @@ public class CommandsHandler implements CommandExecutor sender.sendMessage(ChatColor.RED + ex.getMessage()); } sender.sendMessage(ChatColor.DARK_AQUA + "Searching " + params.getTitle() + ":"); - rs = state.executeQuery(params.getQuery()); + rs = state.executeQuery(params.getRollbackQuery()); final WorldEditor editor = new WorldEditor(logblock, params.world); while (rs.next()) editor.queueBlockChange(rs.getInt("type"), rs.getInt("replaced"), rs.getByte("data"), rs.getInt("x"), rs.getInt("y"), rs.getInt("z"), rs.getString("signtext"), rs.getShort("itemtype"), rs.getShort("itemamount"), rs.getByte("itemdata")); @@ -492,8 +490,6 @@ public class CommandsHandler implements CommandExecutor sender.sendMessage(ChatColor.GREEN + "Rollback finished successfully"); sender.sendMessage(ChatColor.GREEN + "Undid " + editor.getSuccesses() + " of " + changes + " changes (" + editor.getErrors() + " errors, " + editor.getBlacklistCollisions() + " blacklist collisions)"); sender.sendMessage(ChatColor.GREEN + "Took: " + editor.getElapsedTime() + "ms"); - if (logblock.hasPermission(sender, "logblock.clearlog")) - sender.sendMessage(ChatColor.LIGHT_PURPLE + "Delete the log with '/lb clearlog last'"); } catch (final SQLException ex) { sender.sendMessage(ChatColor.RED + "SQL exception"); log.log(Level.SEVERE, "[LogBlock Rollback] SQL exception", ex); @@ -518,7 +514,7 @@ public class CommandsHandler implements CommandExecutor @Override public void run() { try { - rs = state.executeQuery(params.getQuery()); + rs = state.executeQuery(params.getRollbackQuery()); sender.sendMessage(ChatColor.DARK_AQUA + "Searching " + params.getTitle() + ":"); final WorldEditor editor = new WorldEditor(logblock, params.world); while (rs.next()) diff --git a/src/de/diddiz/LogBlock/QueryParams.java b/src/de/diddiz/LogBlock/QueryParams.java index 037a03c..0b06894 100644 --- a/src/de/diddiz/LogBlock/QueryParams.java +++ b/src/de/diddiz/LogBlock/QueryParams.java @@ -29,7 +29,7 @@ public class QueryParams implements Cloneable public Location loc = null; public Order order = Order.DESC; public List players = new ArrayList(); - public boolean prepareToolQuery = false, selectFullBlockData = false; + public boolean prepareToolQuery = false; public Selection sel = null; public SummarizationMode sum = SummarizationMode.NONE; public List types = new ArrayList(); @@ -63,29 +63,27 @@ public class QueryParams implements Cloneable public String getQuery() { if (sum == SummarizationMode.NONE) { - final StringBuilder select = new StringBuilder("SELECT "); - final StringBuilder from = new StringBuilder("FROM `" + getTable() + "` "); - if (selectFullBlockData) - select.append("replaced, type, data, x, y, z "); - else - select.append("date, replaced, type, playername"); - if (!selectFullBlockData || players.size() > 0) - from.append("INNER JOIN `lb-players` USING (playerid) "); + String select = "SELECT date, replaced, type, playername"; + String from = "FROM `" + getTable() + "` INNER JOIN `lb-players` USING (playerid) "; if (types.size() == 0 || types.contains(63) || types.contains(68)) { - select.append(", signtext"); - from.append("LEFT JOIN `" + getTable() + "-sign` USING (id) "); + select += ", signtext"; + from += "LEFT JOIN `" + getTable() + "-sign` USING (id) "; } if (types.size() == 0 || types.contains(23) || types.contains(54) || types.contains(61)) { - select.append(", itemtype, itemamount, itemdata"); - from.append("LEFT JOIN `" + getTable() + "-chest` USING (id) "); + select += ", itemtype, itemamount, itemdata"; + from += "LEFT JOIN `" + getTable() + "-chest` USING (id) "; } - return select.toString() + " " + from.toString() + getWhere() + getOrderBy() + getLimit(); + return select + " " + from + getWhere() + getOrderBy() + getLimit(); } else if (sum == SummarizationMode.TYPES) return "SELECT type, SUM(created) AS created, SUM(destroyed) AS destroyed FROM ((SELECT type, count(type) AS created, 0 AS destroyed FROM `" + getTable() + "` INNER JOIN `lb-players` USING (playerid) " + getWhere() + "AND type > 0 GROUP BY type) UNION (SELECT replaced AS type, 0 AS created, count(replaced) AS destroyed FROM `" + getTable() + "` INNER JOIN `lb-players` USING (playerid) " + getWhere() + "AND replaced > 0 GROUP BY replaced)) AS t GROUP BY type ORDER BY SUM(created) + SUM(destroyed) " + order + " " + getLimit(); else return "SELECT playername, SUM(created) AS created, SUM(destroyed) AS destroyed FROM ((SELECT playerid, count(type) AS created, 0 AS destroyed FROM `" + getTable() + "` " + getWhere() + "AND type > 0 GROUP BY playerid) UNION (SELECT playerid, 0 AS created, count(replaced) AS destroyed FROM `" + getTable() + "` " + getWhere() + "AND replaced > 0 GROUP BY playerid)) AS t INNER JOIN `lb-players` USING (playerid) GROUP BY playerid ORDER BY SUM(created) + SUM(destroyed) " + order + " " + getLimit(); } + public String getRollbackQuery() { + return "SELECT replaced, type, data, x, y, z, signtext, itemtype, itemamount, itemdata FROM `" + getTable() + "` " + (players.size() > 0 ? "INNER JOIN `lb-players` USING (playerid) " : "") + "LEFT JOIN `" + getTable() + "-sign` USING (id) LEFT JOIN `" + getTable() + "-chest` USING (id) " + getWhere() + getOrderBy() + getLimit(); + } + public String getTable() { return logblock.getConfig().tables.get(world.getName().hashCode()); }