CommandUseTable, Plan.getServerUUID method.

This commit is contained in:
Rsl1122 2017-08-22 16:20:18 +03:00
parent fe9c32c324
commit 44c9ee3925
4 changed files with 97 additions and 19 deletions

View File

@ -53,6 +53,7 @@ import org.bukkit.ChatColor;
import java.util.HashSet; import java.util.HashSet;
import java.util.Set; import java.util.Set;
import java.util.UUID;
import java.util.concurrent.Executors; import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.ScheduledExecutorService;
@ -484,4 +485,8 @@ public class Plan extends BukkitPlugin<Plan> {
processingQueue.addToQueue(processor); processingQueue.addToQueue(processor);
} }
} }
public static UUID getServerUUID() {
return getInstance().serverInfoManager.getServerUUID();
}
} }

View File

@ -81,7 +81,7 @@ public class ActionsTable extends UserIDTable {
+ "?, ?, ?)" + "?, ?, ?)"
); );
statement.setString(1, uuid.toString()); statement.setString(1, uuid.toString());
statement.setString(2, Plan.getInstance().getServerInfoManager().getServerUUID().toString()); statement.setString(2, Plan.getServerUUID().toString());
statement.setInt(3, action.getDoneAction().getId()); statement.setInt(3, action.getDoneAction().getId());
statement.setLong(4, action.getDate()); statement.setLong(4, action.getDate());
statement.setString(5, action.getAdditionalInfo()); statement.setString(5, action.getAdditionalInfo());

View File

@ -2,7 +2,9 @@ package main.java.com.djrapitops.plan.database.tables;
import com.djrapitops.plugin.utilities.Verify; import com.djrapitops.plugin.utilities.Verify;
import main.java.com.djrapitops.plan.Log; import main.java.com.djrapitops.plan.Log;
import main.java.com.djrapitops.plan.Plan;
import main.java.com.djrapitops.plan.database.databases.SQLDB; import main.java.com.djrapitops.plan.database.databases.SQLDB;
import main.java.com.djrapitops.plan.database.sql.Select;
import main.java.com.djrapitops.plan.database.sql.Sql; import main.java.com.djrapitops.plan.database.sql.Sql;
import main.java.com.djrapitops.plan.database.sql.TableSqlParser; import main.java.com.djrapitops.plan.database.sql.TableSqlParser;
import main.java.com.djrapitops.plan.utilities.Benchmark; import main.java.com.djrapitops.plan.utilities.Benchmark;
@ -12,15 +14,19 @@ import java.sql.ResultSet;
import java.sql.SQLException; import java.sql.SQLException;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
import java.util.Optional;
import java.util.UUID;
/** /**
* @author Rsl1122 * @author Rsl1122
*/ */
public class CommandUseTable extends Table { public class CommandUseTable extends Table {
private final String columnCommand; private final String columnCommandId = "id";
private final String columnTimesUsed; private final String columnCommand = "command";
private final String columnServerID; //TODO private final String columnTimesUsed = "times_used";
private final String columnServerID = "server_id";
private ServerTable serverTable;
/** /**
* @param db * @param db
@ -28,9 +34,7 @@ public class CommandUseTable extends Table {
*/ */
public CommandUseTable(SQLDB db, boolean usingMySQL) { public CommandUseTable(SQLDB db, boolean usingMySQL) {
super("plan_commandusages", db, usingMySQL); super("plan_commandusages", db, usingMySQL);
columnCommand = "command"; serverTable = db.getServerTable();
columnTimesUsed = "times_used";
columnServerID = "server_id";
} }
/** /**
@ -38,10 +42,15 @@ public class CommandUseTable extends Table {
*/ */
@Override @Override
public boolean createTable() { public boolean createTable() {
ServerTable serverTable = db.getServerTable();
try { try {
execute(TableSqlParser.createTable(tableName) execute(TableSqlParser.createTable(tableName)
.primaryKeyIDColumn(usingMySQL, columnCommandId, Sql.INT)
.column(columnCommand, Sql.varchar(20)).notNull() .column(columnCommand, Sql.varchar(20)).notNull()
.column(columnTimesUsed, Sql.INT).notNull() .column(columnTimesUsed, Sql.INT).notNull()
.column(columnServerID, Sql.INT).notNull()
.primaryKey(usingMySQL, columnCommandId)
.foreignKey(columnServerID, serverTable.toString(), serverTable.getColumnID())
.toString() .toString()
); );
return true; return true;
@ -52,15 +61,34 @@ public class CommandUseTable extends Table {
} }
/** /**
* @return @throws SQLException * Used to get all commands used in this server.
*
* @return command - times used Map
* @throws SQLException
*/ */
public Map<String, Integer> getCommandUse() throws SQLException { public Map<String, Integer> getCommandUse() throws SQLException {
return getCommandUse(Plan.getServerUUID());
}
/**
* Used to get all commands used in a server.
*
* @param serverUUID UUID of the server.
* @return command - times used Map
* @throws SQLException
*/
public Map<String, Integer> getCommandUse(UUID serverUUID) throws SQLException {
ServerTable serverTable = db.getServerTable();
Benchmark.start("Get CommandUse"); Benchmark.start("Get CommandUse");
Map<String, Integer> commandUse = new HashMap<>(); Map<String, Integer> commandUse = new HashMap<>();
PreparedStatement statement = null; PreparedStatement statement = null;
ResultSet set = null; ResultSet set = null;
try { try {
statement = prepareStatement("SELECT * FROM " + tableName); statement = prepareStatement(Select.from(tableName,
columnCommand, columnTimesUsed)
.where(columnServerID + "=" + serverTable.statementSelectServerID)
.toString());
statement.setString(1, serverUUID.toString());
set = statement.executeQuery(); set = statement.executeQuery();
while (set.next()) { while (set.next()) {
String cmd = set.getString(columnCommand).toLowerCase(); String cmd = set.getString(columnCommand).toLowerCase();
@ -102,7 +130,6 @@ public class CommandUseTable extends Table {
String cmd = savedEntry.getKey(); String cmd = savedEntry.getKey();
// IMPORTANT - not using saved as value // IMPORTANT - not using saved as value
Integer toSave = updateData.get(cmd); Integer toSave = updateData.get(cmd);
if (toSave != null && toSave <= savedEntry.getValue()) { if (toSave != null && toSave <= savedEntry.getValue()) {
updateData.remove(cmd); updateData.remove(cmd);
} }
@ -117,7 +144,10 @@ public class CommandUseTable extends Table {
private void updateCommands(Map<String, Integer> data) throws SQLException { private void updateCommands(Map<String, Integer> data) throws SQLException {
PreparedStatement statement = null; PreparedStatement statement = null;
try { try {
String updateStatement = "UPDATE " + tableName + " SET " + columnTimesUsed + "=? WHERE (" + columnCommand + "=?)"; String updateStatement = "UPDATE " + tableName + " SET " +
columnTimesUsed + "=? " +
"WHERE (" + columnCommand + "=?) AND (" +
columnServerID + "=" + serverTable.statementSelectServerID + ")";
statement = prepareStatement(updateStatement); statement = prepareStatement(updateStatement);
boolean commitRequired = false; boolean commitRequired = false;
for (Map.Entry<String, Integer> entrySet : data.entrySet()) { for (Map.Entry<String, Integer> entrySet : data.entrySet()) {
@ -130,6 +160,7 @@ public class CommandUseTable extends Table {
statement.setInt(1, amount); statement.setInt(1, amount);
statement.setString(2, key); statement.setString(2, key);
statement.setString(3, Plan.getServerUUID().toString());
statement.addBatch(); statement.addBatch();
commitRequired = true; commitRequired = true;
} }
@ -147,10 +178,11 @@ public class CommandUseTable extends Table {
try { try {
String insertStatement = "INSERT INTO " + tableName + " (" String insertStatement = "INSERT INTO " + tableName + " ("
+ columnCommand + ", " + columnCommand + ", "
+ columnTimesUsed + columnTimesUsed + ", "
+ ") VALUES (?, ?)"; + columnServerID
+ ") VALUES (?, ?, " + serverTable.statementSelectServerID + ")";
statement = prepareStatement(insertStatement); statement = prepareStatement(insertStatement);
boolean commitRequired = false; boolean addedRows = false;
for (Map.Entry<String, Integer> entrySet : data.entrySet()) { for (Map.Entry<String, Integer> entrySet : data.entrySet()) {
String key = entrySet.getKey(); String key = entrySet.getKey();
Integer amount = entrySet.getValue(); Integer amount = entrySet.getValue();
@ -161,15 +193,48 @@ public class CommandUseTable extends Table {
statement.setString(1, key); statement.setString(1, key);
statement.setInt(2, amount); statement.setInt(2, amount);
statement.setString(3, Plan.getServerUUID().toString());
statement.addBatch(); statement.addBatch();
commitRequired = true; addedRows = true;
} }
if (commitRequired) { if (addedRows) {
statement.executeBatch(); statement.executeBatch();
} }
} finally { } finally {
close(statement); close(statement);
} }
} }
public Optional<String> getCommandByID(int id) throws SQLException {
PreparedStatement statement = null;
ResultSet set = null;
try {
statement = prepareStatement(Select.from(tableName, columnCommand).where(columnCommandId + "=?").toString());
statement.setInt(1, id);
set = statement.executeQuery();
if (set.next()) {
return Optional.of(set.getString(columnCommand));
}
return Optional.empty();
} finally {
close(statement);
}
}
public Optional<Integer> getCommandID(String command) throws SQLException {
PreparedStatement statement = null;
ResultSet set = null;
try {
statement = prepareStatement(Select.from(tableName, columnCommandId).where(columnCommand + "=?").toString());
statement.setString(1, command);
set = statement.executeQuery();
if (set.next()) {
return Optional.of(set.getInt(columnCommandId));
}
return Optional.empty();
} finally {
close(statement);
}
}
} }

View File

@ -19,9 +19,17 @@ import java.util.Optional;
import java.util.UUID; import java.util.UUID;
/** /**
* Table representing plan_servers in the database. * Table for managing multiple server's data in the database.
* <p> * <p>
* Used for managing multiple server's data in the database. * plan_servers contains columns:
* <ul>
* <li>id</li>
* <li>uuid</li>
* <li>name</li>
* <li>web_address</li>
* <li>is_installed</li>
* </ul>
* Columns refer to Server Information.
* *
* @author Rsl1122 * @author Rsl1122
*/ */
@ -226,6 +234,6 @@ public class ServerTable extends Table {
} }
public String getColumnID() { public String getColumnID() {
return columnServerID; return tableName + "." + columnServerID;
} }
} }