mirror of
https://github.com/plan-player-analytics/Plan.git
synced 2024-09-17 17:21:00 +02:00
Refactored KillsTable
This commit is contained in:
parent
d872fcf395
commit
040731aeb9
@ -28,5 +28,5 @@ public abstract class QueryAllStatement<T> extends QueryStatement<T> {
|
||||
}
|
||||
|
||||
@Override
|
||||
public abstract T processQuery(ResultSet set) throws SQLException;
|
||||
public abstract T processResults(ResultSet set) throws SQLException;
|
||||
}
|
@ -32,7 +32,7 @@ public abstract class QueryStatement<T> {
|
||||
statement.setFetchSize(fetchSize);
|
||||
prepare(statement);
|
||||
try (ResultSet set = statement.executeQuery()) {
|
||||
return processQuery(set);
|
||||
return processResults(set);
|
||||
}
|
||||
} finally {
|
||||
statement.close();
|
||||
@ -41,7 +41,7 @@ public abstract class QueryStatement<T> {
|
||||
|
||||
public abstract void prepare(PreparedStatement statement) throws SQLException;
|
||||
|
||||
public abstract T processQuery(ResultSet set) throws SQLException;
|
||||
public abstract T processResults(ResultSet set) throws SQLException;
|
||||
|
||||
public String getSql() {
|
||||
return sql;
|
||||
|
@ -106,7 +106,7 @@ public class ActionsTable extends UserIDTable {
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Action> processQuery(ResultSet set) throws SQLException {
|
||||
public List<Action> processResults(ResultSet set) throws SQLException {
|
||||
List<Action> actions = new ArrayList<>();
|
||||
while (set.next()) {
|
||||
int serverID = set.getInt(columnServerID);
|
||||
@ -137,7 +137,7 @@ public class ActionsTable extends UserIDTable {
|
||||
|
||||
return query(new QueryAllStatement<Map<UUID, Map<UUID, List<Action>>>>(sql, 20000) {
|
||||
@Override
|
||||
public Map<UUID, Map<UUID, List<Action>>> processQuery(ResultSet set) throws SQLException {
|
||||
public Map<UUID, Map<UUID, List<Action>>> processResults(ResultSet set) throws SQLException {
|
||||
Map<UUID, Map<UUID, List<Action>>> map = new HashMap<>();
|
||||
while (set.next()) {
|
||||
UUID serverUUID = UUID.fromString(set.getString("s_uuid"));
|
||||
|
@ -85,7 +85,7 @@ public class CommandUseTable extends Table {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<String, Integer> processQuery(ResultSet set) throws SQLException {
|
||||
public Map<String, Integer> processResults(ResultSet set) throws SQLException {
|
||||
Map<String, Integer> commandUse = new HashMap<>();
|
||||
while (set.next()) {
|
||||
String cmd = set.getString(columnCommand).toLowerCase();
|
||||
@ -140,7 +140,7 @@ public class CommandUseTable extends Table {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Optional<String> processQuery(ResultSet set) throws SQLException {
|
||||
public Optional<String> processResults(ResultSet set) throws SQLException {
|
||||
if (set.next()) {
|
||||
return Optional.of(set.getString(columnCommand));
|
||||
}
|
||||
@ -159,7 +159,7 @@ public class CommandUseTable extends Table {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Optional<Integer> processQuery(ResultSet set) throws SQLException {
|
||||
public Optional<Integer> processResults(ResultSet set) throws SQLException {
|
||||
if (set.next()) {
|
||||
return Optional.of(set.getInt(columnCommandId));
|
||||
}
|
||||
@ -180,7 +180,7 @@ public class CommandUseTable extends Table {
|
||||
|
||||
return query(new QueryAllStatement<Map<UUID, Map<String, Integer>>>(sql, 10000) {
|
||||
@Override
|
||||
public Map<UUID, Map<String, Integer>> processQuery(ResultSet set) throws SQLException {
|
||||
public Map<UUID, Map<String, Integer>> processResults(ResultSet set) throws SQLException {
|
||||
Map<UUID, Map<String, Integer>> map = new HashMap<>();
|
||||
while (set.next()) {
|
||||
UUID serverUUID = UUID.fromString(set.getString("s_uuid"));
|
||||
|
@ -75,7 +75,7 @@ public class IPsTable extends UserIDTable {
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> processQuery(ResultSet set) throws SQLException {
|
||||
public List<String> processResults(ResultSet set) throws SQLException {
|
||||
List<String> stringList = new ArrayList<>();
|
||||
while (set.next()) {
|
||||
stringList.add(set.getString(column));
|
||||
@ -116,7 +116,7 @@ public class IPsTable extends UserIDTable {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Optional<String> processQuery(ResultSet set) throws SQLException {
|
||||
public Optional<String> processResults(ResultSet set) throws SQLException {
|
||||
if (set.next()) {
|
||||
return Optional.of(set.getString(columnGeolocation));
|
||||
}
|
||||
@ -136,7 +136,7 @@ public class IPsTable extends UserIDTable {
|
||||
|
||||
return query(new QueryAllStatement<Map<UUID, List<String>>>(sql, 50000) {
|
||||
@Override
|
||||
public Map<UUID, List<String>> processQuery(ResultSet set) throws SQLException {
|
||||
public Map<UUID, List<String>> processResults(ResultSet set) throws SQLException {
|
||||
Map<UUID, List<String>> geoLocations = new HashMap<>();
|
||||
while (set.next()) {
|
||||
UUID uuid = UUID.fromString(set.getString("uuid"));
|
||||
@ -162,7 +162,7 @@ public class IPsTable extends UserIDTable {
|
||||
|
||||
return query(new QueryAllStatement<Map<UUID, Map<String, String>>>(sql, 50000) {
|
||||
@Override
|
||||
public Map<UUID, Map<String, String>> processQuery(ResultSet set) throws SQLException {
|
||||
public Map<UUID, Map<String, String>> processResults(ResultSet set) throws SQLException {
|
||||
Map<UUID, Map<String, String>> map = new HashMap<>();
|
||||
while (set.next()) {
|
||||
UUID uuid = UUID.fromString(set.getString("uuid"));
|
||||
|
@ -1,16 +1,16 @@
|
||||
package main.java.com.djrapitops.plan.database.tables;
|
||||
|
||||
import com.djrapitops.plugin.utilities.Verify;
|
||||
import main.java.com.djrapitops.plan.Plan;
|
||||
import main.java.com.djrapitops.plan.api.exceptions.DBCreateTableException;
|
||||
import main.java.com.djrapitops.plan.data.PlayerKill;
|
||||
import main.java.com.djrapitops.plan.data.Session;
|
||||
import main.java.com.djrapitops.plan.data.time.GMTimes;
|
||||
import main.java.com.djrapitops.plan.database.databases.SQLDB;
|
||||
import main.java.com.djrapitops.plan.database.processing.ExecStatement;
|
||||
import main.java.com.djrapitops.plan.database.processing.QueryAllStatement;
|
||||
import main.java.com.djrapitops.plan.database.processing.QueryStatement;
|
||||
import main.java.com.djrapitops.plan.database.sql.Sql;
|
||||
import main.java.com.djrapitops.plan.database.sql.TableSqlParser;
|
||||
|
||||
import java.sql.Connection;
|
||||
import java.sql.PreparedStatement;
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
@ -62,122 +62,109 @@ public class KillsTable extends UserIDTable {
|
||||
|
||||
@Override
|
||||
public void removeUser(UUID uuid) throws SQLException {
|
||||
PreparedStatement statement = null;
|
||||
try (Connection connection = getConnection()) {
|
||||
statement = connection.prepareStatement("DELETE FROM " + tableName +
|
||||
" WHERE " + columnKillerUserID + " = " + usersTable.statementSelectID +
|
||||
" OR " + columnVictimUserID + " = " + usersTable.statementSelectID);
|
||||
statement.setString(1, uuid.toString());
|
||||
statement.setString(2, uuid.toString());
|
||||
String sql = "DELETE FROM " + tableName +
|
||||
" WHERE " + columnKillerUserID + " = " + usersTable.statementSelectID +
|
||||
" OR " + columnVictimUserID + " = " + usersTable.statementSelectID;
|
||||
|
||||
statement.execute();
|
||||
commit(connection);
|
||||
} finally {
|
||||
close(statement);
|
||||
}
|
||||
execute(new ExecStatement(sql) {
|
||||
@Override
|
||||
public void prepare(PreparedStatement statement) throws SQLException {
|
||||
statement.setString(1, uuid.toString());
|
||||
statement.setString(2, uuid.toString());
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public void savePlayerKills(UUID uuid, int sessionID, List<PlayerKill> playerKills) throws SQLException {
|
||||
if (Verify.isEmpty(playerKills)) {
|
||||
return;
|
||||
}
|
||||
PreparedStatement statement = null;
|
||||
try (Connection connection = getConnection()) {
|
||||
statement = connection.prepareStatement(insertStatement);
|
||||
for (PlayerKill kill : playerKills) {
|
||||
UUID victim = kill.getVictim();
|
||||
long date = kill.getTime();
|
||||
String weapon = kill.getWeapon();
|
||||
statement.setString(1, uuid.toString());
|
||||
statement.setString(2, victim.toString());
|
||||
statement.setInt(3, sessionID);
|
||||
statement.setLong(4, date);
|
||||
statement.setString(5, weapon);
|
||||
statement.addBatch();
|
||||
}
|
||||
|
||||
statement.executeBatch();
|
||||
commit(connection);
|
||||
} finally {
|
||||
close(statement);
|
||||
}
|
||||
executeBatch(new ExecStatement(insertStatement) {
|
||||
@Override
|
||||
public void prepare(PreparedStatement statement) throws SQLException {
|
||||
for (PlayerKill kill : playerKills) {
|
||||
UUID victim = kill.getVictim();
|
||||
long date = kill.getTime();
|
||||
String weapon = kill.getWeapon();
|
||||
statement.setString(1, uuid.toString());
|
||||
statement.setString(2, victim.toString());
|
||||
statement.setInt(3, sessionID);
|
||||
statement.setLong(4, date);
|
||||
statement.setString(5, weapon);
|
||||
statement.addBatch();
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public void addKillsToSessions(UUID uuid, Map<Integer, Session> sessions) throws SQLException {
|
||||
PreparedStatement statement = null;
|
||||
ResultSet set = null;
|
||||
try (Connection connection = getConnection()) {
|
||||
String usersIDColumn = usersTable + "." + usersTable.getColumnID();
|
||||
String usersUUIDColumn = usersTable + "." + usersTable.getColumnUUID() + " as victim_uuid";
|
||||
statement = connection.prepareStatement("SELECT " +
|
||||
columnSessionID + ", " +
|
||||
columnDate + ", " +
|
||||
columnWeapon + ", " +
|
||||
usersUUIDColumn +
|
||||
" FROM " + tableName +
|
||||
" JOIN " + usersTable + " on " + usersIDColumn + "=" + columnVictimUserID +
|
||||
" WHERE " + columnKillerUserID + "=" + usersTable.statementSelectID);
|
||||
String usersIDColumn = usersTable + "." + usersTable.getColumnID();
|
||||
String usersUUIDColumn = usersTable + "." + usersTable.getColumnUUID() + " as victim_uuid";
|
||||
String sql = "SELECT " +
|
||||
columnSessionID + ", " +
|
||||
columnDate + ", " +
|
||||
columnWeapon + ", " +
|
||||
usersUUIDColumn +
|
||||
" FROM " + tableName +
|
||||
" JOIN " + usersTable + " on " + usersIDColumn + "=" + columnVictimUserID +
|
||||
" WHERE " + columnKillerUserID + "=" + usersTable.statementSelectID;
|
||||
|
||||
statement.setFetchSize(10000);
|
||||
statement.setString(1, uuid.toString());
|
||||
|
||||
set = statement.executeQuery();
|
||||
|
||||
while (set.next()) {
|
||||
int sessionID = set.getInt(columnSessionID);
|
||||
Session session = sessions.get(sessionID);
|
||||
if (session == null) {
|
||||
continue;
|
||||
}
|
||||
String uuidS = set.getString("victim_uuid");
|
||||
UUID victim = UUID.fromString(uuidS);
|
||||
long date = set.getLong(columnDate);
|
||||
String weapon = set.getString(columnWeapon);
|
||||
session.getPlayerKills().add(new PlayerKill(victim, weapon, date));
|
||||
query(new QueryStatement<Object>(sql, 50000) {
|
||||
@Override
|
||||
public void prepare(PreparedStatement statement) throws SQLException {
|
||||
statement.setString(1, uuid.toString());
|
||||
}
|
||||
} finally {
|
||||
close(set, statement);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object processResults(ResultSet set) throws SQLException {
|
||||
while (set.next()) {
|
||||
int sessionID = set.getInt(columnSessionID);
|
||||
Session session = sessions.get(sessionID);
|
||||
if (session == null) {
|
||||
continue;
|
||||
}
|
||||
String uuidS = set.getString("victim_uuid");
|
||||
UUID victim = UUID.fromString(uuidS);
|
||||
long date = set.getLong(columnDate);
|
||||
String weapon = set.getString(columnWeapon);
|
||||
session.getPlayerKills().add(new PlayerKill(victim, weapon, date));
|
||||
}
|
||||
return null;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public Map<UUID, List<PlayerKill>> getPlayerKills() throws SQLException {
|
||||
return getPlayerKills(Plan.getServerUUID());
|
||||
}
|
||||
String usersVictimIDColumn = usersTable + "." + usersTable.getColumnID();
|
||||
String usersKillerIDColumn = "a." + usersTable.getColumnID();
|
||||
String usersVictimUUIDColumn = usersTable + "." + usersTable.getColumnUUID() + " as victim_uuid";
|
||||
String usersKillerUUIDColumn = "a." + usersTable.getColumnUUID() + " as killer_uuid";
|
||||
String sql = "SELECT " +
|
||||
columnDate + ", " +
|
||||
columnWeapon + ", " +
|
||||
usersVictimUUIDColumn + ", " +
|
||||
usersKillerUUIDColumn +
|
||||
" FROM " + tableName +
|
||||
" JOIN " + usersTable + " on " + usersVictimIDColumn + "=" + columnVictimUserID +
|
||||
" JOIN " + usersTable + " a on " + usersKillerIDColumn + "=" + columnKillerUserID;
|
||||
|
||||
public Map<UUID, List<PlayerKill>> getPlayerKills(UUID serverUUID) throws SQLException {
|
||||
PreparedStatement statement = null;
|
||||
ResultSet set = null;
|
||||
try (Connection connection = getConnection()) {
|
||||
String usersVictimIDColumn = usersTable + "." + usersTable.getColumnID();
|
||||
String usersKillerIDColumn = "a." + usersTable.getColumnID();
|
||||
String usersVictimUUIDColumn = usersTable + "." + usersTable.getColumnUUID() + " as victim_uuid";
|
||||
String usersKillerUUIDColumn = "a." + usersTable.getColumnUUID() + " as killer_uuid";
|
||||
statement = connection.prepareStatement("SELECT " +
|
||||
columnDate + ", " +
|
||||
columnWeapon + ", " +
|
||||
usersVictimUUIDColumn + ", " +
|
||||
usersKillerUUIDColumn +
|
||||
" FROM " + tableName +
|
||||
" JOIN " + usersTable + " on " + usersVictimIDColumn + "=" + columnVictimUserID +
|
||||
" JOIN " + usersTable + " a on " + usersKillerIDColumn + "=" + columnKillerUserID);
|
||||
|
||||
statement.setFetchSize(50000);
|
||||
set = statement.executeQuery();
|
||||
|
||||
Map<UUID, List<PlayerKill>> allKills = new HashMap<>();
|
||||
while (set.next()) {
|
||||
UUID killer = UUID.fromString(set.getString("killer_uuid"));
|
||||
UUID victim = UUID.fromString(set.getString("victim_uuid"));
|
||||
long date = set.getLong(columnDate);
|
||||
String weapon = set.getString(columnWeapon);
|
||||
List<PlayerKill> kills = allKills.getOrDefault(killer, new ArrayList<>());
|
||||
kills.add(new PlayerKill(victim, weapon, date));
|
||||
allKills.put(killer, kills);
|
||||
return query(new QueryAllStatement<Map<UUID, List<PlayerKill>>>(sql, 50000) {
|
||||
@Override
|
||||
public Map<UUID, List<PlayerKill>> processResults(ResultSet set) throws SQLException {
|
||||
Map<UUID, List<PlayerKill>> allKills = new HashMap<>();
|
||||
while (set.next()) {
|
||||
UUID killer = UUID.fromString(set.getString("killer_uuid"));
|
||||
UUID victim = UUID.fromString(set.getString("victim_uuid"));
|
||||
long date = set.getLong(columnDate);
|
||||
String weapon = set.getString(columnWeapon);
|
||||
List<PlayerKill> kills = allKills.getOrDefault(killer, new ArrayList<>());
|
||||
kills.add(new PlayerKill(victim, weapon, date));
|
||||
allKills.put(killer, kills);
|
||||
}
|
||||
return allKills;
|
||||
}
|
||||
return allKills;
|
||||
} finally {
|
||||
close(set, statement);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public void addKillsToSessions(Map<UUID, Map<UUID, List<Session>>> map) throws SQLException {
|
||||
@ -198,73 +185,68 @@ public class KillsTable extends UserIDTable {
|
||||
if (Verify.isEmpty(allSessions)) {
|
||||
return;
|
||||
}
|
||||
PreparedStatement statement = null;
|
||||
try (Connection connection = getConnection()) {
|
||||
statement = connection.prepareStatement(insertStatement);
|
||||
String[] gms = GMTimes.getGMKeyArray();
|
||||
for (UUID serverUUID : allSessions.keySet()) {
|
||||
for (Map.Entry<UUID, List<Session>> entry : allSessions.get(serverUUID).entrySet()) {
|
||||
UUID killer = entry.getKey();
|
||||
List<Session> sessions = entry.getValue();
|
||||
|
||||
for (Session session : sessions) {
|
||||
int sessionID = session.getSessionID();
|
||||
for (PlayerKill kill : session.getPlayerKills()) {
|
||||
UUID victim = kill.getVictim();
|
||||
long date = kill.getTime();
|
||||
String weapon = kill.getWeapon();
|
||||
statement.setString(1, killer.toString());
|
||||
statement.setString(2, victim.toString());
|
||||
statement.setInt(3, sessionID);
|
||||
statement.setLong(4, date);
|
||||
statement.setString(5, weapon);
|
||||
statement.addBatch();
|
||||
executeBatch(new ExecStatement(insertStatement) {
|
||||
@Override
|
||||
public void prepare(PreparedStatement statement) throws SQLException {
|
||||
// Every server
|
||||
for (UUID serverUUID : allSessions.keySet()) {
|
||||
// Every player
|
||||
for (Map.Entry<UUID, List<Session>> entry : allSessions.get(serverUUID).entrySet()) {
|
||||
UUID killer = entry.getKey();
|
||||
List<Session> sessions = entry.getValue();
|
||||
// Every session
|
||||
for (Session session : sessions) {
|
||||
int sessionID = session.getSessionID();
|
||||
// Every kill
|
||||
for (PlayerKill kill : session.getPlayerKills()) {
|
||||
UUID victim = kill.getVictim();
|
||||
long date = kill.getTime();
|
||||
String weapon = kill.getWeapon();
|
||||
statement.setString(1, killer.toString());
|
||||
statement.setString(2, victim.toString());
|
||||
statement.setInt(3, sessionID);
|
||||
statement.setLong(4, date);
|
||||
statement.setString(5, weapon);
|
||||
statement.addBatch();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
statement.executeBatch();
|
||||
commit(connection);
|
||||
} finally {
|
||||
close(statement);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public Map<Integer, List<PlayerKill>> getAllPlayerKillsBySessionID() throws SQLException {
|
||||
PreparedStatement statement = null;
|
||||
ResultSet set = null;
|
||||
try (Connection connection = getConnection()) {
|
||||
String usersIDColumn = usersTable + "." + usersTable.getColumnID();
|
||||
String usersUUIDColumn = usersTable + "." + usersTable.getColumnUUID() + " as victim_uuid";
|
||||
statement = connection.prepareStatement("SELECT " +
|
||||
columnSessionID + ", " +
|
||||
columnDate + ", " +
|
||||
columnWeapon + ", " +
|
||||
usersUUIDColumn +
|
||||
" FROM " + tableName +
|
||||
" JOIN " + usersTable + " on " + usersIDColumn + "=" + columnVictimUserID);
|
||||
String usersIDColumn = usersTable + "." + usersTable.getColumnID();
|
||||
String usersUUIDColumn = usersTable + "." + usersTable.getColumnUUID() + " as victim_uuid";
|
||||
String sql = "SELECT " +
|
||||
columnSessionID + ", " +
|
||||
columnDate + ", " +
|
||||
columnWeapon + ", " +
|
||||
usersUUIDColumn +
|
||||
" FROM " + tableName +
|
||||
" JOIN " + usersTable + " on " + usersIDColumn + "=" + columnVictimUserID;
|
||||
|
||||
statement.setFetchSize(50000);
|
||||
return query(new QueryAllStatement<Map<Integer, List<PlayerKill>>>(sql, 50000) {
|
||||
@Override
|
||||
public Map<Integer, List<PlayerKill>> processResults(ResultSet set) throws SQLException {
|
||||
Map<Integer, List<PlayerKill>> allPlayerKills = new HashMap<>();
|
||||
while (set.next()) {
|
||||
int sessionID = set.getInt(columnSessionID);
|
||||
|
||||
set = statement.executeQuery();
|
||||
List<PlayerKill> playerKills = allPlayerKills.getOrDefault(sessionID, new ArrayList<>());
|
||||
|
||||
Map<Integer, List<PlayerKill>> allPlayerKills = new HashMap<>();
|
||||
while (set.next()) {
|
||||
int sessionID = set.getInt(columnSessionID);
|
||||
String uuidS = set.getString("victim_uuid");
|
||||
UUID victim = UUID.fromString(uuidS);
|
||||
long date = set.getLong(columnDate);
|
||||
String weapon = set.getString(columnWeapon);
|
||||
playerKills.add(new PlayerKill(victim, weapon, date));
|
||||
|
||||
List<PlayerKill> playerKills = allPlayerKills.getOrDefault(sessionID, new ArrayList<>());
|
||||
|
||||
String uuidS = set.getString("victim_uuid");
|
||||
UUID victim = UUID.fromString(uuidS);
|
||||
long date = set.getLong(columnDate);
|
||||
String weapon = set.getString(columnWeapon);
|
||||
playerKills.add(new PlayerKill(victim, weapon, date));
|
||||
|
||||
allPlayerKills.put(sessionID, playerKills);
|
||||
allPlayerKills.put(sessionID, playerKills);
|
||||
}
|
||||
return allPlayerKills;
|
||||
}
|
||||
return allPlayerKills;
|
||||
} finally {
|
||||
close(set, statement);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user