mirror of
https://github.com/plan-player-analytics/Plan.git
synced 2025-02-05 06:51:45 +01:00
Refactored UserInfoTable
This commit is contained in:
parent
c8b389643a
commit
e1ec3532c5
@ -9,12 +9,14 @@ import main.java.com.djrapitops.plan.Plan;
|
||||
import main.java.com.djrapitops.plan.api.exceptions.DBCreateTableException;
|
||||
import main.java.com.djrapitops.plan.data.UserInfo;
|
||||
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.Select;
|
||||
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.Update;
|
||||
|
||||
import java.sql.Connection;
|
||||
import java.sql.PreparedStatement;
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
@ -59,57 +61,56 @@ public class UserInfoTable extends UserIDTable {
|
||||
usersTable.registerUser(uuid, registered, "Waiting for Update..");
|
||||
}
|
||||
|
||||
PreparedStatement statement = null;
|
||||
try (Connection connection = getConnection()) {
|
||||
statement = connection.prepareStatement("INSERT INTO " + tableName + " (" +
|
||||
columnUserID + ", " +
|
||||
columnRegistered + ", " +
|
||||
columnServerID +
|
||||
") VALUES (" +
|
||||
usersTable.statementSelectID + ", " +
|
||||
"?, " +
|
||||
serverTable.statementSelectServerID + ")");
|
||||
statement.setString(1, uuid.toString());
|
||||
statement.setLong(2, registered);
|
||||
statement.setString(3, Plan.getServerUUID().toString());
|
||||
String sql = "INSERT INTO " + tableName + " (" +
|
||||
columnUserID + ", " +
|
||||
columnRegistered + ", " +
|
||||
columnServerID +
|
||||
") VALUES (" +
|
||||
usersTable.statementSelectID + ", " +
|
||||
"?, " +
|
||||
serverTable.statementSelectServerID + ")";
|
||||
|
||||
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.setLong(2, registered);
|
||||
statement.setString(3, Plan.getServerUUID().toString());
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public boolean isRegistered(UUID uuid) throws SQLException {
|
||||
PreparedStatement statement = null;
|
||||
ResultSet set = null;
|
||||
try (Connection connection = getConnection()) {
|
||||
statement = connection.prepareStatement(Select.from(tableName, "COUNT(" + columnUserID + ") as c")
|
||||
.where(columnUserID + "=" + usersTable.statementSelectID)
|
||||
.toString());
|
||||
statement.setString(1, uuid.toString());
|
||||
set = statement.executeQuery();
|
||||
return set.next() && set.getInt("c") >= 1;
|
||||
} finally {
|
||||
close(set, statement);
|
||||
}
|
||||
String sql = Select.from(tableName, "COUNT(" + columnUserID + ") as c")
|
||||
.where(columnUserID + "=" + usersTable.statementSelectID)
|
||||
.toString();
|
||||
|
||||
return query(new QueryStatement<Boolean>(sql) {
|
||||
@Override
|
||||
public void prepare(PreparedStatement statement) throws SQLException {
|
||||
statement.setString(1, uuid.toString());
|
||||
}
|
||||
|
||||
@Override
|
||||
public Boolean processResults(ResultSet set) throws SQLException {
|
||||
return set.next() && set.getInt("c") >= 1;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public void updateOpAndBanStatus(UUID uuid, boolean opped, boolean banned) throws SQLException {
|
||||
PreparedStatement statement = null;
|
||||
try (Connection connection = getConnection()) {
|
||||
statement = connection.prepareStatement(Update.values(tableName, columnOP, columnBanned)
|
||||
.where(columnUserID + "=" + usersTable.statementSelectID)
|
||||
.toString());
|
||||
statement.setBoolean(1, opped);
|
||||
statement.setBoolean(2, banned);
|
||||
statement.setString(3, uuid.toString());
|
||||
String sql = Update.values(tableName, columnOP, columnBanned)
|
||||
.where(columnUserID + "=" + usersTable.statementSelectID)
|
||||
.toString();
|
||||
|
||||
statement.execute();
|
||||
commit(connection);
|
||||
} finally {
|
||||
close(statement);
|
||||
}
|
||||
execute(new ExecStatement(sql) {
|
||||
@Override
|
||||
public void prepare(PreparedStatement statement) throws SQLException {
|
||||
statement.setBoolean(1, opped);
|
||||
statement.setBoolean(2, banned);
|
||||
statement.setString(3, uuid.toString());
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public UserInfo getUserInfo(UUID uuid) throws SQLException {
|
||||
@ -117,36 +118,37 @@ public class UserInfoTable extends UserIDTable {
|
||||
}
|
||||
|
||||
public UserInfo getUserInfo(UUID uuid, UUID serverUUID) throws SQLException {
|
||||
PreparedStatement statement = null;
|
||||
ResultSet set = null;
|
||||
try (Connection connection = getConnection()) {
|
||||
String usersIDColumn = usersTable + "." + usersTable.getColumnID();
|
||||
String usersNameColumn = usersTable + "." + usersTable.getColumnName() + " as name";
|
||||
statement = connection.prepareStatement("SELECT " +
|
||||
tableName + "." + columnRegistered + ", " +
|
||||
columnOP + ", " +
|
||||
columnBanned + ", " +
|
||||
usersNameColumn +
|
||||
" FROM " + tableName +
|
||||
" JOIN " + usersTable + " on " + usersIDColumn + "=" + columnUserID +
|
||||
" WHERE " + columnUserID + "=" + usersTable.statementSelectID +
|
||||
" AND " + columnServerID + "=" + serverTable.statementSelectServerID
|
||||
);
|
||||
statement.setFetchSize(20000);
|
||||
statement.setString(1, uuid.toString());
|
||||
statement.setString(2, serverUUID.toString());
|
||||
set = statement.executeQuery();
|
||||
if (set.next()) {
|
||||
long registered = set.getLong(columnRegistered);
|
||||
boolean opped = set.getBoolean(columnOP);
|
||||
boolean banned = set.getBoolean(columnBanned);
|
||||
String name = set.getString("name");
|
||||
return new UserInfo(uuid, name, registered, opped, banned);
|
||||
String usersIDColumn = usersTable + "." + usersTable.getColumnID();
|
||||
String usersNameColumn = usersTable + "." + usersTable.getColumnName() + " as name";
|
||||
String sql = "SELECT " +
|
||||
tableName + "." + columnRegistered + ", " +
|
||||
columnOP + ", " +
|
||||
columnBanned + ", " +
|
||||
usersNameColumn +
|
||||
" FROM " + tableName +
|
||||
" JOIN " + usersTable + " on " + usersIDColumn + "=" + columnUserID +
|
||||
" WHERE " + columnUserID + "=" + usersTable.statementSelectID +
|
||||
" AND " + columnServerID + "=" + serverTable.statementSelectServerID;
|
||||
|
||||
return query(new QueryStatement<UserInfo>(sql) {
|
||||
@Override
|
||||
public void prepare(PreparedStatement statement) throws SQLException {
|
||||
statement.setString(1, uuid.toString());
|
||||
statement.setString(2, serverUUID.toString());
|
||||
}
|
||||
return null;
|
||||
} finally {
|
||||
close(set, statement);
|
||||
}
|
||||
|
||||
@Override
|
||||
public UserInfo processResults(ResultSet set) throws SQLException {
|
||||
if (set.next()) {
|
||||
long registered = set.getLong(columnRegistered);
|
||||
boolean opped = set.getBoolean(columnOP);
|
||||
boolean banned = set.getBoolean(columnBanned);
|
||||
String name = set.getString("name");
|
||||
return new UserInfo(uuid, name, registered, opped, banned);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
@ -159,152 +161,145 @@ public class UserInfoTable extends UserIDTable {
|
||||
}
|
||||
|
||||
public List<UserInfo> getServerUserInfo(UUID serverUUID) throws SQLException {
|
||||
PreparedStatement statement = null;
|
||||
ResultSet set = null;
|
||||
try (Connection connection = getConnection()) {
|
||||
List<UserInfo> userInfo = new ArrayList<>();
|
||||
String usersIDColumn = usersTable + "." + usersTable.getColumnID();
|
||||
String usersUUIDColumn = usersTable + "." + usersTable.getColumnUUID() + " as uuid";
|
||||
String usersNameColumn = usersTable + "." + usersTable.getColumnName() + " as name";
|
||||
statement = connection.prepareStatement("SELECT " +
|
||||
tableName + "." + columnRegistered + ", " +
|
||||
columnOP + ", " +
|
||||
columnBanned + ", " +
|
||||
usersNameColumn + ", " +
|
||||
usersUUIDColumn +
|
||||
" FROM " + tableName +
|
||||
" JOIN " + usersTable + " on " + usersIDColumn + "=" + columnUserID +
|
||||
" WHERE " + columnServerID + "=" + serverTable.statementSelectServerID
|
||||
);
|
||||
statement.setFetchSize(20000);
|
||||
statement.setString(1, serverUUID.toString());
|
||||
set = statement.executeQuery();
|
||||
while (set.next()) {
|
||||
long registered = set.getLong(columnRegistered);
|
||||
boolean opped = set.getBoolean(columnOP);
|
||||
boolean banned = set.getBoolean(columnBanned);
|
||||
String name = set.getString("name");
|
||||
UUID uuid = UUID.fromString(set.getString("uuid"));
|
||||
UserInfo info = new UserInfo(uuid, name, registered, opped, banned);
|
||||
if (!userInfo.contains(info)) {
|
||||
userInfo.add(info);
|
||||
}
|
||||
String usersIDColumn = usersTable + "." + usersTable.getColumnID();
|
||||
String usersUUIDColumn = usersTable + "." + usersTable.getColumnUUID() + " as uuid";
|
||||
String usersNameColumn = usersTable + "." + usersTable.getColumnName() + " as name";
|
||||
String sql = "SELECT " +
|
||||
tableName + "." + columnRegistered + ", " +
|
||||
columnOP + ", " +
|
||||
columnBanned + ", " +
|
||||
usersNameColumn + ", " +
|
||||
usersUUIDColumn +
|
||||
" FROM " + tableName +
|
||||
" JOIN " + usersTable + " on " + usersIDColumn + "=" + columnUserID +
|
||||
" WHERE " + columnServerID + "=" + serverTable.statementSelectServerID;
|
||||
|
||||
return query(new QueryStatement<List<UserInfo>>(sql, 20000) {
|
||||
@Override
|
||||
public void prepare(PreparedStatement statement) throws SQLException {
|
||||
statement.setString(1, serverUUID.toString());
|
||||
}
|
||||
return userInfo;
|
||||
} finally {
|
||||
close(set, statement);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<UserInfo> processResults(ResultSet set) throws SQLException {
|
||||
List<UserInfo> userInfo = new ArrayList<>();
|
||||
while (set.next()) {
|
||||
long registered = set.getLong(columnRegistered);
|
||||
boolean opped = set.getBoolean(columnOP);
|
||||
boolean banned = set.getBoolean(columnBanned);
|
||||
String name = set.getString("name");
|
||||
UUID uuid = UUID.fromString(set.getString("uuid"));
|
||||
UserInfo info = new UserInfo(uuid, name, registered, opped, banned);
|
||||
if (!userInfo.contains(info)) {
|
||||
userInfo.add(info);
|
||||
}
|
||||
}
|
||||
return userInfo;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public Map<UUID, List<UserInfo>> getAllUserInfo() throws SQLException {
|
||||
PreparedStatement statement = null;
|
||||
ResultSet set = null;
|
||||
try (Connection connection = getConnection()) {
|
||||
String usersIDColumn = usersTable + "." + usersTable.getColumnID();
|
||||
String usersUUIDColumn = usersTable + "." + usersTable.getColumnUUID() + " as uuid";
|
||||
String serverIDColumn = serverTable + "." + serverTable.getColumnID();
|
||||
String serverUUIDColumn = serverTable + "." + serverTable.getColumnUUID() + " as s_uuid";
|
||||
statement = connection.prepareStatement("SELECT " +
|
||||
tableName + "." + columnRegistered + ", " +
|
||||
columnBanned + ", " +
|
||||
columnOP + ", " +
|
||||
usersUUIDColumn + ", " +
|
||||
serverUUIDColumn +
|
||||
" FROM " + tableName +
|
||||
" JOIN " + usersTable + " on " + usersIDColumn + "=" + columnUserID +
|
||||
" JOIN " + serverTable + " on " + serverIDColumn + "=" + columnServerID
|
||||
);
|
||||
statement.setFetchSize(20000);
|
||||
set = statement.executeQuery();
|
||||
Map<UUID, List<UserInfo>> serverMap = new HashMap<>();
|
||||
while (set.next()) {
|
||||
UUID serverUUID = UUID.fromString(set.getString("s_uuid"));
|
||||
UUID uuid = UUID.fromString(set.getString("uuid"));
|
||||
String usersIDColumn = usersTable + "." + usersTable.getColumnID();
|
||||
String usersUUIDColumn = usersTable + "." + usersTable.getColumnUUID() + " as uuid";
|
||||
String serverIDColumn = serverTable + "." + serverTable.getColumnID();
|
||||
String serverUUIDColumn = serverTable + "." + serverTable.getColumnUUID() + " as s_uuid";
|
||||
String sql = "SELECT " +
|
||||
tableName + "." + columnRegistered + ", " +
|
||||
columnBanned + ", " +
|
||||
columnOP + ", " +
|
||||
usersUUIDColumn + ", " +
|
||||
serverUUIDColumn +
|
||||
" FROM " + tableName +
|
||||
" JOIN " + usersTable + " on " + usersIDColumn + "=" + columnUserID +
|
||||
" JOIN " + serverTable + " on " + serverIDColumn + "=" + columnServerID;
|
||||
|
||||
List<UserInfo> userInfos = serverMap.getOrDefault(serverUUID, new ArrayList<>());
|
||||
return query(new QueryAllStatement<Map<UUID, List<UserInfo>>>(sql, 50000) {
|
||||
@Override
|
||||
public Map<UUID, List<UserInfo>> processResults(ResultSet set) throws SQLException {
|
||||
Map<UUID, List<UserInfo>> serverMap = new HashMap<>();
|
||||
while (set.next()) {
|
||||
UUID serverUUID = UUID.fromString(set.getString("s_uuid"));
|
||||
UUID uuid = UUID.fromString(set.getString("uuid"));
|
||||
|
||||
long registered = set.getLong(columnRegistered);
|
||||
boolean banned = set.getBoolean(columnBanned);
|
||||
boolean op = set.getBoolean(columnOP);
|
||||
List<UserInfo> userInfos = serverMap.getOrDefault(serverUUID, new ArrayList<>());
|
||||
|
||||
userInfos.add(new UserInfo(uuid, "", registered, op, banned));
|
||||
long registered = set.getLong(columnRegistered);
|
||||
boolean banned = set.getBoolean(columnBanned);
|
||||
boolean op = set.getBoolean(columnOP);
|
||||
|
||||
serverMap.put(serverUUID, userInfos);
|
||||
userInfos.add(new UserInfo(uuid, "", registered, op, banned));
|
||||
|
||||
serverMap.put(serverUUID, userInfos);
|
||||
}
|
||||
return serverMap;
|
||||
}
|
||||
return serverMap;
|
||||
} finally {
|
||||
close(set, statement);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public void insertUserInfo(Map<UUID, List<UserInfo>> allUserInfos) throws SQLException {
|
||||
if (Verify.isEmpty(allUserInfos)) {
|
||||
return;
|
||||
}
|
||||
PreparedStatement statement = null;
|
||||
try (Connection connection = getConnection()) {
|
||||
statement = connection.prepareStatement("INSERT INTO " + tableName + " (" +
|
||||
columnUserID + ", " +
|
||||
columnRegistered + ", " +
|
||||
columnServerID + ", " +
|
||||
columnBanned + ", " +
|
||||
columnOP +
|
||||
") VALUES (" +
|
||||
usersTable.statementSelectID + ", " +
|
||||
"?, " +
|
||||
serverTable.statementSelectServerID + ", ?, ?)");
|
||||
|
||||
// Every Server
|
||||
for (Map.Entry<UUID, List<UserInfo>> entry : allUserInfos.entrySet()) {
|
||||
UUID serverUUID = entry.getKey();
|
||||
// Every User
|
||||
for (UserInfo user : entry.getValue()) {
|
||||
statement.setString(1, user.getUuid().toString());
|
||||
statement.setLong(2, user.getRegistered());
|
||||
statement.setString(3, serverUUID.toString());
|
||||
statement.setBoolean(4, user.isBanned());
|
||||
statement.setBoolean(5, user.isOpped());
|
||||
statement.addBatch();
|
||||
String sql = "INSERT INTO " + tableName + " (" +
|
||||
columnUserID + ", " +
|
||||
columnRegistered + ", " +
|
||||
columnServerID + ", " +
|
||||
columnBanned + ", " +
|
||||
columnOP +
|
||||
") VALUES (" +
|
||||
usersTable.statementSelectID + ", " +
|
||||
"?, " +
|
||||
serverTable.statementSelectServerID + ", ?, ?)";
|
||||
|
||||
executeBatch(new ExecStatement(sql) {
|
||||
@Override
|
||||
public void prepare(PreparedStatement statement) throws SQLException {
|
||||
// Every Server
|
||||
for (Map.Entry<UUID, List<UserInfo>> entry : allUserInfos.entrySet()) {
|
||||
UUID serverUUID = entry.getKey();
|
||||
// Every User
|
||||
for (UserInfo user : entry.getValue()) {
|
||||
statement.setString(1, user.getUuid().toString());
|
||||
statement.setLong(2, user.getRegistered());
|
||||
statement.setString(3, serverUUID.toString());
|
||||
statement.setBoolean(4, user.isBanned());
|
||||
statement.setBoolean(5, user.isOpped());
|
||||
statement.addBatch();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
statement.executeBatch();
|
||||
commit(connection);
|
||||
} finally {
|
||||
close(statement);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public Map<UUID, Set<UUID>> getSavedUUIDs() throws SQLException {
|
||||
PreparedStatement statement = null;
|
||||
ResultSet set = null;
|
||||
try (Connection connection = getConnection()) {
|
||||
String usersIDColumn = usersTable + "." + usersTable.getColumnID();
|
||||
String usersUUIDColumn = usersTable + "." + usersTable.getColumnUUID() + " as uuid";
|
||||
String serverIDColumn = serverTable + "." + serverTable.getColumnID();
|
||||
String serverUUIDColumn = serverTable + "." + serverTable.getColumnUUID() + " as s_uuid";
|
||||
statement = connection.prepareStatement("SELECT " +
|
||||
usersUUIDColumn + ", " +
|
||||
serverUUIDColumn +
|
||||
" FROM " + tableName +
|
||||
" JOIN " + usersTable + " on " + usersIDColumn + "=" + columnUserID +
|
||||
" JOIN " + serverTable + " on " + serverIDColumn + "=" + columnServerID
|
||||
);
|
||||
statement.setFetchSize(5000);
|
||||
set = statement.executeQuery();
|
||||
Map<UUID, Set<UUID>> serverMap = new HashMap<>();
|
||||
while (set.next()) {
|
||||
UUID serverUUID = UUID.fromString(set.getString("s_uuid"));
|
||||
UUID uuid = UUID.fromString(set.getString("uuid"));
|
||||
String usersIDColumn = usersTable + "." + usersTable.getColumnID();
|
||||
String usersUUIDColumn = usersTable + "." + usersTable.getColumnUUID() + " as uuid";
|
||||
String serverIDColumn = serverTable + "." + serverTable.getColumnID();
|
||||
String serverUUIDColumn = serverTable + "." + serverTable.getColumnUUID() + " as s_uuid";
|
||||
String sql = "SELECT " +
|
||||
usersUUIDColumn + ", " +
|
||||
serverUUIDColumn +
|
||||
" FROM " + tableName +
|
||||
" JOIN " + usersTable + " on " + usersIDColumn + "=" + columnUserID +
|
||||
" JOIN " + serverTable + " on " + serverIDColumn + "=" + columnServerID;
|
||||
|
||||
Set<UUID> uuids = serverMap.getOrDefault(serverUUID, new HashSet<>());
|
||||
uuids.add(uuid);
|
||||
return query(new QueryAllStatement<Map<UUID, Set<UUID>>>(sql, 50000) {
|
||||
@Override
|
||||
public Map<UUID, Set<UUID>> processResults(ResultSet set) throws SQLException {
|
||||
Map<UUID, Set<UUID>> serverMap = new HashMap<>();
|
||||
while (set.next()) {
|
||||
UUID serverUUID = UUID.fromString(set.getString("s_uuid"));
|
||||
UUID uuid = UUID.fromString(set.getString("uuid"));
|
||||
|
||||
serverMap.put(serverUUID, uuids);
|
||||
Set<UUID> uuids = serverMap.getOrDefault(serverUUID, new HashSet<>());
|
||||
uuids.add(uuid);
|
||||
|
||||
serverMap.put(serverUUID, uuids);
|
||||
}
|
||||
return serverMap;
|
||||
}
|
||||
return serverMap;
|
||||
} finally {
|
||||
close(set, statement);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user