Fixed rollback with type parameter

This commit is contained in:
Robin Kupper
2011-06-10 01:54:18 +02:00
parent c6293ce516
commit 0faa04e332
2 changed files with 14 additions and 20 deletions

View File

@@ -220,7 +220,6 @@ public class CommandsHandler implements CommandExecutor
params.order = Order.DESC; params.order = Order.DESC;
params.sum = SummarizationMode.NONE; params.sum = SummarizationMode.NONE;
params.bct = BlockChangeType.ALL; params.bct = BlockChangeType.ALL;
params.selectFullBlockData = true;
new CommandRollback(sender, params); new CommandRollback(sender, params);
} catch (final Exception ex) { } catch (final Exception ex) {
sender.sendMessage(ChatColor.RED + ex.getMessage()); sender.sendMessage(ChatColor.RED + ex.getMessage());
@@ -237,7 +236,6 @@ public class CommandsHandler implements CommandExecutor
params.order = Order.ASC; params.order = Order.ASC;
params.sum = SummarizationMode.NONE; params.sum = SummarizationMode.NONE;
params.bct = BlockChangeType.ALL; params.bct = BlockChangeType.ALL;
params.selectFullBlockData = true;
new CommandRedo(sender, params); new CommandRedo(sender, params);
} catch (final Exception ex) { } catch (final Exception ex) {
sender.sendMessage(ChatColor.RED + ex.getMessage()); sender.sendMessage(ChatColor.RED + ex.getMessage());
@@ -473,7 +471,7 @@ public class CommandsHandler implements CommandExecutor
sender.sendMessage(ChatColor.RED + ex.getMessage()); sender.sendMessage(ChatColor.RED + ex.getMessage());
} }
sender.sendMessage(ChatColor.DARK_AQUA + "Searching " + params.getTitle() + ":"); 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); final WorldEditor editor = new WorldEditor(logblock, params.world);
while (rs.next()) 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")); 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 + "Rollback finished successfully");
sender.sendMessage(ChatColor.GREEN + "Undid " + editor.getSuccesses() + " of " + changes + " changes (" + editor.getErrors() + " errors, " + editor.getBlacklistCollisions() + " blacklist collisions)"); 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"); 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) { } catch (final SQLException ex) {
sender.sendMessage(ChatColor.RED + "SQL exception"); sender.sendMessage(ChatColor.RED + "SQL exception");
log.log(Level.SEVERE, "[LogBlock Rollback] SQL exception", ex); log.log(Level.SEVERE, "[LogBlock Rollback] SQL exception", ex);
@@ -518,7 +514,7 @@ public class CommandsHandler implements CommandExecutor
@Override @Override
public void run() { public void run() {
try { try {
rs = state.executeQuery(params.getQuery()); rs = state.executeQuery(params.getRollbackQuery());
sender.sendMessage(ChatColor.DARK_AQUA + "Searching " + params.getTitle() + ":"); sender.sendMessage(ChatColor.DARK_AQUA + "Searching " + params.getTitle() + ":");
final WorldEditor editor = new WorldEditor(logblock, params.world); final WorldEditor editor = new WorldEditor(logblock, params.world);
while (rs.next()) while (rs.next())

View File

@@ -29,7 +29,7 @@ public class QueryParams implements Cloneable
public Location loc = null; public Location loc = null;
public Order order = Order.DESC; public Order order = Order.DESC;
public List<String> players = new ArrayList<String>(); public List<String> players = new ArrayList<String>();
public boolean prepareToolQuery = false, selectFullBlockData = false; public boolean prepareToolQuery = false;
public Selection sel = null; public Selection sel = null;
public SummarizationMode sum = SummarizationMode.NONE; public SummarizationMode sum = SummarizationMode.NONE;
public List<Integer> types = new ArrayList<Integer>(); public List<Integer> types = new ArrayList<Integer>();
@@ -63,29 +63,27 @@ public class QueryParams implements Cloneable
public String getQuery() { public String getQuery() {
if (sum == SummarizationMode.NONE) { if (sum == SummarizationMode.NONE) {
final StringBuilder select = new StringBuilder("SELECT "); String select = "SELECT date, replaced, type, playername";
final StringBuilder from = new StringBuilder("FROM `" + getTable() + "` "); String from = "FROM `" + getTable() + "` INNER JOIN `lb-players` USING (playerid) ";
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) ");
if (types.size() == 0 || types.contains(63) || types.contains(68)) { if (types.size() == 0 || types.contains(63) || types.contains(68)) {
select.append(", signtext"); select += ", signtext";
from.append("LEFT JOIN `" + getTable() + "-sign` USING (id) "); from += "LEFT JOIN `" + getTable() + "-sign` USING (id) ";
} }
if (types.size() == 0 || types.contains(23) || types.contains(54) || types.contains(61)) { if (types.size() == 0 || types.contains(23) || types.contains(54) || types.contains(61)) {
select.append(", itemtype, itemamount, itemdata"); select += ", itemtype, itemamount, itemdata";
from.append("LEFT JOIN `" + getTable() + "-chest` USING (id) "); 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) } 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(); 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 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(); 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() { public String getTable() {
return logblock.getConfig().tables.get(world.getName().hashCode()); return logblock.getConfig().tables.get(world.getName().hashCode());
} }