forked from LogBlock/LogBlock
Cleanup query generation
This commit is contained in:
@@ -93,11 +93,65 @@ public final class QueryParams implements Cloneable {
|
|||||||
return "LIMIT " + Config.hardLinesLimit;
|
return "LIMIT " + Config.hardLinesLimit;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getQuery() {
|
public String getFrom() {
|
||||||
|
if (sum != SummarizationMode.NONE) {
|
||||||
|
throw new IllegalStateException("No implemented for summarization");
|
||||||
|
}
|
||||||
if (bct == BlockChangeType.CHAT) {
|
if (bct == BlockChangeType.CHAT) {
|
||||||
String select = "SELECT ";
|
String from = "FROM `lb-chat` ";
|
||||||
|
|
||||||
|
if (needPlayer || players.size() > 0) {
|
||||||
|
from += "INNER JOIN `lb-players` USING (playerid) ";
|
||||||
|
}
|
||||||
|
return from;
|
||||||
|
}
|
||||||
|
if (bct == BlockChangeType.KILLS) {
|
||||||
|
String from = "FROM `" + getTable() + "-kills` ";
|
||||||
|
|
||||||
|
if (needPlayer || needKiller || killers.size() > 0) {
|
||||||
|
from += "INNER JOIN `lb-players` as killers ON (killer=killers.playerid) ";
|
||||||
|
}
|
||||||
|
|
||||||
|
if (needPlayer || needVictim || victims.size() > 0) {
|
||||||
|
from += "INNER JOIN `lb-players` as victims ON (victim=victims.playerid) ";
|
||||||
|
}
|
||||||
|
return from;
|
||||||
|
}
|
||||||
|
|
||||||
|
String from = "FROM `" + getTable() + "-blocks` ";
|
||||||
|
if (needPlayer || players.size() > 0) {
|
||||||
|
from += "INNER JOIN `lb-players` USING (playerid) ";
|
||||||
|
}
|
||||||
|
if (!needCount && needData) {
|
||||||
|
from += "LEFT JOIN `" + getTable() + "-state` USING (id) ";
|
||||||
|
}
|
||||||
|
if (needChestAccess)
|
||||||
|
// If BlockChangeType is CHESTACCESS, we can use more efficient query
|
||||||
|
{
|
||||||
|
if (bct == BlockChangeType.CHESTACCESS) {
|
||||||
|
from += "RIGHT JOIN `" + getTable() + "-chestdata` USING (id) ";
|
||||||
|
} else {
|
||||||
|
from += "LEFT JOIN `" + getTable() + "-chestdata` USING (id) ";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return from;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getOrder() {
|
||||||
|
if (sum != SummarizationMode.NONE) {
|
||||||
|
throw new IllegalStateException("No implemented for summarization");
|
||||||
|
}
|
||||||
|
return "ORDER BY date " + order + ", id " + order + " ";
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getFields() {
|
||||||
|
if (sum != SummarizationMode.NONE) {
|
||||||
|
throw new IllegalStateException("No implemented for summarization");
|
||||||
|
}
|
||||||
|
if (bct == BlockChangeType.CHAT) {
|
||||||
|
String select = "";
|
||||||
if (needCount) {
|
if (needCount) {
|
||||||
select += "COUNT(*) AS count";
|
select += "COUNT(*) AS count ";
|
||||||
} else {
|
} else {
|
||||||
if (needId) {
|
if (needId) {
|
||||||
select += "id, ";
|
select += "id, ";
|
||||||
@@ -111,20 +165,14 @@ public final class QueryParams implements Cloneable {
|
|||||||
if (needMessage) {
|
if (needMessage) {
|
||||||
select += "message, ";
|
select += "message, ";
|
||||||
}
|
}
|
||||||
select = select.substring(0, select.length() - 2);
|
select = select.substring(0, select.length() - 2) + " ";
|
||||||
}
|
}
|
||||||
String from = "FROM `lb-chat` ";
|
return select;
|
||||||
|
|
||||||
if (needPlayer || players.size() > 0) {
|
|
||||||
from += "INNER JOIN `lb-players` USING (playerid) ";
|
|
||||||
}
|
|
||||||
return select + " " + from + getWhere() + "ORDER BY date " + order + ", id " + order + " " + getLimit();
|
|
||||||
}
|
}
|
||||||
if (bct == BlockChangeType.KILLS) {
|
if (bct == BlockChangeType.KILLS) {
|
||||||
if (sum == SummarizationMode.NONE) {
|
String select = "";
|
||||||
String select = "SELECT ";
|
|
||||||
if (needCount) {
|
if (needCount) {
|
||||||
select += "COUNT(*) AS count";
|
select += "COUNT(*) AS count ";
|
||||||
} else {
|
} else {
|
||||||
if (needId) {
|
if (needId) {
|
||||||
select += "id, ";
|
select += "id, ";
|
||||||
@@ -144,27 +192,13 @@ public final class QueryParams implements Cloneable {
|
|||||||
if (needCoords) {
|
if (needCoords) {
|
||||||
select += "x, y, z, ";
|
select += "x, y, z, ";
|
||||||
}
|
}
|
||||||
select = select.substring(0, select.length() - 2);
|
select = select.substring(0, select.length() - 2) + " ";
|
||||||
}
|
}
|
||||||
String from = "FROM `" + getTable() + "-kills` ";
|
return select;
|
||||||
|
|
||||||
if (needPlayer || needKiller || killers.size() > 0) {
|
|
||||||
from += "INNER JOIN `lb-players` as killers ON (killer=killers.playerid) ";
|
|
||||||
}
|
}
|
||||||
|
String select = "";
|
||||||
if (needPlayer || needVictim || victims.size() > 0) {
|
|
||||||
from += "INNER JOIN `lb-players` as victims ON (victim=victims.playerid) ";
|
|
||||||
}
|
|
||||||
|
|
||||||
return select + " " + from + getWhere() + "ORDER BY date " + order + ", id " + order + " " + getLimit();
|
|
||||||
} else if (sum == SummarizationMode.PLAYERS) {
|
|
||||||
return "SELECT playername, UUID, SUM(kills) AS kills, SUM(killed) AS killed FROM ((SELECT killer AS playerid, count(*) AS kills, 0 as killed FROM `" + getTable() + "-kills` INNER JOIN `lb-players` as killers ON (killer=killers.playerid) INNER JOIN `lb-players` as victims ON (victim=victims.playerid) " + getWhere(BlockChangeType.KILLS) + "GROUP BY killer) UNION (SELECT victim AS playerid, 0 as kills, count(*) AS killed FROM `" + getTable() + "-kills` INNER JOIN `lb-players` as killers ON (killer=killers.playerid) INNER JOIN `lb-players` as victims ON (victim=victims.playerid) " + getWhere(BlockChangeType.KILLS) + "GROUP BY victim)) AS t INNER JOIN `lb-players` USING (playerid) GROUP BY playerid ORDER BY SUM(kills) + SUM(killed) " + order + " " + getLimit();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (sum == SummarizationMode.NONE) {
|
|
||||||
String select = "SELECT ";
|
|
||||||
if (needCount) {
|
if (needCount) {
|
||||||
select += "COUNT(*) AS count";
|
select += "COUNT(*) AS count ";
|
||||||
} else {
|
} else {
|
||||||
if (needId) {
|
if (needId) {
|
||||||
select += "`" + getTable() + "`-blocks.id, ";
|
select += "`" + getTable() + "`-blocks.id, ";
|
||||||
@@ -190,26 +224,25 @@ public final class QueryParams implements Cloneable {
|
|||||||
if (needChestAccess) {
|
if (needChestAccess) {
|
||||||
select += "item, itemremove, itemtype, ";
|
select += "item, itemremove, itemtype, ";
|
||||||
}
|
}
|
||||||
select = select.substring(0, select.length() - 2);
|
select = select.substring(0, select.length() - 2) + " ";
|
||||||
}
|
}
|
||||||
String from = "FROM `" + getTable() + "-blocks` ";
|
return select;
|
||||||
if (needPlayer || players.size() > 0) {
|
|
||||||
from += "INNER JOIN `lb-players` USING (playerid) ";
|
|
||||||
}
|
}
|
||||||
if (!needCount && needData) {
|
|
||||||
from += "LEFT JOIN `" + getTable() + "-state` USING (id) ";
|
public String getQuery() {
|
||||||
|
if (sum == SummarizationMode.NONE) {
|
||||||
|
return "SELECT " + getFields() + getFrom() + getWhere() + getOrder() + getLimit();
|
||||||
}
|
}
|
||||||
if (needChestAccess)
|
if (bct == BlockChangeType.CHAT) {
|
||||||
// If BlockChangeType is CHESTACCESS, we can use more efficient query
|
throw new IllegalStateException("Invalid summarization for chat");
|
||||||
{
|
|
||||||
if (bct == BlockChangeType.CHESTACCESS) {
|
|
||||||
from += "RIGHT JOIN `" + getTable() + "-chestdata` USING (id) ";
|
|
||||||
} else {
|
|
||||||
from += "LEFT JOIN `" + getTable() + "-chestdata` USING (id) ";
|
|
||||||
}
|
}
|
||||||
|
if (bct == BlockChangeType.KILLS) {
|
||||||
|
if (sum == SummarizationMode.PLAYERS) {
|
||||||
|
return "SELECT playername, UUID, SUM(kills) AS kills, SUM(killed) AS killed FROM ((SELECT killer AS playerid, count(*) AS kills, 0 as killed FROM `" + getTable() + "-kills` INNER JOIN `lb-players` as killers ON (killer=killers.playerid) INNER JOIN `lb-players` as victims ON (victim=victims.playerid) " + getWhere(BlockChangeType.KILLS) + "GROUP BY killer) UNION (SELECT victim AS playerid, 0 as kills, count(*) AS killed FROM `" + getTable() + "-kills` INNER JOIN `lb-players` as killers ON (killer=killers.playerid) INNER JOIN `lb-players` as victims ON (victim=victims.playerid) " + getWhere(BlockChangeType.KILLS) + "GROUP BY victim)) AS t INNER JOIN `lb-players` USING (playerid) GROUP BY playerid ORDER BY SUM(kills) + SUM(killed) " + order + " " + getLimit();
|
||||||
}
|
}
|
||||||
return select + " " + from + getWhere() + "ORDER BY date " + order + ", id " + order + " " + getLimit();
|
throw new IllegalStateException("Invalid summarization for kills");
|
||||||
} else if (sum == SummarizationMode.TYPES) {
|
}
|
||||||
|
if (sum == SummarizationMode.TYPES) {
|
||||||
return "SELECT type, SUM(created) AS created, SUM(destroyed) AS destroyed FROM ((SELECT type, count(*) AS created, 0 AS destroyed FROM `" + getTable() + "-blocks` INNER JOIN `lb-players` USING (playerid) " + getWhere(BlockChangeType.CREATED) + "GROUP BY type) UNION (SELECT replaced AS type, 0 AS created, count(*) AS destroyed FROM `" + getTable() + "-blocks` INNER JOIN `lb-players` USING (playerid) " + getWhere(BlockChangeType.DESTROYED) + "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(*) AS created, 0 AS destroyed FROM `" + getTable() + "-blocks` INNER JOIN `lb-players` USING (playerid) " + getWhere(BlockChangeType.CREATED) + "GROUP BY type) UNION (SELECT replaced AS type, 0 AS created, count(*) AS destroyed FROM `" + getTable() + "-blocks` INNER JOIN `lb-players` USING (playerid) " + getWhere(BlockChangeType.DESTROYED) + "GROUP BY replaced)) AS t GROUP BY type ORDER BY SUM(created) + SUM(destroyed) " + order + " " + getLimit();
|
||||||
} else {
|
} else {
|
||||||
return "SELECT playername, UUID, SUM(created) AS created, SUM(destroyed) AS destroyed FROM ((SELECT playerid, count(*) AS created, 0 AS destroyed FROM `" + getTable() + "-blocks` " + getWhere(BlockChangeType.CREATED) + "GROUP BY playerid) UNION (SELECT playerid, 0 AS created, count(*) AS destroyed FROM `" + getTable() + "-blocks` " + getWhere(BlockChangeType.DESTROYED) + "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, UUID, SUM(created) AS created, SUM(destroyed) AS destroyed FROM ((SELECT playerid, count(*) AS created, 0 AS destroyed FROM `" + getTable() + "-blocks` " + getWhere(BlockChangeType.CREATED) + "GROUP BY playerid) UNION (SELECT playerid, 0 AS created, count(*) AS destroyed FROM `" + getTable() + "-blocks` " + getWhere(BlockChangeType.DESTROYED) + "GROUP BY playerid)) AS t INNER JOIN `lb-players` USING (playerid) GROUP BY playerid ORDER BY SUM(created) + SUM(destroyed) " + order + " " + getLimit();
|
||||||
@@ -798,6 +831,9 @@ public final class QueryParams implements Cloneable {
|
|||||||
if (!getWorldConfig(world).isLogging(Logging.KILL)) {
|
if (!getWorldConfig(world).isLogging(Logging.KILL)) {
|
||||||
throw new IllegalArgumentException("Kill logging not enabled for world '" + world.getName() + "'");
|
throw new IllegalArgumentException("Kill logging not enabled for world '" + world.getName() + "'");
|
||||||
}
|
}
|
||||||
|
if (sum != SummarizationMode.NONE && sum != SummarizationMode.PLAYERS) {
|
||||||
|
throw new IllegalArgumentException("Invalid summarization for kills");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (!prepareToolQuery && bct != BlockChangeType.CHAT) {
|
if (!prepareToolQuery && bct != BlockChangeType.CHAT) {
|
||||||
if (world == null) {
|
if (world == null) {
|
||||||
@@ -807,9 +843,14 @@ public final class QueryParams implements Cloneable {
|
|||||||
throw new IllegalArgumentException("This world ('" + world.getName() + "') isn't logged");
|
throw new IllegalArgumentException("This world ('" + world.getName() + "') isn't logged");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (bct == BlockChangeType.CHAT && !Config.isLogging(Logging.CHAT)) {
|
if (bct == BlockChangeType.CHAT) {
|
||||||
|
if (!Config.isLogging(Logging.CHAT)) {
|
||||||
throw new IllegalArgumentException("Chat is not logged");
|
throw new IllegalArgumentException("Chat is not logged");
|
||||||
}
|
}
|
||||||
|
if (sum != SummarizationMode.NONE) {
|
||||||
|
throw new IllegalArgumentException("Invalid summarization for chat");
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setLocation(Location loc) {
|
public void setLocation(Location loc) {
|
||||||
|
Reference in New Issue
Block a user