mirror of
https://github.com/plan-player-analytics/Plan.git
synced 2024-09-30 07:27:36 +02:00
Fixing IDEA code inspection issues
- Removed MethodAnnotations use in ExtensionExtractor - Refactored duplicate code in - BaseUserQueries - GeoInfoQueries - JoinAddressQueries - KillQueries - NicknameQueries - WebUserQueries - TopListQueries
This commit is contained in:
parent
245f002833
commit
71424fa2ec
@ -45,7 +45,6 @@ public final class ExtensionExtractor {
|
|||||||
private PluginInfo pluginInfo;
|
private PluginInfo pluginInfo;
|
||||||
private List<TabInfo> tabInformation;
|
private List<TabInfo> tabInformation;
|
||||||
private List<InvalidateMethod> invalidMethods;
|
private List<InvalidateMethod> invalidMethods;
|
||||||
private MethodAnnotations methodAnnotations;
|
|
||||||
private Map<ExtensionMethod.ParameterType, ExtensionMethods> methods;
|
private Map<ExtensionMethod.ParameterType, ExtensionMethods> methods;
|
||||||
private Collection<Method> conditionalMethods;
|
private Collection<Method> conditionalMethods;
|
||||||
private Collection<Tab> tabAnnotations;
|
private Collection<Tab> tabAnnotations;
|
||||||
@ -102,12 +101,9 @@ public final class ExtensionExtractor {
|
|||||||
* @deprecated No longer used anywhere, no-op.
|
* @deprecated No longer used anywhere, no-op.
|
||||||
*/
|
*/
|
||||||
@Deprecated
|
@Deprecated
|
||||||
public void extractAnnotationInformation() {
|
public void extractAnnotationInformation() {/* no-op */}
|
||||||
// no-op
|
|
||||||
}
|
|
||||||
|
|
||||||
private void extractMethods() {
|
private void extractMethods() {
|
||||||
methodAnnotations = new MethodAnnotations();
|
|
||||||
methods = new EnumMap<>(ExtensionMethod.ParameterType.class);
|
methods = new EnumMap<>(ExtensionMethod.ParameterType.class);
|
||||||
methods.put(ExtensionMethod.ParameterType.SERVER_NONE, new ExtensionMethods());
|
methods.put(ExtensionMethod.ParameterType.SERVER_NONE, new ExtensionMethods());
|
||||||
methods.put(ExtensionMethod.ParameterType.PLAYER_STRING, new ExtensionMethods());
|
methods.put(ExtensionMethod.ParameterType.PLAYER_STRING, new ExtensionMethods());
|
||||||
@ -132,55 +128,41 @@ public final class ExtensionExtractor {
|
|||||||
method.getAnnotation(BooleanProvider.class).ifPresent(annotation -> {
|
method.getAnnotation(BooleanProvider.class).ifPresent(annotation -> {
|
||||||
validateMethod(method, annotation);
|
validateMethod(method, annotation);
|
||||||
methods.get(method.getParameterType()).addBooleanMethod(method);
|
methods.get(method.getParameterType()).addBooleanMethod(method);
|
||||||
methodAnnotations.put(method.getMethod(), BooleanProvider.class, annotation);
|
|
||||||
});
|
});
|
||||||
method.getAnnotation(NumberProvider.class).ifPresent(annotation -> {
|
method.getAnnotation(NumberProvider.class).ifPresent(annotation -> {
|
||||||
validateMethod(method, annotation);
|
validateMethod(method, annotation);
|
||||||
methods.get(method.getParameterType()).addNumberMethod(method);
|
methods.get(method.getParameterType()).addNumberMethod(method);
|
||||||
methodAnnotations.put(method.getMethod(), NumberProvider.class, annotation);
|
|
||||||
});
|
});
|
||||||
method.getAnnotation(DoubleProvider.class).ifPresent(annotation -> {
|
method.getAnnotation(DoubleProvider.class).ifPresent(annotation -> {
|
||||||
validateMethod(method, annotation);
|
validateMethod(method, annotation);
|
||||||
methods.get(method.getParameterType()).addDoubleMethod(method);
|
methods.get(method.getParameterType()).addDoubleMethod(method);
|
||||||
methodAnnotations.put(method.getMethod(), DoubleProvider.class, annotation);
|
|
||||||
});
|
});
|
||||||
method.getAnnotation(PercentageProvider.class).ifPresent(annotation -> {
|
method.getAnnotation(PercentageProvider.class).ifPresent(annotation -> {
|
||||||
validateMethod(method, annotation);
|
validateMethod(method, annotation);
|
||||||
methods.get(method.getParameterType()).addPercentageMethod(method);
|
methods.get(method.getParameterType()).addPercentageMethod(method);
|
||||||
methodAnnotations.put(method.getMethod(), PercentageProvider.class, annotation);
|
|
||||||
});
|
});
|
||||||
method.getAnnotation(StringProvider.class).ifPresent(annotation -> {
|
method.getAnnotation(StringProvider.class).ifPresent(annotation -> {
|
||||||
validateMethod(method, annotation);
|
validateMethod(method, annotation);
|
||||||
methods.get(method.getParameterType()).addStringMethod(method);
|
methods.get(method.getParameterType()).addStringMethod(method);
|
||||||
methodAnnotations.put(method.getMethod(), StringProvider.class, annotation);
|
|
||||||
});
|
});
|
||||||
method.getAnnotation(TableProvider.class).ifPresent(annotation -> {
|
method.getAnnotation(TableProvider.class).ifPresent(annotation -> {
|
||||||
validateMethod(method, annotation);
|
validateMethod(method, annotation);
|
||||||
methods.get(method.getParameterType()).addTableMethod(method);
|
methods.get(method.getParameterType()).addTableMethod(method);
|
||||||
methodAnnotations.put(method.getMethod(), TableProvider.class, annotation);
|
|
||||||
});
|
});
|
||||||
method.getAnnotation(GroupProvider.class).ifPresent(annotation -> {
|
method.getAnnotation(GroupProvider.class).ifPresent(annotation -> {
|
||||||
validateMethod(method, annotation);
|
validateMethod(method, annotation);
|
||||||
methods.get(method.getParameterType()).addGroupMethod(method);
|
methods.get(method.getParameterType()).addGroupMethod(method);
|
||||||
methodAnnotations.put(method.getMethod(), GroupProvider.class, annotation);
|
|
||||||
});
|
});
|
||||||
method.getAnnotation(DataBuilderProvider.class).ifPresent(annotation -> {
|
method.getAnnotation(DataBuilderProvider.class).ifPresent(annotation -> {
|
||||||
validateMethod(method, annotation);
|
validateMethod(method, annotation);
|
||||||
methods.get(method.getParameterType()).addDataBuilderMethod(method);
|
methods.get(method.getParameterType()).addDataBuilderMethod(method);
|
||||||
methodAnnotations.put(method.getMethod(), DataBuilderProvider.class, annotation);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
method.getAnnotation(Conditional.class).ifPresent(annotation -> {
|
method.getAnnotation(Conditional.class).ifPresent(annotation -> conditionalMethods.add(method.getMethod()));
|
||||||
conditionalMethods.add(method.getMethod());
|
method.getAnnotation(Tab.class).ifPresent(tabAnnotations::add);
|
||||||
methodAnnotations.put(method.getMethod(), Conditional.class, annotation);
|
|
||||||
});
|
|
||||||
method.getAnnotation(Tab.class).ifPresent(annotation -> {
|
|
||||||
tabAnnotations.add(annotation);
|
|
||||||
methodAnnotations.put(method.getMethod(), Tab.class, annotation);
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (methodAnnotations.isEmpty()) {
|
if (methods.values().stream().allMatch(ExtensionMethods::isEmpty)) {
|
||||||
throw new IllegalArgumentException(extensionName + " class had no methods annotated with a Provider annotation");
|
throw new IllegalArgumentException(extensionName + " class had no methods annotated with a Provider annotation");
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -440,10 +422,12 @@ public final class ExtensionExtractor {
|
|||||||
return tabInformation;
|
return tabInformation;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @deprecated During refactoring MethodAnnotations was removed. Using {@link ExtensionExtractor#getMethods()} instead.
|
||||||
|
*/
|
||||||
@Deprecated
|
@Deprecated
|
||||||
public MethodAnnotations getMethodAnnotations() {
|
public MethodAnnotations getMethodAnnotations() {
|
||||||
if (methodAnnotations == null) extractMethods();
|
return new MethodAnnotations();
|
||||||
return methodAnnotations;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public Map<ExtensionMethod.ParameterType, ExtensionMethods> getMethods() {
|
public Map<ExtensionMethod.ParameterType, ExtensionMethods> getMethods() {
|
||||||
@ -455,4 +439,10 @@ public final class ExtensionExtractor {
|
|||||||
if (invalidMethods == null) extractInvalidMethods();
|
if (invalidMethods == null) extractInvalidMethods();
|
||||||
return invalidMethods;
|
return invalidMethods;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Visible for testing
|
||||||
|
Collection<Method> getConditionalMethods() {
|
||||||
|
if (conditionalMethods == null) extractMethods();
|
||||||
|
return conditionalMethods;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -142,4 +142,15 @@ public class ExtensionMethods {
|
|||||||
", dataBuilderProviders=" + dataBuilderProviders +
|
", dataBuilderProviders=" + dataBuilderProviders +
|
||||||
'}';
|
'}';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean isEmpty() {
|
||||||
|
return booleanProviders.isEmpty()
|
||||||
|
&& numberProviders.isEmpty()
|
||||||
|
&& doubleProviders.isEmpty()
|
||||||
|
&& percentageProviders.isEmpty()
|
||||||
|
&& stringProviders.isEmpty()
|
||||||
|
&& tableProviders.isEmpty()
|
||||||
|
&& groupProviders.isEmpty()
|
||||||
|
&& dataBuilderProviders.isEmpty();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -265,7 +265,7 @@ class ExtensionExtractorTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
ExtensionExtractor underTest = new ExtensionExtractor(new Extension());
|
ExtensionExtractor underTest = new ExtensionExtractor(new Extension());
|
||||||
assertEquals("Extension.method did not have any associated Provider for Conditional.", assertThrows(IllegalArgumentException.class, underTest::validateAnnotations).getMessage());
|
assertEquals("Extension class had no methods annotated with a Provider annotation", assertThrows(IllegalArgumentException.class, underTest::validateAnnotations).getMessage());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@ -489,8 +489,13 @@ class ExtensionExtractorTest {
|
|||||||
|
|
||||||
String expected = Stream.of(extension.getClass().getMethod("method").getAnnotation(Conditional.class))
|
String expected = Stream.of(extension.getClass().getMethod("method").getAnnotation(Conditional.class))
|
||||||
.map(Conditional::value).findFirst().orElseThrow(AssertionError::new);
|
.map(Conditional::value).findFirst().orElseThrow(AssertionError::new);
|
||||||
String result = underTest.getMethodAnnotations().getAnnotations(Conditional.class).stream()
|
String result = underTest.getConditionalMethods().stream()
|
||||||
.map(Conditional::value).findFirst().orElseThrow(AssertionError::new);
|
.map(method -> new ExtensionMethod(extension, method))
|
||||||
|
.map(extensionMethod -> extensionMethod.getAnnotation(Conditional.class))
|
||||||
|
.filter(Optional::isPresent)
|
||||||
|
.map(Optional::get)
|
||||||
|
.map(Conditional::value)
|
||||||
|
.findFirst().orElseThrow(AssertionError::new);
|
||||||
assertEquals(expected, result);
|
assertEquals(expected, result);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -27,7 +27,7 @@ import java.util.concurrent.TimeUnit;
|
|||||||
|
|
||||||
public class TimeSegmentsMutator<T> {
|
public class TimeSegmentsMutator<T> {
|
||||||
|
|
||||||
List<TimeSegment<T>> segments;
|
private final List<TimeSegment<T>> segments;
|
||||||
|
|
||||||
public TimeSegmentsMutator(List<TimeSegment<T>> segments) {
|
public TimeSegmentsMutator(List<TimeSegment<T>> segments) {
|
||||||
this.segments = segments;
|
this.segments = segments;
|
||||||
|
@ -66,7 +66,7 @@ public interface Database {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Optional<T> processResults(ResultSet set) throws SQLException {
|
public Optional<T> processResults(ResultSet set) throws SQLException {
|
||||||
return set.next() ? Optional.of(rowExtractor.extract(set)) : Optional.empty();
|
return set.next() ? Optional.ofNullable(rowExtractor.extract(set)) : Optional.empty();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -80,7 +80,7 @@ public interface Database {
|
|||||||
}
|
}
|
||||||
|
|
||||||
default <C extends Collection<T>, T> C queryCollection(String sql, RowExtractor<T> rowExtractor, Supplier<C> collectionConstructor, Object... parameters) {
|
default <C extends Collection<T>, T> C queryCollection(String sql, RowExtractor<T> rowExtractor, Supplier<C> collectionConstructor, Object... parameters) {
|
||||||
return query(new QueryStatement<C>(sql) {
|
return query(new QueryStatement<C>(sql, 1000) {
|
||||||
@Override
|
@Override
|
||||||
public void prepare(PreparedStatement statement) throws SQLException {
|
public void prepare(PreparedStatement statement) throws SQLException {
|
||||||
QueryParameterSetter.setParameters(statement, parameters);
|
QueryParameterSetter.setParameters(statement, parameters);
|
||||||
@ -102,7 +102,7 @@ public interface Database {
|
|||||||
}
|
}
|
||||||
|
|
||||||
default <M extends Map<K, V>, K, V> M queryMap(String sql, MapRowExtractor<K, V> rowExtractor, Supplier<M> mapConstructor, Object... parameters) {
|
default <M extends Map<K, V>, K, V> M queryMap(String sql, MapRowExtractor<K, V> rowExtractor, Supplier<M> mapConstructor, Object... parameters) {
|
||||||
return query(new QueryStatement<M>(sql) {
|
return query(new QueryStatement<M>(sql, 100) {
|
||||||
@Override
|
@Override
|
||||||
public void prepare(PreparedStatement statement) throws SQLException {
|
public void prepare(PreparedStatement statement) throws SQLException {
|
||||||
QueryParameterSetter.setParameters(statement, parameters);
|
QueryParameterSetter.setParameters(statement, parameters);
|
||||||
|
@ -0,0 +1,52 @@
|
|||||||
|
/*
|
||||||
|
* This file is part of Player Analytics (Plan).
|
||||||
|
*
|
||||||
|
* Plan is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Lesser General Public License v3 as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* Plan is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU Lesser General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public License
|
||||||
|
* along with Plan. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
package com.djrapitops.plan.storage.database.queries;
|
||||||
|
|
||||||
|
import com.djrapitops.plan.identification.ServerUUID;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
public class RowExtractors {
|
||||||
|
private RowExtractors() {}
|
||||||
|
|
||||||
|
public static RowExtractor<Integer> getInt(String columnName) {
|
||||||
|
return set -> {
|
||||||
|
int value = set.getInt(columnName);
|
||||||
|
return set.wasNull() ? null : value;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
public static RowExtractor<Long> getLong(String columnName) {
|
||||||
|
return set -> {
|
||||||
|
long value = set.getLong(columnName);
|
||||||
|
return set.wasNull() ? null : value;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
public static RowExtractor<String> getString(String columnName) {
|
||||||
|
return set -> set.getString(columnName);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static RowExtractor<UUID> getUUID(String columnName) {
|
||||||
|
return set -> UUID.fromString(set.getString(columnName));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static RowExtractor<ServerUUID> getServerUUID(String columnName) {
|
||||||
|
return set -> ServerUUID.fromString(set.getString(columnName));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -439,17 +439,7 @@ public class PlayerCountQueries {
|
|||||||
String sql = SELECT + "COUNT(1) as " + PLAYER_COUNT + FROM + UserInfoTable.TABLE_NAME +
|
String sql = SELECT + "COUNT(1) as " + PLAYER_COUNT + FROM + UserInfoTable.TABLE_NAME +
|
||||||
WHERE + UserInfoTable.SERVER_ID + "=" + ServerTable.SELECT_SERVER_ID +
|
WHERE + UserInfoTable.SERVER_ID + "=" + ServerTable.SELECT_SERVER_ID +
|
||||||
AND + UserInfoTable.OP + "=?";
|
AND + UserInfoTable.OP + "=?";
|
||||||
return new QueryStatement<Integer>(sql) {
|
return db -> db.queryOptional(sql, set -> set.getInt(PLAYER_COUNT), serverUUID, true)
|
||||||
@Override
|
.orElse(0);
|
||||||
public void prepare(PreparedStatement statement) throws SQLException {
|
|
||||||
statement.setString(1, serverUUID.toString());
|
|
||||||
statement.setBoolean(2, true);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Integer processResults(ResultSet set) throws SQLException {
|
|
||||||
return set.next() ? set.getInt(PLAYER_COUNT) : 0;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -18,14 +18,10 @@ package com.djrapitops.plan.storage.database.queries.analysis;
|
|||||||
|
|
||||||
import com.djrapitops.plan.identification.ServerUUID;
|
import com.djrapitops.plan.identification.ServerUUID;
|
||||||
import com.djrapitops.plan.storage.database.queries.Query;
|
import com.djrapitops.plan.storage.database.queries.Query;
|
||||||
import com.djrapitops.plan.storage.database.queries.QueryStatement;
|
|
||||||
import com.djrapitops.plan.storage.database.sql.tables.ServerTable;
|
import com.djrapitops.plan.storage.database.sql.tables.ServerTable;
|
||||||
import com.djrapitops.plan.storage.database.sql.tables.SessionsTable;
|
import com.djrapitops.plan.storage.database.sql.tables.SessionsTable;
|
||||||
import com.djrapitops.plan.storage.database.sql.tables.UsersTable;
|
import com.djrapitops.plan.storage.database.sql.tables.UsersTable;
|
||||||
|
|
||||||
import java.sql.PreparedStatement;
|
|
||||||
import java.sql.ResultSet;
|
|
||||||
import java.sql.SQLException;
|
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
|
||||||
import static com.djrapitops.plan.storage.database.sql.building.Sql.*;
|
import static com.djrapitops.plan.storage.database.sql.building.Sql.*;
|
||||||
@ -49,26 +45,8 @@ public class TopListQueries {
|
|||||||
LIMIT + "10" +
|
LIMIT + "10" +
|
||||||
OFFSET + "?";
|
OFFSET + "?";
|
||||||
|
|
||||||
return new QueryStatement<Optional<TopListEntry<Long>>>(sql, 10) {
|
return db -> db.queryOptional(sql, set -> new TopListEntry<>(set.getString(UsersTable.USER_NAME), set.getLong("playtime")),
|
||||||
@Override
|
serverUUID, after, before, n - 1);
|
||||||
public void prepare(PreparedStatement statement) throws SQLException {
|
|
||||||
statement.setString(1, serverUUID.toString());
|
|
||||||
statement.setLong(2, after);
|
|
||||||
statement.setLong(3, before);
|
|
||||||
statement.setInt(4, n - 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Optional<TopListEntry<Long>> processResults(ResultSet set) throws SQLException {
|
|
||||||
if (set.next()) {
|
|
||||||
return Optional.of(
|
|
||||||
new TopListEntry<>(set.getString(UsersTable.USER_NAME), set.getLong("playtime"))
|
|
||||||
);
|
|
||||||
}
|
|
||||||
return Optional.empty();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Query<Optional<TopListEntry<Long>>> fetchNthTop10ActivePlaytimePlayerOn(ServerUUID serverUUID, int n, long after, long before) {
|
public static Query<Optional<TopListEntry<Long>>> fetchNthTop10ActivePlaytimePlayerOn(ServerUUID serverUUID, int n, long after, long before) {
|
||||||
@ -84,25 +62,8 @@ public class TopListQueries {
|
|||||||
LIMIT + "10" +
|
LIMIT + "10" +
|
||||||
OFFSET + "?";
|
OFFSET + "?";
|
||||||
|
|
||||||
return new QueryStatement<Optional<TopListEntry<Long>>>(sql, 10) {
|
return db -> db.queryOptional(sql, set -> new TopListEntry<>(set.getString(UsersTable.USER_NAME), set.getLong("active_playtime")),
|
||||||
@Override
|
serverUUID, after, before, n - 1);
|
||||||
public void prepare(PreparedStatement statement) throws SQLException {
|
|
||||||
statement.setString(1, serverUUID.toString());
|
|
||||||
statement.setLong(2, after);
|
|
||||||
statement.setLong(3, before);
|
|
||||||
statement.setInt(4, n - 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Optional<TopListEntry<Long>> processResults(ResultSet set) throws SQLException {
|
|
||||||
if (set.next()) {
|
|
||||||
return Optional.of(
|
|
||||||
new TopListEntry<>(set.getString(UsersTable.USER_NAME), set.getLong("active_playtime"))
|
|
||||||
);
|
|
||||||
}
|
|
||||||
return Optional.empty();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class TopListEntry<T> {
|
public static class TopListEntry<T> {
|
||||||
|
@ -19,16 +19,17 @@ package com.djrapitops.plan.storage.database.queries.objects;
|
|||||||
import com.djrapitops.plan.gathering.domain.BaseUser;
|
import com.djrapitops.plan.gathering.domain.BaseUser;
|
||||||
import com.djrapitops.plan.gathering.domain.UserInfo;
|
import com.djrapitops.plan.gathering.domain.UserInfo;
|
||||||
import com.djrapitops.plan.storage.database.queries.Query;
|
import com.djrapitops.plan.storage.database.queries.Query;
|
||||||
import com.djrapitops.plan.storage.database.queries.QueryAllStatement;
|
import com.djrapitops.plan.storage.database.queries.RowExtractors;
|
||||||
import com.djrapitops.plan.storage.database.queries.QueryStatement;
|
|
||||||
import com.djrapitops.plan.storage.database.sql.building.Select;
|
import com.djrapitops.plan.storage.database.sql.building.Select;
|
||||||
import com.djrapitops.plan.storage.database.sql.tables.UsersTable;
|
import com.djrapitops.plan.storage.database.sql.tables.UsersTable;
|
||||||
import org.apache.commons.text.TextStringBuilder;
|
import org.apache.commons.text.TextStringBuilder;
|
||||||
|
|
||||||
import java.sql.PreparedStatement;
|
|
||||||
import java.sql.ResultSet;
|
import java.sql.ResultSet;
|
||||||
import java.sql.SQLException;
|
import java.sql.SQLException;
|
||||||
import java.util.*;
|
import java.util.Collection;
|
||||||
|
import java.util.Optional;
|
||||||
|
import java.util.Set;
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
import static com.djrapitops.plan.storage.database.sql.building.Sql.*;
|
import static com.djrapitops.plan.storage.database.sql.building.Sql.*;
|
||||||
|
|
||||||
@ -53,25 +54,16 @@ public class BaseUserQueries {
|
|||||||
public static Query<Collection<BaseUser>> fetchAllBaseUsers() {
|
public static Query<Collection<BaseUser>> fetchAllBaseUsers() {
|
||||||
String sql = Select.all(UsersTable.TABLE_NAME).toString();
|
String sql = Select.all(UsersTable.TABLE_NAME).toString();
|
||||||
|
|
||||||
return new QueryAllStatement<Collection<BaseUser>>(sql, 20000) {
|
return db -> db.queryList(sql, BaseUserQueries::extractBaseUser);
|
||||||
@Override
|
|
||||||
public Collection<BaseUser> processResults(ResultSet set) throws SQLException {
|
|
||||||
return extractBaseUsers(set);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static Collection<BaseUser> extractBaseUsers(ResultSet set) throws SQLException {
|
private static BaseUser extractBaseUser(ResultSet set) throws SQLException {
|
||||||
Collection<BaseUser> users = new HashSet<>();
|
|
||||||
while (set.next()) {
|
|
||||||
UUID playerUUID = UUID.fromString(set.getString(UsersTable.USER_UUID));
|
UUID playerUUID = UUID.fromString(set.getString(UsersTable.USER_UUID));
|
||||||
String name = set.getString(UsersTable.USER_NAME);
|
String name = set.getString(UsersTable.USER_NAME);
|
||||||
long registered = set.getLong(UsersTable.REGISTERED);
|
long registered = set.getLong(UsersTable.REGISTERED);
|
||||||
int kicked = set.getInt(UsersTable.TIMES_KICKED);
|
int kicked = set.getInt(UsersTable.TIMES_KICKED);
|
||||||
|
|
||||||
users.add(new BaseUser(playerUUID, name, registered, kicked));
|
return new BaseUser(playerUUID, name, registered, kicked);
|
||||||
}
|
|
||||||
return users;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -85,25 +77,7 @@ public class BaseUserQueries {
|
|||||||
public static Query<Optional<BaseUser>> fetchBaseUserOfPlayer(UUID playerUUID) {
|
public static Query<Optional<BaseUser>> fetchBaseUserOfPlayer(UUID playerUUID) {
|
||||||
String sql = Select.all(UsersTable.TABLE_NAME).where(UsersTable.USER_UUID + "=?").toString();
|
String sql = Select.all(UsersTable.TABLE_NAME).where(UsersTable.USER_UUID + "=?").toString();
|
||||||
|
|
||||||
return new QueryStatement<Optional<BaseUser>>(sql, 20000) {
|
return db -> db.queryOptional(sql, BaseUserQueries::extractBaseUser, playerUUID);
|
||||||
@Override
|
|
||||||
public void prepare(PreparedStatement statement) throws SQLException {
|
|
||||||
statement.setString(1, playerUUID.toString());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Optional<BaseUser> processResults(ResultSet set) throws SQLException {
|
|
||||||
if (set.next()) {
|
|
||||||
UUID playerUUID = UUID.fromString(set.getString(UsersTable.USER_UUID));
|
|
||||||
String name = set.getString(UsersTable.USER_NAME);
|
|
||||||
long registered = set.getLong(UsersTable.REGISTERED);
|
|
||||||
int kicked = set.getInt(UsersTable.TIMES_KICKED);
|
|
||||||
|
|
||||||
return Optional.of(new BaseUser(playerUUID, name, registered, kicked));
|
|
||||||
}
|
|
||||||
return Optional.empty();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Query<Set<Integer>> userIdsOfRegisteredBetween(long after, long before) {
|
public static Query<Set<Integer>> userIdsOfRegisteredBetween(long after, long before) {
|
||||||
@ -111,55 +85,23 @@ public class BaseUserQueries {
|
|||||||
FROM + UsersTable.TABLE_NAME +
|
FROM + UsersTable.TABLE_NAME +
|
||||||
WHERE + UsersTable.REGISTERED + ">=?" +
|
WHERE + UsersTable.REGISTERED + ">=?" +
|
||||||
AND + UsersTable.REGISTERED + "<=?";
|
AND + UsersTable.REGISTERED + "<=?";
|
||||||
return new QueryStatement<Set<Integer>>(sql) {
|
|
||||||
@Override
|
|
||||||
public void prepare(PreparedStatement statement) throws SQLException {
|
|
||||||
statement.setLong(1, after);
|
|
||||||
statement.setLong(2, before);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
return db -> db.querySet(sql, RowExtractors.getInt(UsersTable.ID), after, before);
|
||||||
public Set<Integer> processResults(ResultSet set) throws SQLException {
|
|
||||||
Set<Integer> userIds = new HashSet<>();
|
|
||||||
while (set.next()) {
|
|
||||||
userIds.add(set.getInt(UsersTable.ID));
|
|
||||||
}
|
|
||||||
return userIds;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Query<Optional<Long>> minimumRegisterDate() {
|
public static Query<Optional<Long>> minimumRegisterDate() {
|
||||||
String sql = SELECT + min(UsersTable.REGISTERED) + " as min" +
|
String sql = SELECT + min(UsersTable.REGISTERED) + " as min" +
|
||||||
FROM + UsersTable.TABLE_NAME;
|
FROM + UsersTable.TABLE_NAME;
|
||||||
return new QueryAllStatement<Optional<Long>>(sql) {
|
return db -> db.queryOptional(sql, RowExtractors.getLong("min"));
|
||||||
@Override
|
|
||||||
public Optional<Long> processResults(ResultSet set) throws SQLException {
|
|
||||||
if (set.next()) {
|
|
||||||
long min = set.getLong("min");
|
|
||||||
if (!set.wasNull()) return Optional.of(min);
|
|
||||||
}
|
|
||||||
return Optional.empty();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Query<Integer> fetchUserId(UUID playerUUID) {
|
// Visible for testing
|
||||||
|
public static Query<Optional<Integer>> fetchUserId(UUID playerUUID) {
|
||||||
String sql = Select.from(UsersTable.TABLE_NAME, UsersTable.ID)
|
String sql = Select.from(UsersTable.TABLE_NAME, UsersTable.ID)
|
||||||
.where(UsersTable.USER_UUID + "=?")
|
.where(UsersTable.USER_UUID + "=?")
|
||||||
.toString();
|
.toString();
|
||||||
|
|
||||||
return new QueryStatement<Integer>(sql) {
|
return db -> db.queryOptional(sql, RowExtractors.getInt(UsersTable.ID), playerUUID);
|
||||||
@Override
|
|
||||||
public void prepare(PreparedStatement statement) throws SQLException {
|
|
||||||
statement.setString(1, playerUUID.toString());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Integer processResults(ResultSet set) throws SQLException {
|
|
||||||
return set.next() ? set.getInt(UsersTable.ID) : -1;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Query<Set<UUID>> fetchExistingUUIDs(Set<UUID> outOfPlayerUUIDs) {
|
public static Query<Set<UUID>> fetchExistingUUIDs(Set<UUID> outOfPlayerUUIDs) {
|
||||||
@ -167,15 +109,6 @@ public class BaseUserQueries {
|
|||||||
FROM + UsersTable.TABLE_NAME +
|
FROM + UsersTable.TABLE_NAME +
|
||||||
WHERE + UsersTable.USER_UUID + " IN ('" + new TextStringBuilder().appendWithSeparators(outOfPlayerUUIDs, "','").build() + "')";
|
WHERE + UsersTable.USER_UUID + " IN ('" + new TextStringBuilder().appendWithSeparators(outOfPlayerUUIDs, "','").build() + "')";
|
||||||
|
|
||||||
return new QueryAllStatement<Set<UUID>>(sql) {
|
return db -> db.querySet(sql, RowExtractors.getUUID(UsersTable.USER_UUID));
|
||||||
@Override
|
|
||||||
public Set<UUID> processResults(ResultSet set) throws SQLException {
|
|
||||||
Set<UUID> uuids = new HashSet<>();
|
|
||||||
while (set.next()) {
|
|
||||||
uuids.add(UUID.fromString(set.getString(UsersTable.USER_UUID)));
|
|
||||||
}
|
|
||||||
return uuids;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -20,7 +20,7 @@ import com.djrapitops.plan.gathering.domain.GeoInfo;
|
|||||||
import com.djrapitops.plan.identification.ServerUUID;
|
import com.djrapitops.plan.identification.ServerUUID;
|
||||||
import com.djrapitops.plan.storage.database.queries.Query;
|
import com.djrapitops.plan.storage.database.queries.Query;
|
||||||
import com.djrapitops.plan.storage.database.queries.QueryAllStatement;
|
import com.djrapitops.plan.storage.database.queries.QueryAllStatement;
|
||||||
import com.djrapitops.plan.storage.database.queries.QueryStatement;
|
import com.djrapitops.plan.storage.database.queries.RowExtractors;
|
||||||
import com.djrapitops.plan.storage.database.sql.tables.GeoInfoTable;
|
import com.djrapitops.plan.storage.database.sql.tables.GeoInfoTable;
|
||||||
import com.djrapitops.plan.storage.database.sql.tables.ServerTable;
|
import com.djrapitops.plan.storage.database.sql.tables.ServerTable;
|
||||||
import com.djrapitops.plan.storage.database.sql.tables.UserInfoTable;
|
import com.djrapitops.plan.storage.database.sql.tables.UserInfoTable;
|
||||||
@ -28,7 +28,6 @@ import com.djrapitops.plan.storage.database.sql.tables.UsersTable;
|
|||||||
import com.djrapitops.plan.utilities.java.Lists;
|
import com.djrapitops.plan.utilities.java.Lists;
|
||||||
import org.apache.commons.text.TextStringBuilder;
|
import org.apache.commons.text.TextStringBuilder;
|
||||||
|
|
||||||
import java.sql.PreparedStatement;
|
|
||||||
import java.sql.ResultSet;
|
import java.sql.ResultSet;
|
||||||
import java.sql.SQLException;
|
import java.sql.SQLException;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
@ -59,7 +58,7 @@ public class GeoInfoQueries {
|
|||||||
FROM + GeoInfoTable.TABLE_NAME + " g" +
|
FROM + GeoInfoTable.TABLE_NAME + " g" +
|
||||||
INNER_JOIN + UsersTable.TABLE_NAME + " u on g.user_id=u.id";
|
INNER_JOIN + UsersTable.TABLE_NAME + " u on g.user_id=u.id";
|
||||||
|
|
||||||
return new QueryAllStatement<Map<UUID, List<GeoInfo>>>(sql, 50000) {
|
return new QueryAllStatement<Map<UUID, List<GeoInfo>>>(sql, 10000) {
|
||||||
@Override
|
@Override
|
||||||
public Map<UUID, List<GeoInfo>> processResults(ResultSet set) throws SQLException {
|
public Map<UUID, List<GeoInfo>> processResults(ResultSet set) throws SQLException {
|
||||||
return extractGeoInformation(set);
|
return extractGeoInformation(set);
|
||||||
@ -93,23 +92,13 @@ public class GeoInfoQueries {
|
|||||||
WHERE + GeoInfoTable.USER_ID + "=" + UsersTable.SELECT_USER_ID +
|
WHERE + GeoInfoTable.USER_ID + "=" + UsersTable.SELECT_USER_ID +
|
||||||
GROUP_BY + GeoInfoTable.GEOLOCATION;
|
GROUP_BY + GeoInfoTable.GEOLOCATION;
|
||||||
|
|
||||||
return new QueryStatement<List<GeoInfo>>(sql, 100) {
|
return db -> db.queryList(sql, GeoInfoQueries::extractGeoInfo, playerUUID);
|
||||||
@Override
|
|
||||||
public void prepare(PreparedStatement statement) throws SQLException {
|
|
||||||
statement.setString(1, playerUUID.toString());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
private static GeoInfo extractGeoInfo(ResultSet set) throws SQLException {
|
||||||
public List<GeoInfo> processResults(ResultSet set) throws SQLException {
|
|
||||||
List<GeoInfo> geoInfo = new ArrayList<>();
|
|
||||||
while (set.next()) {
|
|
||||||
String geolocation = set.getString(GeoInfoTable.GEOLOCATION);
|
String geolocation = set.getString(GeoInfoTable.GEOLOCATION);
|
||||||
long lastUsed = set.getLong(GeoInfoTable.LAST_USED);
|
long lastUsed = set.getLong(GeoInfoTable.LAST_USED);
|
||||||
geoInfo.add(new GeoInfo(geolocation, lastUsed));
|
return new GeoInfo(geolocation, lastUsed);
|
||||||
}
|
|
||||||
return geoInfo;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Query<Map<String, Integer>> networkGeolocationCounts() {
|
public static Query<Map<String, Integer>> networkGeolocationCounts() {
|
||||||
@ -124,16 +113,14 @@ public class GeoInfoQueries {
|
|||||||
WHERE + "b." + GeoInfoTable.LAST_USED + IS_NULL +
|
WHERE + "b." + GeoInfoTable.LAST_USED + IS_NULL +
|
||||||
GROUP_BY + "a." + GeoInfoTable.GEOLOCATION;
|
GROUP_BY + "a." + GeoInfoTable.GEOLOCATION;
|
||||||
|
|
||||||
return new QueryAllStatement<Map<String, Integer>>(sql) {
|
return db -> db.queryMap(sql, GeoInfoQueries::extractGeolocationCounts);
|
||||||
@Override
|
|
||||||
public Map<String, Integer> processResults(ResultSet set) throws SQLException {
|
|
||||||
Map<String, Integer> geolocationCounts = new HashMap<>();
|
|
||||||
while (set.next()) {
|
|
||||||
geolocationCounts.put(set.getString(GeoInfoTable.GEOLOCATION), set.getInt("c"));
|
|
||||||
}
|
}
|
||||||
return geolocationCounts;
|
|
||||||
}
|
private static void extractGeolocationCounts(ResultSet set, Map<String, Integer> geolocationCounts) throws SQLException {
|
||||||
};
|
geolocationCounts.put(
|
||||||
|
set.getString(GeoInfoTable.GEOLOCATION),
|
||||||
|
set.getInt("c")
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Query<Map<String, Integer>> networkGeolocationCounts(Collection<Integer> userIds) {
|
public static Query<Map<String, Integer>> networkGeolocationCounts(Collection<Integer> userIds) {
|
||||||
@ -151,16 +138,7 @@ public class GeoInfoQueries {
|
|||||||
new TextStringBuilder().appendWithSeparators(userIds, ",").build() + ")" +
|
new TextStringBuilder().appendWithSeparators(userIds, ",").build() + ")" +
|
||||||
GROUP_BY + "a." + GeoInfoTable.GEOLOCATION;
|
GROUP_BY + "a." + GeoInfoTable.GEOLOCATION;
|
||||||
|
|
||||||
return new QueryAllStatement<Map<String, Integer>>(sql) {
|
return db -> db.queryMap(sql, GeoInfoQueries::extractGeolocationCounts);
|
||||||
@Override
|
|
||||||
public Map<String, Integer> processResults(ResultSet set) throws SQLException {
|
|
||||||
Map<String, Integer> geolocationCounts = new HashMap<>();
|
|
||||||
while (set.next()) {
|
|
||||||
geolocationCounts.put(set.getString(GeoInfoTable.GEOLOCATION), set.getInt("c"));
|
|
||||||
}
|
|
||||||
return geolocationCounts;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Query<Map<String, Integer>> serverGeolocationCounts(ServerUUID serverUUID) {
|
public static Query<Map<String, Integer>> serverGeolocationCounts(ServerUUID serverUUID) {
|
||||||
@ -178,34 +156,14 @@ public class GeoInfoQueries {
|
|||||||
AND + "ui." + UserInfoTable.SERVER_ID + "=" + ServerTable.SELECT_SERVER_ID +
|
AND + "ui." + UserInfoTable.SERVER_ID + "=" + ServerTable.SELECT_SERVER_ID +
|
||||||
GROUP_BY + "a." + GeoInfoTable.GEOLOCATION;
|
GROUP_BY + "a." + GeoInfoTable.GEOLOCATION;
|
||||||
|
|
||||||
return new QueryStatement<Map<String, Integer>>(sql) {
|
return db -> db.queryMap(sql, GeoInfoQueries::extractGeolocationCounts, serverUUID);
|
||||||
@Override
|
|
||||||
public void prepare(PreparedStatement statement) throws SQLException {
|
|
||||||
statement.setString(1, serverUUID.toString());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Map<String, Integer> processResults(ResultSet set) throws SQLException {
|
|
||||||
Map<String, Integer> geolocationCounts = new HashMap<>();
|
|
||||||
while (set.next()) {
|
|
||||||
geolocationCounts.put(set.getString(GeoInfoTable.GEOLOCATION), set.getInt("c"));
|
|
||||||
}
|
|
||||||
return geolocationCounts;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Query<List<String>> uniqueGeolocations() {
|
public static Query<List<String>> uniqueGeolocations() {
|
||||||
String sql = SELECT + GeoInfoTable.GEOLOCATION + FROM + GeoInfoTable.TABLE_NAME +
|
String sql = SELECT + GeoInfoTable.GEOLOCATION + FROM + GeoInfoTable.TABLE_NAME +
|
||||||
ORDER_BY + GeoInfoTable.GEOLOCATION + " ASC";
|
ORDER_BY + GeoInfoTable.GEOLOCATION + " ASC";
|
||||||
return new QueryAllStatement<List<String>>(sql) {
|
|
||||||
@Override
|
return db -> db.queryList(sql, RowExtractors.getString(GeoInfoTable.GEOLOCATION));
|
||||||
public List<String> processResults(ResultSet set) throws SQLException {
|
|
||||||
List<String> geolocations = new ArrayList<>();
|
|
||||||
while (set.next()) geolocations.add(set.getString(GeoInfoTable.GEOLOCATION));
|
|
||||||
return geolocations;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Query<Set<Integer>> userIdsOfPlayersWithGeolocations(List<String> selected) {
|
public static Query<Set<Integer>> userIdsOfPlayersWithGeolocations(List<String> selected) {
|
||||||
@ -216,13 +174,6 @@ public class GeoInfoQueries {
|
|||||||
" IN ('" +
|
" IN ('" +
|
||||||
new TextStringBuilder().appendWithSeparators(selected, "','") +
|
new TextStringBuilder().appendWithSeparators(selected, "','") +
|
||||||
"')";
|
"')";
|
||||||
return new QueryAllStatement<Set<Integer>>(sql) {
|
return db -> db.querySet(sql, RowExtractors.getInt(UsersTable.ID));
|
||||||
@Override
|
|
||||||
public Set<Integer> processResults(ResultSet set) throws SQLException {
|
|
||||||
Set<Integer> geolocations = new HashSet<>();
|
|
||||||
while (set.next()) geolocations.add(set.getInt(UsersTable.ID));
|
|
||||||
return geolocations;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -20,12 +20,12 @@ import com.djrapitops.plan.identification.ServerUUID;
|
|||||||
import com.djrapitops.plan.storage.database.queries.Query;
|
import com.djrapitops.plan.storage.database.queries.Query;
|
||||||
import com.djrapitops.plan.storage.database.queries.QueryAllStatement;
|
import com.djrapitops.plan.storage.database.queries.QueryAllStatement;
|
||||||
import com.djrapitops.plan.storage.database.queries.QueryStatement;
|
import com.djrapitops.plan.storage.database.queries.QueryStatement;
|
||||||
|
import com.djrapitops.plan.storage.database.queries.RowExtractors;
|
||||||
import com.djrapitops.plan.storage.database.sql.tables.JoinAddressTable;
|
import com.djrapitops.plan.storage.database.sql.tables.JoinAddressTable;
|
||||||
import com.djrapitops.plan.storage.database.sql.tables.ServerTable;
|
import com.djrapitops.plan.storage.database.sql.tables.ServerTable;
|
||||||
import com.djrapitops.plan.storage.database.sql.tables.SessionsTable;
|
import com.djrapitops.plan.storage.database.sql.tables.SessionsTable;
|
||||||
import org.apache.commons.text.TextStringBuilder;
|
import org.apache.commons.text.TextStringBuilder;
|
||||||
|
|
||||||
import java.sql.PreparedStatement;
|
|
||||||
import java.sql.ResultSet;
|
import java.sql.ResultSet;
|
||||||
import java.sql.SQLException;
|
import java.sql.SQLException;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
@ -50,17 +50,12 @@ public class JoinAddressQueries {
|
|||||||
GROUP_BY + JoinAddressTable.JOIN_ADDRESS +
|
GROUP_BY + JoinAddressTable.JOIN_ADDRESS +
|
||||||
ORDER_BY + JoinAddressTable.JOIN_ADDRESS + " ASC";
|
ORDER_BY + JoinAddressTable.JOIN_ADDRESS + " ASC";
|
||||||
|
|
||||||
return new QueryAllStatement<Map<String, Integer>>(selectLatestJoinAddresses, 100) {
|
return db -> db.queryMap(selectLatestJoinAddresses, JoinAddressQueries::extractJoinAddressCounts, TreeMap::new);
|
||||||
@Override
|
}
|
||||||
public Map<String, Integer> processResults(ResultSet set) throws SQLException {
|
|
||||||
Map<String, Integer> joinAddresses = new TreeMap<>();
|
private static void extractJoinAddressCounts(ResultSet set, Map<String, Integer> joinAddresses) throws SQLException {
|
||||||
while (set.next()) {
|
|
||||||
joinAddresses.put(set.getString(JoinAddressTable.JOIN_ADDRESS), set.getInt("total"));
|
joinAddresses.put(set.getString(JoinAddressTable.JOIN_ADDRESS), set.getInt("total"));
|
||||||
}
|
}
|
||||||
return joinAddresses;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
public static Query<Map<String, Integer>> latestJoinAddresses(ServerUUID serverUUID) {
|
public static Query<Map<String, Integer>> latestJoinAddresses(ServerUUID serverUUID) {
|
||||||
String selectLatestJoinAddresses = SELECT +
|
String selectLatestJoinAddresses = SELECT +
|
||||||
@ -76,27 +71,15 @@ public class JoinAddressQueries {
|
|||||||
GROUP_BY + JoinAddressTable.JOIN_ADDRESS +
|
GROUP_BY + JoinAddressTable.JOIN_ADDRESS +
|
||||||
ORDER_BY + JoinAddressTable.JOIN_ADDRESS + " ASC";
|
ORDER_BY + JoinAddressTable.JOIN_ADDRESS + " ASC";
|
||||||
|
|
||||||
return new QueryStatement<Map<String, Integer>>(selectLatestJoinAddresses, 100) {
|
|
||||||
@Override
|
|
||||||
public void prepare(PreparedStatement statement) throws SQLException {
|
|
||||||
statement.setString(1, serverUUID.toString());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
return db -> db.queryMap(selectLatestJoinAddresses, JoinAddressQueries::extractJoinAddressCounts, TreeMap::new, serverUUID);
|
||||||
public Map<String, Integer> processResults(ResultSet set) throws SQLException {
|
|
||||||
Map<String, Integer> joinAddresses = new TreeMap<>();
|
|
||||||
while (set.next()) {
|
|
||||||
joinAddresses.put(set.getString(JoinAddressTable.JOIN_ADDRESS), set.getInt("total"));
|
|
||||||
}
|
|
||||||
return joinAddresses;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static QueryStatement<List<String>> allJoinAddresses() {
|
public static QueryStatement<List<String>> allJoinAddresses() {
|
||||||
String sql = SELECT + JoinAddressTable.JOIN_ADDRESS +
|
String sql = SELECT + JoinAddressTable.JOIN_ADDRESS +
|
||||||
FROM + JoinAddressTable.TABLE_NAME +
|
FROM + JoinAddressTable.TABLE_NAME +
|
||||||
ORDER_BY + JoinAddressTable.JOIN_ADDRESS + " ASC";
|
ORDER_BY + JoinAddressTable.JOIN_ADDRESS + " ASC";
|
||||||
|
|
||||||
return new QueryAllStatement<List<String>>(sql, 100) {
|
return new QueryAllStatement<List<String>>(sql, 100) {
|
||||||
@Override
|
@Override
|
||||||
public List<String> processResults(ResultSet set) throws SQLException {
|
public List<String> processResults(ResultSet set) throws SQLException {
|
||||||
@ -125,18 +108,8 @@ public class JoinAddressQueries {
|
|||||||
new TextStringBuilder().appendWithSeparators(joinAddresses.stream().map(item -> '?').iterator(), ",") +
|
new TextStringBuilder().appendWithSeparators(joinAddresses.stream().map(item -> '?').iterator(), ",") +
|
||||||
')'; // Don't append addresses directly, SQL injection hazard
|
')'; // Don't append addresses directly, SQL injection hazard
|
||||||
|
|
||||||
return new QueryStatement<Set<Integer>>(sql) {
|
return db -> db.querySet(sql, RowExtractors.getInt(SessionsTable.USER_ID), joinAddresses
|
||||||
@Override
|
.stream().map(String::toLowerCase)
|
||||||
public void prepare(PreparedStatement statement) throws SQLException {
|
.toArray());
|
||||||
for (int i = 0; i < joinAddresses.size(); i++) {
|
|
||||||
statement.setString(i + 1, joinAddresses.get(i).toLowerCase());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Set<Integer> processResults(ResultSet set) throws SQLException {
|
|
||||||
return UserInfoQueries.extractUserIds(set, SessionsTable.USER_ID);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -22,6 +22,7 @@ import com.djrapitops.plan.identification.Server;
|
|||||||
import com.djrapitops.plan.identification.ServerUUID;
|
import com.djrapitops.plan.identification.ServerUUID;
|
||||||
import com.djrapitops.plan.storage.database.queries.Query;
|
import com.djrapitops.plan.storage.database.queries.Query;
|
||||||
import com.djrapitops.plan.storage.database.queries.QueryStatement;
|
import com.djrapitops.plan.storage.database.queries.QueryStatement;
|
||||||
|
import com.djrapitops.plan.storage.database.queries.RowExtractors;
|
||||||
import com.djrapitops.plan.storage.database.sql.tables.KillsTable;
|
import com.djrapitops.plan.storage.database.sql.tables.KillsTable;
|
||||||
import com.djrapitops.plan.storage.database.sql.tables.ServerTable;
|
import com.djrapitops.plan.storage.database.sql.tables.ServerTable;
|
||||||
import com.djrapitops.plan.storage.database.sql.tables.SessionsTable;
|
import com.djrapitops.plan.storage.database.sql.tables.SessionsTable;
|
||||||
@ -179,19 +180,9 @@ public class KillQueries {
|
|||||||
WHERE + KillsTable.SERVER_UUID + "=?" +
|
WHERE + KillsTable.SERVER_UUID + "=?" +
|
||||||
AND + KillsTable.DATE + ">=?" +
|
AND + KillsTable.DATE + ">=?" +
|
||||||
AND + KillsTable.DATE + "<=?";
|
AND + KillsTable.DATE + "<=?";
|
||||||
return new QueryStatement<Long>(sql) {
|
|
||||||
@Override
|
|
||||||
public void prepare(PreparedStatement statement) throws SQLException {
|
|
||||||
statement.setString(1, serverUUID.toString());
|
|
||||||
statement.setLong(2, after);
|
|
||||||
statement.setLong(3, before);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
return db -> db.queryOptional(sql, RowExtractors.getLong("count"), serverUUID, after, before)
|
||||||
public Long processResults(ResultSet set) throws SQLException {
|
.orElse(0L);
|
||||||
return set.next() ? set.getLong("count") : 0L;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Query<Double> averageKDR(long after, long before, ServerUUID serverUUID) {
|
public static Query<Double> averageKDR(long after, long before, ServerUUID serverUUID) {
|
||||||
@ -246,19 +237,10 @@ public class KillQueries {
|
|||||||
WHERE + SessionsTable.SERVER_ID + "=" + ServerTable.SELECT_SERVER_ID +
|
WHERE + SessionsTable.SERVER_ID + "=" + ServerTable.SELECT_SERVER_ID +
|
||||||
AND + SessionsTable.SESSION_END + ">=?" +
|
AND + SessionsTable.SESSION_END + ">=?" +
|
||||||
AND + SessionsTable.SESSION_START + "<=?";
|
AND + SessionsTable.SESSION_START + "<=?";
|
||||||
return new QueryStatement<Long>(sql) {
|
|
||||||
@Override
|
|
||||||
public void prepare(PreparedStatement statement) throws SQLException {
|
|
||||||
statement.setString(1, serverUUID.toString());
|
|
||||||
statement.setLong(2, after);
|
|
||||||
statement.setLong(3, before);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Long processResults(ResultSet set) throws SQLException {
|
return db -> db.queryOptional(sql, RowExtractors.getLong("count"), serverUUID, after, before)
|
||||||
return set.next() ? set.getLong("count") : 0L;
|
.orElse(0L);
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Query<Long> deathCount(long after, long before, ServerUUID serverUUID) {
|
public static Query<Long> deathCount(long after, long before, ServerUUID serverUUID) {
|
||||||
@ -267,19 +249,8 @@ public class KillQueries {
|
|||||||
WHERE + SessionsTable.SERVER_ID + "=" + ServerTable.SELECT_SERVER_ID +
|
WHERE + SessionsTable.SERVER_ID + "=" + ServerTable.SELECT_SERVER_ID +
|
||||||
AND + SessionsTable.SESSION_END + ">=?" +
|
AND + SessionsTable.SESSION_END + ">=?" +
|
||||||
AND + SessionsTable.SESSION_START + "<=?";
|
AND + SessionsTable.SESSION_START + "<=?";
|
||||||
return new QueryStatement<Long>(sql) {
|
return db -> db.queryOptional(sql, RowExtractors.getLong("count"), serverUUID, after, before)
|
||||||
@Override
|
.orElse(0L);
|
||||||
public void prepare(PreparedStatement statement) throws SQLException {
|
|
||||||
statement.setString(1, serverUUID.toString());
|
|
||||||
statement.setLong(2, after);
|
|
||||||
statement.setLong(3, before);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Long processResults(ResultSet set) throws SQLException {
|
|
||||||
return set.next() ? set.getLong("count") : 0L;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Query<List<String>> topWeaponsOfServer(long after, long before, ServerUUID serverUUID, int limit) {
|
public static Query<List<String>> topWeaponsOfServer(long after, long before, ServerUUID serverUUID, int limit) {
|
||||||
@ -293,22 +264,7 @@ public class KillQueries {
|
|||||||
FROM + '(' + innerSQL + ") q1" +
|
FROM + '(' + innerSQL + ") q1" +
|
||||||
ORDER_BY + "kills DESC LIMIT ?";
|
ORDER_BY + "kills DESC LIMIT ?";
|
||||||
|
|
||||||
return new QueryStatement<List<String>>(sql, limit) {
|
return db -> db.queryList(sql, RowExtractors.getString(KillsTable.WEAPON), serverUUID, after, before, limit);
|
||||||
@Override
|
|
||||||
public void prepare(PreparedStatement statement) throws SQLException {
|
|
||||||
statement.setString(1, serverUUID.toString());
|
|
||||||
statement.setLong(2, after);
|
|
||||||
statement.setLong(3, before);
|
|
||||||
statement.setInt(4, limit);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<String> processResults(ResultSet set) throws SQLException {
|
|
||||||
List<String> weapons = new ArrayList<>();
|
|
||||||
while (set.next()) weapons.add(set.getString(KillsTable.WEAPON));
|
|
||||||
return weapons;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Query<List<String>> topWeaponsOfPlayer(long after, long before, UUID playerUUID, int limit) {
|
public static Query<List<String>> topWeaponsOfPlayer(long after, long before, UUID playerUUID, int limit) {
|
||||||
@ -322,21 +278,6 @@ public class KillQueries {
|
|||||||
FROM + '(' + innerSQL + ") q1" +
|
FROM + '(' + innerSQL + ") q1" +
|
||||||
ORDER_BY + "kills DESC LIMIT ?";
|
ORDER_BY + "kills DESC LIMIT ?";
|
||||||
|
|
||||||
return new QueryStatement<List<String>>(sql, limit) {
|
return db -> db.queryList(sql, RowExtractors.getString(KillsTable.WEAPON), playerUUID, after, before, limit);
|
||||||
@Override
|
|
||||||
public void prepare(PreparedStatement statement) throws SQLException {
|
|
||||||
statement.setString(1, playerUUID.toString());
|
|
||||||
statement.setLong(2, after);
|
|
||||||
statement.setLong(3, before);
|
|
||||||
statement.setInt(4, limit);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<String> processResults(ResultSet set) throws SQLException {
|
|
||||||
List<String> weapons = new ArrayList<>();
|
|
||||||
while (set.next()) weapons.add(set.getString(KillsTable.WEAPON));
|
|
||||||
return weapons;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -20,12 +20,10 @@ import com.djrapitops.plan.delivery.domain.Nickname;
|
|||||||
import com.djrapitops.plan.identification.ServerUUID;
|
import com.djrapitops.plan.identification.ServerUUID;
|
||||||
import com.djrapitops.plan.storage.database.queries.Query;
|
import com.djrapitops.plan.storage.database.queries.Query;
|
||||||
import com.djrapitops.plan.storage.database.queries.QueryAllStatement;
|
import com.djrapitops.plan.storage.database.queries.QueryAllStatement;
|
||||||
import com.djrapitops.plan.storage.database.queries.QueryStatement;
|
|
||||||
import com.djrapitops.plan.storage.database.sql.tables.NicknamesTable;
|
import com.djrapitops.plan.storage.database.sql.tables.NicknamesTable;
|
||||||
import com.djrapitops.plan.utilities.java.Lists;
|
import com.djrapitops.plan.utilities.java.Lists;
|
||||||
import com.djrapitops.plan.utilities.java.Maps;
|
import com.djrapitops.plan.utilities.java.Maps;
|
||||||
|
|
||||||
import java.sql.PreparedStatement;
|
|
||||||
import java.sql.ResultSet;
|
import java.sql.ResultSet;
|
||||||
import java.sql.SQLException;
|
import java.sql.SQLException;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
@ -84,32 +82,24 @@ public class NicknameQueries {
|
|||||||
AND + NicknamesTable.SERVER_UUID + "=?" +
|
AND + NicknamesTable.SERVER_UUID + "=?" +
|
||||||
GROUP_BY + NicknamesTable.USER_UUID;
|
GROUP_BY + NicknamesTable.USER_UUID;
|
||||||
String sql = SELECT +
|
String sql = SELECT +
|
||||||
NicknamesTable.LAST_USED + ',' + NicknamesTable.NICKNAME +
|
NicknamesTable.LAST_USED + ',' +
|
||||||
|
NicknamesTable.NICKNAME + ',' +
|
||||||
|
NicknamesTable.SERVER_UUID +
|
||||||
FROM + NicknamesTable.TABLE_NAME +
|
FROM + NicknamesTable.TABLE_NAME +
|
||||||
WHERE + NicknamesTable.USER_UUID + "=?" +
|
WHERE + NicknamesTable.USER_UUID + "=?" +
|
||||||
AND + NicknamesTable.SERVER_UUID + "=?" +
|
AND + NicknamesTable.SERVER_UUID + "=?" +
|
||||||
AND + NicknamesTable.LAST_USED + "=(" + subQuery + ')';
|
AND + NicknamesTable.LAST_USED + "=(" + subQuery + ')';
|
||||||
return new QueryStatement<Optional<Nickname>>(sql) {
|
|
||||||
@Override
|
return db -> db.queryOptional(sql, NicknameQueries::extractNickname,
|
||||||
public void prepare(PreparedStatement statement) throws SQLException {
|
playerUUID, serverUUID, playerUUID, serverUUID);
|
||||||
statement.setString(1, playerUUID.toString());
|
|
||||||
statement.setString(2, serverUUID.toString());
|
|
||||||
statement.setString(3, playerUUID.toString());
|
|
||||||
statement.setString(4, serverUUID.toString());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
private static Nickname extractNickname(ResultSet set) throws SQLException {
|
||||||
public Optional<Nickname> processResults(ResultSet set) throws SQLException {
|
return new Nickname(
|
||||||
if (set.next()) {
|
|
||||||
return Optional.of(new Nickname(
|
|
||||||
set.getString(NicknamesTable.NICKNAME),
|
set.getString(NicknamesTable.NICKNAME),
|
||||||
set.getLong(NicknamesTable.LAST_USED),
|
set.getLong(NicknamesTable.LAST_USED),
|
||||||
serverUUID
|
ServerUUID.fromString(set.getString(NicknamesTable.SERVER_UUID))
|
||||||
));
|
);
|
||||||
}
|
|
||||||
return Optional.empty();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Query<List<Nickname>> fetchNicknameDataOfPlayer(UUID playerUUID) {
|
public static Query<List<Nickname>> fetchNicknameDataOfPlayer(UUID playerUUID) {
|
||||||
@ -120,24 +110,7 @@ public class NicknameQueries {
|
|||||||
FROM + NicknamesTable.TABLE_NAME +
|
FROM + NicknamesTable.TABLE_NAME +
|
||||||
WHERE + NicknamesTable.USER_UUID + "=?";
|
WHERE + NicknamesTable.USER_UUID + "=?";
|
||||||
|
|
||||||
return new QueryStatement<List<Nickname>>(sql, 5000) {
|
return db -> db.queryList(sql, NicknameQueries::extractNickname, playerUUID);
|
||||||
|
|
||||||
@Override
|
|
||||||
public void prepare(PreparedStatement statement) throws SQLException {
|
|
||||||
statement.setString(1, playerUUID.toString());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<Nickname> processResults(ResultSet set) throws SQLException {
|
|
||||||
List<Nickname> nicknames = new ArrayList<>();
|
|
||||||
while (set.next()) {
|
|
||||||
ServerUUID serverUUID = ServerUUID.fromString(set.getString(NicknamesTable.SERVER_UUID));
|
|
||||||
String nickname = set.getString(NicknamesTable.NICKNAME);
|
|
||||||
nicknames.add(new Nickname(nickname, set.getLong(NicknamesTable.LAST_USED), serverUUID));
|
|
||||||
}
|
|
||||||
return nicknames;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
@ -19,17 +19,16 @@ package com.djrapitops.plan.storage.database.queries.objects;
|
|||||||
import com.djrapitops.plan.delivery.domain.WebUser;
|
import com.djrapitops.plan.delivery.domain.WebUser;
|
||||||
import com.djrapitops.plan.delivery.domain.auth.User;
|
import com.djrapitops.plan.delivery.domain.auth.User;
|
||||||
import com.djrapitops.plan.storage.database.queries.Query;
|
import com.djrapitops.plan.storage.database.queries.Query;
|
||||||
import com.djrapitops.plan.storage.database.queries.QueryAllStatement;
|
|
||||||
import com.djrapitops.plan.storage.database.queries.QueryStatement;
|
|
||||||
import com.djrapitops.plan.storage.database.sql.tables.CookieTable;
|
import com.djrapitops.plan.storage.database.sql.tables.CookieTable;
|
||||||
import com.djrapitops.plan.storage.database.sql.tables.SecurityTable;
|
import com.djrapitops.plan.storage.database.sql.tables.SecurityTable;
|
||||||
import com.djrapitops.plan.storage.database.sql.tables.UsersTable;
|
import com.djrapitops.plan.storage.database.sql.tables.UsersTable;
|
||||||
|
|
||||||
import java.sql.PreparedStatement;
|
|
||||||
import java.sql.ResultSet;
|
import java.sql.ResultSet;
|
||||||
import java.sql.SQLException;
|
import java.sql.SQLException;
|
||||||
import java.sql.Types;
|
import java.util.List;
|
||||||
import java.util.*;
|
import java.util.Map;
|
||||||
|
import java.util.Optional;
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
import static com.djrapitops.plan.storage.database.sql.building.Sql.*;
|
import static com.djrapitops.plan.storage.database.sql.building.Sql.*;
|
||||||
|
|
||||||
@ -47,129 +46,36 @@ public class WebUserQueries {
|
|||||||
public static Query<Optional<User>> fetchUser(String username) {
|
public static Query<Optional<User>> fetchUser(String username) {
|
||||||
String sql = SELECT + '*' + FROM + SecurityTable.TABLE_NAME +
|
String sql = SELECT + '*' + FROM + SecurityTable.TABLE_NAME +
|
||||||
LEFT_JOIN + UsersTable.TABLE_NAME + " on " + SecurityTable.LINKED_TO + "=" + UsersTable.USER_UUID +
|
LEFT_JOIN + UsersTable.TABLE_NAME + " on " + SecurityTable.LINKED_TO + "=" + UsersTable.USER_UUID +
|
||||||
WHERE + SecurityTable.USERNAME + "=? LIMIT 1";
|
WHERE + SecurityTable.USERNAME + "=?" + LIMIT + "1";
|
||||||
return new QueryStatement<Optional<User>>(sql) {
|
|
||||||
@Override
|
|
||||||
public void prepare(PreparedStatement statement) throws SQLException {
|
|
||||||
statement.setString(1, username);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
return db -> db.queryOptional(sql, WebUserQueries::extractUser, username);
|
||||||
public Optional<User> processResults(ResultSet set) throws SQLException {
|
|
||||||
if (set.next()) {
|
|
||||||
String linkedTo = set.getString(UsersTable.USER_NAME);
|
|
||||||
UUID linkedToUUID = linkedTo != null ? UUID.fromString(set.getString(SecurityTable.LINKED_TO)) : null;
|
|
||||||
String passwordHash = set.getString(SecurityTable.SALT_PASSWORD_HASH);
|
|
||||||
int permissionLevel = set.getInt(SecurityTable.PERMISSION_LEVEL);
|
|
||||||
List<String> permissions = WebUser.getPermissionsForLevel(permissionLevel);
|
|
||||||
return Optional.of(new User(username, linkedTo != null ? linkedTo : "console", linkedToUUID, passwordHash, permissionLevel, permissions));
|
|
||||||
}
|
|
||||||
return Optional.empty();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Query<Optional<User>> fetchUserLinkedTo(String playerName) {
|
public static Query<Optional<User>> fetchUserLinkedTo(String playerName) {
|
||||||
String sql = SELECT + '*' + FROM + SecurityTable.TABLE_NAME +
|
String sql = SELECT + '*' + FROM + SecurityTable.TABLE_NAME +
|
||||||
LEFT_JOIN + UsersTable.TABLE_NAME + " on " + SecurityTable.LINKED_TO + "=" + UsersTable.USER_UUID +
|
LEFT_JOIN + UsersTable.TABLE_NAME + " on " + SecurityTable.LINKED_TO + "=" + UsersTable.USER_UUID +
|
||||||
WHERE + UsersTable.USER_NAME + "=? LIMIT 1";
|
WHERE + UsersTable.USER_NAME + "=?" + LIMIT + "1";
|
||||||
return new QueryStatement<Optional<User>>(sql) {
|
return db -> db.queryOptional(sql, WebUserQueries::extractUser, playerName);
|
||||||
@Override
|
|
||||||
public void prepare(PreparedStatement statement) throws SQLException {
|
|
||||||
statement.setString(1, playerName);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Optional<User> processResults(ResultSet set) throws SQLException {
|
|
||||||
if (set.next()) {
|
|
||||||
String linkedTo = set.getString(UsersTable.USER_NAME);
|
|
||||||
UUID linkedToUUID = linkedTo != null ? UUID.fromString(set.getString(SecurityTable.LINKED_TO)) : null;
|
|
||||||
String passwordHash = set.getString(SecurityTable.SALT_PASSWORD_HASH);
|
|
||||||
int permissionLevel = set.getInt(SecurityTable.PERMISSION_LEVEL);
|
|
||||||
List<String> permissions = WebUser.getPermissionsForLevel(permissionLevel);
|
|
||||||
return Optional.of(new User(playerName, linkedTo != null ? linkedTo : "console", linkedToUUID, passwordHash, permissionLevel, permissions));
|
|
||||||
}
|
|
||||||
return Optional.empty();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Query<Optional<User>> fetchUser(UUID linkedToUUID) {
|
public static Query<Optional<User>> fetchUser(UUID linkedToUUID) {
|
||||||
String sql = SELECT + '*' + FROM + SecurityTable.TABLE_NAME +
|
String sql = SELECT + '*' + FROM + SecurityTable.TABLE_NAME +
|
||||||
LEFT_JOIN + UsersTable.TABLE_NAME + " on " + SecurityTable.LINKED_TO + "=" + UsersTable.USER_UUID +
|
LEFT_JOIN + UsersTable.TABLE_NAME + " on " + SecurityTable.LINKED_TO + "=" + UsersTable.USER_UUID +
|
||||||
WHERE + SecurityTable.LINKED_TO + "=? LIMIT 1";
|
WHERE + SecurityTable.LINKED_TO + "=?" + LIMIT + "1";
|
||||||
return new QueryStatement<Optional<User>>(sql) {
|
return db -> db.queryOptional(sql, WebUserQueries::extractUser, linkedToUUID);
|
||||||
@Override
|
|
||||||
public void prepare(PreparedStatement statement) throws SQLException {
|
|
||||||
if (linkedToUUID == null) {
|
|
||||||
statement.setNull(1, Types.VARCHAR);
|
|
||||||
} else {
|
|
||||||
statement.setString(1, linkedToUUID.toString());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Optional<User> processResults(ResultSet set) throws SQLException {
|
|
||||||
if (set.next()) {
|
|
||||||
String username = set.getString(SecurityTable.USERNAME);
|
|
||||||
String linkedTo = set.getString(UsersTable.USER_NAME);
|
|
||||||
String passwordHash = set.getString(SecurityTable.SALT_PASSWORD_HASH);
|
|
||||||
int permissionLevel = set.getInt(SecurityTable.PERMISSION_LEVEL);
|
|
||||||
List<String> permissions = WebUser.getPermissionsForLevel(permissionLevel);
|
|
||||||
return Optional.of(new User(username, linkedTo != null ? linkedTo : "console", linkedToUUID, passwordHash, permissionLevel, permissions));
|
|
||||||
}
|
|
||||||
return Optional.empty();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Query<List<User>> fetchAllUsers() {
|
public static Query<List<User>> fetchAllUsers() {
|
||||||
String sql = SELECT + '*' + FROM + SecurityTable.TABLE_NAME +
|
String sql = SELECT + '*' + FROM + SecurityTable.TABLE_NAME +
|
||||||
LEFT_JOIN + UsersTable.TABLE_NAME + " on " + SecurityTable.LINKED_TO + "=" + UsersTable.USER_UUID;
|
LEFT_JOIN + UsersTable.TABLE_NAME + " on " + SecurityTable.LINKED_TO + "=" + UsersTable.USER_UUID;
|
||||||
return new QueryAllStatement<List<User>>(sql) {
|
return db -> db.queryList(sql, WebUserQueries::extractUser);
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<User> processResults(ResultSet set) throws SQLException {
|
|
||||||
List<User> users = new ArrayList<>();
|
|
||||||
while (set.next()) {
|
|
||||||
String username = set.getString(SecurityTable.USERNAME);
|
|
||||||
String linkedTo = set.getString(UsersTable.USER_NAME);
|
|
||||||
UUID linkedToUUID = linkedTo != null ? UUID.fromString(set.getString(SecurityTable.LINKED_TO)) : null;
|
|
||||||
String passwordHash = set.getString(SecurityTable.SALT_PASSWORD_HASH);
|
|
||||||
int permissionLevel = set.getInt(SecurityTable.PERMISSION_LEVEL);
|
|
||||||
List<String> permissions = WebUser.getPermissionsForLevel(permissionLevel);
|
|
||||||
users.add(new User(username, linkedTo != null ? linkedTo : "console", linkedToUUID, passwordHash, permissionLevel, permissions));
|
|
||||||
}
|
|
||||||
return users;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Query<List<User>> matchUsers(String partOfUsername) {
|
public static Query<List<User>> matchUsers(String partOfUsername) {
|
||||||
String sql = SELECT + '*' + FROM + SecurityTable.TABLE_NAME +
|
String sql = SELECT + '*' + FROM + SecurityTable.TABLE_NAME +
|
||||||
LEFT_JOIN + UsersTable.TABLE_NAME + " on " + SecurityTable.LINKED_TO + "=" + UsersTable.USER_UUID +
|
LEFT_JOIN + UsersTable.TABLE_NAME + " on " + SecurityTable.LINKED_TO + "=" + UsersTable.USER_UUID +
|
||||||
WHERE + "LOWER(" + SecurityTable.USERNAME + ") LIKE LOWER(?)";
|
WHERE + "LOWER(" + SecurityTable.USERNAME + ") LIKE LOWER(?)";
|
||||||
return new QueryStatement<List<User>>(sql) {
|
return db -> db.queryList(sql, WebUserQueries::extractUser, '%' + partOfUsername + '%');
|
||||||
@Override
|
|
||||||
public void prepare(PreparedStatement statement) throws SQLException {
|
|
||||||
statement.setString(1, '%' + partOfUsername + '%');
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<User> processResults(ResultSet set) throws SQLException {
|
|
||||||
List<User> users = new ArrayList<>();
|
|
||||||
while (set.next()) {
|
|
||||||
String username = set.getString(SecurityTable.USERNAME);
|
|
||||||
String linkedTo = set.getString(UsersTable.USER_NAME);
|
|
||||||
UUID linkedToUUID = linkedTo != null ? UUID.fromString(set.getString(SecurityTable.LINKED_TO)) : null;
|
|
||||||
String passwordHash = set.getString(SecurityTable.SALT_PASSWORD_HASH);
|
|
||||||
int permissionLevel = set.getInt(SecurityTable.PERMISSION_LEVEL);
|
|
||||||
List<String> permissions = WebUser.getPermissionsForLevel(permissionLevel);
|
|
||||||
users.add(new User(username, linkedTo != null ? linkedTo : "console", linkedToUUID, passwordHash, permissionLevel, permissions));
|
|
||||||
}
|
|
||||||
return users;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Query<Map<String, User>> fetchActiveCookies() {
|
public static Query<Map<String, User>> fetchActiveCookies() {
|
||||||
@ -178,23 +84,8 @@ public class WebUserQueries {
|
|||||||
LEFT_JOIN + UsersTable.TABLE_NAME + " on " + SecurityTable.LINKED_TO + "=" + UsersTable.USER_UUID +
|
LEFT_JOIN + UsersTable.TABLE_NAME + " on " + SecurityTable.LINKED_TO + "=" + UsersTable.USER_UUID +
|
||||||
WHERE + CookieTable.EXPIRES + ">?";
|
WHERE + CookieTable.EXPIRES + ">?";
|
||||||
|
|
||||||
return new QueryStatement<Map<String, User>>(sql) {
|
return db -> db.queryMap(sql, (set, byCookie) -> byCookie.put(set.getString(CookieTable.COOKIE), extractUser(set)),
|
||||||
@Override
|
System.currentTimeMillis());
|
||||||
public void prepare(PreparedStatement statement) throws SQLException {
|
|
||||||
statement.setLong(1, System.currentTimeMillis());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Map<String, User> processResults(ResultSet set) throws SQLException {
|
|
||||||
Map<String, User> usersByCookie = new HashMap<>();
|
|
||||||
while (set.next()) {
|
|
||||||
String cookie = set.getString(CookieTable.COOKIE);
|
|
||||||
User user = extractUser(set);
|
|
||||||
usersByCookie.put(cookie, user);
|
|
||||||
}
|
|
||||||
return usersByCookie;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static User extractUser(ResultSet set) throws SQLException {
|
private static User extractUser(ResultSet set) throws SQLException {
|
||||||
@ -208,13 +99,7 @@ public class WebUserQueries {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static Query<Map<String, Long>> getCookieExpiryTimes() {
|
public static Query<Map<String, Long>> getCookieExpiryTimes() {
|
||||||
return new QueryAllStatement<Map<String, Long>>(SELECT + CookieTable.COOKIE + ',' + CookieTable.EXPIRES + FROM + CookieTable.TABLE_NAME) {
|
String sql = SELECT + CookieTable.COOKIE + ',' + CookieTable.EXPIRES + FROM + CookieTable.TABLE_NAME;
|
||||||
@Override
|
return db -> db.queryMap(sql, (set, expiryTimes) -> expiryTimes.put(set.getString(CookieTable.COOKIE), set.getLong(CookieTable.EXPIRES)));
|
||||||
public Map<String, Long> processResults(ResultSet set) throws SQLException {
|
|
||||||
HashMap<String, Long> expiryTimes = new HashMap<>();
|
|
||||||
while (set.next()) expiryTimes.put(set.getString(CookieTable.COOKIE), set.getLong(CookieTable.EXPIRES));
|
|
||||||
return expiryTimes;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -206,7 +206,7 @@ public interface GeolocationQueriesTest extends DatabaseTestPreparer {
|
|||||||
save(playerUUID, geoInfo);
|
save(playerUUID, geoInfo);
|
||||||
}
|
}
|
||||||
|
|
||||||
Set<Integer> expected = Set.of(db().query(BaseUserQueries.fetchUserId(playerUUID)));
|
Set<Integer> expected = Set.of(db().query(BaseUserQueries.fetchUserId(playerUUID)).orElseThrow(AssertionError::new));
|
||||||
Set<Integer> result = db().query(GeoInfoQueries.userIdsOfPlayersWithGeolocations(
|
Set<Integer> result = db().query(GeoInfoQueries.userIdsOfPlayersWithGeolocations(
|
||||||
Collections.singletonList(savedData.get(0).getGeolocation()))
|
Collections.singletonList(savedData.get(0).getGeolocation()))
|
||||||
);
|
);
|
||||||
|
@ -71,7 +71,7 @@ public interface JoinAddressQueriesTest extends DatabaseTestPreparer {
|
|||||||
session.getExtraData().remove(JoinAddress.class);
|
session.getExtraData().remove(JoinAddress.class);
|
||||||
db().executeTransaction(new StoreSessionTransaction(session));
|
db().executeTransaction(new StoreSessionTransaction(session));
|
||||||
|
|
||||||
Set<Integer> expected = Set.of(db().query(BaseUserQueries.fetchUserId(playerUUID)));
|
Set<Integer> expected = Set.of(db().query(BaseUserQueries.fetchUserId(playerUUID)).orElseThrow(AssertionError::new));
|
||||||
Set<Integer> result = db().query(JoinAddressQueries.userIdsOfPlayersWithJoinAddresses(List.of(JoinAddressTable.DEFAULT_VALUE_FOR_LOOKUP)));
|
Set<Integer> result = db().query(JoinAddressQueries.userIdsOfPlayersWithJoinAddresses(List.of(JoinAddressTable.DEFAULT_VALUE_FOR_LOOKUP)));
|
||||||
|
|
||||||
assertEquals(expected, result);
|
assertEquals(expected, result);
|
||||||
@ -190,7 +190,7 @@ public interface JoinAddressQueriesTest extends DatabaseTestPreparer {
|
|||||||
default void joinAddressFilterUUIDsAreFetched() {
|
default void joinAddressFilterUUIDsAreFetched() {
|
||||||
latestJoinAddressIsUpdatedUponSecondSession();
|
latestJoinAddressIsUpdatedUponSecondSession();
|
||||||
|
|
||||||
Set<Integer> expected = Set.of(db().query(BaseUserQueries.fetchUserId(playerUUID)));
|
Set<Integer> expected = Set.of(db().query(BaseUserQueries.fetchUserId(playerUUID)).orElseThrow(AssertionError::new));
|
||||||
Set<Integer> result = db().query(JoinAddressQueries.userIdsOfPlayersWithJoinAddresses(
|
Set<Integer> result = db().query(JoinAddressQueries.userIdsOfPlayersWithJoinAddresses(
|
||||||
List.of(TestConstants.GET_PLAYER_HOSTNAME.get().toLowerCase()))
|
List.of(TestConstants.GET_PLAYER_HOSTNAME.get().toLowerCase()))
|
||||||
);
|
);
|
||||||
@ -201,7 +201,7 @@ public interface JoinAddressQueriesTest extends DatabaseTestPreparer {
|
|||||||
default void joinAddressFilterUUIDsAreFetchedWhenUnknown() {
|
default void joinAddressFilterUUIDsAreFetchedWhenUnknown() {
|
||||||
joinAddressCanBeUnknown();
|
joinAddressCanBeUnknown();
|
||||||
|
|
||||||
Set<Integer> expected = Set.of(db().query(BaseUserQueries.fetchUserId(playerUUID)));
|
Set<Integer> expected = Set.of(db().query(BaseUserQueries.fetchUserId(playerUUID)).orElseThrow(AssertionError::new));
|
||||||
Set<Integer> result = db().query(JoinAddressQueries.userIdsOfPlayersWithJoinAddresses(
|
Set<Integer> result = db().query(JoinAddressQueries.userIdsOfPlayersWithJoinAddresses(
|
||||||
List.of(JoinAddressTable.DEFAULT_VALUE_FOR_LOOKUP))
|
List.of(JoinAddressTable.DEFAULT_VALUE_FOR_LOOKUP))
|
||||||
);
|
);
|
||||||
|
@ -202,7 +202,7 @@ public interface UserInfoQueriesTest extends DatabaseTestPreparer {
|
|||||||
}
|
}
|
||||||
}).get();
|
}).get();
|
||||||
|
|
||||||
Set<Integer> expected = Set.of(db().query(BaseUserQueries.fetchUserId(player2UUID)));
|
Set<Integer> expected = Set.of(db().query(BaseUserQueries.fetchUserId(player2UUID)).orElseThrow(AssertionError::new));
|
||||||
Set<Integer> result = db().query(BaseUserQueries.userIdsOfRegisteredBetween(2500L, 7500L));
|
Set<Integer> result = db().query(BaseUserQueries.userIdsOfRegisteredBetween(2500L, 7500L));
|
||||||
assertEquals(expected, result);
|
assertEquals(expected, result);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user