mirror of
https://github.com/plan-player-analytics/Plan.git
synced 2024-10-06 02:17:39 +02:00
Refactored NicknamesTable#insertNicknames to an executable
This commit is contained in:
parent
962faaf859
commit
2516c55872
@ -17,10 +17,14 @@
|
||||
package com.djrapitops.plan.db.access.transactions;
|
||||
|
||||
import com.djrapitops.plan.db.Database;
|
||||
import com.djrapitops.plan.db.access.Executable;
|
||||
import com.djrapitops.plan.db.access.Query;
|
||||
import com.djrapitops.plan.db.sql.queries.LargeFetchQueries;
|
||||
import com.djrapitops.plan.db.sql.queries.LargeStoreQueries;
|
||||
import com.djrapitops.plan.db.sql.tables.UsersTable;
|
||||
|
||||
import java.util.function.Function;
|
||||
|
||||
/**
|
||||
* Transaction that performs a clear + copy operation to duplicate a source database in the current one.
|
||||
*
|
||||
@ -56,20 +60,25 @@ public class BackupCopyTransaction extends RemoveEverythingTransaction {
|
||||
copyPings();
|
||||
}
|
||||
|
||||
private <T> void copy(Function<T, Executable> executableCreator, Query<T> dataQuery) {
|
||||
// Creates a new Executable from the queried data of the source database
|
||||
execute(executableCreator.apply(sourceDB.query(dataQuery)));
|
||||
}
|
||||
|
||||
private void copyPings() {
|
||||
db.getPingTable().insertAllPings(sourceDB.query(LargeFetchQueries.fetchAllPingData()));
|
||||
}
|
||||
|
||||
private void copyCommandUsageData() {
|
||||
execute(LargeStoreQueries.storeAllCommandUsageData(sourceDB.query(LargeFetchQueries.fetchAllCommandUsageData())));
|
||||
copy(LargeStoreQueries::storeAllCommandUsageData, LargeFetchQueries.fetchAllCommandUsageData());
|
||||
}
|
||||
|
||||
private void copyIPsAndGeolocs() {
|
||||
execute(LargeStoreQueries.storeAllGeoInfoData(sourceDB.query(LargeFetchQueries.fetchAllGeoInfoData())));
|
||||
copy(LargeStoreQueries::storeAllGeoInfoData, LargeFetchQueries.fetchAllGeoInfoData());
|
||||
}
|
||||
|
||||
private void copyNicknames() {
|
||||
db.getNicknamesTable().insertNicknames(sourceDB.query(LargeFetchQueries.fetchAllNicknameData()));
|
||||
copy(LargeStoreQueries::storeAllNicknameData, LargeFetchQueries.fetchAllNicknameData());
|
||||
}
|
||||
|
||||
private void copyWebUsers() {
|
||||
|
@ -17,10 +17,12 @@
|
||||
package com.djrapitops.plan.db.sql.queries;
|
||||
|
||||
import com.djrapitops.plan.data.container.GeoInfo;
|
||||
import com.djrapitops.plan.data.store.objects.Nickname;
|
||||
import com.djrapitops.plan.db.access.ExecBatchStatement;
|
||||
import com.djrapitops.plan.db.access.Executable;
|
||||
import com.djrapitops.plan.db.sql.tables.CommandUseTable;
|
||||
import com.djrapitops.plan.db.sql.tables.GeoInfoTable;
|
||||
import com.djrapitops.plan.db.sql.tables.NicknamesTable;
|
||||
import com.djrapitops.plugin.utilities.Verify;
|
||||
|
||||
import java.sql.PreparedStatement;
|
||||
@ -106,4 +108,32 @@ public class LargeStoreQueries {
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
public static Executable storeAllNicknameData(Map<UUID, Map<UUID, List<Nickname>>> ofServersAndUsers) {
|
||||
if (Verify.isEmpty(ofServersAndUsers)) {
|
||||
return Executable.empty();
|
||||
}
|
||||
|
||||
return new ExecBatchStatement(NicknamesTable.INSERT_STATEMENT) {
|
||||
@Override
|
||||
public void prepare(PreparedStatement statement) throws SQLException {
|
||||
// Every Server
|
||||
for (UUID serverUUID : ofServersAndUsers.keySet()) {
|
||||
// Every User
|
||||
for (Map.Entry<UUID, List<Nickname>> entry : ofServersAndUsers.get(serverUUID).entrySet()) {
|
||||
UUID uuid = entry.getKey();
|
||||
// Every Nickname
|
||||
List<Nickname> nicknames = entry.getValue();
|
||||
for (Nickname nickname : nicknames) {
|
||||
statement.setString(1, uuid.toString());
|
||||
statement.setString(2, serverUUID.toString());
|
||||
statement.setString(3, nickname.getName());
|
||||
statement.setLong(4, nickname.getDate());
|
||||
statement.addBatch();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
@ -27,7 +27,6 @@ import com.djrapitops.plan.db.patches.NicknamesOptimizationPatch;
|
||||
import com.djrapitops.plan.db.patches.Version10Patch;
|
||||
import com.djrapitops.plan.db.sql.parsing.CreateTableParser;
|
||||
import com.djrapitops.plan.db.sql.parsing.Sql;
|
||||
import com.djrapitops.plugin.utilities.Verify;
|
||||
|
||||
import java.sql.PreparedStatement;
|
||||
import java.sql.ResultSet;
|
||||
@ -56,21 +55,20 @@ public class NicknamesTable extends Table {
|
||||
public static final String NICKNAME = "nickname";
|
||||
public static final String LAST_USED = "last_used";
|
||||
|
||||
private String insertStatement;
|
||||
private final String updateStatement;
|
||||
public static final String INSERT_STATEMENT = "INSERT INTO " + TABLE_NAME + " (" +
|
||||
USER_UUID + ", " +
|
||||
SERVER_UUID + ", " +
|
||||
NICKNAME + ", " +
|
||||
LAST_USED +
|
||||
") VALUES (?, ?, ?, ?)";
|
||||
|
||||
public static final String UPDATE_STATEMENT = "UPDATE " + TABLE_NAME + " SET " + LAST_USED + "=?" +
|
||||
" WHERE " + NICKNAME + "=?" +
|
||||
" AND " + USER_UUID + "=?" +
|
||||
" AND " + SERVER_UUID + "=?";
|
||||
|
||||
public NicknamesTable(SQLDB db) {
|
||||
super(TABLE_NAME, db);
|
||||
insertStatement = "INSERT INTO " + tableName + " (" +
|
||||
USER_UUID + ", " +
|
||||
SERVER_UUID + ", " +
|
||||
NICKNAME + ", " +
|
||||
LAST_USED +
|
||||
") VALUES (?, ?, ?, ?)";
|
||||
updateStatement = "UPDATE " + tableName + " SET " + LAST_USED + "=?" +
|
||||
" WHERE " + NICKNAME + "=?" +
|
||||
" AND " + USER_UUID + "=?" +
|
||||
" AND " + SERVER_UUID + "=?";
|
||||
}
|
||||
|
||||
public static String createTableSQL(DBType dbType) {
|
||||
@ -170,7 +168,7 @@ public class NicknamesTable extends Table {
|
||||
}
|
||||
|
||||
private void updateNickname(UUID uuid, Nickname name) {
|
||||
execute(new ExecStatement(updateStatement) {
|
||||
execute(new ExecStatement(UPDATE_STATEMENT) {
|
||||
@Override
|
||||
public void prepare(PreparedStatement statement) throws SQLException {
|
||||
statement.setLong(1, name.getDate());
|
||||
@ -182,7 +180,7 @@ public class NicknamesTable extends Table {
|
||||
}
|
||||
|
||||
private void insertNickname(UUID uuid, Nickname name) {
|
||||
execute(new ExecStatement(insertStatement) {
|
||||
execute(new ExecStatement(INSERT_STATEMENT) {
|
||||
@Override
|
||||
public void prepare(PreparedStatement statement) throws SQLException {
|
||||
statement.setString(1, uuid.toString());
|
||||
@ -220,32 +218,4 @@ public class NicknamesTable extends Table {
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public void insertNicknames(Map<UUID, Map<UUID, List<Nickname>>> allNicknames) {
|
||||
if (Verify.isEmpty(allNicknames)) {
|
||||
return;
|
||||
}
|
||||
|
||||
executeBatch(new ExecStatement(insertStatement) {
|
||||
@Override
|
||||
public void prepare(PreparedStatement statement) throws SQLException {
|
||||
// Every Server
|
||||
for (UUID serverUUID : allNicknames.keySet()) {
|
||||
// Every User
|
||||
for (Map.Entry<UUID, List<Nickname>> entry : allNicknames.get(serverUUID).entrySet()) {
|
||||
UUID uuid = entry.getKey();
|
||||
// Every Nickname
|
||||
List<Nickname> nicknames = entry.getValue();
|
||||
for (Nickname nickname : nicknames) {
|
||||
statement.setString(1, uuid.toString());
|
||||
statement.setString(2, serverUUID.toString());
|
||||
statement.setString(3, nickname.getName());
|
||||
statement.setLong(4, nickname.getDate());
|
||||
statement.addBatch();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
@ -78,7 +78,12 @@ public class SQLSaveOps extends SQLOps implements SaveOperations {
|
||||
|
||||
@Override
|
||||
public void insertNicknames(Map<UUID, Map<UUID, List<Nickname>>> ofServers) {
|
||||
nicknamesTable.insertNicknames(ofServers);
|
||||
db.executeTransaction(new Transaction() {
|
||||
@Override
|
||||
protected void performOperations() {
|
||||
execute(LargeStoreQueries.storeAllNicknameData(ofServers));
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
|
Loading…
Reference in New Issue
Block a user